비밀번호 인증 시 salt 개념

Salt란?

salt는 소금이라는 뜻으로, 비밀번호에 소금을 뿌려서 변형을 준다는 의미가 있다. 보안 강화를 위해 사용된다.

salt는 비밀번호 해싱 과정에 추가되는 임의의 값이다. 사용자의 원래 비밀번호에 이 값을 추가한 후에 해싱 함수를 적용한다.

Salt 사용 이유

기본적으로 비밀번호는 평문으로 저장되지 않고 해시되어 저장된다. 예를 들어, sha256 알고리즘에서는 “1234”를 03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4 로 해시한다. 이 값을 db에 저장해 놓기 때문에 해커가 db 데이터를 탈취해도 사용자 비밀번호를 알 수가 없는 것이다.

문제는 이 해시 값은 항상 똑같다는 것이다. 가령 1234의 해시값을 알고 있으면 db에서 그 해시값을 확인하고 “아 비밀번호가 1234구나”하고 알 수 있다는 의미다. 그래서 흔한 비밀번호는 역추적이 가능하다.

이때 salt를 이용하면 역추적을 막을 수 있다. 1234에 별도의 salt 값을 추가해서 해시하기 때문이다. 해커가 db 데이터를 탈취했더라도 원 비밀번호를 역추적 할 수가 없다.

Salt 적용 과정

적용 방법은 여러 케이스가 있겠으나, 기본적인 개념은 사용자 별로 고유한 salt 값을 생성하고 사용자 비밀번호에 salt 값을 추가하는 것이다. 예를 들어 비밀번호가 “1234”이고 salt가 “abc123” 이면 최종적으로 “abc1231234″를 해싱하는 식이다.

비밀번호를 인증할 때도 db에 저장된 salt와 해시값을 가져오고 사용자가 입력한 비밀번호에 salt를 적용해서 비교한다.

salt는 값을 숨기는 게 핵심이 아니라 사용자 별로 다른 값을 사용하는 게 핵심이다. salt 값 역시 db에 저장되기 때문에 탈취되면 뚫리지 않을까? 생각할 수도 있지만 사용자마다 고유한 salt 를 사용하면 해커는 비밀번호를 추적할 수 없다.

댓글 남기기