[출처:
http://www.kisa.or.kr/kisa/kcac/jsp/kcac_faq_view.jsp?id=308]
해쉬알고리즘은 데이터 ⑦무결성 및 메시지 인증 등에서 사용할 수 있는 함수로써 임의의 길이의 비트 열을 고정된 길이의 출력값인 해쉬코드로 압축시키는 함수이며, 암호학적 응용에 사용되는 대부분의 해쉬함수는 강한 충돌저항성을 지닐 것이 요구된다.
해쉬알고리즘은 크게 ⓐDES와 같은 블록암호알고리즘에 기초한 해쉬알고리즘과 전용 해쉬알고리즘으로 나눌 수 있으며 블록암호암고리즘에 비해 전용 해쉬암고리즘의 속도가 빠르므로 대부분의 응용에서 전용 해쉬알고리즘이 이용된다.
해쉬함수는 일방향 함수(one-way function)으로 다양한 길이의 입력을 고정된 짧은 길이의 출력으로 변환하는 함수로 데이타의 무결성 검증, 메세지 인증에 사용한다. 해쉬함수는 다음의 성질을 만족해야 한다.
일방향성 : 함수 f(X)에서 f(X)=Y의 경우 X로부터 Y의 계산은 쉬우나 Y로부터 X의 계산은 어려워야 한다.
여기서 x는 가변 길이의 메시지이고, y는 해쉬함수 h를 통하여 생성되어지는 고정의 길이의 해쉬값(hash code)이다. 해쉬함수를 거쳐 나온 값 Y를 메시지 다이제스트(Message Digest)라고 정의한다.
해쉬함수의 특징
- 다양한 가변 길이의 입력에 적용될 수 있어야 한다.
- 고정된 길이의 출력을 만든다.
- 주어진 입력값을 해쉬하는 것은 쉽다.
- 해쉬 결과값으로 입력값을 계산하는 것은 불가능 하다.
- 동일한 해쉬값을 가지는 서로 다른 메시지 쌍이 없다.
전자서명을 할 때 해쉬함수로 메시지를 압축한 데이터에 서명함으로써 효율성을 높일 수 있다. RSA와 같이 전자서명에 사용되는 알고리즘은 메시지 자체를 암호화 하는 경우 해쉬함수 보다 처리속도가 느린데, 서명을 메시지 해쉬함수로 축약(Digest)함으로써 전자서명 알고리즘의 계산량을 줄일 수가 있다.
해쉬함수의 종류
현재 사용되고 있는 대표적인 해쉬함수는, 1990년에 R.C. Merkle에 의해 제안된 SNEFRU, 1989년에 일본 NTT의 미야구치 등이 발표한 N-HASH, 1990년과 1992년에 Ron Rivest에 의해 개발된 MD4와 ⓒMD5, 1993년에 미국 NIST에 의해 개발되었고 가장 많이 사용되고 있는 ⓔSHA(Secure Hash Algorithm)등이 있다.
[출처:http://www.securitytechnet.com/resource/research/techreport/std-summary/node2.html]
해쉬함수(
혹은 Hash로 표기)는 임의의 길이의 입력 메세지를 고정된 길이의 출력값으로 압축시키는 함수이다. 데이타의 무결성 검증, 메세지 인증에 사용한다. 해쉬함수는 다음의 성질을 만족해야 한다.
일반적으로 널리 쓰이는 해쉬함수로는 MD5, SHA1, RMD160, TIGER 등이 있다.
표 4: 해쉬 알고리즘| 알고리즘 | 출력길이 | 블럭의 크기 | 라운드 수 | Endianness | | MD5 | 128 | 512 | 64 | Little |
|---|
| SHA1 | 160 | 512 | 80 | Big |
|---|
| SHA256 | 256 | 512 | 64 | Big |
|---|
| SHA384 | 384 | 1024 | 80 | Big |
|---|
| SHA512 | 512 | 1024 | 80 | Big |
|---|
| RMD128 | 128 | 512 | 128 | Little |
|---|
| RMD160 | 160 | 512 | 160 | Little |
|---|
| RMD256 | 256 | 512 | 128 | Little |
|---|
| RMD320 | 320 | 512 | 160 | Little |
|---|
| HAS160 | 160 | 512 | 80 | Little |
|---|
| TIGER | 192 | 512 | 56 | Little |
|---|
| | | | |
|
- MD5는 널리 사용된 해쉬 알고리즘이지만, 충돌 회피성에서 문제점이 있다는 분석이 있으므로 기존의 응용과의 호환으로만 사용하고 더 이상 사용하지 않도록 하고 있다.
- SHA1은 DSA에서 사용하도록 되어 있으며 많은 인터넷 응용에서 default 해쉬 알고리즘으로 사용된다.
- SHA256, SHA384, SHA512는 AES의 키 길이인 128, 192, 256 비트에 대응하도록 출력길이를 늘인 해쉬알고리즘이다.
- RMD128, RMD160는 RIPE 프로젝트의 RIPEMD나 MD4, MD5를 대신하기 위하여 디자인된 해쉬 알고리즘이다. 128 비트의 출력을 내는 RMD128은 역시 충돌 회피성에서 문제점이 있다. RMD160은 효율성은 떨어지지만 안전성을 높인 것으로 많은 인터넷 표준들에서 널리 채택되고 있다.
- RMD256과 RMD320은 각각 RMD128과 RMD160을 확장한 것이다.
- HAS160은 국내 표준 서명 알고리즘 KCDSA를 위하여 개발된 해쉬 함수이다. MD5와 SHA1의 장점을 취하여 디자인 되었다. 현재 TTA 표준으로 제정중에 있다.
- TIGER는 64 비트 프로세서에 최적화되어서 64 비트 프로세서에서는 매우 빠르다.