Hash함수는 암호학 분야에서만 사용하는 것은 아니다.
DB나 다양한 분야에서 사용되었다.
위와 같은 형태로 긴 길이에 대한 정보를 Hash에 넣으면 고정길이의 값이 나와 이를 통해 간단하게 검색할 수 있다.
그러나 이와 반대로 암호학적인 Hash는 아래와 같다.
이러한 구조를 가질 수 있는 이유는
따라서 Collision resistence함을 만족하면 나머지는 알아서 만족한다는 것이다.
이에 대한 증명에 설명은 따로하지 않고 넘어갈 것이다.
이에 대한 증명들은 reduction을 통해 증명을 한다.
이러한 hash함수들이 안전한지 확인하기 위해
"A Generic ‘Birthday’ Attack"을 통해 얼마정도 충돌저항성을 가지는 지알 수 있다.
이를 통해 나오는 것은 Giving a minimal bound of output length에 따라 어려움이 결정됨을 알 수 있다.
우리가 Hash의 함수를 분석하기 위해 Random Function을 분석한다.
이유는 Hash함수가 닮고 싶어 하는 이상적인 목표가 Random 함수이므로 이를 통해 분석하고 이보다 Hash함수가 성능이 떨어지는 것으로 판단한다.
이를 통해 설계하고 분석하고 취약점을 보완하는 방법으로 구성한다.
이러한 분석을 할 수 있는 Birthday 문제는 따로 언급하지 않을 것이다.
간단히 이야기하면 1.pre-image 2.second pre-image 3.collision에 대한 모델링을 하고 이를 분석하는 방법이다.
MD5 (with digest of 128 bits)
SHA-1 (with digest of 160 bits)
기본적으로 Merkle-Damgard transform을 따르고 있다.
nbit의 block단위로 잘라 이를 압축함수인 f를 통해 mbit를 만들고 이를 다음 block의 IV처럼 f에 넣어 모든 메시지에 대해 수행하면 값이 나온다.
현재의 모든 SHA는 다음의 Spec을 가지고 있다.
Block Cipher기반의 설계
이는 AES함수를 통해 만드는 것이다.
그러나 이는 역방향으로 가지 못하게 즉 invertible하지 못하게 XOR을 하는 방법을 가진다.
장점은 코드의 size가 줄어든다.
단점은 Hash도 그렇게 코드가 크지않다.
또 다른 방법들
Padding을 하는 방법은 아래와 같다.