암호화 해시 함수
암호화 해시 함수(cryptographic hash function)은 해시 함수의 일종으로, 해시 값으로부터 원래의 입력값과의 관계를 찾기 어려운 성질을 가지는 경우를 의미한다. 암호화 해시 함수가 가져야 하는 성질은 다음과 같다.[1]
- 역상 저항성(preimage resistance): 주어진 해시 값에 대해, 그 해시 값을 생성하는 입력값을 찾는 것이 계산상 어렵다. 즉, 제 1 역상 공격에 대해 안전해야 한다. 이 성질은 일방향함수와 연관되어 있다.
- 제 2 역상 저항성(second preimage resistance): 입력 값에 대해, 그 입력의 해시 값을 바꾸지 않으면서 입력을 변경하는 것이 계산상 어렵다. 제 2 역상 공격에 대해 안전해야 한다.
- 충돌 저항성(collision resistance): 해시 충돌에 대해 안전해야 한다. 같은 해시 값을 생성하는 두 개의 입력값을 찾는 것이 계산상 어려워야 한다.
SHA | |
---|---|
개념 | |
해시 함수 · SHA · DSA | |
주요 개념 | |
SHA-0 · SHA-1 · SHA-2 · SHA-3 | |
즉, 입력값과 해시 값에 대해서, 해시 값을 망가뜨리지 않으면서 입력값을 수정하는 공격에 대해 안전해야 한다. 이러한 성질을 가지는 해시 값은 원래 입력값을 의도적으로 손상시키지 않았는지에 대한 검증 장치로 사용할 수 있다.
순환 중복 검사(CRC)와 같은 몇몇 해시 함수는 암호 안전성에 필요한 저항성을 가지지 않으며, 우연적인 손상을 검출할 수는 있지만 의도적인 손상의 경우 검출되지 않도록 하는 것이 가능하기도 하다. 가령, 유선 동등 프라이버시(WEP)의 경우 암호화 해시 함수로 CRC를 사용하나, CRC의 암호학적 취약점을 이용한 암호공격이 가능하다는 것이 밝혀져 있다.
암호화 해시 함수의 비교
편집가장 널리 사용되는 해시 함수에는 MD5와 SHA-1이 있으나, 이들은 안전하지 않다는 것이 알려져 있다. 미국 US-CERT에서는 2008년 MD5를 사용하지 말아야 한다고 발표했다.[2] NIST에서는 2008년 SHA-1의 사용을 중지하며 SHA-2를 사용할 것이라고 발표했다.[3]
2008년 미국 국립표준기술연구소(NIST)에서는 SHA-3로 부를 새로운 안전한 암호화 해시 함수에 대한 공모전을 열었다. 2012년 8월 현재 SHA-3의 후보는 다섯 개가 있으며, 2012년 중으로 이들 중 최종 후보를 뽑을 예정이다.[4]
다음은 널리 알려진 암호화 해시 함수 알고리즘의 목록이다. 이들 중에는 안전하지 않다는 것이 밝혀진 것도 있다.
알고리즘 | 출력 비트 수 | 내부 상태 크기[c 1] | 블록 크기 | Length size | Word size | 라운드 수 | 공격 가능성 (복잡도:최대 라운드 수)[c 2] | ||
---|---|---|---|---|---|---|---|---|---|
충돌 | 2차 역상 | 역상 | |||||||
GOST | 256 | 256 | 256 | 256 | 32 | 256 | 2105 | 2192 | 2192 |
HAVAL | 256/224/192/160/128 | 256 | 1,024 | 64 | 32 | 160/128/96 | 가능 | ||
MD2 | 128 | 384 | 128 | - | 32 | 864 | 263.3 | 273 | |
MD4 | 128 | 128 | 512 | 64 | 32 | 48 | 3 | 264 | 278.4 |
MD5 | 128 | 128 | 512 | 64 | 32 | 64 | 220.96 | 2123.4 | |
PANAMA | 256 | 8,736 | 256 | - | 32 | - | 가능 | ||
RadioGatún | Up to 608/1,216 (19 words) | 58 words | 3 words | - | 1–64 | - | 2352 또는 2704 | ||
RIPEMD | 128 | 128 | 512 | 64 | 32 | 48 | 218 | ||
RIPEMD-128/256 | 128/256 | 128/256 | 512 | 64 | 32 | 64 | |||
RIPEMD-160 | 160 | 160 | 512 | 64 | 32 | 80 | 251:48 | ||
RIPEMD-320 | 320 | 320 | 512 | 64 | 32 | 80 | |||
SHA-0 | 160 | 160 | 512 | 64 | 32 | 80 | 233.6 | ||
SHA-1 | 160 | 160 | 512 | 64 | 32 | 80 | 251 | ||
SHA-256/224 | 256/224 | 256 | 512 | 64 | 32 | 64 | 228.5:24 | 2248.4:42 | |
SHA-512/384 | 512/384 | 512 | 1,024 | 128 | 64 | 80 | 232.5:24 | 2494.6:42 | |
Tiger(2)-192/160/128 | 192/160/128 | 192 | 512 | 64 | 64 | 24 | 262:19 | 2184.3 | |
WHIRLPOOL | 512 | 512 | 512 | 256 | 8 | 10 | 2120:4.5 |
같이 보기
편집각주
편집- ↑ Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. 《Handbook of Applied Cryptography》.
- ↑ “Vulnerability Note VU#836068: MD5 vulnerable to collision attacks”.
- ↑ “NIST Brief Comments on Recent Cryptanalytic Attacks on Secure Hashing Functions and the Continued Security Provided by SHA-1” (PDF). 2011년 6월 4일에 원본 문서 (PDF)에서 보존된 문서. 2012년 8월 11일에 확인함.
- ↑ 국립표준기술연구소. “Tentative Timeline of the Development of New Hash Functions”. 2012년 8월 12일에 확인함.