MD5 ํด์ ๊ณ์ฐ๊ธฐ๋?
MD5 ํด์ ๊ณ์ฐ๊ธฐ๋ ์ ๋ ฅํ ํ ์คํธ์ 128๋นํธ MD5 ๋ฉ์์ง ๋ค์ด์ ์คํธ๋ฅผ ๊ณ์ฐํด ์ค๋๋ค. MD5(Message-Digest Algorithm 5, RFC 1321์ ์ ์)๋ ๊ธธ์ด์ ์๊ด์์ด ์ด๋ค ์ ๋ ฅ์ด๋ ๋ฐ์์ ๊ณ ์ ๋ 32์๋ฆฌ 16์ง์ ์ง๋ฌธ(fingerprint)์ผ๋ก ๋ณํํฉ๋๋ค. ๊ฐ์ ์ ๋ ฅ์ ์ธ์ ๋ ๊ฐ์ ํด์๋ฅผ ๋ง๋ค์ด ๋ด์ง๋ง, ๊ธ์ ํ๋๋ง ๋ฐ๊ฟ๋ ์ ํ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฒ์ด ํน์ง์ ๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
์ ๋ ฅ๋์ ํ ์คํธ๋ฅผ ์ง์ ์ ๋ ฅํ๊ฑฐ๋ ๋ถ์ฌ๋ฃ์ ๋ค ์คํํ์ธ์. ๊ณ์ฐ๊ธฐ๋ ์ ๋ ฅํ ํ ์คํธ๋ฅผ UTF-8 ๋ฐ์ดํธ๋ก ์ธ์ฝ๋ฉํ ๋ค์ MD5 ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด, ์๋ฌธ์ 16์ง์ ๋ค์ด์ ์คํธ์ ํจ๊ป ๋ฌธ์ ์, UTF-8 ๋ฐ์ดํธ ํฌ๊ธฐ๋ฅผ ๋ณด์ฌ ์ค๋๋ค. ์ ๋ ฅ๋์ ๋น์ ๋๋ฉด ๋๋ฆฌ ์๋ ค์ง ๋น ๋ฌธ์์ด ํด์ ๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค.
๊ณ์ฐ ์๋ฆฌ
MD5๋ ๋จธํดโ๋ด๊ณ ๋ฅด(MerkleโDamgรฅrd) ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋จผ์ ๋ฉ์์ง ๋ค์ 0x80 ๋ฐ์ดํธ ํ๋๋ฅผ ๋ถ์ด๊ณ , ์ ์ฒด ๊ธธ์ด๊ฐ 64๋ก ๋๋ ๋๋จธ์ง 56๋ฐ์ดํธ๊ฐ ๋ ๋๊น์ง 0์ ์ฑ์๋๋ค. ๋ง์ง๋ง์ผ๋ก ์๋ ๋นํธ ๊ธธ์ด๋ฅผ 64๋นํธ ๋ฆฌํ์๋์ธ ๊ฐ์ผ๋ก ๋ง๋ถ์
๋๋ค. ์ด๋ ๊ฒ ํจ๋ฉ๋ ๋ฉ์์ง๋ฅผ 512๋นํธ ๋ธ๋ก์ผ๋ก ๋๋ ๋ค, ๊ฐ ๋ธ๋ก์ 4๊ฐ ๋ผ์ด๋์ ๊ฑธ์ณ 64๋ฒ์ ์ฐ์ฐ์ผ๋ก ์ฒ๋ฆฌํ๋๋ฐ, ์ด๋ ๋น์ ํ ํจ์์ sin์ผ๋ก ์ ๋ํ ๋จ๊ณ๋ณ ์์, ๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ ์ํ ์ด๋(left-rotation)์ ์ฌ์ฉํฉ๋๋ค. ๋ค ๊ฐ์ 32๋นํธ ์ํ ์๋(A, B, C, D)๋ ๊ณ ์ ๋ ์ด๊ธฐ๊ฐ์ผ๋ก ์์ํด ๋ธ๋ก๋ง๋ค ๊ฐฑ์ ๋๋ฉฐ, ์ต์ข
๊ฐ์ ๋ฆฌํ์๋์ธ์ผ๋ก ์ด์ด ๋ถ์ธ ๊ฒ์ด ๋ฐ๋ก ๋ค์ด์ ์คํธ์
๋๋ค.
์ค์ ์์
๋น ๋ฌธ์์ด("")์ 0๋ฐ์ดํธ์
๋๋ค. ํจ๋ฉ์ ๊ฑฐ์น๋ฉด 512๋นํธ ๋ธ๋ก ํ๋๊ฐ ๋๊ณ , MD5๋ d41d8cd98f00b204e9800998ecf8427e๋ฅผ ๋ฐํํฉ๋๋ค. ํ
์คํธ "hello"(5๋ฐ์ดํธ)๋ 5d41402abc4b2a76b9719d911017c592๋ก ํด์ฑ๋ฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
MD5๋ ์์ ํ๊ฐ์? ์๋๋๋ค. MD5๋ ์ํธํ์ ์ผ๋ก ์ด๋ฏธ ๊นจ์ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ์ถฉ๋(collision)์ ์ฝ๊ฒ ๋ง๋ค์ด ๋ผ ์ ์์ต๋๋ค. ๋น๋ฐ๋ฒํธ๋ ์ ์์๋ช ์๋ ์ ๋ ์ฐ์ง ๋ง๊ณ , ์ฒดํฌ์ฌ์ด๋ ๋ณด์๊ณผ ๋ฌด๊ดํ ์ง๋ฌธ ์ฉ๋๋ก๋ง ์ฌ์ฉํ์ธ์.
๋ฐ์ดํธ ์๊ฐ ๋ฌธ์ ์์ ๋ค๋ฅธ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? ์๋ฌธ(ASCII)์ด ์๋ ๋ฌธ์๋ UTF-8์์ 1๋ฐ์ดํธ๋ณด๋ค ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋ชจ์ง 3๊ฐ์ง๋ฆฌ ๋ฌธ์์ด๋ ์ค์ ๋ก๋ ์ฌ๋ฌ ๋ฐ์ดํธ๊ฐ ๋ ์ ์์ต๋๋ค.
๋์๋ฌธ์ ๊ตฌ๋ถ์ด ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋์? ๋ค. "Hello"์ "hello"๋ ์์ ํ ๋ค๋ฅธ ํด์๋ฅผ ๋ง๋ค์ด ๋ ๋๋ค.