Bcrypt는 레인보우 테이블 공격을 방지하기 위해 솔팅과 키 스트레칭을 적용
$2b$12$76taFAFPE9ydE0ZsuWkIZexWVjLBbTTHWc509/OLI5nM9d5r3fkRG
\\/ \\/ \\____________________/\\_____________________________/
Alg Cost Salt Hash
2b
: 해시 알고리즘 식별자12
: Cost Factor로 Key Stretching의 수 (2의 12승번)76taFAFPE9ydE0ZsuWkIZe
: 16Byte 크기의 Salt, Base64로 인코딩된 22개의 문자xWVjLBbTTHWc509/OLI5nM9d5r3fkRG
: 24Byte의 해시 값, Base64로 인코딩된 31개의 문자Bcrypt는 단방향 해시 알고리즘이다. 따라서 복호화가 불가능하다. Bcrypt의 검증은 암호화된 값이 가지고 있는 알고리즘, Cost Factor, Salt를 이용한다.
<aside> 📌 암호화 방법
양방향 암호화 알고리즘 + 암호화 키를 이용해 비밀번호 암호화 (암호화 ↔ 복호화 양방향으로 가능)
→ 암호화키가 노출되면 알고리즘은 대부분 오픈되어있기 때문에 위험도가 높음
단반향 암호화 SHA256 등으로 해시로 암호화해서 저장 (복호화 불가능. 단반향 암호화)
→ 해시값끼리 비교. 레인보우 테이블(대부분의 유저들은 비슷한 암호를 사용)을 만들어서 비밀번호 알아냄
→ 보완하기 위해 나온 방법 : 랜덤 데이터(salt) + 원본 비밀번호를 해시로 암호화해서 저장
</aside>