암호화 · 키 관리
비밀번호 전용 KDF와 파라미터 재해시 판단을 공통 모듈로 제공합니다.
규격 재현과 공격 거부를 이 페이지에서 직접 실행해 확인할 수 있습니다.
비밀번호는 복호화 가능한 형태로 저장하지 않고 공격 비용을 높이는 전용 KDF로 검증값을 만듭니다. 사용자마다 고유한 salt를 사용하고 비용 파라미터를 결과에 함께 기록하면 보안 기준이 바뀔 때 성공적인 로그인 시점에 점진적으로 재해시할 수 있습니다.
메모리와 계산 비용을 조절할 수 있는 알고리즘으로 대량 추측 공격의 단가를 높입니다.
각 비밀번호에 무작위 salt를 사용해 같은 비밀번호도 서로 다른 검증값을 갖게 합니다.
저장된 알고리즘과 비용이 현재 정책보다 약한지 판정해 자연스럽게 보안 수준을 올립니다.
아래 증명은 설명이 아니라 실제 실행입니다. 버튼을 누르면 이 서버에서 지금 계산합니다.
저장 형식이 아니라 알고리즘 자체를 규격에 맞춘다 — 규격이 인쇄한 비밀번호·salt·파라미터를 넣으면 인쇄된 64바이트 키가 그대로 나온다. 메모리를 1 GiB 요구하는 규격의 마지막 벡터는 정책이 거부한다.
표준이 고정한 test vector 를 그대로 실행합니다.
PBKDF2는 반복 횟수만 늘린다 — 메모리는 반복을 아무리 올려도 그대로다. 그래서 GPU·ASIC처럼 연산을 대량 병렬화하는 하드웨어에 약하다. scrypt는 메모리를 함께 요구해 병렬화 단가 자체를 올린다. 같은 '비밀번호 해시'라도 무엇을 비싸게 만드는지가 다르다.
표준이 고정한 test vector 를 그대로 실행합니다.
검증값은 알고리즘·버전·비용 파라미터·salt 를 함께 실어 나른다 — 정책을 올려도 기존 해시를 그대로 검증할 수 있고, 같은 비밀번호라도 저장값이 서로 달라 한 번에 다량 대조가 불가능하다.
표준이 고정한 test vector 를 그대로 실행합니다.
검증은 상수 시간 비교로 이뤄지고, 저장값을 손대면 검증이 통과하지 않는다. 정책 자체도 하한 아래로는 구성되지 않는다.
막아야 할 입력을 실제로 넣고 거부되는지 확인합니다.
규격 원문을 우선합니다. 사례는 이 주제가 실제로 어떻게 뚫렸는지를 다룬 자료입니다.
메모리 하드 KDF의 원문. §12에 고정 벡터가 있다.
argon2id·scrypt·bcrypt 중 무엇을 언제 쓰는지.
반복 횟수만으로 비용을 올리는 이전 세대 KDF. 비교 대상.
Next step
운영 하드웨어에서 scrypt 비용을 benchmark하고 로그인 성공 시 점진적 rehash를 연결합니다.