공개키 · 키 합의
서명자와 검증자를 분리해 검증 권한을 신뢰 경계 밖으로 배포합니다.
규격 재현과 공격 거부를 이 페이지에서 직접 실행해 확인할 수 있습니다.
HMAC은 서명과 검증이 같은 비밀을 쓰므로 검증할 수 있는 쪽은 위조도 할 수 있습니다. 비대칭 서명은 개인키로 서명하고 공개키로 검증해 이 둘을 쪼갭니다. 공개키는 공개해도 되므로 검증자를 여럿 두어도 발급 권한이 퍼지지 않고, 키 식별자를 공개키에서 유도하면 배포 과정의 뒤바뀜도 검출할 수 있습니다.
개인키는 발급자만 갖고 검증자는 공개키만 갖게 해 검증 권한과 발급 권한을 분리합니다.
토큰이 스스로 밝힌 alg를 믿지 않고 검증자가 알고리즘을 고정해 혼동 공격을 막습니다.
키 식별자를 공개키에서 계산해 이름 규칙이 아닌 값으로 키와 식별자를 결속합니다.
아래 증명은 설명이 아니라 실제 실행입니다. 버튼을 누르면 이 서버에서 지금 계산합니다.
검증자는 공개키만 있으면 된다 — 개인키 없이 서명을 확인할 수 있고, 그래서 검증할 수 있는 쪽이 위조는 못 한다. HMAC 과 갈리는 지점이 정확히 여기다. kid 는 이름이 아니라 공개키에서 유도된 지문이다.
표준이 고정한 test vector 를 그대로 실행합니다.
공개키는 공개돼 있다 — 검증자가 토큰의 alg 헤더를 믿고 검증 방식을 고르면, 공격자가 alg 를 HS256 으로 바꾸고 그 공개키를 HMAC 키로 써서 토큰을 찍어낼 수 있다. 검증자가 알고리즘을 못박아야만 막힌다.
막아야 할 입력을 실제로 넣고 거부되는지 확인합니다.
규격 원문을 우선합니다. 사례는 이 주제가 실제로 어떻게 뚫렸는지를 다룬 자료입니다.
서명 구조와 검증. 부록 A.3이 ES256 예시.
kid를 공개키에서 유도하는 계산.
공개키를 HMAC 키로 쓰는 혼동 공격과 대응.
Next step
소비 시스템의 KMS에 개인키를 두고 자기 도메인에 JWKS를 게시한 뒤, 다중 키 rollover 기간의 검증 동작을 확인합니다.