bcrypt 생성기

bcrypt는 password 저장에 여전히 가장 안전한 선택지 중 하나입니다. 의도적으로 느리고, 자체 salt를 만들며, 조정 가능한 cost parameter를 통해 하드웨어 발전에 맞춰 확장됩니다. 이 generator는 plaintext password에서 표준을 따르는 bcrypt hash를 만들어 test user를 seed하거나, 계정을 시스템 간에 옮기거나, users.password column에 저장된 기존 hash와 값을 비교할 수 있게 해줍니다.

bcrypt로 password를 hash하는 방법

  1. 1

    plaintext password 입력

    최대 72 bytes입니다. bcrypt는 그 이후를 조용히 잘라냅니다.

  2. 2

    cost factor 선택

    10은 현재 기본값, 12는 새 시스템에서 흔하고, 14는 매우 보수적인 값입니다. +1마다 hash 시간이 대략 두 배가 됩니다.

  3. 3

    random salt 생성

    cryptographic RNG에서 16 bytes salt를 뽑아 결과 hash string 안에 embedded합니다.

  4. 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가 2a hash를 냅니다.
  • $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배 오래 걸립니다. 로그인 처리량을 고려해 조정하세요.

관련 도구