bcrypt의 작동 방식
- salt가 매번 다르게 생성됨
bcrypt는 비밀번호를 hashing할 때마다 무작위로 새로운 salt를 생성한다. 그래서 같은 비밀번호라도 hashing할 때마다 다른 결과가 나온다. - 해시 값에 솔트 포함
bcrypt로 만든 hash 값에는 salt도 함께 저장된다. 이 덕분에 salt를 따로 보관할 필요가 없다. 검증할 때는 이 hash 값에서 salt를 추출해 사용한다.
비밀번호가 같아도 다른 hash 값
같은 비밀번호라도 salt가 달라지면 완전히 다른 hash 값이 나온다. 예를 들어 "password123"이라는 비밀번호를 두 번 해싱하면,
- 첫 번째 해시: $2b$12$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 두 번째 해시: $2b$12$yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
서로 다른 hash 값이 나오기 때문에, 비밀번호가 같은지 hash 값만 보고 알아낼 수 없다.
salt의 역할
salt는 비밀번호가 같아도 다른 hash 값이 나오게 만들어 준다. 덕분에 레인보우 테이블 같은 공격을 막을 수 있다.
레인보우 테이블은 미리 계산된 해시 값들을 모아놓은 테이블로, 이를 통해 해시 값을 역추적할 수 있는 공격 기법이다. 하지만 솔트를 사용하면 각 비밀번호에 임의의 값이 추가되므로, 레인보우 테이블로 공격하는 것이 사실상 불가능해진다.
728x90
댓글