bcrypt의 값은 4부분으로 나눠진다 test : $2y$10$fW1wpXOHhb44YCs4CSd4hemmIHM7/Y2wg5XXlu7HttJQ4ydyQFhBi
같은 값이 매 실행 마다 달라진다. 같은 비밀번호라도 해시값이 달라지게 된다. 이 때문에 공격자는 해시값 데이터베이스를 만들 수 없다
비밀번호 와 같은 암호를 저장시 현재까지 사용중인 가장 강력한 해시 메커니즘 중 하나이다.
C, C++, C#, Elixir, Go, Java, 자바스크립트, 펄, PHP, 파이썬, Ruby 등의 언어용으로 bcrypt 구현체가 존재한다.
시간이 지남에 따라 속도 저하를 위해 반복 횟수가 증가가 수반될 수 있으므로 연산 파워의 증가에도 브루트 포스 검색 공격에 대한 저항을 유지하게 된다.
레인보 테이블 공격 방지를 위해 솔트를 통합한 bcrypt는 적응형 함수의 하나이다.
bcypt는 블로피시 암호에 기반을 둔 암호화 해시 함수로서 Niels Provos와 David Mazières가 설계하였으며 1999년 USENIX에서 발표되었다.
(1) Algorithm : 알고리즘 식별자. '$2a$'는bcrypt를 뜻한다. (2) Cost factor : 키 스트레칭한 횟수. 2^n으로 위의 경우 2^10=1024이다. (3) Salt : 128비트 솔트, 22자 base64로 인코딩. (4) Hash : salting과 키 스트레칭 후 해시 값