유저의 개인적인 정보를 데이터로 저장할 때 그대로 넣으면 보안의 문제가 발생한다.
그래서 암호화 기법이 존재하는데 대표적으로 해시(hash) 와 암호화(encryption) 이다.
두 기법의 대표적인 차이점은
hash는 단방향 암호화 기법이고, encryption은 양방향 암호화 기법이다.
단방향은 평문을 암호화된 문장으로 만들어주는 기능을 하고,
양방향은 평문을 암호화된 문장으로 만들고, 다시 평문으로 만드는 복호화 기능도 한다.
해시(hash)
동일한 입력 값은 동일한 해시 값을 갖는다
예를 들어, 1234 라는 비밀번호에 대해 SHA-256 해시함수를 적용하여 암호화된 문자열(fqjirfj09q3rf0 같은)을 받았다면, 같은 알고리즘에서 다시 1234 를 입력하여 적용한다면 똑같은 암호화된 문자열이 나올 것이다. 이를 통해 인증절차를 구현할 수 있다.
동일하지 않은 입력 값에도 동일한 해시값이 나올 수 있다
입력되는 값에 대해서는 제한이 없지만, 해시함수의 결과값에 대해서는 길이 제한이 있다.
그렇기 때문에 다른 입력에 대해 중복값이 나올 수 있다.
보완책
솔트(salt)
해당 값에 대해 해시 함수를 여러번 돌린다(KeyStretching).
솔트(salt)
위에서 언급했듯이 같은 입력값에 대해 같은 해시값이 나오기 때문에 어떤 해시값에 대해 입력값을 유추해낼 수 있다. 그렇기 때문에 임의의 무작위 문자열을 입력값(salt)에 합쳐서 해시 함수를 적용시키는 것이다. 그리고 솔트값을 배치하는 방법 또한 다양하다.
pbkdf2
Password-Based Key Derivation Fucntion
해시함수의 문제점을 보완하기 위해 나왔으며, 솔트를 적용하고 해시함수의 반복 횟수를 지정할 수 있다.
bcrypt
해당 기법도 salting / keystretching 개념을 사용한다.
pbkdf2 와 다른 점은 처음부터 패스워드 저장을 위해서 설계되었으며, 가장 보편적으로 활용된다고 한다.