λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
CS/λ³΄μ•ˆ

Hash 단방ν–₯ μ•”ν˜Έν™” 기법

by πŸŒ»β™š 2021. 10. 6.

Hash

ν•΄μ‹œλŠ” 데이터λ₯Ό λ‹€λ£¨λŠ” 기법 쀑 ν•˜λ‚˜μ΄λ‹€. ν•΄μ‹œμ˜ κ°€μž₯ 큰 νŠΉμ§•μ€ λ°μ΄ν„°μ˜ 크기와 상관없이… ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 μ–»λŠ” ν•΄μ‹œκ°’μ€ 항상 κ³ μ •λœ 길이λ₯Ό λ°˜ν™˜ν•œλ‹€. 이런 νŠΉμ§•μ„ κ°–κ³  λ³΄μ•ˆμ μΈ κ΄€μ μ—μ„œλŠ” 단방ν–₯ μ•”ν˜Έν™”μœΌλ‘œ μ‚¬μš© ν•  수 μžˆλ‹€.

μš©μ–΄ 정리

μš©μ–΄ μ„€λͺ…
ν•΄μ‹œ ν•¨μˆ˜(μ•Œκ³ λ¦¬μ¦˜) μž„μ˜μ˜ 크기의 데이터λ₯Ό inputκ°’μœΌλ‘œ κ³ μ •λœ 길이의 output(ν•΄μ‹œκ°’)으둜 λ°˜ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜
ν•΄μ‹œ κ°’ ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μ— μ˜ν•΄ 얻은 데이터. ν•΄μ‹œμ½”λ“œ, ν•΄μ‹œ 체크섬 이라고도 ν•œλ‹€.
ν•΄μ‹± ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μ—μ„œ ν•΄μ‹œκ°’μ„ λ§€ν•‘ν•˜λŠ” κ³Όμ •

ν•΄μ‹œμ˜ νŠΉμ§•

ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μ€ μ•„λž˜μ™€ 같은 λͺ‡κ°€μ§€ μ€‘μš” νŠΉμ§•λ“€μ΄ μžˆλ‹€.

κ³ μ •λœ 길이

hash(10GB Data) = '84960594d762e2534b56c2e8f8b2a3f6770e1ae8e13d255d6eeaf8dd7acce5fb'
hash(100MB Data) = '93444722a50772950e30f4f2bc005b0a9258620430bb6842342267ee833c8bb6'

ν•΄μ‹œ ν•¨μˆ˜μ— inputλ˜λŠ” λ°μ΄ν„°μ˜ 크기와 상관없이… κ³ μ •λœ 길이λ₯Ό κ°–λŠ” ν•΄μ‹œκ°’μ„ λ°˜ν™˜ν•œλ‹€. λ‹¨μˆœν•˜κ²Œ 단어와 같은 String값을 ν•΄μ‹±ν•˜λŠ” κ²½μš°λŠ” 원문 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λŠ”κ²Œ νš¨μœ¨μ μ΄κ² μ§€λ§Œ... λŒ€λŸ‰μ˜ 데이터λ₯Ό λΉ„κ΅ν•œλ‹€κ³  ν–ˆμ„ λ•Œ, 직접 데이터λ₯Ό λΉ„κ΅ν•˜λŠ” 것 보닀 ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μ— μ˜ν•΄ 얻은 ν•΄μ‹œ 값을 μ΄μš©ν•΄μ„œ λΉ„κ΅ν•˜λ©΄ 큰 νš¨μœ¨μ„ 얻을 수 μžˆλ‹€. μœ„μ˜ μ˜ˆμ‹œμ—μ„œλ„ 10GBλ‚˜ 100MBλ‚˜ λͺ¨λ‘ 해싱을 ν•˜λ©΄ 같은 크기의 ν•΄μ‹œκ°’μ„ μ–»λŠ”λ‹€.

일관성

