๋ ผ๋ฌธ ์ ๋ณด
์ ์: Niels Provos ยท David Maziรจres (The OpenBSD Project)
์ถ์ฒ: Proceedings of the FREENIX Track, 1999 USENIX Annual Technical Conference, Monterey, California (1999๋ 6์ 6โ11์ผ) ยท usenix.org (PDF)
๋ถ์ผ: ์ธ์ฆยท๋น๋ฐ๋ฒํธ ๋ณด์ ยท ์ํธํ์ ํด์ ยท (Blowfish ๊ธฐ๋ฐ) ๋ธ๋ก ์ํธ์ ํค ์ค์ผ์ค ยท ์คํ๋ผ์ธ ์ฌ์ ๊ณต๊ฒฉ ๋ฐฉ์ด
์ธ์ฉ: OpenAlex ๊ธฐ์ค 182ํ โ ์ด ๋ ผ๋ฌธ์ DOI ์์ด USENIX๊ฐ ๋ฌด๋ฃ๋ก ๊ณต๊ฐํ '์ด๋ฆฐ ๋ ผ๋ฌธ'์ด๋ผ ํ์ DB ์นด์ดํธ๊ฐ ์ค์ ์ํฅ๋ ฅ์ ํฌ๊ฒ ๋ฐ๋๋ค. ๋์ ์ฑํ ๊ท๋ชจ๋ก ์์น๋ฅผ ๊ฐ๋ ํ๋ค: bcrypt๋ OpenBSD์ ๊ธฐ๋ณธ ๋น๋ฐ๋ฒํธ ์คํด(2.1๋ถํฐ), FreeBSDยทNetBSDยทmacOSยทLinux PAM, PHP
password_hash()์ ๊ธฐ๋ณธ๊ฐ(PASSWORD_BCRYPT) ๋ฑ ์ฌ์ค์ ๋ชจ๋ ๋น๋ฐ๋ฒํธ DB์ ํ์ค์ด ๋์๋ค. ๊ณ๋ณด์ ๋ฟ๋ฆฌ์ธ Morris & Thompson์ Password Security: A Case History(CACM 1979)๋ OpenAlex 930ํ.์๋ฌธ: USENIX FREENIX'99 PDF (431 KB) ยท static ๋ฏธ๋ฌ ยท ํํ ํ์ด์ง
ํ ์ค ์์ฝ โ '๋น๋ฐ๋ฒํธ์ ๊ธธ์ด์ ๋ฌด์์์ฑ์ ๊ณ ์ ์ธ๋ฐ, ๊ณต๊ฒฉ์์ ์ปดํจํฐ๋ ๋งค๋ ๋นจ๋ผ์ง๋ค. ๊ทธ๋ ๋ค๋ฉด ํด์ ํจ์์ ๋น์ฉ๋ ํจ๊ป ์ฌ๋ผ๊ฐ์ผ ํ๋ค'
์ฌ์ฉ์๊ฐ ๊ณ ๋ฅด๋ ๋น๋ฐ๋ฒํธ์ ์ํธ๋กํผ๋ ์๊ฐ์ด ์ง๋๋ ๊ฑฐ์ ๋์ง ์๋๋ค. ๋ฐ๋ฉด ํ๋์จ์ด๋ ๊พธ์คํ ๋นจ๋ผ์ง๋ค. 1976๋
UNIX์ crypt(3)๋ ๋น๋ฐ๋ฒํธ๋ฅผ DES ํ ๋ฒ(DES ์์๋ฅผ 25ํ ๋ฐ๋ณต)์ผ๋ก ํด์ํ๊ณ , ๋น์์ ๊ทธ๊ฒ์ผ๋ก ์ถฉ๋ถํ๋ค โ 1977๋
VAX-11/780์์ ์ด๋น 3.6ํ๋ฐ์ ๊ณ์ฐํ์ง ๋ชปํ์ผ๋ ์ฌ์ ๊ณต๊ฒฉ์ด ๋นํ์ค์ ์ด์๋ค. ๊ทธ๋ฐ๋ฐ 20์ฌ ๋
๋ค, ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ด๋น ์์ญ๋ง ํ ๊ณ์ฐ๋๋ฉด์ ๊ทธ '์ถฉ๋ถํจ'์ ์ฌ๋ผ์ก๋ค. ์ด ๋
ผ๋ฌธ(1999)์ ๊ทธ ๋น๋์นญ์ ์ ๋ฉด์ผ๋ก ๋ค๋ฃฌ๋ค โ ๋น๋ฐ๋ฒํธ ํด์์ ๊ณ์ฐ ๋น์ฉ์ ํ๋์จ์ด๊ฐ ๋นจ๋ผ์ง๋ ๋งํผ ์ค์ค๋ก ์ฌ๋ผ๊ฐ์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ฒซ ๊ตฌํ์ด ๋ฐ๋ก bcrypt๋ค. ์๋ น์ ๋จ์ํ๋ค: ํด์์ ๋ฐ๋ณต ํ์๋ฅผ ์กฐ์ ๊ฐ๋ฅํ '๋น์ฉ(cost)' ํ๋ผ๋ฏธํฐ๋ก ๋
ธ์ถํ๊ณ , ๊ฒ์ฆํ ๋๋ง๋ค ๊ทธ ๋น์ฉ์ ์ง๋ถํ๊ฒ ๋ง๋ ๋ค. ํ๋์จ์ด๊ฐ 2๋ฐฐ ๋นจ๋ผ์ง๋ฉด ๋น์ฉ์ 1๋งํผ ์ฌ๋ฆฌ๋ฉด ๋๋ค. ๋
ผ๋ฌธ์ด 1999๋
์ ๋จ๊ธด ๋ฌธ์ฅ์ ์ง๊ธ ์ฝ์ผ๋ฉด ์๋ฆ ๋๋๋ค โ "์ด ์๊ณ ๋ฆฌ์ฆ๋ค์ ๋น๋ฐ๋ฒํธ ๊ธฐ๋ฐ ์์คํ
์ด ํ๋์จ์ด ๊ฐ์ ์ ์ ์ํด ์์ผ๋ก 20๋
๋์ ์์ ํ๊ฒ ๋จ๊ฒ ํด์ค ๊ฒ์ด๋ค." ๊ทธ๋ฆฌ๊ณ 27๋
์ด ์ง๋ 2026๋
์๋ bcrypt๋ ํ์ญ์ด๋ค.
"๋น๋ฐ๋ฒํธ ์คํด์ ๋ณด์์ ์ฌ์ฉ์๊ฐ ๊ณ ๋ฅด๋ ๋น๋ฐ๋ฒํธ๋งํผ๋ง ์ข๋ค(as good as the passwords users choose) โฆ ๋ฐ๋ผ์ ์ด๋ค ์์ ํ ๋น๋ฐ๋ฒํธ ์คํด์ด๋ , ๊ทธ ๊ณ์ฐ ๋น์ฉ์ ํ๋์จ์ด ์ฑ๋ฅ์ด ํฅ์๋จ์ ๋ฐ๋ผ ๋ฐ๋์ ์ฆ๊ฐํด์ผ ํ๋ค." โ ๋ ผ๋ฌธ 3ยท7์
๋ฐฐ๊ฒฝ โ '์ ํต crypt'๊ฐ ์คํจํ ์๋ฐ์ ์์๋ ์ด์
- ์ ํต crypt(3)(1976)๋ ๋น์ ํ๋์จ์ด์ ๋ฌถ์ฌ ์์๋ค: ์ต๋ 8์ ๋น๋ฐ๋ฒํธ๋ฅผ DES ํค(56๋นํธ, ๊ฐ ๋ฌธ์์ ํ์ 7๋นํธ)๋ก ์ฌ์ฉํ๊ณ , 64๋นํธ ์์
"0"์ 25ํ DES ์ํธํํ๋ค. ์ ๋ ฅ ๊ณต๊ฐ๋ ๋ฐ๋ณต ํ์๋ ๊ณ ์ ์ด๋ค. ์์ ์ฑ์ด "๊ทธ ์๊ฐ์ ์ปดํจํฐ ์๋"์ ๋ชป ๋ฐํ ์๋ค๋ ๋ป์ด๋ค. - ์ํธ๊ฐ 12๋นํธ๋ฟ: 4,096๊ฐ์ง. ๊ฐ์ ๋น๋ฐ๋ฒํธ๋ผ๋ 4,096๊ฐ์ง ์ํธ๋ฌธ์ด ๋์ง๋ง, ๊ณต๊ฐ์ด ์์ ์๋ก ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๊ฐ์ ์ํธ๋ฅผ ๋ฐ๋ ์ถฉ๋์ด ํํ๋ค. ์ถ๋ ฅ์ 12๋นํธ ์ํธ + 64๋นํธ ์ํธ๋ฌธ = 76๋นํธ โ 13๊ธ์ ASCII.
- ๊ทธ๋๋ ์ ๋ง ์์ ํ๋ค: 1976๋ ์ crypt๊ฐ "์ด๋น 4๊ฐ ๋ฏธ๋ง"์ด์๊ณ , 1977๋ VAX-11/780์์๋ 3.6ํ/์ด์๋ค. ์ฌ์ ์ ์ฒด๋ฅผ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- 20๋ ๋ค ๋ค์งํ๋ค: 1998๋ EFF DES ํฌ๋์ปค๋ 56๋นํธ DES ํค๋ฅผ 56์๊ฐ์ ์ฐพ์๊ณ (์ด๋น ์ฝ 88ร10โน ํค), ๊ทธ์ ๋น์ทํ ๊ธฐ๊ณ๋ฉด ์ ํต crypt๋ฅผ 22์ผ์ ๋ธ๋ฃจํธํฌ์คํ ์ ์์๋ค. "๊ฐ์ฅ ๋น ๋ฅธ Alpha ํ๋ก์ธ์์์ 875๋ " ๊ฑธ๋ฆฌ๋ ๊ฒ์ ๋ง์ด๋ค.
- MD5 crypt๋ ๊ฐ์ ๋ณ: FreeBSD์ Poul-Henning Kamp๊ฐ ๋ง๋ MD5 crypt๋ ๋ ๊ธด ๋น๋ฐ๋ฒํธ์ 12~48๋นํธ ์ํธ๋ฅผ ํ์ฉํ์ง๋ง, ์ญ์ ๊ณ ์ ๋น์ฉ์ด๋ผ ํ๋์จ์ด๊ฐ ๋นจ๋ผ์ง๋ฉด ํจ๊ป ์ฝํด์ง๋ค. โ "๊ณ ์ ๋น์ฉ ํจ์๋ ๋ฐ๋์ ๋ฌด๋์ง๋ค"๊ฐ ์ด ๋ ผ๋ฌธ์ ์ถ๋ฐ์ ์ด๋ค.
ํต์ฌ 1 โ ์ข์ ๋น๋ฐ๋ฒํธ ์คํด์ ์ธ ๊ฐ์ง ์กฐ๊ฑด (๋ ผ๋ฌธ 3์ )
- ๋ ๋ฒ์งธ ์ญ์ ์ ํญ(second preimage-resistance): ํด์๊ฐ์ด ์ฃผ์ด์ก์ ๋ ๋ค๋ฅธ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐพ๋ ์ผ์ด, ๋น๋ฐ๋ฒํธ ์์ฒด๋ฅผ ์ถ์ธกํ๋ ์ผ๋งํผ ์ด๋ ค์์ผ ํ๋ค. ๋ ผ๋ฌธ์ ์ด๋ฅผ ํ์ํํด "๋น๋ฐ๋ฒํธ ์คํด์ ์ฌ์ฉ์๊ฐ ๊ณ ๋ฅธ ๋น๋ฐ๋ฒํธ๋งํผ๋ง ์ข๋ค"๋ ๋ช ์ ๋ก ๋ชป ๋ฐ๋๋ค.
- ์ถฉ๋ถํ ํฐ ์ํธ ๊ณต๊ฐ: ๋ฏธ๋ฆฌ ๊ณ์ฐํ ๋ฃฉ์ ํ ์ด๋ธ(๋ ์ธ๋ณด์ฐ ํ ์ด๋ธ์ ์ํ)์ ๋ฌด๋ ฅํํ๋ค. ์ํธ๋ ํด์ ์ถ๋ ฅ์ ์ํฅ์ ์ฃผ๋ ๋ ๋ฒ์งธ ์ ๋ ฅ์ผ๋ก, ๊ฐ์ ๋น๋ฐ๋ฒํธ๊ฐ ๋งค๋ฒ ๋ค๋ฅธ ํด์๋ฅผ ๊ฐ๊ฒ ๋ง๋ ๋ค.
- ์ ์ ๋น์ฉ(adaptable cost): ๊ณ ์ ๋น์ฉ ํจ์๋ฅผ '๋ ๋น์ผ ํจ์'๋ก ๊ฐ์์น์ฐ๋ ๊ฒ์ ์์คํ ์ ๋งค๋ฒ ๊นจ๋จ๋ฆฐ๋ค. ๋์ ํ๋์ ํจ์ ์์ ๋น์ฉ ํ๋ผ๋ฏธํฐ๋ฅผ ๋์ด, ํธํ์ฑ์ ๊นจ์ง ์๊ณ ๋น์ฉ๋ง ์ฌ๋ฆด ์ ์์ด์ผ ํ๋ค.
- ๋ ผ๋ฌธ์ ํต์ฌ ๊ณต์: ๋น์ฉ(=๋ฐ๋ณต ํ์)์ ์ต์ ๊ฐ์ ํ๋์จ์ด ์ฑ๋ฅ์ ๋ฐ๋น๋กํ๋ค โ ํ๋์จ์ด๊ฐ ๋นจ๋ผ์ง ๋๋ง๋ค ์ฌ๋ ค์ผ ํ๋ค. "๋ฌด์ด์ ๋ฒ์น์ ๋ง์ถ ๋ณด์"์ด๋ผ๋ ๋ฐ์์ด ์ฌ๊ธฐ์ ์ฒ์ ๊ตฌ์ฒดํ๋๋ค.
ํต์ฌ 2 โ eksblowfish: '์ผ๋ถ๋ฌ ๋น์ผ' ํค ์ค์ผ์ค
- ๊ธฐ๋ฐ์ Bruce Schneier์ Blowfish: 64๋นํธ ๋ธ๋ก, 16๋ผ์ด๋ Feistel ๋คํธ์ํฌ. F ํจ์๋
F(a,b,c,d) = ((S1[a] โ S2[b]) โ S3[c]) โ S4[d]โ 4๊ฐ์ 256ร32๋นํธ S๋ฐ์ค๋ฅผ ์ด๋ค. - eksblowfish = "expensive key schedule blowfish": ์ํธํ ๊ณผ์ ์ Blowfish์ ์์ ํ ๋์ผํ๋ค. ๋ค๋ฅธ ๊ฒ์ ์ค์ง ํค ์ค์ผ์ค(๋น๋ฐ๋ฒํธ+์ํธ๋ฅผ ์๋ธํคยทS๋ฐ์ค๋ก ํ์ฅํ๋ ๋จ๊ณ)์ ์ผ๋ถ๋ฌ ๋น์ธ๊ฒ ๋ง๋ ๊ฒ๋ฟ์ด๋ค.
- EksBlowfishSetup(cost, salt, key): InitState(ฯ ์์๋ก ์ํ ์ฑ์) โ ExpandKey(state, salt, key) โ ์ดํ 2^cost๋ฒ ๋ฐ๋ณต { ExpandKey(state, 0, salt); ExpandKey(state, 0, key) }. ์ฆ ๋น์ฉ ํ๋ผ๋ฏธํฐ๊ฐ ๋ฐ๋ณต ํ์๋ฅผ ์ง์์ ์ผ๋ก(2^cost) ์กฐ์ ํ๋ค โ cost 6์ด๋ฉด 64ํ, cost 8์ด๋ฉด 256ํ.
- ์ํธ 128๋นํธ, ํค(๋น๋ฐ๋ฒํธ) ์ต๋ 56๋ฐ์ดํธ(Blowfish ์ต๋ ํค 448๋นํธ).
- ์ค๊ณ ์๋ โ 'HW ํ์ดํ๋ผ์ธ' ๋ด์: 4KB์ ๋ฌํ๋ S๋ฐ์ค๋ฅผ ๋งค ๋ฐ๋ณต๋ง๋ค ๋ค์ ์ฐ๊ธฐ ๋๋ฌธ์, ์ ์ฉ ํ๋์จ์ด์ ํ์ดํ๋ผ์ด๋๊ณผ ๋นํธ์ฌ๋ผ์ด์ฑ(bit-slicing)์ด ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ๋ค. ๋ ผ๋ฌธ ํํ๋๋ก "์์ง ์๋ ค์ง์ง ์์ ์ต์ ํ"์ ์ฌ์ง๋ฅผ ์ค์ด๋ ค๋ ๊ฒ์ด๋ค.
ํต์ฌ 3 โ bcrypt: 192๋นํธ '๋ง๋ฒ๊ฐ'์ 64๋ฒ ์ํธํํ๋ค
- bcrypt๋ eksblowfish๋ฅผ ํด์๋ก ๊ฐ์ผ ๊ฒ์ด๋ค. 128๋นํธ ์ํธ์ 192๋นํธ ๋ง๋ฒ๊ฐ(magic value)์ ์ฌ์ฉํ๋ค.
- ๊ทธ ๋ง๋ฒ๊ฐ์ ๋ฌธ์์ด:
"OrpheanBeholderScryDoubt"โ 24๋ฐ์ดํธ = ์ ํํ 192๋นํธ๋ค. bcrypt๋ ์ด ๊ณ ์ ๋ฌธ์์ด์ ์ํธํํ๋ค. - 1๋จ๊ณ(๋น์ผ ๋ถ๋ถ): EksBlowfishSetup(cost, salt, pwd)๋ก ํค ์ค์ผ์ค ์ํ๋ฅผ ์ด๊ธฐํ. ๊ณ์ฐ ์๊ฐ์ ๋๋ถ๋ถ์ด ์ฌ๊ธฐ์ ์๋น๋๋ค.
- 2๋จ๊ณ(๋ฐ๋ณต): ๊ทธ ์ํ๋ก 192๋นํธ ๋ง๋ฒ๊ฐ์ ECB ๋ชจ๋๋ก 64๋ฒ ๋ฐ๋ณต ์ํธํ. ์ถ๋ ฅ์ cost + 128๋นํธ ์ํธ + ์ํธ๋ฌธ์ ์ด์ด๋ถ์ธ ๊ฐ์ด๋ค โ cost์ ์ํธ๊ฐ ํจ๊ป ์ธ์ฝ๋ฉ๋๋ฏ๋ก ๊ฒ์ฆ ์ ๊ทธ๋๋ก ์ฌํ๋๋ค.
- ๋ฒ์ ์ ๋: ํ ๋น๋ฐ๋ฒํธ ํ์ผ์ ์ฌ๋ฌ ์คํด์ด ๊ณต์กดํ๋๋ก, bcrypt ์ถ๋ ฅ์
$2a$(ํ๋ $2b$, $2y$)๋ก, MD5 crypt๋$1$๋ก ์์ํ๋ค. ์ ํต crypt ์ถ๋ ฅ์$๋ก ์์ํ์ง ์์ ์ถฉ๋์ด ์๋ค. - ๊ธฐ๋ณธ ๋น์ฉ: ๋ ผ๋ฌธ ๊ฒ์ฌ ๋น์ ์ผ๋ฐ ์ฌ์ฉ์ cost 6, ๊ด๋ฆฌ์(root) cost 8. bcrypt๋ OpenBSD 2.1๋ถํฐ ๊ธฐ๋ณธ ๋น๋ฐ๋ฒํธ ์คํด์ด๋ค. ๋น๋ฐ๋ฒํธ ์ต๋ 55๋ฐ์ดํธ.
ํต์ฌ 4 โ ๊ณต๊ฒฉ์ ๊ด์ : ์ ํต cryptยทMD5 crypt๋ฅผ ๋ซ๋ ๋ค์ฏ ๊ฐ๋ (๋ ผ๋ฌธ 6์ )
- โ ์ฌ์ ๊ณต๊ฒฉ(dictionary attack): ์ฌ์ฉ์๋ ์์ธก ๊ฐ๋ฅํ ๋น๋ฐ๋ฒํธ("Susan1", "neme$i$"์ฒ๋ผ ์ด๋ฆ+์ซ์)๋ฅผ ๊ณ ๋ฅธ๋ค. ํด์๊ฐ ๋น ๋ฅด๋ฉด ์ฌ์ ํ ๋ถ๊ฐ ๊ณง ์ด์ ๊ฐ ๋๋ค. โ bcrypt๋ ๋น์ฉ์ '์ ๋นํ ์ฌ์ฉ์๊ฐ ๊ฒฌ๋ ์ ์๋ ํ๊ณ๊น์ง' ๋์ฌ ์ฌ์ ๊ณต๊ฒฉ์ ๋นํ์ค์ ์ผ๋ก ๋ง๋ ๋ค.
- โก ์ํธ ์ถฉ๋(salt collision): ์ ํต crypt๋ ์ํธ๊ฐ 4,096๊ฐ๋ฟ์ด๋ผ ์ถฉ๋์ด ๋ค๋ฐํ๋ค. ๊ณต๊ฒฉ์๋ ๊ฐ์ ์ํธ๋ผ๋ฆฌ ๋ฌถ์ด ํ๋ณด๋ฅผ ์ํธ๋น ํ ๋ฒ๋ง ํด์ํ๋ ์ต์ ํ๋ฅผ ์ป๋๋ค. 15,000๊ฐ ์ํธ๋ฆฌ ํ์ผ์์ ์ํธ๊ฐ ์ ์ผํ๋ ค๋ฉด 2โดยน ๊ณต๊ฐ์ด ํ์ํ๋ฐ, 2ยนยฒ๋ฉด ์ฝ 3,991๊ฐ๋ง, 2ยฒโด๋ฉด 14,994๊ฐ๋ง ์ ์ผํ๋ค. bcrypt์ 128๋นํธ ์ํธ๋ ์ด ๋ฌธ์ ๋ฅผ ์์ฒ ์ ๊ฑฐํ๋ค.
- โข ๋ฏธ๋ฆฌ ๊ณ์ฐ(precompute): ์ ํต crypt๋ "์ฌ์ ๋จ์ด ์ ๋ถ ร ๊ฐ๋ฅํ 12๋นํธ ์ํธ"๊ฐ 9GB ํ๋๋์คํฌ ํ ๋์ ๋ค์ด๊ฐ๋ค. QCrack์ ์ถ๋ ฅ์ 1๋ฐ์ดํธ๋ก ์ค์ฌ Webster ์ฌ์ (1934ํ, 8์ ์ ๋จยท์ค๋ณต ์ ๊ฑฐ ํ 171,395๊ฐ)์ 670MB์ ๋ด์๋ค. bcrypt๋ ์ํธ ๊ณต๊ฐ์ด ์ปค์ '์ํธ๋น 1๋นํธ'์กฐ์ฐจ ์ ์ฅ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- โฃ ์๊ณ ๋ฆฌ์ฆ ์ต์ ํ(๋นํธ์ฌ๋ผ์ด์ฑ): Biham์ ๋นํธ์ฌ๋ผ์ด์ค DES๋ 300MHz Alpha 8400์์ 137Mb/s๋ก, libdes(28Mb/s)๋ณด๋ค ์ฝ 5๋ฐฐ ๋นจ๋๋ค. John the Ripper๋ MD5 crypt์ ํต์ฌ ๋ฃจํ๋ฅผ ๋จ์ํํด ๋ํญ ๊ฐ์ํ๋ค. ํ์ง๋ง bcrypt๋ S๋ฐ์ค๊ฐ ๋งค๋ฒ ๋ฐ๋์ด ๋นํธ์ฌ๋ผ์ด์ฑ์ด ํตํ์ง ์๋๋ค.
- โค ํ๋์จ์ด ๋ฐ์ : 1977๋ 3.6ํ/์ด โ 1998๋ EFF DES ํฌ๋์ปค๊น์ง. ๊ณ ์ ๋ผ์ด๋ ํจ์๋ ํ๋์จ์ด๊ฐ ๋นจ๋ผ์ง๋ ๋งํผ ์๋์ผ๋ก ์ฝํด์ง๋ค. bcrypt๋ ์ฌ์ฉ์๊ฐ ๋น์ฉ์ ์ฌ๋ ค ์ด ์ถ์ธ์ ๋ง์๋ ์ ์ผํ ๋ฐฉํฅ์ ์ ๊ณตํ๋ค.
ํต์ฌ 5 โ 1999๋ ์ ์์ธ์ ์ 2026๋ ์๋ ์ ํจํ๊ฐ
- ๋น์ฉ ํ๋ผ๋ฏธํฐ ํ๋๋ก '์์ ์์ค'์ ์๊ฐ์ ๋ํด ๊ณ ์ ํ๋ค: cost๋ฅผ 1 ์ฌ๋ฆฌ๋ฉด ๊ณ์ฐ๋์ด 2๋ฐฐ๊ฐ ๋๋ฏ๋ก, ํ๋์จ์ด๊ฐ ๋นจ๋ผ์ง ๋งํผ ๋ฐ๋ผ์ก์ ์ ์๋ค. ์ด๋ '๊ณ ์ ๋น์ฉ' ํจ์๊ฐ ๊ฐ์ง ๊ตฌ์กฐ์ ๊ฒฐํจ์ ์์ค๋ค.
- bcrypt๊ฐ ํ์ญ์ผ๋ก ๋จ์๋ค๋ ์ฆ๊ฑฐ: OpenBSD ๊ธฐ๋ณธ, PHP
password_hash()์ ๊ธฐ๋ณธ(PASSWORD_BCRYPT), ์๋ง์ ์น ํ๋ ์์ํฌ์ DB.$2b$์ ๋๋ ์ค๋๋ ๊ฑฐ์ ๋ชจ๋ ๋น๋ฐ๋ฒํธ ๋คํ์์ ๋ณด์ธ๋ค. - ํ๋ ๋ถ์ฑ๋๊ณผ์ ์ฐ๊ฒฐ: 4KB S๋ฐ์ค๋ฅผ ๋ฌด์์๋ก ์ ๊ทผํ๋ ๊ตฌ์กฐ๋ ์บ์ ํ์ด๋ฐ ๋ถ์ฑ๋์ ์์ธ์ด๊ธฐ๋ ํ๋ค โ ๊ทธ๋์ ์ง๊ธ์ ๋ฉ๋ชจ๋ฆฌ-ํ๋ ํจ์(Argon2ยทscrypt)๋ก ์ด์ด์ก๋ค. bcrypt๋ ๊ทธ ๊ณ๋ณด์ ์ถ๋ฐ์ ์ด๋ค.
- ์ง์ง ์ ์ฐ์ '์ฌ๊ณ ํ'์ด๋ค: "ํฐ ์ํธ + ์กฐ์ ๊ฐ๋ฅํ ๋ฐ๋ณต ๋น์ฉ"์ด๋ผ๋ ํ ์์ฒด. ์ค๋๋ OWASP์ work-factor ๊ถ๊ณ (์: cost โฅ 10)๋ ๋ชจ๋ ์ด ํ ์์ ์ ์๋ค.
ํ๊ณ ยท ์ ์์ ยท ์์
- bcrypt ์์ฒด์ ํ๊ณ: 55๋ฐ์ดํธ ๋น๋ฐ๋ฒํธ ์ ํ(ํ๋ ๊ตฌํ์ 72๋ฐ์ดํธ์์ ์ ๋จ), 4KB S๋ฐ์ค์ ์บ์ ๋ถ์ฑ๋, ๋ณ๋ ฌ ๊ณต๊ฒฉ์ ๋ํ ๋ณ๋ ๋น์ฉ์ด ์๋ ์ (๋ฉ๋ชจ๋ฆฌ-ํ๋๊ฐ ์๋). โ Argon2ยทscryptยทPBKDF2 ๊ฐ์ ํ๋ ๋์์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ์ด๋ค.
- '์ ์ํ'์ ์๊ณ ๋ฆฌ์ฆ์ด ์๋๋ผ ์ด์์ ๋ฌธ์ ๋ค: ๋น์ฉ์ ์ฌ๋ฆฌ๋ ๊ฒ์ ์ ์ฑ ์ด๋ค. ํ ๋ฒ ์ ํ๊ณ ๋ฐฉ์นํ๋ฉด ๋ค์ ๋๋๋ค. ๋ ผ๋ฌธ๋ "๋น์ฉ์ ๋๋๋ก ์ฌํ๊ฐํด์ผ ํ๋ค"๊ณ ๋ช ์ํ๋ค.
- ํจ๋ฌ๋ค์ ์ ํ: ์ด ๋ ผ๋ฌธ์ 'ํด์ ํ๋ ๋'๊ฐ ์๋๋ค. ๋น๋ฐ๋ฒํธ ๋ณด์์ ๋ณ์๋ฅผ '์๊ณ ๋ฆฌ์ฆ์ ๋น๋ฐ'์์ '์๊ฐ ์ถ์์ ์กฐ์ ๊ฐ๋ฅํ ๋น์ฉ'์ผ๋ก ์ฌ์ ์ํ๋ค. Morris & Thompson 1979๊ฐ '์ํธ'๋ฅผ ๋์ ํ๊ณ , ์ด ๋ ผ๋ฌธ์ด '์ ์ ๋น์ฉ'์ ๋์ ํ์ผ๋ฉฐ, ๋์ด ํฉ์ณ์ ธ ์ค๋๋ ์ ํ์ค์ด ๋๋ค.
- ์ค๋์ ๊ตํ: ๋น๋ฐ๋ฒํธ DB๋ฅผ ์ค๊ณํ ๋ "๋ฌด์์ผ๋ก ํด์ํ ๊น"๋ง ๋ฌป์ง ๋ง๊ณ , "์ด ์ ํ์ด 5๋ ๋ค์๋ ์ถฉ๋ถํ ๋น์๊น"๋ฅผ ํจ๊ป ๋ฌผ์ด์ผ ํ๋ค.
์ถ์ฒ
- ๋ ผ๋ฌธ ์๋ฌธ: Niels Provos & David Maziรจres, A Future-Adaptable Password Scheme, FREENIX Track, 1999 USENIX Annual Technical Conference โ usenix.org (PDF) ยท static ๋ฏธ๋ฌ
- ๊ณ๋ณด์ ๋ฟ๋ฆฌ(์ฐธ๊ณ ๋ฌธํ [9]): Robert Morris & Ken Thompson, Password Security: A Case History, Communications of the ACM 22(11), 1979 โ ์ํธ์ ๋๋ฆฐ ํด์ฑ์ ์ํ
- ํจ๊ป ์ฝ๊ธฐ: 2026-09-16 How to Break MD5(ํด์ ์ถฉ๋์ ์ค์ โ ์ด ๋ ผ๋ฌธ์ด MD5 crypt๋ฅผ ๋นํํ ์ดํ์ ์ด์ผ๊ธฐ) ยท 2026-10-07 Differential Power Analysis(Kocher, ๋ถ์ฑ๋) ยท 2026-10-05 RSA ์๋ ผ๋ฌธ ยท 2026-09-30 New Directions in Cryptography(DiffieโHellman)