๊ฐ์
์ด์ง ์ ๋ณด๋ฅผ ํํํ๊ธฐ ์ํด ๋๋ฆฌ ์ฐ์ด๋ ์ธ์ฝ๋ฉ ๋ฐฉ์ base64
์ base64url
์ ๋์์๋ฆฌ๋ฅผ ์ค๋ช
ํ๋ค.
์ง๋ฒ ์ฒด๊ณ์ ๋ฐ๋ฅธ ์ด์ง ์ ๋ณด ํํ์ ์ฐจ์ด
์ปดํจํฐ๋ ๋ชจ๋ ์ ๋ณด๋ฅผ 0๊ณผ 1๋ก ๊ตฌ์ฑ๋ ์ด์ง ์ ๋ณด๋ก ๊ธฐ์ตํ๊ณ , ์ด์ง๋ฒ (base-2) ์ฒด๊ณ ํ์ ์ฒ๋ฆฌํ๋ค. ์ผ๋ฐ์ ์ผ๋ก, ์ด์ง ์ ๋ณด ํํ์ ์ํ ๋ฌธ์์ ๊ฐ์ง์๊ฐ ๋ง์์ง์๋ก, ํํ๋๋ ์ ๋ณด์ ๋ฐ์ง์ฑ์ด ๋์์ง๋ค.
8์ง๋ฒ๊ณผ 16์ง๋ฒ์ ํตํ ์ด์ง ์ ๋ณด ํํ์ ํตํด ์ด ์ฌ์ค์ ์ดํดํด๋ณด์.
- 1๋นํธ์ฉ ๊ทธ๋๋ก ํํํ๋ 2์ง๋ฒ (base-2)๋ 0๊ณผ 1 (2๊ฐ์ง ๋ฌธ์)๋ฅผ ์ฌ์ฉํ๋ค.
- 2๋นํธ์ฉ ๋ชจ์์ ํํํ๋ 8์ง๋ฒ (base-8)์ 0~7 (8๊ฐ์ง ๋ฌธ์)๋ฅผ ์ฌ์ฉํ๋ค.
- 4๋นํธ์ฉ ๋ชจ์์ ํํํ๋ 16์ง๋ฒ (base-16)์ 0
9, AF (16๊ฐ์ง ๋ฌธ์)๋ฅผ ์ฌ์ฉํ๋ค.
๋๊ฐ์ ์ด์ง ์ ๋ณด๋ฅผ 2์ง๋ฒ, 8์ง๋ฒ ๊ทธ๋ฆฌ๊ณ 16์ง๋ฒ์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ๋ค.
base-2: 0101000010100100
base-8: 50244
base-16: 50a4
์ ์ค์์๋ 16์ง๋ฒ์ด ์ฝ๊ธฐ์๋ ๋น ๋ฅด๊ณ ๊ธฐ์ตํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ค.
64์ง๋ฒ ๊ธฐ๋ฐ ํํ ์ฒด๊ณ base64
base64
๋ 64๊ฐ์ง ๋ฌธ์๋ฅผ ํตํด ์ด์ง ์ ๋ณด๋ฅผ ํํํ์ฌ ๋ฐ์ง์ฑ์ ๊ทน๋ํํ๋ฉด์๋, ์ธํฐ๋ท์์์ ์ฝ๊ฒ ์ ๋ฌ๋ ์ ์๋๋ก ๊ณ ์๋ 64์ง๋ฒ (base-64) ํํ ์ฒด๊ณ์ด๋ค.
์ฌ์ฉ๋๋ ๋ฌธ์: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
๋ฐ ํจ๋ฉ ๋ฌธ์ =
๊ตญ์ ์ธํฐ๋ท ํ์คํ ๊ธฐ๊ตฌ(IETF)์์ ๊ด๋ฆฌํ๋ ํ์ค ์ค ํ๋์ธ RFC 4648์์๋ ์ธํฐ๋ท์์์ ์ฌ์ฉํ๊ธฐ ์ํ ์ง๋ฒ ์ฒด๊ณ๋ฅผ ์ ์ํ๋๋ฐ, base64๊ฐ ๊ทธ ์ค ํ๋์ด๋ค. base64์ ์ฐ์ด๋ ๋ฌธ์๋ค์ ๋ชจ๋ ASCII ๋ฌธ์๋ค์ธ๋ฐ, ์ด๋ base64๋ก ์ธ์ฝ๋ฉ๋ ํ ์คํธ๋ฅผ ๋ค๋ฅธ ์ปดํจํฐ์ ํ์ํ ๋ ๋์ผํ ๋ฌธ์์ ๋ด์ฉ์ด ํ์๋๋๋ก ๋ณด์ฅํด์ค๋ค. ๋ํ, ASCII ๋ฌธ์๋ค์ ํค๋ณด๋๋ฅผ ํตํด ์ฝ๊ฒ ์ ๋ ฅ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฌ๋์ด ์ง์ ๋ค๋ฃจ๊ธฐ ์ฉ์ดํ๋ค. ์ด๋ฐ ์ฅ์ ๋ค ๋๋ถ์, base64๋ ๋คํธ์ํฌ์์์์ ์ด์ง ์ ๋ณด ์ ์ก์ ์ํ ์ธ์ฝ๋ฉ์ผ๋ก์จ ํญ๋๊ฒ ์ฐ์ด๊ณ ์๋ค.
base64๋ ์ฅํ (8๋นํธ)์ผ๋ก๋ง ๋ชจ์ธ ์ด์ง ์ ๋ณด๋ฅผ ์ํด ๊ณ ์๋์๋ค. base64๋ ์ด ์ฅํ ๋ฐ์ดํฐ๋ค์ 6๋นํธ์ฉ ์ชผ๊ฐ์ด base64 ๋ฌธ์์ ๋์ ์์ผ ํํํ๋ค. ์ด๊ฒ์ด base64 ์ธ์ฝ๋์ ํต์ฌ ์๋ฆฌ์ด๋ค.
base64์ ํ์ ํํ ์ฒด๊ณ base64url
base64์ ์๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ base64url์ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ด URL ์์์๋ ์๋ ๊ทธ๋๋ก ํํ๋ ์ ์๋๋ก ๊ฐ์ ๋ ์ง๋ฒ ์ฒด๊ณ์ด๋ค.
์ฌ์ฉ๋๋ ๋ฌธ์: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
๋ฐ ํจ๋ฉ ๋ฌธ์ =
base64์ +, /, = ๋ฌธ์๋ RFC 3986๋ฅผ ํตํด ์ ์๋๋ URL ์์ฝ ๋ฌธ์๋ค์ด๋ผ์, URL์ ์ฌ์ฉํ ๋์๋ ๋ฐ๋ก ๋ฃ์ผ๋ฉด ์๋๊ณ "%2B", "%2F", "%3D"๋ก ๊ฐ๊ฐ ๋ฏธ๋ฆฌ ๋ณํํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ base64๋ ๋ฌธ์์ด์ ์ธ์ฝ๋ฉํ ๋ ํจ๋ฉ์ด ๋ฐ์ํ์๋ค๋ฉด, ํจ๋ฉ ๋ฌธ์("=")๋ฅผ ๋๋ฝํด์๋ ์ ๋๋ค.
์ด๋ฌํ base64์ ๋จ์ ๋ค์ ๊ฐ์ ํ์ฌ, base64url์ URL ์์ฝ ๋ฌธ์๊ฐ ์๋ ๋ค๋ฅธ ํน์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ค. ๋ํ ํจ๋ฉ ๋ฌธ์("=") ๋๋ฝ์ ํ์ฉํ๋ค.
์๋ฌธ ํ ์คํธ์ base64, base64url์ ์ธ์ฝ๋ฉ ๊ฒฐ๊ณผ๋ฌผ์ ๋น๊ตํ๋ฉด ์๋์ ๊ฐ๋ค.
์๋ฌธ: ์๋
ํ์ธ์. Lorem Ipsum 99 ๐๐๐
base64: 7JWI64WV7ZWY7IS47JqULiBMb3JlbSBJcHN1bSA5OSDwn5OZ8J+TmfCfk5k=
base64url: 7JWI64WV7ZWY7IS47JqULiBMb3JlbSBJcHN1bSA5OSDwn5OZ8J-TmfCfk5k
์ด์ฒ๋ผ, base64url๋ base64์ ์ ์ฌํ๋ฉด์๋ ๋ ๋ง์ ํ๊ฒฝ์ ํธํ๋ ์ ์๋ ์ธ์ฝ๋ฉ์ด๋ค. base64url ์ธ์ฝ๋ฉ ๋ฐฉ์์ base64์ ๋ง์ฐฌ๊ฐ์ง๋ก RFC 4648 ํ์ค์์ ์ ์๋๋ค.
base64 ์ธ์ฝ๋ ์ ์ฐจ
base64๋ ์ฅํ (8๋นํธ) ๋ฐ์ดํฐ๋ค์ 6๋นํธ์ฉ ์ชผ๊ฐ ํ base64 ๋ฌธ์์ ๋์ ์์ผ ํํํ๋ค๊ณ ์์ ์ค๋ช ํ๋ค.
์์๋ก, 2์ฅํ (16๋นํธ) ์ ๋ณด๋ฅผ base64๋ก ์ธ์ฝ๋ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด 16๊ฐ์ ๋นํธ๋ฅผ 6๋นํธ์ฉ์ผ๋ก ์ชผ๊ฐ๋ฉด, ๋จ๊ฒจ์ง๋ 4๋นํธ๊ฐ ์๊ธธ ๊ฒ์ด๋ค. 6๋นํธ ๊ธธ์ด๋ณด๋ค ๋ชจ์๋ ๋นํธ์๋งํผ "0" ๋นํธ๋ฅผ ์์๋ก ์ค๋ฅธ์ชฝ์ ์ถ๊ฐํด์ผ ํ๋ค. 2๊ฐ์ "0" ๋นํธ๋ฅผ ์ถ๊ฐํ๋ฉด 6์ ๋ฐฐ์์ธ 18๋นํธ ๊ธธ์ด๊ฐ ์ด์กฑ๋ ์ ์๋ค. ์ด ๊ณผ์ ์ ํจ๋ฉ("Padding")์ด๋ผ๊ณ ํ๋ค.
6๋นํธ๋ก ๋ชจ์ธ ์ด์ง ์ ๋ณด๋ค์ base64 ๋ฌธ์๋ก ์นํ๋๋ค.
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
์ ํ๋ base64 ๋ณํํ๋ฅผ 10์ง์๋ก ํํํ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, 6๋นํธ๋ก ์ชผ๊ฐ์ง ๊ฐ์ด 10์ง์ 0์ด๋ฉด "A", 10์ง์ 63์ด๋ฉด "/".
๋นํธ์ ๋ํ ๋ฌธ์์ด ์นํ์ด ๋๋๋ฉด, ํจ๋ฉ ๊ณผ์ ์์ ์ถ๊ฐ๋ ๋นํธ๊ฐ ๋ช ๊ฐ์ธ์ง ๋ช ์ํ๋ ํจ๋ฉ ๋ฌธ์ "="๋ฅผ ์ถ๊ฐํ๋ค. ํจ๋ฉ์ผ๋ก ์ถ๊ฐ๋ "0" ๋นํธ ๊ฐ์๊ฐ 2๊ฐ๋ฉด "=", 4๊ฐ๋ฉด "=="๋ฅผ ๋ฌธ์์ด ์ค๋ฅธ์ชฝ ๋์ ๋ถ์ฌ ์ธ์ฝ๋๋ฅผ ๋๋ธ๋ค.
base64 ๋์ฝ๋ ์ ์ฐจ
๋์ฝ๋์์๋ ์ธ์ฝ๋์ ๋ฐ๋๋ก, 6๋นํธ๋ก ์ชผ๊ฐฐ๋ ์ด์ง ์ ๋ณด๋ฅผ ๋ค์ ์ฅํ (8๋นํธ) ๋ฐ์ดํฐ๋ค๋ก ๋ณํํ๋ค.
๋จผ์ , base64๋ก ์ธ์ฝ๋๋ ๋ฌธ์์ด์์ "="๋ฅผ ์ ์ธ์ํจ ํ, base64 ๋ฌธ์๋ฅผ ์ด์ง ์ ๋ณด๋ก ์นํํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ง ์ ๋ณด์ ๋นํธ ๊ธธ์ด๊ฐ 8์ ๋ฐฐ์์ด๋๋ก ์ค๋ฅธ์ชฝ ๋นํธ๋ฅผ ์ ๊ฑฐํ์ฌ ๋์ฝ๋๋ฅผ ์๋ฃํ๋ค. ์์ ์์์์๋ 2์ฅํ (16๋นํธ) ์๋ณธ ๋ฐ์ดํฐ์ "0" 2๋นํธ๋ฅผ ํจ๋ฉ์ผ๋ก ์ถ๊ฐํ์ผ๋ฏ๋ก ์ด 18๋นํธ์ผ ๊ฒ์ด๋ค. 18๋นํธ๋ฅผ 8์ ๋ฐฐ์์ด๋๋ก ๊ธธ์ด๋ฅผ ๋ง์ถ๊ธฐ ์ํด ์ค๋ฅธ์ชฝ์ 2๋นํธ๋ฅผ ๋ฒ๋ฆฌ๋ฉด, ์๋ณธ ์ด์ง ์ ๋ณด์ ๋์ผํ 2์ฅํ (16๋นํธ)์ด ๋์ถ๋๋ค.
ํจ๋ฉ์ ์ญํ
base64 ์ธ์ฝ๋ฉ์ ์ฅํ (8๋นํธ)๋ค์ 6๋นํธ์ฉ ๋๋๊ฒ ๋๋ค. ๋ง์ฝ ์ด์ง ์ ๋ณด์ ๋นํธ ๊ธธ์ด๊ฐ 24๋นํธ๋ 96๋นํธ์ ๊ฐ์ด 6๊ณผ 8์ ๊ณต๋ฐฐ์๋ผ๋ฉด ํจ๋ฉ์ด ๋ฐ์ํ์ง ์๋๋ค. ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ 6๋นํธ ๊ธธ์ด๋ฅผ ๋ง์ถ๊ธฐ ์ํ ํจ๋ฉ์ด ์ถ๊ฐ๋๋ค. ์ด๋ฌํ ์ธ์ฝ๋ ๋ฐ ๋์ฝ๋ ๊ณผ์ ์์์ ๋นํธ "0"๋ ๋นํธ ๊ธธ์ด๋ฅผ ๋ง์ถ๊ธฐ ์ํด ์ถ๊ฐ๋๋ฉฐ, ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ๋ถ๋ "="๋ "0" ๋นํธ๊ฐ ์ถ๊ฐ๋ ํ์์์ ์ ์ ์๋ค.
ํํธ, "="์ ๊ฐ์๋ฅผ ํตํด ์ด์ง ์ ๋ณด์ ๋ช ๊ฐ์ "0" ํจ๋ฉ ๋นํธ๊ฐ ์กด์ฌํด์ผ ํ๋์ง๋ฅผ ์ญ์ผ๋ก ํ์ ํ ์๋ ์๋ค. ์ฆ, ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ์ด์ง ์ ๋ณด๊ฐ "=" ๊ฐ์์ ์์ถฉ๋๋์ง ๊ฒ์ฆํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฐ๋ฐ ์ด์ ๋ํด์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ณ base64 ๋์ฝ๋ ๊ตฌํ์ฒด๋ง๋ค ๊ฒ์ฆ ์ฌ๋ถ๊ฐ ์๋ก ๋ค๋ฅธ ์ํฉ์ด๋ค. ๋ง์ฝ ํจ๋ฉ์ ์์ ํ ๋ฌด์ํ ์ฑ๋ก ๋์ฝ๋ํ๋ฉด, '์ธ์ฝ๋๋ ๋ฌธ์์ด์ ๋ค๋ฅด์ง๋ง ๋์ฝ๋๋์์ ๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋๋ก' ์ ์์ ์ผ๋ก ์ ์๋ base64 ๋ฌธ์์ด์ ํ์ฉํ๊ฒ ๋๋๋ฐ, ์ด๋ ์ ์ฌ์ ์ธ ๋ณด์ ์ํ์ผ๋ก ์ด์ด์ง ์๋ ์๋ค [1].
๋ฐ๋ผ์, base64๋ก ์ธ์ฝ๋๋ ๋ฌธ์์ด์ ๋ํด ์๊ฒฉํ ๋น๊ต๋ฅผ ์ค์ํ๋ ๋ก์ง์ ๊ตฌํํด์ผ ํ๋ค๋ฉด, ์ผ๋ฐ์ ์ผ๋ก๋ ์ธ์ฝ๋ฉ ๋ฌธ์์ด ์์ฒด์ ๋ํ ๊ฒ์ฆ์ด ๋ฐ๋์ ํจ๊ป ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค. ๋ค๋ง ์ธ์ฝ๋๋ ๋ฌธ์์ด์ ๋ํด ๋ณ๋์ ๋น๊ต ๋ก์ง์ด ์๋ ๋์์ ๋์ฝ๋๋ ๋ฐ์ดํฐ์ ๋ํด์๋ง ์ฒ๋ฆฌํ๋ ๋ก์ง์ ๊ตฌํํด์ผ ํ๋ค๋ฉด, ํจ๋ฉ์ ํตํ ๋ฐ์ดํฐ ๊ฒ์ฆ์ด ํ์๊ฐ ์๋๋ผ๊ณ ๋ณผ ์ ์์ ๊ฒ์ด๋ค.
๊ฒฐ๋ก
base64์ base64url์ ๋ชจ๋ IETF ์ธํฐ๋ท ํ์ค์ ํตํด ์ ์๋๋ ์ธ์ฝ๋ฉ์ด๋ค. ๋ ์ธ์ฝ๋ฉ์ ์ฐจ์ด์ ๊ณผ ๋์์๋ฆฌ๋ฅผ ์ดํดํ๋ค๋ฉด, ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ์ธ์ฝ๋ฉ์ ์ ํํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ค.
Reference
[1] Konstantinos Chalkias and Panagiotis Chatzigiannis. 2022. Base64 Malleability in Practice. In Proceedings of the 2022 ACM on Asia Conference on Computer and Communications Security (ASIA CCS '22). Association for Computing Machinery, New York, NY, USA, 1219โ1221. https://doi.org/10.1145/3488932.3527284
RFC 4648 Simon Josefsson. 2006. The Base16, Base32, and Base64 Data Encodings https://doi.org/10.17487/RFC4648