hash('lake') = '6f021f0268d5dd0d4e286ad5202f57335f2a8cc568704c4f7865c97879443ef8'
hash('lake') = '6f021f0268d5dd0d4e286ad5202f57335f2a8cc568704c4f7865c97879443ef8'

ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μ˜ inputλ˜λŠ” 데이터가 μ™„μ „νžˆ κ°™μœΌλ©΄ 항상 같은 ν•΄μ‹œκ°’μ„ κ°–λŠ”λ‹€.

ν•΄μ‹œκ°’ μΆ”μΈ‘ λΆˆκ°€λŠ₯

hash('lake') = '6f021f0268d5dd0d4e286ad5202f57335f2a8cc568704c4f7865c97879443ef8'
hash('lake.') = '8b04d20fe157421fc834eefbda77eb2c5714a60d3d722cfd3f68ff7068164c77'

inputκ³Ό ν•΄μ‹œκ°’λ“€μ˜ 정보λ₯Ό κ°–κ³ … λ‹€λ₯Έ ν•΄μ‹œκ°’μ„ input으둜, input을 ν•΄μ‹œκ°’μœΌλ‘œ μœ μΆ”κ°€ λΈ”κ°€λŠ₯ν•΄μ•Όν•œλ‹€. κ·Έλž˜μ„œ input 값이 μ‘°κΈˆμ΄λΌλ„ λ‹€λ₯΄λ©΄ μ™„μ „νžˆ λ‹€λ₯Έ ν•΄μ‹œκ°’μ„ λ°˜ν™˜ν•΄μ•Όν•œλ‹€. μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” ‘lake’와 ‘lake’에 ‘.’을 μΆ”κ°€ν•œ ν•΄μ‹œκ°’μ„ κ΅¬ν–ˆλ‹€. 연관성이 없은 μ™„μ „νžˆ λ‹€λ₯Έ ν•΄μ‹œκ°’μ„ λ°˜ν™˜ν•œλ‹€.

ν•΄μ‹œ 좩돌

hash('lake') = '6f021f0268d5dd0d4e286ad5202f57335f2a8cc568704c4f7865c97879443ef8'
hash('ocean') = '6f021f0268d5dd0d4e286ad5202f57335f2a8cc568704c4f7865c97879443ef8'

'lake' != 'ocean'
hash('lake') == hash('ocean')

생각해보면… ν•΄μ‹œ ν•¨μˆ˜λŠ” κ²°κ΅­ λˆ„κ΅°κ°€ λ§Œλ“  ν•¨μˆ˜μ΄λ‹€. λ‚΄λΆ€μ μœΌλ‘œ μ•Œκ³ λ¦¬μ¦˜μ΄ μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜λŠλƒμ— 따라 λ‹€λ₯Έ input을 해싱해도 같은 ν•΄μ‹œκ°’μ„ 갖을 수 μžˆλ‹€. 이λ₯Ό ν•΄μ‹œμ˜ 좩돌(collision)이라고 ν•œλ‹€. 이런 좩돌이 λ°œμƒν•˜λ©΄ 체이닝 κΈ°λ²•μ΄λ‚˜ 개방 μ£Όμ†Œλ²•μ„ 톡해 일뢀 νšŒν”Όν•΄μ„œ 해결이 κ°€λŠ₯ν•˜λ‹€.

이런 νŠΉμ§•μ„ κ°–κ³  μžˆλŠ” ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μ€ 자료ꡬ쑰(ν•΄μ‹œ ν…Œμ΄λΈ”, ν•΄μ‹œ 맡), λ³΄μ•ˆ, 블둝체인 λ“± λ‹€μ–‘ν•œ λΆ„μ•Όμ—μ„œ ν™œμš©ν•  수 μžˆλ‹€.

λ³΄μ•ˆκ΄€μ μ˜ Hash μ‚¬μš©

