기능
bcrypt는 일부러 느리게 설계된 비밀번호 해시 함수입니다. MD5나 SHA-256은 초당 수십억 번 계산할 수 있지만, bcrypt는 비용을 조절할 수 있어 데이터베이스를 훔친 공격자가 추측할 때마다 큰 비용을 치르게 합니다. Argon2, scrypt와 함께 지금도 비밀번호 저장에 가장 널리 쓰이는 방식 중 하나입니다.
이 도구는 두 가지를 합니다:
- 해시 생성: 선택한 비용과 버전 접두사로 비밀번호를 bcrypt 해시로 바꿉니다.
- 검증: 데이터베이스나 프레임워크 시드 파일에 있는 것 같은 기존 bcrypt 해시와 비밀번호가 일치하는지 확인합니다.
사용 방법
- 비밀번호를 입력하거나 예시를 클릭합니다.
- 해시 생성 모드에서는 비용과 버전을 고릅니다. 해시가 바로 나타나며, 새 솔트를 누르면 다른 해시를 얻습니다.
- 검증 모드에서는 확인할 bcrypt 해시를 붙여 넣습니다. 비밀번호가 일치하는지 결과가 표시됩니다.
bcrypt 해시 읽는 법
$2b$10$./3kakECWB0QfIgYzIqciuv449HNnwGbgExtJQQwQ1MofonthOdoK 같은 해시는 네 부분으로 이루어집니다: 버전 2b, 비용 10(2¹⁰번의 키 설정 라운드), 22자 솔트, 31자 체크섬입니다. 나중에 서버가 비밀번호를 검증하는 데 필요한 모든 정보가 이 문자열 하나에 들어 있으므로 해시만 저장하면 됩니다.
알아 둘 제한
bcrypt는 비밀번호의 앞 72바이트만 읽습니다. 그보다 긴 비밀번호나 비ASCII 문자(UTF-8에서 한 글자에 2~4바이트)가 많은 비밀번호는 조용히 잘립니다. 이런 경우 도구가 경고합니다. 아주 긴 암호 문구를 받아야 한다면 먼저 해시하거나 Argon2id를 고려하세요.
자주 묻는 질문
› 같은 비밀번호인데 왜 매번 다른 해시가 나오나요?
해시마다 새로운 16바이트 무작위 솔트를 사용하며, 솔트는 해시 문자열 안에 저장됩니다. 같은 비밀번호가 같은 해시가 되지 않도록 한 의도된 동작입니다. 비밀번호를 확인할 때는 해시 문자열을 비교하지 말고 검증을 사용하세요.
› 비용은 얼마로 해야 하나요?
로그인마다 서버가 감당할 수 있는 가장 높은 비용을 고르세요. 요즘은 보통 10~12입니다. 1씩 올릴 때마다 작업량이 두 배가 됩니다. 운영 하드웨어에서 측정해 해시 한 번에 100~300ms 정도를 목표로 하는 경우가 많습니다.
› $2a$, $2b$, $2y$의 차이는 무엇인가요?
알고리즘은 같습니다. $2b$는 OpenBSD의 현재 접두사, $2y$는 PHP password_hash가 쓰는 접두사, $2a$는 예전 접두사입니다. 대부분의 라이브러리는 세 가지를 모두 받아들이므로 시스템이 요구하는 것을 고르면 됩니다.
› 비밀번호가 어딘가로 전송되나요?
아니요. 해시 생성과 검증은 브라우저에서 실행됩니다. 비밀번호와 확인할 해시는 이 페이지의 메모리에만 있으며 저장되거나 공유 링크에 포함되지 않습니다.