개요

해시 함수는 임의 길이의 데이터를 입력받아 고정된 길이의 값으로 바꾸는 함수이다. 이 결과값을 해시값, 해시 코드, 다이제스트라고 부른다.

해시 함수는 데이터를 빠르게 찾거나, 파일이 바뀌었는지 확인하거나, 비밀번호를 직접 저장하지 않고 검증하는 데 쓰인다.

주요 성질

용도에 따라 필요한 성질은 다르지만, 일반적으로 해시 함수에는 다음 특징이 기대된다.

  • 같은 입력은 항상 같은 해시값을 만든다.
  • 입력이 조금만 달라져도 결과가 크게 달라질 수 있다.
  • 해시값 길이는 보통 고정되어 있다.
  • 좋은 해시 함수는 서로 다른 입력이 같은 해시값을 갖는 충돌을 줄인다.

암호학적 해시 함수는 여기에 더해 해시값만 보고 원래 입력을 알아내기 어렵고, 같은 해시값을 만드는 다른 입력을 찾기 어렵도록 설계된다.

쓰임

해시 함수는 여러 곳에서 쓰인다.

  • 파일 무결성 확인: 다운로드한 파일이 손상되거나 바뀌었는지 확인한다.
  • 자료구조: 해시 테이블에서 데이터를 빠르게 찾는다.
  • 비밀번호 저장: 원문 비밀번호 대신 해시값을 저장한다.
  • 버전 관리: Git 같은 도구에서 객체 식별에 해시를 쓴다.
  • 캐시: 같은 입력에 대한 결과를 재사용한다.

주의할 점

모든 해시 함수가 보안에 적합한 것은 아니다. 빠른 검색용 해시와 암호학적 해시는 목적이 다르다. 비밀번호 저장에는 단순 해시만으로 부족하며, 소금값과 느린 비밀번호 해싱 알고리즘을 함께 써야 한다.

함께 볼 개념