해쉬 함수
해쉬 함수는 임의의 입력값을 고정된 길이의 해쉬 값으로 변환하는 함수다. 해쉬 함수의 특징은 다음과 같다.
- 입력값이 동일하면 해쉬 값도 동일하다.
- 입력값의 길이와 상관없이 해쉬 값의 길이는 항상 동일하다.
- 해쉬 충돌의 확률은 낮다.
암호학적으로 안전한 해쉬 함수는 다음 조건을 만족해야 한다.
- 제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가 탈취된다면 보안상 취약해지기 때문이다.