Hash 함수

mrtorture·2023년 10월 27일

최초 23/10/27

문제 상황

사이트에 로그인할 때 id와 password가 서로 부합하는지 확인해야 하는데 password를 그대로 DB에 저장한다면 만약 DB가 해킹당하는 경우 해커는 탈취한 password를 이용해서 로그인 할수 있게됨.

솔루션

id와의 부합 여부를 확인하는데 password 원본 대신 password의 mapping값을 이용하면 (id, pw) 대신 (id, h(pw))를 DB에 저장함. 로그인을 위해 password가 건너오면 해당 mapping값을 구해서 DB에 저장된 값과 비교함. 따라서 올바른 password가 건너오면 id와 부합하는 판정을 함.

그리고 DB에 저장된 password의 mapping값이 탈취당하더라도 인증 과정에선 여전히 password를 요구하므로 탈취한 mapping값을 로그인에 이용할수 없음.

이 때 문제는 특정 mapping값에 서로 다른 값이 map되는 경우임. 이럴 경우 다른 password를 입력해도 id와 password가 부합하다는 판정을 내림. 따라서 map은 다음과 같은 1:1 mapping을 만족해야함.

hash 함수는 이론적으로 1:1 mapping 을 만족하며 mapping값을 보고 원본값을 추측할 수 없는 특징이 있음. 따라서 위 목적에 부합하는 map으로 hash 함수가 쓰임.

사례

  • hash map, hash set
  • 패스워드 유출 대비
    추가로 salt를 붙여서 rainbow table에 대비
  • JWT
    secret key를 salt처럼 사용하여 서명을 만드는데 이용
  • SSH
  • SSL

참고

profile
명확하게 생각하고 싶다

0개의 댓글