: 암호화된 비밀번호를 안전하게 저장하고 검증하기 위해 설계된 비밀번호 해싱 알고리즘 및 이를 구현한 라이브러리
⇒ 즉, 비번 → 해쉬($2b$10$R9h/cIPz0gi.URNNX3kh2O.PST9/PgBkqquzi.Ss7KIUgO2t0jWMUW 형태)로 만들어줌
특징
- Blowfish 기반 설계 : Blowfish 암호 알고리즘
- Salt 사용 ⇒ 고유한 랜덤 데이터인 salt를 생성 후 비번과 결합
: 같은 비번이라도 다른 해시 생성으로 레인보우 테이블 공격 방어
- 적응형 알고리즘 ⇒ 인자로 연산 횟수 지정 가능
- 느린 연산 속도 ⇒ 의도적으로 느리게 설계, 브루트 포스 공격에 대응
npm i bcrypt
npm i —save-dev @types/bcrypt
사용 예시
- 해싱 (비번 → 해쉬)
import bcrypt from "bcrypt" // 비동기 방식으로 해싱 await bcrypt.hash(비번, 연산횟수, (err, hash) => { if (err) throw err; console.log('Hashed password:', hash); // 이 hash 값을 데이터베이스에 저장 });
- 검증 비교 (해쉬 → 비번)
(비교만 가능할 뿐, 해쉬 → 비번으로 해독 불가)
// 비동기 방식으로 비교 await bcrypt.compare(비번, 해쉬, (err, result) => { if (err) throw err; if (result) { console.log('Passwords match!'); } else { console.log('Passwords do not match.'); } });
FYI
- 레인보우 테이블 공격
: 해쉬 ↔ 비번 매칭 테이블로 역추적(해쉬 → 비번)하는 공격 방식
- 브루트 포스 공격
: 가능한 모든 조합을 하나씩 대입하여 비번 찾는 공격 방식