[JS] 자료구조에서 좋은 해시 함수란?

김현수·2023년 11월 20일
0

자료구조

목록 보기
4/8


🖍️ 좋은 해시 함수란?


해시 테이블의 효율성에 매우 중요하며 다양한 암호화 작업에서 중요한 역할



해시 함수 효율성 기준들

  • 균일한 분포
좋은 해시 함수는 해시 테이블 전체에 키를 균일하게 배포

즉, 테이블의 각 버킷이 선택될 가능성이 동일해야 하며 
충돌 가능성이 줄임 (두 키가 동일한 인덱스에 해시되는 경우)
  • 결정적
해시 함수는 결정적

즉, 동일한 입력이 항상 동일한 해시 값을 생성한다는 의미
이는 해시 테이블에서 항목을 검색하는 데 필수적
  • 빠른 계산
함수는 계산 속도가 빨라야 하며 해시 값을 빠르게 제공해야 하며 
이는 실시간 애플리케이션과 같이 속도가 중요한 상황에서 특히 중요
  • 충돌 최소화
충돌로부터 완전히 자유로울 수 있는 해시 함수는 없지만 
좋은 해시 함수는 충돌을 최소화

충돌이 발생하면 체인 연결이나 
개방형 주소 지정과 같은 기술을 통해 관리
  • 눈사태 효과(암호화 해시 함수용)
입력이 조금만 변경되면 상당히 다른 해시가 생성
이는 예측 가능성을 방지하기 위해 암호화 해시 함수에 특히 중요
  • 비역전성(암호화 해시 함수용)
해시 값의 원래 입력을 역엔지니어링하는 것은 계산상 불가능
"사전 이미지 저항"으로 알려진 이 속성은 보안 애플리케이션에 매우 중요

일반 목적

속도가 빠르고 일반적인 키에 대한 좋은 배포를 제공

암호화

암호화 목적으로 설계되어 강력한 눈사태 효과와 충돌 방지 기능을 제공
속도는 느리지만 더 안전하며 보안 비밀번호 저장, 디지털 서명, 체크섬과 같은 애플리케이션에 적합


  • 해시 함수 선택은 애플리케이션의 특정 요구 사항에 따라 달라짐
  • 범용 데이터 구조의 경우 속도와 균일한 분포가 핵심 요소
  • 암호화 애플리케이션의 경우 충돌 방지 및 사전 이미지 저항과 같은 보안 속성이 가장 중요
profile
일단 한다

0개의 댓글