인증 과정에서 쓰는 일회용 증거를 만료·실패 제한·원자적 소비 규칙과 함께 보관합니다.
Challenge Store는 OAuth state·nonce, OTP, 매직 링크, MFA, 패스키처럼 잠깐 존재하고 한 번만 쓰여야 하는 인증 증거를 한곳에서 관리합니다. 원문 토큰은 발급할 때 한 번만 돌려주고, 저장소에는 용도에 묶인 HMAC digest만 기록합니다. 검증과 소비는 하나의 원자적 연산으로 처리합니다.
원문 대신 비밀키로 만든 digest를 저장합니다. 저장소가 유출돼도 그것만으로는 토큰을 재사용하거나 짧은 OTP를 맞히기 어렵습니다.
검증·소비·실패 횟수 갱신을 데이터베이스의 잠금 연산 하나로 처리해, 동시에 들어온 요청 중 하나만 성공하게 합니다.
용도별 만료 시간과 최대 실패 횟수를 적용합니다. 원인이 만료든 소비든 오류든 밖에서는 같은 실패로 보입니다.
아래 증명은 글로 된 설명이 아닙니다. 버튼을 누르면 이 서버가 지금 직접 계산합니다.
이 증명은 흉내 낸 저장소가 아니라 운영과 같은 PostgreSQL 테이블에 행을 쓰고 지웁니다. 원자적 소비는 SQL이 보장합니다. 원문 토큰은 저장하지 않고 digest만 남깁니다.
표준 문서에 실린 테스트 벡터를 그대로 넣어 같은 값이 나오는지 확인합니다.
틀린 토큰을 넣을 때마다 시도 횟수가 올라가고, 한도를 넘기면 올바른 토큰까지 거부되므로 끝없이 추측할 수 없습니다. 용도가 다르면 digest가 달라져 같은 토큰도 통하지 않습니다.
막아야 할 입력을 실제로 넣고 거부되는지 확인합니다.
규격 원문을 먼저 실었습니다. 사례는 이 분야에서 실제로 보안이 뚫린 일을 다룬 자료입니다.
요청과 응답을 묶어야 하는 이유를 설명합니다.
challenge 토큰에 필요한 엔트로피의 기준입니다.
다음 단계
Security Event 기록을 바탕으로 용도별 Rate Limit 상태 저장소를 연결합니다.