SHA-256์ด๋?
SHA-256์ ๋ฏธ๊ตญ ํ์ค๊ธฐ์ ์ฐ๊ตฌ์(NIST)๊ฐ ํ์คํํ SHA-2 ๊ณ์ด ์ํธํ์ ํด์ ํจ์ ์ค ํ๋์ ๋๋ค. ๊ธธ์ด์ ์๊ด์์ด ์ด๋ค ์ ๋ ฅ ๋ฉ์์ง๋ ๋ฐ์ ๊ณ ์ ๋ 256๋นํธ(32๋ฐ์ดํธ) ๋ค์ด์ ์คํธ๋ฅผ ๋ง๋ค์ด๋ด๋ฉฐ, ์ฌ๊ธฐ์๋ 64์๋ฆฌ 16์ง์ ๋ฌธ์์ด๋ก ํ์๋ฉ๋๋ค. ๊ฐ์ ์ ๋ ฅ์ ํญ์ ๊ฐ์ ๋ค์ด์ ์คํธ๋ฅผ ๋ง๋ค์ง๋ง, ๋จ ํ ๊ธ์๋ง ๋ฐ๋์ด๋ ์์ ํ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ต๋๋ค(์๋ ํจ๊ณผ, avalanche effect). SHA-256์ TLS ์ธ์ฆ์, ์ ์ ์๋ช , ๋ธ๋ก์ฒด์ธ(๋นํธ์ฝ์ธ), ํ์ผ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ ๋ฑ์ ํญ๋๊ฒ ์ฐ์ ๋๋ค.
๊ณ์ฐ๊ธฐ ์ฌ์ฉ ๋ฐฉ๋ฒ
์ ๋ ฅ๋์ ์ํ๋ ํ ์คํธ๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ ๋ถ์ฌ๋ฃ๊ณ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ณ์ฐ๊ธฐ๋ ์ ๋ ฅํ ํ ์คํธ๋ฅผ UTF-8๋ก ์ธ์ฝ๋ฉํ ๋ค SHA-256 ์๊ณ ๋ฆฌ์ฆ์ ๋๋ ค, 16์ง์ ๋ค์ด์ ์คํธ์ ์ ๋ ฅ์ ๋ฐ์ดํธ ๊ธธ์ด๋ฅผ ํจ๊ป ๋๋ ค์ค๋๋ค. ๋น ์ ๋ ฅ๋ ์ ํจํ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์ ์๋ ค์ง ๋น ๋ฌธ์์ด ๋ค์ด์ ์คํธ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
$$\text{Hash} = \operatorname{SHA\text{-}256}\!\left(\text{Input Text}\right)$$๊ณ์ฐ ์๋ฆฌ ํ์ด๋ณด๊ธฐ
SHA-256์ ๋จผ์ ๋ฉ์์ง ๊ธธ์ด๊ฐ 512๋นํธ์ ๋ฐฐ์๊ฐ ๋๋๋ก ํจ๋ฉ์ ์ถ๊ฐํ๊ณ , ์ด๋ฅผ 512๋นํธ ๋ธ๋ก์ผ๋ก ๋๋ ๋ค ๊ฐ ๋ธ๋ก์ 64๋ผ์ด๋์ ๋นํธ ์ฐ์ฐ(ํ์ , ์ํํธ, AND/XOR, ๋ชจ๋๋ฌ ๋ง์ )์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ ์์์ ์ ๊ณฑ๊ทผ ์์๋ถ์์ ์ด๊ธฐํํ ์ฌ๋ ๊ฐ์ 32๋นํธ ์์ ๋ณ์๋ฅผ ์์ด ์ฌ์ฉํฉ๋๋ค. ๊ฐ ๋ธ๋ก ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด ์ฌ๋ ๊ฐ์ ๋ ์ง์คํฐ๊ฐ ์งํ ์ค์ธ ํด์ ์ํ์ ๋ค์ ๋ํด์ง๊ณ , ์ด๋ค์ ์ด์ด ๋ถ์ด๋ฉด ์ต์ข 256๋นํธ ๋ค์ด์ ์คํธ๊ฐ ์์ฑ๋ฉ๋๋ค.
์์ ๋ก ๋ณด๊ธฐ
์
๋ ฅ๊ฐ abc(3๋ฐ์ดํธ)๋ ๋ค์ด์ ์คํธ ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad๋ฅผ ์์ฑํฉ๋๋ค. ๋น ๋ฌธ์์ด์ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855๋ฅผ ๋ง๋๋๋ฐ, ์ด๋ ํ์ค ํ
์คํธ ๋ฒกํฐ๋ก ์ ์๋ ค์ ธ ์์ต๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
SHA-256์ ๋๋๋ฆด ์ ์๋์? ์๋์. ๋จ๋ฐฉํฅ ํจ์์ด๋ฏ๋ก ๋ค์ด์ ์คํธ์์ ์๋ ์ ๋ ฅ์ ๋ณต์ํ ์ ์์ต๋๋ค.
์ ๋ฐ์ดํธ ์๊ฐ ๊ธ์ ์๋ณด๋ค ๋ง์๊ฐ์? ํ๊ธ, ํ์ ๊ฐ์ CJK ๋ฌธ์๋ ์ ์ผํธ ๊ธฐํธ, ์ด๋ชจ์ง ๋ฑ ASCII๊ฐ ์๋ ๋ฌธ์๋ UTF-8์์ ์ฌ๋ฌ ๋ฐ์ดํธ๋ฅผ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํธ ๊ธธ์ด๊ฐ ๊ธ์ ์๋ณด๋ค ์ปค์ง ์ ์์ต๋๋ค.
SHA-256์ ์ฌ์ ํ ์์ ํ๊ฐ์? ๋ค. ํ์ฌ๊น์ง SHA-256์ ๋ํ ์ค์ฉ์ ์ธ ์ถฉ๋(collision)์ด๋ ์ญ์(preimage) ๊ณต๊ฒฉ์ ์๋ ค์ ธ ์์ง ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ธ ์ฉ๋๋ก ๊ถ์ฅ๋๋ ํด์ ํจ์์ ๋๋ค.