Hashλ₯Ό μ΄μš©ν•˜λ©΄ κ³ μ •λœ 길이의 μ•”ν˜Έν™”λœ λ¬Έμžμ—΄λ‘œ 데이터λ₯Ό λ°˜ν™˜ν•΄μ£ΌλŠ” 단방ν–₯ μ•”ν˜Έν™” 기법 으둜 μ‚¬μš©λœλ‹€.

단방ν–₯ μ•”ν˜Έν™” 기법

ν•œμͺ½ λ°©ν–₯으둜 μ•”ν˜Έν™”λ₯Ό ν•  수 있고 볡원이 λΆˆκ°€λŠ₯ν•œ μ•”ν˜Έν™” 기법이 단방ν–₯ μ•”ν˜Έν™” 기법이닀.
즉, μ•”ν˜Έν™” 방법은 있고 λ³΅ν˜Έν™” 방법이 μ—†λŠ” 것이닀. 단방ν–₯ μ•”ν˜Έν™” 기법을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ ν•΄μ‹œκ°€ κ°–λŠ” νŠΉμ§•μ„ μ΄μš©ν•˜λ©΄ μ•ˆμ „ν•œ μ•”ν˜Έν™” ν•΄μ‹œ ν•¨μˆ˜ 을 κ΅¬ν˜„ν•  수 μžˆλ‹€.

μ•”ν˜Έν™” ν•΄μ‹œ ν•¨μˆ˜κ°€ κ°€μ Έμ•Όν•˜λŠ” νŠΉμ§•

ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ΄μš©ν•œ 단방ν–₯ μ•”ν˜Έν™”λ₯Ό μœ„ν•΄ μ•”ν˜Έν™” ν•΄μ‹œ ν•¨μˆ˜κ°€ κ°€μ Έμ•Όν•˜λŠ” νŠΉμ§•

  1. ν•΄μ‹œκ°’μ΄ μ£Όμ–΄μ Έ μžˆμ„ λ•Œ 계산을 톡해 input 값을 μ•Œμ•„λ‚΄κΈ° μ–΄λ €μ›Œμ•Ό ν•œλ‹€.
  2. ν•΄μ‹œκ°’κ³Ό input이 λͺ¨λ‘ μ£Όμ–΄μ‘Œμ„ λ•Œ μΆ©λŒμ„ λ°œμƒμ‹œν‚€λŠ” λ‹€λ₯Έ input 값을 μ°Ύμ•„λ‚΄κ±°λ‚˜ κ³„μ‚°ν•˜κΈ° λΆˆκ°€λŠ₯ ν•΄μ•Όν•œλ‹€.
  3. λ‘κ°œμ˜ λ‹€λ₯Έ input으둜 같은 ν•΄μ‹œκ°’μ„ λ°›λŠ” 좩돌이 λ°œμƒν•˜λ©΄ μ•ˆλœλ‹€.
    • 자료ꡬ쑰적 μΈ‘λ©΄μ—μ„œλŠ” 좩돌이 λ°œμƒν•˜λ”λΌλ„ 체이닝과 같은 기법을 톡해 해결해도 λ¬΄κ΄€ν•˜μ§€λ§Œ… 단방ν–₯ μ•”ν˜Έν™”μ˜ κ°œλ…μ—μ„œλŠ” μΆ©λŒμ„ νšŒν”Όν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

