티스토리 뷰
해시함수는 임의의 길이의 메시지를 입력하여 고정 길이의 해시 값을 출력하는 함수다. 현재 사용 중인 SHA-1과 같은 표준 해시 함수는 160~256비트의 해시 값을 출력한다. 암호 알고리즘에서는 키를 사용하지만 해시함수는 키를 사용하지 않기 때문에 항상 같은 입력에 대해 동일한 출력이 나온다. 이러한 기능을 사용하는 목적은 입력 메시지의 변경 불가능한 근거 값을 추출하여 오류나 메시지의 변조를 감지하는 무결성을 제공하는 것이다.
해시함수는 전자서명과 함께 사용되어 효율적인 서명 생성이 가능하다. 긴 메시지에 서명하면 전체 메시지에 직접 서명하는 것이 아니라 짧은 해시 값을 계산하여 서명하는 것이다. 공개키 조작은 계산이 많이 필요하기 때문에 전체 메시지를 공개키 길이의 블록으로 나누고 모든 블록에 서명하는 것은 매우 비효율적이다. 따라서 먼저 메시지를 입력하여 160~256비트의 짧은 해시 값을 계산하고 여기에 대해 하나의 시그너처 연산을 한다. 이 계산은 원본 메시지의 서명으로 받아들여진다.
해시 값의 서명이 원본 메시지에서 서명으로 인식되기 위해서는 해시 값이 같은 다른 메시지를 찾기 힘들어야 한다. 해시함수는 어떤 길이 입력으로부터도 짧은 길이의 해시 값을 출력하므로, 동일한 출력에서 다른 입력과 충돌이 있어야 한다. 해시 값이 같은 다른 메시지를 쉽게 찾을 수 있다면 서명자는 자신의 서명이 다른 메시지의 서명이라고 주장할 수도 있다. 이렇게 되면 전자서명을 신뢰할 수 없게 되고 전자거래에 사용되지 않게 된다. 따라서 안전한 해시함수로 이용되기 위해서는 충돌을 감지하기 어려운 특성이 있어야 한다.