암호학적 해시함수 (Cryptographic Hash Function)
쉽게 풀면
사람의 지문처럼, 데이터를 암호학적 해시함수에 넣으면 그 데이터만의 고유한 짧은 문자열(해시값)이 나옵니다. 원본이 한 글자만 바뀌어도 해시값은 완전히 딴판으로 바뀌고, 반대로 해시값만 보고 원본 데이터를 역으로 알아내는 것은 사실상 불가능합니다(일방향성). 또한 서로 다른 두 데이터가 같은 해시값을 가지는 경우(충돌)가 나오지 않도록 설계되어 있습니다. 이런 성질 덕분에 "파일이 전송 중에 변조되지 않았는지" 확인하거나, 비밀번호를 원문 그대로 저장하지 않고 해시값만 저장하는 데 쓰입니다. 대표적인 알고리즘으로 SHA-256이 있으며, 블록체인에서 블록들을 서로 연결할 때도 이 성질이 핵심적으로 사용됩니다.
왜 중요한가
암호학적 해시함수는 데이터 무결성 검증, 비밀번호 저장, 전자서명, 블록체인 등 현대 정보보안 시스템 대부분의 기초를 이루는 요소입니다. 분산 시스템이나 블록체인 연구에서는 블록 간 연결과 위변조 방지를 이 함수의 일방향성과 충돌 회피 성질에 전적으로 의존하기 때문에, 새로운 프로토콜을 제안하는 논문에서는 어떤 해시함수를 사용했는지, 그 안전성 가정이 무엇인지를 명시하는 것이 필수적입니다. 또한 암호학 분야에서는 기존 해시함수의 취약점을 찾아내는 연구 자체가 중요한 연구 주제로 다뤄집니다.
논문에서는 이렇게 쓰입니다
이 문장은 "데이터가 나중에 누군가에 의해 몰래 바뀌지 않았음을 증명할 수 있도록, 지문 역할을 하는 값을 미리 계산해 보관했다"는 뜻입니다.
비밀번호 원문 대신 해시값만 저장해, 서버가 해킹되더라도 원래 비밀번호를 알아낼 수 없도록 설계했다는 의미입니다.
블록체인에서 데이터 위변조를 탐지 가능하게 만드는 핵심 원리인 해시 체인 구조를 설명한 문장입니다.
조금 더 깊게 보면
암호학적 해시함수가 안전하다고 평가받으려면 일방향성(원상 저항성), 제2원상 저항성(특정 해시값과 같은 값을 내는 다른 입력을 찾기 어려움), 충돌 저항성(같은 해시값을 내는 서로 다른 두 입력을 찾기 어려움)이라는 세 가지 성질을 만족해야 합니다. 과거 널리 쓰이던 MD5나 SHA-1은 충돌 저항성이 깨진 것으로 밝혀져 현재는 보안 용도로 권장되지 않으며, SHA-256이나 SHA-3 계열이 그 대안으로 널리 쓰입니다. 비밀번호 저장처럼 저속성이 오히려 안전성에 도움이 되는 경우에는 일부러 계산 비용을 크게 만든 bcrypt, scrypt, Argon2 같은 별도의 함수가 사용되기도 합니다.
주의할 점
암호학적 해시함수는 자료구조에서 값을 빠르게 찾기 위해 쓰는 해시테이블의 해시 함수와는 목적이 다릅니다. 해시테이블의 해시 함수는 속도가 중요하지만, 암호학적 해시함수는 역산 불가능성과 충돌 회피가 훨씬 더 엄격하게 요구됩니다. 또한 해시는 암호화(공개키 암호화)와 달리 원문을 복원하는 "복호화" 과정이 존재하지 않는다는 점도 구분해야 합니다.