Coda Hale의 기사 "암호를 안전하게 저장하는 방법" 은 다음과 같이 주장합니다.
bcrypt에는 레인보우 테이블 공격을 방지하기 위해 소금이 내장되어 있습니다.
그는 이 논문을 인용하며 , 이는 OpenBSD의 구현에서 bcrypt
다음 과 같이 말합니다 :
OpenBSD는 arcfour (arc4random (3)) 키 스트림에서 128 비트 bcrypt salt를 생성하며 커널은 장치 타이밍에서 수집 한 임의의 데이터를 시드합니다.
이것이 어떻게 작동하는지 이해하지 못합니다. 소금에 대한 나의 개념에서 :
- 저장된 비밀번호마다 달라야하므로 별도의 레인보우 테이블을 생성해야합니다.
- 반복 가능하도록 어딘가에 저장해야합니다. 사용자가 로그인을 시도 할 때 비밀번호를 입력하고, 비밀번호를 처음 저장할 때와 동일한 소금 및 해시 절차를 반복하고 비교합니다.
bcrypt와 함께 Devise (Rails 로그인 관리자)를 사용할 때 데이터베이스에 솔트 열이 없으므로 혼란 스럽습니다. 소금이 무작위이며 어디에도 저장되지 않은 경우 어떻게 해싱 프로세스를 안정적으로 반복 할 수 있습니까?
간단히 말해서, bcrypt는 어떻게 내장 소금을 가질 수 있습니까?