bcrypt 생성기
bcrypt는 password 저장에 여전히 가장 안전한 선택지 중 하나입니다. 의도적으로 느리고, 자체 salt를 만들며, 조정 가능한 cost parameter를 통해 하드웨어 발전에 맞춰 확장됩니다. 이 generator는 plaintext password에서 표준을 따르는 bcrypt hash를 만들어 test user를 seed하거나, 계정을 시스템 간에 옮기거나, users.password column에 저장된 기존 hash와 값을 비교할 수 있게 해줍니다.
bcrypt로 password를 hash하는 방법
-
1
plaintext password 입력
최대 72 bytes입니다. bcrypt는 그 이후를 조용히 잘라냅니다.
-
2
cost factor 선택
10은 현재 기본값, 12는 새 시스템에서 흔하고, 14는 매우 보수적인 값입니다. +1마다 hash 시간이 대략 두 배가 됩니다.
-
3
random salt 생성
cryptographic RNG에서 16 bytes salt를 뽑아 결과 hash string 안에 embedded합니다.
-
4
hash 복사
출력은 `$2b$12$...`처럼 version, cost, salt, digest를 포함하는 self-describing string입니다.
bcrypt hash의 구조
$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
| | | |
| | salt (22 Base64 chars) digest (31 Base64 chars)
| cost (2 digits, 4-31)
version (2a, 2b, 2y — all bcrypt)
전체 문자열은 60자입니다. VARCHAR(60) 또는 CHAR(60)으로 지정한 column이 표준 schema입니다.
cost factor 권장값
| Cost | hash 1회당 대략 소요 시간 (2024 CPU) | 용도 |
|---|---|---|
| 10 | ~80 ms | 예전 기본값, 아직은 허용 가능 |
| 12 | ~300 ms | 현재 권장 기준값 |
| 13 | ~600 ms | 더 높은 보안이 필요한 앱 |
| 14 | ~1.2 s | 매우 보수적; 로그인 지연이 체감됨 |
증가값 하나마다 work factor가 두 배가 됩니다. 로그인 지연 시간이 500 ms 미만이어야 한다면 10-12에 머무르세요.
Version byte: 2a vs 2b vs 2y
$2a$— 1999년 original specification. 대부분의 library가2ahash를 냅니다.$2b$— crypt_blowfish의 truncation bug를 고친 2014 revision. 새 hash에는 권장됩니다.$2y$— PHP-specific tag이며 기능적으로$2b$와 같습니다.
세 가지는 서로 검증됩니다. hash string 안의 tag만 다릅니다.
bcrypt가 보호하는 것
- Rainbow tables — hash마다 고유한 salt가 precomputed lookup을 무력화합니다.
- GPU/ASIC cracking — Blowfish key schedule은 memory-bound이고 GPU에 불리합니다. Argon2만큼 GPU-hostile하지는 않지만 brute force에는 여전히 느립니다.
- Database leaks — plaintext는 brute force 없이는 hash에서 복구할 수 없습니다.
bcrypt가 보호하지 못하는 것: 약한 password(최소 길이를 두고 breach list와 대조하세요), credential stuffing(두 번째 factor를 사용하세요), phishing.
72-byte limit
bcrypt는 password의 처음 72 bytes만 사용합니다. 더 긴 입력은 조용히 잘리며, 많은 library가 bcrypt에 넣기 전에 SHA-256으로 password를 pre-hash하라고 권장하는 이유도 이것입니다. 현대적 대안(Argon2, scrypt)에는 이런 제한이 없습니다.
자주 묻는 질문
password storage에는 cost ≥ 12라면 안전합니다. OWASP도 여전히 허용 가능한 알고리즘으로 분류합니다. 새 시스템에는 Argon2id가 선호되지만, legacy bcrypt hash 마이그레이션은 낮은 우선순위의 문제입니다.
salt가 hash마다 random으로 생성되기 때문입니다. 검증할 때는 저장된 hash에서 salt를 가져와 제출된 password를 같은 salt로 다시 hash한 뒤 비교합니다.
대부분의 library는 이를 노출하지 않으며, 그럴 만한 이유가 있습니다. 예측 가능한 salt는 목적을 무너뜨립니다. library가 생성한 salt를 쓰는 것이 안전한 경로입니다.
네. work factor는 대칭입니다. cost-14 hash를 검증하는 데는 cost-10 검증보다 16배 오래 걸립니다. 로그인 처리량을 고려해 조정하세요.
관련 도구
A1Z26 암호 인코더
A1Z26 암호(A=1, B=2, ... Z=26)로 텍스트를 인코딩하거나 숫자열을 다시 글자로 디코딩합니다. 구분자도 사용자 지정할 수 있습니다.
AES 암호화 / 복호화
OpenSSL의 AES cipher로 낮은 위험의 텍스트를 암호화하고 복호화합니다. passphrase는 SHA-256으로 해시되며 Base64 출력은 IV와 암호문을 담습니다.
Atbash 암호 인코더
A-Z를 Z-A로 매핑하는 히브리식 치환 암호 Atbash로 텍스트를 인코딩하거나 디코딩합니다. 같은 연산으로 암호화와 복호화를 모두 처리합니다.
Base85 인코더 및 디코더
Adobe Ascii85(PostScript/PDF) 또는 Z85(ZeroMQ) 방식으로 Base85를 인코딩하고 디코딩하세요. 이진 데이터에서는 Base64보다 더 작습니다.
bcrypt 해시 생성기
bcrypt 해시를 생성하거나 평문 비밀번호를 기존 bcrypt 해시와 대조해 검증합니다. 생성과 검증을 한 도구에서 나란히 제공합니다.
Base32 인코더 및 디코더
RFC 4648 알파벳으로 Base32 문자열을 인코딩하고 디코딩하세요. TOTP 시크릿, 대소문자를 구분하지 않는 토큰, 사람이 입력하는 식별자에 유용합니다.