Skip to content

SHA โ€‹

SHA(Secure Hash Algorithm)์€ NIST์— ์˜ํ•ด์„œ ๊ด€๋ฆฌ๋˜๋Š” ์•ˆ์ „ํ•œ ํ•ด์‹œ ํ‘œ์ค€ ํ•จ์ˆ˜๋“ค์˜ ๋ชจ์Œ์ด๋ฉฐ ํ˜„์žฌ๋Š” NIST FIPS 180-3 ๊ทœ๊ฒฉ์˜ SHA-2๋ฅผ ๊ถŒ์žฅํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์–ด๋– ํ•œ ๋ฌธ์ž์—ด์„ ์ผ์ •ํ•œ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ์ž„์˜์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜ ๋งŽ์€ ์—ฐ๊ตฌ์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ•ด์‹œ ํ•จ์ˆ˜ ์ค‘์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ SHA-256์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๋ชฉ์ ์— ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ •ํ•œ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด์„œ๋Š” ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’(๋‹ค์ด์ œ์ŠคํŠธ)์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ ํ•ด์‹œ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ๋Š” ๋™์ผํ•œ ํŒจํ„ด์„ ์ฐพ์„ ์ˆ˜ ์—†์–ด์„œ ๋ณธ๋ž˜์˜ ๋ฌธ์ž์—ด์„ ์œ ์ถ”ํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์— ์žˆ์Šต๋‹ˆ๋‹ค.

SHA-256 ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๋™์ž‘ ๊ณผ์ •์€ Sha256 Algorithm Explained๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ˆˆ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ โ€‹

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์–ด๋– ํ•œ ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ ์ผ์ •ํ•œ ๊ธธ์ด์˜ ๋น„ํŠธ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ๋ž€ ์–ด๋–ค ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ •ํ•œ ๊ธธ์ด์˜ ๋‹ค์ด์ œ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒƒ์„ ๋งํ•˜๋ฉฐ ๋‹จ์ˆœํ•˜๊ฒŒ ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌ๋œ ํ•ด์‹œ๊ฐ’์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

go
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))
}
shell
plain: HelloWorld
hashed: 872e4e50ce9990d8b041330c47c9ddd11bec6b503ae9386a99da8584e9bb12c4

ํŒŒ์ผ ์ฒดํฌ์„ฌ โ€‹

์œ„ ๋ฉ”์‹œ์ง€ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์— ํ™œ์šฉํ•œ ๋ถ€๋ถ„์ด ํŒŒ์ผ ์ฒดํฌ์„ฌ์ž…๋‹ˆ๋‹ค. how-to-verify-ubuntu์—์„œ ์ฒ˜๋Ÿผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ํŒŒ์ผ์˜ ์œ„๋ณ€์กฐ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด์„œ MD5 ๋˜๋Š” SHA-256๋กœ ํ•ด์‹œ๋œ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด ์˜ฌ๋ฐ”๋ฅธ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์ž„์„ ๊ฒ€์ฆํ•˜๊ณ  ์•ˆ์ „ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์‹œ๋Š” ์œˆ๋„์šฐ ํ„ฐ๋ฏธ๋„์—์„œ CertUtil์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ์ฒดํฌ์„ฌ์„ ํ™•์ธํ•œ ๊ฒƒ์ด๋ฉฐ GtkHash์™€ ๊ฐ™์€ ๋„๊ตฌ๋กœ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

powershell
PS C:\> certutil -hashfile orig.txt sha256
SHA256์˜ orig.txt ํ•ด์‹œ:
872e4e50ce9990d8b041330c47c9ddd11bec6b503ae9386a99da8584e9bb12c4
CertUtil: -hashfile ๋ช…๋ น์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” โ€‹

์ผ๋ฐ˜์ ์œผ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ €์žฅํ•  ๋•Œ๋Š” ์•ˆ์ „ํ•œ ํŒจ์Šค์›Œ๋“œ ์ €์žฅ์—์„œ ์–ธ๊ธ‰๋œ PBKDF2 ๋˜๋Š” bcrypt๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ธ ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. bcrypt๋Š” NIST ์—์„œ ๊ถŒ์žฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์†ํ•˜์ง€๋Š” ์•Š์•˜์œผ๋‚˜ OpenBSD๋‚˜ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ ํŒจ์Šค์›Œ๋“œ ์ธ์ฝ”๋”๋กœ ์ง€์ •๋œ ๋น„๊ต์  ์•ˆ์ „ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์•„๋ฌดํŠผ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘ ํ•˜๋‚˜์ธ KDB+๋Š” MD5 ๋˜๋Š” SHA-1 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐฉ์‹์œผ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง€์›ํ•˜๊ธฐ์— ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ๋งˆ๋‹ค ์ง€์›ํ•˜๋Š” ๋ฐฉ์‹์— ์ œํ•œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๊ด€๋ จ ์ฝ์œผ๋ฉด ์ข‹์€ ๊ธ€ โ€‹

ํ‚ค ์„œ๋ช… ์ง€๋ฌธ โ€‹

SSH ํ‚ค ํŽ˜์–ด ๋ฐœ๊ธ‰ ๋ฐ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ ์—ฐ๊ฒฐํ•˜๊ธฐ์—์„œ์ฒ˜๋Ÿผ SSH ํ‚ค์— ๋Œ€ํ•ด ์ง€๋ฌธ(Fingerprint)์„ ์ƒ์„ฑํ•ด๋†“๊ณ  ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ๊ณต๊ฐœํ‚ค๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ‚ค ์„œ๋ช… ์ง€๋ฌธ์€ ์•„๋ž˜์˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด SSL ์ธ์ฆ์„œ ์ •๋ณด์—๋„ ์„œ๋ช… ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Released under the MIT License.