개발일지

비밀번호 저장하는 방법, 해시함수, salt 솔트값 본문

잡다한 지식

비밀번호 저장하는 방법, 해시함수, salt 솔트값

강강강 2022. 11. 9. 23:44

어디에 접속하나 비밀번호를 입력하는 일은 이제 일상이 되어버렸다. 비밀번호 자동 저장기능도 쓰고..

그러면 민감한 정보인 비밀번호는 어떻게 저장되는지 궁금해서 해당 게시물을 작성한다.

 

비밀번호 시스템 구현. 어떻게 해야할까?

비밀번호는 보안에 아주아주 중요한 부분을 차지한다. 그래서 제대로 구현해야 한다.

 

데이터베이스에 비번을 그대로 저장하는 사람은 없겠지?

 

비밀번호를 입력하고 회원가입을 하면 해시함수를 통해 비밀번호를 무작위 값으로 둔갑시킨다.

여기서 해시함수.. 동일한 입력값에 대해서는 동일한 출력값을 갖는다. 일대일 대응이라는 소리. 

하지만 입력값이 아주 조금만 바뀌어도 출력값은 엄청 크게 바뀐다. 완전히 다른 결과가 나온다는 말이다. 엄청난 무작위성을 갖고있다.

그리고 반대로 입력한다고 해서 원래 값이 나오지 않는다. 해시함수를 통해 나온 무작위값을 다시 해시함수에 넣는다고 해서 원래 비밀번호 값이 나오지 않는다는 말.

 

근데 해시함수도 완벽하지 않다. 레인보우 테이블이라고 해서 해시함수가 변경한 값을 원래의 값과 연결한 표가 있기 때문이다.

해시함수를 통과한 값을 레인보우 테이블에서 찾아보면 원래값(비밀번호)를 알 수 있다. 레인보우 테이블이 털리면 또 큰일..

 

 

그래서!! salt 솔트라는 것이 나왔다!!!!

salt 란 아주 작은 무작위한 텍스트다. 

1234와 같은 비밀번호를 무작위 텍스트인 salt 와 합쳐서 해시함수를 통과시키는 것이다.

그러면 레인보우 테이블이 있어도 원래 비밀번호를 찾을 수 없을 것이다.