Hashing, Salt, Bcrypt. 2) Salt

woo94·2023년 11월 28일
0

security

목록 보기
2/3

Without Salt

1편에서는 salt가 등장하게 된 배경에 대해서 소개했다. 여기에 하나의 사례를 더 추가해보려고 한다.
Database를 공격해서 hash value들을 알게 된 공격자가, 두 사용자의 hash value가 일치하는 것을 발견한 상황이다. 이런 경우에는 두 사용자의 input 값이 동일하다는 사실로 하나의 비밀번호를 사용하여 두 사용자의 계정을 탈취할 수 있게 된다.

usernamehash
...
aliceb1af56bfd9742434cb8b29279b74fd1c8e9cf979b59a721bbf9bb1ff264ab314
bobb1af56bfd9742434cb8b29279b74fd1c8e9cf979b59a721bbf9bb1ff264ab314
...

위와 같이 hash value가 나온다면, alice와 bob은 같은 비밀번호를 가지고 있을 것으로 기대 할 수 있는것이다.

두 사용자가 비록 같은 password를 사용한다 하더라도 이것을 unique한 input 값으로 만들어 줄 수는 없을까?

Salt

Hash function은 deterministic 하다(같은 input 값이 들어오면 언제나 같은 digest 값이 나온다)고 이전에 소개했었다. 그렇다면 같은 password를 받아서 hash function의 input으로 넣었다면 같은 값의 digest를 만들어야 한다.

따라서 같은 password를 받았어도 다른 digest를 만들 수 있는 방법은 오직 hash function의 input을 다르게 만들어주는 방법밖에 없다.

Salt는 암호학적으로 안전한 함수에 의해 만들어지는 값으로 hash function의 input에 더해져서 모든 input에 대해 unique hash를 만들어 낸다. Salt는 hash function을 non-deterministic하게 보이도록 만들어주고 이것은 같은 비밀번호의 사용으로 인해 같은 hash 값이 나오는 것을 방지한다.

하지만 unique salt를 사용하는 것이 중요하다. Salt를 사용자가 입력한 비밀번호의 뒤에 붙이는 경우를 생각하자. Salt의 값을 my-salt 라는 고정된 값을 사용한다고 보면 이것은 그저 조금 더 긴 길이의 비밀번호를 만들 뿐 unique한 input 값을 만들어내지는 못한다. Alice와 Bob이 똑같이 my-pa$$word 라는 값을 비밀번호로 사용하는 경우라면 Hash function으로 들어가는 input 값은 my--pa$$wordmysalt 로 둘이 동일하기 때문이다.

profile
SwiftUI, node.js와 지독하게 엮인 사이입니다.

0개의 댓글

관련 채용 정보