μ•”ν˜Έν™” ν•΄μ‹œ ν•¨μˆ˜ μ‘μš©

  • μ†Œν”„νŠΈμ›¨μ–΄ λ³€κ²½ κ²€μΆœ
    • μ„€μΉ˜ν•œ μ†Œν”„νŠΈμ›¨μ–΄μ˜ ν•΄μ‹œκ°’μ„ 직접 κ³„μ‚°ν•΄μ„œ μ˜€λ¦¬μ§€λ„ μ‚¬μ΄νŠΈμ—μ„œ μ œκ³΅ν•˜λŠ” ν•΄μ‹œκ°’κ³Ό 비ꡐ
  • νŒ¨μŠ€μ›Œλ“œλ₯Ό κΈ°μ΄ˆλ‘œν•œ μ•”ν˜Έν™”
    • λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•  λ•Œ, μ•ˆμ „ν•˜κ²Œ 원 데이터가 μ•„λ‹Œ ν•΄μ‹œκ°’μœΌλ‘œ μ €μž₯
  • λ©”μ‹œμ§€ 인증 μ½”λ“œ(MAC)
    • μˆ˜μ‹ μžμ™€ μ†‘μ‹ μžλ§Œμ΄ κ³΅μœ ν•˜κ³  μžˆλŠ” 킀와 λ©”μ‹œμ§€λ₯Ό ν˜Όν•©ν•΄μ„œ ν•΄μ‹œκ°’μœΌλ‘œ κ³„μ‚°ν•˜μ—¬ μ‚¬μš©
  • μ „μžμ„œλͺ…

ν•΄μ‹œ ν•¨μˆ˜ μ’…λ₯˜

  • MD5
  • SHA
    • SHA-0
    • SHA-1
    • SHA-256, SHA-512
    • SHA-3
  • CRC
  • Tiger
  • Bcrypt
  • λ“± μ—¬λŸ¬κ°€μ§€

λŒ€ν‘œμ μΈ ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ SHAκ΅° ν•¨μˆ˜λ“€κ³Ό MD5κ°€ 있고 그외에도 λ§Žμ€ μ•Œκ³ λ¦¬μ¦˜μ΄ μ‘΄μž¬ν•˜κ³  단방ν–₯ μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ‚¬μš©λ˜κ³  μžˆλ‹€. μ˜ˆμ „μ— 많이 μ‚¬μš©ν•œ ν•¨μˆ˜λ“€μ΄ 있고… λ³΄μ•ˆμ μΈ μΈ‘λ©΄μ—μ„œ 좩돌이 μ€‘μš”ν•œ κ°œλ…μ„ κ°–κ³  μžˆμ–΄ λ³΄μ•ˆ μš©λ„λ‘œ μ‚¬μš©ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄ μ§€μ†μ μœΌλ‘œ λ³€ν™”λ˜λŠ” 과정을 κ²ͺκ²Œλ˜μ—ˆλ‹€. κ·Έλž˜μ„œ SHAκ΅° ν•¨μˆ˜λ“€κ³Ό MD5 ν•¨μˆ˜μ˜ 역사적인 흐름을 μ•Œλ©΄ 쒋을 것이닀.


MD5(Message-Digest algorithm 5)(1992)

MD4λ₯Ό 계속 μ‚¬μš©ν•˜λ‹€κ°€ 이λ₯Ό λŒ€μ²΄ν•˜κΈ° μœ„ν•΄ 128λΉ„νŠΈ ν•΄μ‹œλ₯Ό μ‚¬μš©ν•˜λŠ” MD5κ°€ κ°œλ°œλ˜μ—ˆλ‹€. κ·ΈλŸ¬λ‚˜ 섀계상 결함 및 μ•”ν˜Έν™” 결함이 λ°œκ²¬λ˜μ–΄ MD5λŠ” λ³΄μ•ˆ κ΄€λ ¨ μš©λ„λ‘œ μ“°λŠ” 것을 ꢌμž₯ν•˜μ§€ μ•Šκ²Œ λ˜μ—ˆλ‹€. ν•Έλ“œν°μœΌλ‘œ 30초면 μΆ©λŒμ„ 찾을 수 μžˆλŠ” 연ꡬ도 μžˆλ‹€.

SHA(Secure Hash Algorithm)

