PBKDF2 키 유도
브라우저에서 PBKDF2-HMAC으로 비밀번호에서 키를 유도합니다. 해시와 반복 횟수, 출력 길이를 고르고 결과를 16진수나 Base64로 읽습니다.
사용법
- 비밀번호와 솔트를 넣습니다. 솔트가 텍스트가 아니라 바이트로 저장되어 있다면 16진수 체크 상자를 켜십시오.
- 해시와 반복 횟수를 고르거나 프리셋을 쓰십시오. 대조용으로는 RFC 벡터, 실제 사용에는 OWASP 수치가 있습니다.
- 출력 길이를 비트로 정하고 파생 키를 16진수나 Base64로 복사합니다.
자세한 설명
펼치기접기
PBKDF2는 비밀번호에 HMAC을 수천 번 이상 돌려서 키로 바꿉니다. 목적은 비밀 유지가 아닙니다. 알고리즘도 공개되어 있고 솔트도 공개되어 있습니다. 목적은 비용입니다. 비밀번호를 추측하는 공격자는 추측마다 같은 반복 횟수를 지불해야 합니다. 비밀번호와 솔트, 반복 횟수, 해시, 그리고 원하는 출력 비트 수를 정하면 브라우저 자체의 WebCrypto 구현으로 유도가 실행됩니다. 어디로도 전송되지 않습니다.
기본값은 RFC 6070의 세 번째 테스트 벡터를 재현합니다. password와 salt에 HMAC-SHA1을 4096번 돌리면 4b007901b765489abead49d926f721d065a429c1이 나옵니다. 이 벡터가 이 도구를 디버깅에 쓸모 있게 만드는 이유입니다. 서버와 이 페이지가 키에 대해 다른 답을 낸다면 둘 중 하나가 비밀번호나 솔트를 다르게 부호화하고 있는 것이고, 공통 기준점이 어느 쪽인지를 알려 줍니다. 솔트는 텍스트로도 16진수로도 넣을 수 있습니다. 데이터베이스에서 꺼낸 솔트는 출력 가능한 문자인 경우가 거의 없기 때문입니다.
반복 횟수는 계속 움직이는 목표여서, 10만 회 미만이면 칸이 경고를 띄웁니다. OWASP의 현재 비밀번호 저장 권고는 HMAC-SHA256에 60만 회, HMAC-SHA512에 21만 회입니다. 차이는 64비트 하드웨어에서 SHA-512가 한 라운드에 더 많은 일을 한다는 데 있습니다. 프리셋을 둔 이유는 이 숫자가 십 년 전 강의에서 물려받은 값이 아니라 선택이 되게 하려는 것입니다.
출력 길이에 대해 알아 둘 점이 하나 있습니다. PBKDF2는 해시 크기만큼의 블록을 하나씩 만들어 키를 이어 붙이므로, 해시가 내놓는 비트보다 많이 요구하면 블록마다 사슬 전체를 다시 돌립니다. HMAC-SHA256에서 512비트를 요구하면 256비트를 요구할 때의 정확히 두 배 비용이 들지만 더 강해지는 것은 없습니다. 안전성은 여전히 같은 256비트 함수에 달려 있기 때문입니다. 그런 일이 생기면 도구가 알려 줍니다.
마지막으로 솔직한 유의사항. PBKDF2에는 메모리 경도가 없어서 GPU와 전용 하드웨어에서 값싸게 병렬화됩니다. 규격이나 플랫폼이 요구하는 자리에서는 여전히 올바른 선택이지만, 새로 비밀번호를 저장한다면 Argon2id나 scrypt가 더 잘 방어된 선택입니다.
자주 묻는 질문
같은 입력인데 서버가 다른 키를 내놓는 이유는?
알고리즘 차이보다 부호화 차이가 거의 항상 원인입니다. 이 페이지는 비밀번호를 UTF-8로 부호화하고, 16진수 상자를 켜지 않으면 솔트도 그렇게 합니다. 솔트를 원시 바이트로 저장하고 16진수로 건네주는 서버, 또는 비밀번호의 Base64 형태를 해시하는 서버는 다른 답을 냅니다. 먼저 양쪽에서 RFC 6070 벡터를 재현해 보십시오. 그것이 맞으면 알고리즘은 문제가 없고 차이는 무엇을 먹이고 있는지에 있습니다.
솔트는 얼마나 길어야 합니까?
암호학적 난수 생성기가 낸 값으로 최소 16바이트이고, 비밀번호마다 달라야 합니다. 솔트는 비밀이 아닙니다. 해시 옆에 저장됩니다. 그 역할은 같은 비밀번호를 쓰는 두 사용자가 다른 키를 받게 해서, 미리 계산한 표 하나로 모두를 동시에 공격할 수 없게 하는 것입니다. 공유된 솔트나 고정된 솔트는 그 이점을 완전히 내줍니다.
PBKDF2는 아직 써도 됩니까?
새로 비밀번호를 저장한다면 첫 번째 권고는 Argon2id, 두 번째는 scrypt입니다. 둘 다 많은 메모리를 요구하도록 설계되어서, PBKDF2를 값싸게 공격하게 만드는 병렬 하드웨어에 저항합니다. PBKDF2는 요구되는 자리에서는 여전히 온당합니다. FIPS 검증 환경, WPA2, 여러 파일 형식이 그렇습니다. 그리고 반복 횟수가 충분히 높다면 맨 해시를 저장하는 것보다 훨씬 낫습니다.
출력을 길게 하면 키가 더 강해집니까?
바탕이 된 해시를 넘어서지는 않습니다. PBKDF2는 해시 크기의 블록을 만들어 이어 붙이므로 HMAC-SHA256에서 512비트 출력은 블록 두 개입니다. 계산은 두 배인데 키의 강도는 여전히 SHA-256에 묶여 있습니다. 쓰는 암호가 요구하는 길이를 요청하고 — AES-256이면 256비트 — 남는 예산은 반복 횟수에 넣으십시오.
반복 횟수를 높이면 페이지가 잠깐 멈추는 이유는?
WebCrypto 유도는 비동기이지만 중간에 끊을 수 없기 때문입니다. 한번 시작하면 브라우저는 모든 라운드를 끝낸 뒤에야 돌려줍니다. OWASP 수준의 횟수라면 휴대전화에서 눈에 띄게 멈추는데, 그 체감 자체가 쓸모 있습니다. 공격자가 추측 한 번에 지불하는 비용이 바로 그것입니다.
관련 도구
HKDF 키 유도 (RFC 5869, 추출·확장)
HKDF로 키를 유도하고 두 단계를 모두 봅니다. 추출 단계의 PRK, 확장 단계의 T 블록, hex와 base64 OKM. RFC 5869 케이스 내장.
개발
scrypt 키 유도 (RFC 7914)
브라우저에서 scrypt로 비밀번호로부터 키를 유도하고, 메모리 비용과 PBKDF2·ROMix 중간 단계를 함께 보여 줍니다.
개발
Argon2 해시 생성·검증기 (Argon2id)
Argon2id·Argon2i·Argon2d로 비밀번호를 해시해 $argon2id$ PHC 문자열을 만들거나, 저장된 해시와 비밀번호가 맞는지 확인합니다. 브라우저에서만 실행됩니다.
개발
DNSSEC 계산기 — DS 레코드와 NSEC3 해시
DNSKEY를 등록기관이 요구하는 DS 레코드로 바꿉니다. 키 태그와 세 가지 다이제스트 종류 전부, 또는 NSEC3 방식으로 이름을 해시합니다.
네트워크
HMAC 생성기 (SHA-1·256·384·512)
Web Crypto로 HMAC 서명 계산 — 웹훅 페이로드 서명, API 요청 검증, hex 또는 base64.
개발
PKCS#12 키스토어 분석기
.p12/.pfx를 브라우저에서 엽니다. 비밀번호 없이 MAC과 암호 알고리즘을, 입력 후에는 인증서 체인·개인 키·키 일치 여부를 보여줍니다.
개발