[Hash] 해쉬

해쉬 함수

해쉬 함수는 임의의 입력값을 고정된 길이의 해쉬 값으로 변환하는 함수다. 해쉬 함수의 특징은 다음과 같다.

  1. 입력값이 동일하면 해쉬 값도 동일하다.
  2. 입력값의 길이와 상관없이 해쉬 값의 길이는 항상 동일하다.
  3. 해쉬 충돌의 확률은 낮다.

암호학적으로 안전한 해쉬 함수는 다음 조건을 만족해야 한다.

  • 제1 역상공격(해쉬 값으로 입력값을 복원하는 방법)이 불가능해야 한다.
  • 제2 역상 공격(서로 다른 입력값으로 같거나 비슷한 해쉬 값을 찾는방법)이 불가능해야 한다.

MD5

MD5는 오래된 해쉬 알고리즘이다. 현재는 해쉬 충돌을 쉽게 만들어낼 수 있으며 그렇기 때문에 잘 사용하지 않는다.

SHA-1

SHA-1은 최대 2^64비트의 데이터를 통해 고정된 160비트의 해쉬 값을 생성한다. 구글에서 SHA-1의 해쉬 충돌 방법을 발견했기 때문에 안전하지 않다.

https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

SHA-2

SHA-2는 SHA-224, SHA-256, SHA-384, SHA-512를 포함한다. 기반이 SHA-1으로 되어있기 때문에 SHA-2도 조만간 안전해지지 않을꺼 같다.

salt value

해쉬 함수를 많이 사용하는 곳이 비밀번호의 암호화이다. 동일성 검증만 하면 되기 때문에 비밀번호를 해쉬 값으로 만든 후 이를 저장하는데 salt value를 붙혀서 해싱한다. salt value를 붙이는 이유는 Rainbow Table이 존재하기 때문에 DB가 탈취된다면 보안상 취약해지기 때문이다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/08/23/Etc/hash/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.