λ―Έκ΅­ κ΅­κ°€ μ•ˆλ³΄κ΅­(NSA)이 처음으둜 μ„€κ³„ν–ˆμœΌλ©° λ―Έκ΅­ ν‘œμ€€ 기술 μ—°κ΅¬μ†Œ(NIST)에 μ˜ν•΄ μ•ˆμ „ν•œ ν•΄μ‹œ ν‘œμ€€μœΌλ‘œ μ§€μ •λ˜μ—ˆλ‹€. SHA ν•¨μˆ˜κ΅­μ˜ 졜초의 ν•¨μˆ˜λŠ” SHA라고 λΆˆλ¦¬μ§€λ§Œ, λ‚˜μ€‘μ— μ„€κ³„λœ ν•¨μˆ˜λ“€κ³Ό κ΅¬λ³„ν•˜κΈ° μœ„ν•΄ SHA-0(1993) 라고 λΆˆλ¦°λ‹€. SHA-0λŠ” μ–Όλ§ˆ μ§€λ‚˜μ§€ μ•Šμ•„… NSAλŠ” 이 ν‘œμ€€μ„ νκΈ°ν•˜κ³  κ°œμ •λœ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ SHA-1(1995) 을 μƒˆλ‘œ λ°œν‘œν•œλ‹€.
→ μ‹€μ œλ‘œ μ–΄λ–€ λ¬Έμ œκ°€ μžˆμ–΄ λ³€κ²½ν–ˆλŠ”μ§€λŠ” μ•Œλ €μ§€μ§€λŠ” μ•Šμ•˜μ§€λ§Œ… μ•”ν˜Έν•™μ  λ³΄μ•ˆμ„ κ°μ†Œμ‹œν‚€λŠ” λ¬Έμ œκ°€ μžˆμ–΄ κ°œμ •λ˜μ—ˆλ‹€κ³  ν•œλ‹€.

SHA-2(2001)

NISTλŠ” λ‚˜μ€‘μ— ν•΄μ‹œκ°’μ˜ 길이가 더 κΈ΄ 4개의 λ³€ν˜•μ„ λ°œν‘œν–ˆμœΌλ©°, 이듀을 ν†΅μΉ­ν•˜μ—¬ SHA-2라고 λΆ€λ₯Έλ‹€.

  • SHA-224
  • SHA-256
  • SHA-384
  • SHA-512 μ΄λŠ” SHA λ’€μ˜ μˆ«μžκ°€ ν•΄μ‹œμ˜ λΉ„νŠΈ 길이λ₯Ό μ˜λ―Έν•œλ‹€.


SHA-3(2015)

ν˜„μž¬λŠ” SHA-3κΉŒμ§€ λ°œν‘œλœ μƒνƒœμ΄λ‹€. λ―Έκ΅­ US-CERTμ—μ„œλŠ” SHA-3둜 λΆ€λ₯Ό μƒˆλ‘œμš΄ μ•ˆμ „ν•œ μƒˆλ‘œμš΄ μ•”ν˜Έν™” ν•΄μ‹œ ν•¨μˆ˜μ— λŒ€ν•œ 곡λͺ¨λ₯Ό 톡해 κ²°μ •ν–ˆλ‹€κ³  ν•œλ‹€.

SHA-1 좩돌 ν˜„μƒ λ°œν‘œ(2017)

2016년에 NISTλŠ” λ³΄μ•ˆμ„±μ΄ κ°•ν•œ SHA-2 μ‚¬μš© 및 SHA-1 μ‚¬μš© κΈˆμ§€λ₯Ό κΆŒκ³ ν–ˆλ‹€. 이에 따라… λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈ, ꡬ글, νŒŒμ΄μ–΄ν­μŠ€, μ• ν”Œ λ“± 메이저 νšŒμ‚¬ μ œν’ˆλ“€μ—μ„œ SHA-1에 λŒ€ν•œ 지원을 쀑단해가고 μžˆμ–΄ μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜μ„ SHA-1μ—μ„œ SHA-2둜 λ§ˆμ΄κ·Έλ ˆμ΄νŒ…ν•˜λŠ” μ œν’ˆλ“€μ΄ λ§Žμ•„μ§€κ³  μžˆλ‹€.

