bcrypt 해시 생성기

해시 생성

값이 높을수록 느리지만 더 안전합니다. 12가 기본값으로 좋습니다.

오래된 백업에서 bcrypt 해시와 평문 비밀번호를 발견했고, 둘이 맞는지 확인해야 할 때가 있습니다. 또는 비밀번호가 있고 특정 cost(비용 계수)에서 어떤 해시가 나오는지 보고 싶을 수도 있습니다. 이 도구는 둘 다 처리합니다. 비밀번호를 입력하면 새 해시를 만들고, 해시와 후보 비밀번호를 붙여 넣으면 운영 환경의 로그인 검사와 동일한 상수 시간 비교로 검증 성공 여부를 알려줍니다.

bcrypt 생성 또는 검증

  1. 1

    모드 선택

    비밀번호에서 새 해시를 생성하거나, 기존 `$2a$` / `$2b$` / `$2y$` 해시에 대해 비밀번호를 검증합니다.

  2. 2

    생성 모드: 평문과 cost 입력

    cost는 4-14이며 10-12가 일반적입니다. 각 해시마다 16바이트 무작위 솔트(salt)가 생성됩니다.

  3. 3

    검증 모드: 해시와 평문 붙여넣기

    도구가 해시에서 솔트와 cost를 추출하고 같은 매개변수로 평문을 다시 해시합니다.

  4. 4

    결과 확인

    생성 모드는 60자 해시를 복사하고, 검증 모드는 초록색 일치 또는 빨간색 불일치를 반환합니다.

검증 모드의 내부 동작

다음과 같은 저장된 해시가 있다고 하면:

$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6

검증기는:

  1. 버전(2b), cost(12), 솔트(cost 뒤 첫 22자), 다이제스트(마지막 31자)를 파싱합니다.
  2. 추출한 솔트와 cost로 후보 평문에 bcrypt를 다시 실행합니다.
  3. 상수 시간 비교를 사용해 결과 다이제스트를 원본과 비교합니다.

비교가 성공하면 true, 차이가 있으면 false를 반환합니다.

상수 시간 비교

두 문자열을 단순한 ==로 비교하면 바이트 하나가 달라지는 순간 반환됩니다. 표본이 충분하면 해시를 한 자리씩 누설할 수 있는 타이밍 부채널입니다. 운영 환경의 비밀번호 검사(그리고 이 도구)는 항상 모든 바이트를 검사하는 상수 시간 비교를 사용하므로, 앞쪽 바이트가 몇 개 일치하는지에 따라 판정 시간이 달라지지 않습니다.

흔한 진단 사례

증상 유력한 원인
비밀번호가 확실한데도 검증이 실패함 입력 끝에 공백이나 BOM이 있습니다. 둘 다 제거하세요.
검증이 실패하고 버전이 2y 일부 라이브러리가 2y를 싫어합니다. 유효하고 호환되지만, 앞으로는 2b로 다시 해시하세요.
해시가 너무 짧음 / 형식이 잘못됨 bcrypt 해시가 아닙니다. MD5는 16진수 32자, SHA-1은 40자, bcrypt는 $ 구분자가 있는 60자입니다.
cost 불일치 경고 저장된 cost가 정책 최솟값보다 낮습니다. 다음 로그인 성공 시 다시 해시하세요.

로그인 시 다시 해시하기

권장 방법: 사용자가 성공적으로 로그인하면 저장된 해시의 cost가 현재 정책보다 낮은지 확인합니다. 낮다면 비밀번호를 새 cost로 다시 해시하고 데이터베이스를 업데이트합니다. 몇 달 안에 사용자에게 비밀번호 변경을 요구하지 않고도 전체 사용자층을 업그레이드할 수 있습니다.

이 도구가 하지 않는 일

  • 일괄 검증 — 한 번에 해시 하나를 처리하도록 만들어졌습니다.
  • 크래킹 또는 무차별 대입 — 사전 공격이나 레인보우 테이블 공격은 의도적으로 범위 밖입니다.
  • 평문 복원 — bcrypt는 단방향입니다. 비밀번호를 잊었다면 재설정만이 유일한 방법입니다.

자주 묻는 질문

아니요. 해싱과 검증은 브라우저에서 일어납니다. 평문도 해시도 페이지 밖으로 나가지 않습니다.

솔트가 해시마다 무작위로 생성되기 때문입니다. 바로 그 점이 핵심입니다. 같은 비밀번호를 가진 두 사용자도 서로 다른 해시를 갖게 되어 레인보우 테이블을 무력화합니다.

네. 그것이 검증 모드가 하는 일입니다. 가지고 있는 해시와 후보 비밀번호를 붙여 넣으면 도구가 일치 여부를 확인해 줍니다.

네. 모든 현대 변형은 상호 운용됩니다. 다이제스트는 버전 간 호환되며 태그만 다릅니다. 2000년대 시스템에서 나온 일부 오래된 $2$ 해시는 구형 형식을 명시적으로 지원하는 라이브러리가 필요할 수 있습니다.

관련 도구