SHA โ
SHA(Secure Hash Algorithm)์ NIST์ ์ํด์ ๊ด๋ฆฌ๋๋ ์์ ํ ํด์ ํ์ค ํจ์๋ค์ ๋ชจ์์ด๋ฉฐ ํ์ฌ๋ NIST FIPS 180-3 ๊ท๊ฒฉ์ SHA-2๋ฅผ ๊ถ์ฅํด์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํด์ ํจ์๋ ์ด๋ ํ ๋ฌธ์์ด์ ์ผ์ ํ ๊ธธ์ด๋ฅผ ๊ฐ์ง ์์์ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ ๋ง์ ์ฐ๊ตฌ์ ์ํด ๋ง๋ค์ด์ง ์ฌ๋ฌ๊ฐ์ง ํด์ ํจ์ ์ค์์ ์ผ๋ฐ์ ์ผ๋ก SHA-256์ ์ฌ์ฉํ๋ ์ด์ ๋ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ ๋ชฉ์ ์ ์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. ํน์ ํ ๋ฌธ์์ด์ ๋ํด์๋ ๋์ผํ ํด์๊ฐ(๋ค์ด์ ์คํธ)์ผ๋ก ๋ณํ๋๋ฉฐ ํด์๊ฐ์ ๊ธฐ์ค์ผ๋ก๋ ๋์ผํ ํจํด์ ์ฐพ์ ์ ์์ด์ ๋ณธ๋์ ๋ฌธ์์ด์ ์ ์ถํ ์ ์๋๋ก ํ๊ณ ์ ํ๋ ๊ฒ์ ์์ต๋๋ค.
SHA-256 ํด์ ํจ์์ ๋์ ๊ณผ์ ์ Sha256 Algorithm Explained๋ฅผ ์ด์ฉํ๋ฉด ๋์ผ๋ก ํ์ธํ ์ ์์ผ๋ ์ฐธ๊ณ ํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฉ์์ง ๋ค์ด์ ์คํธ โ
ํด์ ํจ์๋ ์ด๋ ํ ์ ๋ ฅ์ ๋ํด์ ์ผ์ ํ ๊ธธ์ด์ ๋นํธ๋ก ์ด๋ฃจ์ด์ง ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ฉ์์ง ๋ค์ด์ ์คํธ๋ ์ด๋ค ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ๊ธธ์ด์ ๋ค์ด์ ์คํธ๋ก ๋ณํํ ๊ฒ์ ๋งํ๋ฉฐ ๋จ์ํ๊ฒ ํด์ ํจ์๋ก ์ฒ๋ฆฌ๋ ํด์๊ฐ์ผ ๋ฟ์ ๋๋ค.
package main
import (
"crypto/sha256"
"encoding/hex"
"fmt"
)
func main() {
plain := "HelloWorld"
hash := sha256.New()
hash.Write([]byte(plain))
hashed := hash.Sum(nil)
fmt.Println("plain:", plain)
fmt.Println("hashed:", hex.EncodeToString(hashed))
}
plain: HelloWorld
hashed: 872e4e50ce9990d8b041330c47c9ddd11bec6b503ae9386a99da8584e9bb12c4
ํ์ผ ์ฒดํฌ์ฌ โ
์ ๋ฉ์์ง ๋ค์ด์ ์คํธ๋ฅผ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ํ์ฉํ ๋ถ๋ถ์ด ํ์ผ ์ฒดํฌ์ฌ์ ๋๋ค. how-to-verify-ubuntu์์ ์ฒ๋ผ ๋ค์ด๋ก๋ ๋ฐ์ ํ์ผ์ ์๋ณ์กฐ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ํด์ MD5 ๋๋ SHA-256๋ก ํด์๋ ๋ค์ด์ ์คํธ๋ฅผ ์ ๊ณตํ๋ฉฐ ์ด๋ฅผ ํตํด ์ฌ๋ฐ๋ฅธ ๋ฐ์ด๋๋ฆฌ ํ์ผ์์ ๊ฒ์ฆํ๊ณ ์์ ํ๋ค๊ณ ํ๋จํ ์ ์์ต๋๋ค. ์๋์ ์์๋ ์๋์ฐ ํฐ๋ฏธ๋์์ CertUtil์ ์ฌ์ฉํ์ฌ ํ์ผ ์ฒดํฌ์ฌ์ ํ์ธํ ๊ฒ์ด๋ฉฐ GtkHash์ ๊ฐ์ ๋๊ตฌ๋ก๋ ํ์ธํ ์ ์์ต๋๋ค.
PS C:\> certutil -hashfile orig.txt sha256
SHA256์ orig.txt ํด์:
872e4e50ce9990d8b041330c47c9ddd11bec6b503ae9386a99da8584e9bb12c4
CertUtil: -hashfile ๋ช
๋ น์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค.
๋น๋ฐ๋ฒํธ ์ํธํ โ
์ผ๋ฐ์ ์ผ๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํํ์ฌ ์ ์ฅํ ๋๋ ์์ ํ ํจ์ค์๋ ์ ์ฅ์์ ์ธ๊ธ๋ PBKDF2 ๋๋ bcrypt๋ฅผ ์ฌ์ฉํ๋ ํธ์ธ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค. bcrypt๋ NIST ์์ ๊ถ์ฅํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ํ์ง๋ ์์์ผ๋ OpenBSD๋ ์คํ๋ง ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ ํจ์ค์๋ ์ธ์ฝ๋๋ก ์ง์ ๋ ๋น๊ต์ ์์ ํ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋์ ๋๋ค. ์๋ฌดํผ ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค ํ๋์ธ KDB+๋ MD5 ๋๋ SHA-1 ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ผ๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ํ๊ธฐ์ ์ฌ์ฉํ๋ ์์คํ ๋ง๋ค ์ง์ํ๋ ๋ฐฉ์์ ์ ํ์ด ์์ ์ ์์ต๋๋ค.
๋น๋ฐ๋ฒํธ ์ํธํ ๊ด๋ จ ์ฝ์ผ๋ฉด ์ข์ ๊ธ โ
- ์์ ํ ํจ์ค์๋ ์ ์ฅ
- ํด์ ํจ์, ์ํธํ ํด์ ํจ์, ๊ทธ๋ฆฌ๊ณ SHA
- Hashing in Action: Understanding bcrypt
ํค ์๋ช ์ง๋ฌธ โ
SSH ํค ํ์ด ๋ฐ๊ธ ๋ฐ ์๊ฒฉ ํธ์คํธ ์ฐ๊ฒฐํ๊ธฐ์์์ฒ๋ผ SSH ํค์ ๋ํด ์ง๋ฌธ(Fingerprint)์ ์์ฑํด๋๊ณ ํธ์คํธ์ ๋ํ ๊ณต๊ฐํค๊ฐ ๋ณ๊ฒฝ๋์๋์ง๋ฅผ ํ๋จํ๋๋ฐ ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค. ์ด๋ฌํ ํค ์๋ช ์ง๋ฌธ์ ์๋์ ์ด๋ฏธ์ง์ ๊ฐ์ด SSL ์ธ์ฆ์ ์ ๋ณด์๋ ์๋ช ํด์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.