BCrypt 해시 비교 도구|비밀번호와 해시 일치 여부 무료로 즉시 확인
입력한 비밀번호가 BCrypt 해시와 일치하는지 무료로 즉시 확인하세요. PHP의 password_verify()와 동일한 방식으로 동작하며 로그인 문제 디버깅에 유용하고 $2a$/$2b$ 형식을 모두 지원합니다.
| 해시값 | |
|---|---|
| 문자열 |
일치
불일치
BCrypt 대조란
입력한 평문 비밀번호와 기존의 BCrypt 해시 값이 같은 원래 문자열에서 생성된 것인지를 검증하는 도구입니다. PHP의 password_verify() 함수와 같은 구조로 동작하므로, 로그인 처리의 구현 확인이나 디버그에 쓸 수 있습니다.
BCrypt 해시는 솔트를 안에 품고 있기 때문에, 같은 비밀번호에서 생성해도 매번 다른 문자열이 됩니다. 단순한 문자열 비교로는 대조할 수 없으므로 전용 알고리즘으로 솔트를 꺼낸 뒤 비교해야 하며, 이 도구가 그 처리를 대신합니다.
BCrypt 대조 사용 방법
- 문자열을 입력합니다 대조하고 싶은 평문 비밀번호를 입력란에 입력합니다.
- 해시 값을 입력합니다 $2a$ 또는 $2b$로 시작하는 BCrypt 해시 값을 붙여 넣습니다.
- 검증 버튼을 누릅니다 일치·불일치의 결과가 즉시 표시됩니다.
더 잘 활용하기 위한 팁
- BCrypt는 솔트를 내포하기 때문에, 해시값이 매번 달라도 같은 원래 문자열에서 생성된 것이라면 일치로 판정됩니다.
- PHP의
password_verify($password, $hash)와 같은 방식으로 검증합니다. - 데이터베이스에서 가져온 해시값과 입력 비밀번호를 대조할 때는 일반 문자열 비교(
==)가 아닌 전용 검증 함수를 사용하여 타이밍 공격을 방지하세요. $2a$로 시작하는 해시값도 BCrypt로 검증할 수 있습니다.
BCrypt 대조의 활용 상황
로그인 처리의 디버그
데이터베이스에 저장된 해시 값과 상정하는 비밀번호가 일치하는지를, 앱의 코드를 거치지 않고 직접 확인할 수 있습니다.
비밀번호 재설정 후의 동작 확인
새 비밀번호로 생성한 해시 값이 의도한 평문과 일치하는지를 테스트할 수 있습니다.
마이그레이션 시의 해시 검증
다른 시스템에서 이행한 BCrypt 해시 값이 올바르게 기능하는지를 사전에 확인할 수 있습니다.
BCrypt에 관한 용어집
- 솔트(salt)
- 해시 생성 시에 덧붙이는 무작위 문자열입니다. 같은 비밀번호라도 매번 다른 해시 값이 생성되는 구조를 떠받치고 있습니다.
- password_verify()
- PHP의 표준 함수로, 평문 비밀번호와 해시 값을 안전하게 비교하기 위해 사용합니다. 내부에서 솔트의 추출을 자동으로 처리합니다.
- 타이밍 공격
- 처리 시간의 미세한 차이로부터 비밀 정보를 추측하는 공격 기법입니다. 상수 시간 비교를 하는 전용 함수를 쓰면 막을 수 있습니다.
- $2a$ / $2b$
- BCrypt 해시의 버전을 나타내는 접두사입니다. $2b$는 오래된 구현의 버그를 수정한 버전으로, 현재 권장되고 있습니다.
자주 묻는 질문
$2b$는 구 구현의 버그를 수정한 버전으로, 현재는 $2b$ 사용이 권장됩니다.
여담 ― 인증의 이면 ― 로그인의 "그 0.몇 초"의 정체
웹 서비스에서 로그인 버튼을 누르고 결과가 돌아올 때까지의 0.몇 초. 사실 이 시간의 일부는 BCrypt가 비밀번호의 해시 계산을 하는 시간입니다. 보안을 위해 "의도적으로" 시간을 들이고 있는 것입니다.
타이밍 공격(Timing Attack)이란 처리 시간의 미묘한 차이를 측정하여 비밀 정보를 추측하는 사이드 채널 공격의 일종입니다. 일반 문자열 비교(==)로 비밀번호를 검증하면 문자가 일치하는 위치에 따라 비교 시간이 약간 달라집니다. BCrypt의 검증 함수는 상수 시간으로 동작하도록 설계되어 있어 이 공격에 대해 안전합니다.
실제 웹 앱에서는 사용자가 존재하지 않는 경우에도 "존재하지만 비밀번호가 틀렸다"와 동일한 정도의 시간을 들여 응답을 반환하는 것이 권장됩니다. "사용자가 존재하지 않습니다"와 "비밀번호가 틀렸습니다"를 구별할 수 있으면 공격자에게 유효한 사용자 이름을 특정할 단서가 될 수 있기 때문입니다.