κ΅¬κΈ€μ—μ„œλŠ” SHA-1에 λŒ€ν•œ 좩돌 λ°œμƒμ— κ΄€λ ¨ 연ꡬ가 μ§„ν–‰λœμ  μžˆλ‹€.
Announcing the first SHA1 collision

Announcing the first SHA1 collision

Posted by Marc Stevens (CWI Amsterdam), Elie Bursztein (Google), Pierre Karpman (CWI Amsterdam), Ange Albertini (Google), Yarik Markov (Goog...

security.googleblog.com

  • MD5λŠ” 1개의 슀마트폰으둜 30μ΄ˆμ•ˆμ— μΆ©λŒμ„ 찾을 수 μžˆλ‹€.
  • SHA-1은 12,000,000 GPUλ₯Ό μ΄μš©ν•΄μ„œ Bruteforce 곡격으둜 1λ…„μ•ˆμ— μΆ©λŒμ„ 찾을 수 μžˆλ‹€.
  • SHA-1은 110 GPUλ₯Ό μ΄μš©ν•΄μ„œ Shattered 곡격으둜 1λ…„μ•ˆμ— μΆ©λŒμ„ 찾을 수 μžˆλ‹€.

λ‚΄μš©μ„ μΈμš©ν•΄λ³΄λ©΄ 였랜 μ‹œκ°„κ³Ό λ¦¬μ†ŒμŠ€κ°€ μ†Œμš”λ˜μ§€λ§Œ ν˜„μ‹€μ μœΌλ‘œ 좩돌이 λ°œμƒν•  수 μžˆλ‹€λŠ” κ²°λ‘ λ‹€.
→ λ³΄μ•ˆμ—…κ³„μ—μ„œ SHA-256 μ΄μƒμ˜ μ§„λ³΄λœ μ•”ν˜Έν•™μ  ν•΄μ‹œ ν•¨μˆ˜ 체쑰둜 μ „ν™˜ν•˜λŠ” 것이 ν•„μš”ν•˜λ‹€.


SHA-1 160 bit

01001011110101010101110101100110
11010001011111010000100010011010
01010101010100101111001101011001
00100111111000100001011110110101
01010110010011111011110011010001

경우의 수 2^160 = 1461501637330902918203684832716283019655932542976

SHA-2 256 bit

11101101100111000001010100000001
11100101000000110011010100100011
11000110001101000000101111100001
10110010110010110000100110010010
11100010111110001101000101000111
10101111010001000011101101100111
10101000110101111000101010000011
11001111010110001010000100011101

경우의 수 2^256 = 115792089237316195423570985007226406215939081747436879206741300988257197096960

SHA-1도 μ—„μ²­ 큰 μˆ˜μ΄μ§€λ§Œ… SHA-2λŠ” 말도 μ•ˆλ˜κ²Œ 큰 경우의 수λ₯Ό κ°–λŠ”λ‹€. ν•˜μ§€λ§Œ 방식은 SHA-1κ³Ό 거의 λΉ„μŠ·ν•˜μ—¬ μˆ˜ν•™μ μœΌλ‘œλŠ” μ—¬μ „νžˆ 좩돌이 λ°œμƒν•œλ‹€. ν•˜μ§€λ§Œ… κ³΅ν•™μ μœΌλ‘œ κ°€λŠ₯성이 μ—†λ‹€κ³  봐도 λ¬΄λ°©ν•˜λ‹€.


ν•΄μ‹œ ν•¨μˆ˜ 비ꡐ

wikipedia comparison of SHA functions

SHA-2 - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Set of cryptographic hash functions designed by the NSA SHA-2 (Secure Hash Algorithm 2) is a set of cryptographic hash functions designed by the United States National Security Agency

en.wikipedia.org

λŒ“κΈ€