Hypercerts

Security

훔친 토큰이 쓸모없게 만듭니다.

각 항목은 코드에 대응물이 있고, 잘못된 조합이 실제로 거부되는지는 컨포먼스 스위트가 확인했습니다.


키 관리

발급 서명키
ES256(P-256) 또는 ES256K. 인증서 체인(x5c)을 자격증명 헤더에 첨부해 발급자 신원을 증명합니다.
검증자 신원키
leaf 인증서 DER의 SHA-256을 client_id로 사용합니다. 별도 등록 절차 없이 인증서만으로 RP를 식별합니다.
저장 모드
AWS KMS · HashiCorp Vault · Azure Key Vault 전용 클라이언트, 또는 PEM. 서명 연산이 KMS 안에서 이뤄져 개인키가 애플리케이션 메모리에 올라오지 않습니다.
키 회전
ETSI TS 119 471 §6.4.3 grace period. 무중단 회전이며 active와 retired를 동시에 노출합니다.

토큰 바인딩

DPoP (RFC 9449)

액세스 토큰을 클라이언트 키에 결속합니다. 토큰만 탈취해도 해당 키 없이는 쓸 수 없습니다. PAR 시점·인가코드 교환 시점·자원 접근 시점 전부에서 jkt 일치를 검증합니다.

PKCE (S256 전용)

plain 방식은 거부합니다.

PAR 필수

인가 요청을 사전 등록하고 브라우저로는 request_uri만 전달합니다. 서명 없는 직접 인가 요청은 400 invalid_request 로 거부합니다.

Key Binding JWT

제시되는 자격증명이 지갑 보유 키에 묶여 있는지 검증합니다. nonce·aud·sd_hash 불일치는 모두 거부합니다.

위 동작은 FAPI 2.0 Security Profile FINAL 모듈로 시험했고, 잘못된 조합은 전부 거부되는 것을 확인했습니다.


감사 로그

모든 운영 행위(로그인, 발급, 폐지, 신뢰목록 변경, 권한 조회)를 해시 체인으로 기록합니다. 각 이벤트가 직전 이벤트의 해시를 포함하므로, 중간 레코드를 지우거나 바꾸면 체인이 깨집니다. 관리자 웹에서 무결성 재검증을 실행해 검증 결과를 확인할 수 있습니다.

필터(행위자·리소스·기간·결과)와 JSONL 내보내기를 지원합니다. 감사 대응 시 그대로 제출 가능한 형식이며, append-only JSON Lines + SHA-256 구조입니다. 전자금융감독규정 §15와 개인정보보호법의 로그 보존 요건을 염두에 두고 설계했습니다.


남용 방어

위협대응
발급 엔드포인트 폭주Bucket4j 이중 버킷 — 엔드포인트별 + 전역 레이트 리밋
중복 요청으로 인한 이중 발급Idempotency-Key 기반 차단 (Redis SETNX, 24시간 보존)
인가코드 재사용1회 사용 후 즉시 폐기. 재사용 시도 시 해당 토큰까지 함께 폐기
request_uri 재사용·만료둘 다 400. 컨포먼스 시험 항목
미등록 redirect_uriallowlist 검증 (FAPI2 요건)

전송 구간은 TLS 1.2 이상(운영 권장 1.3)이며 mTLS 구성이 가능합니다. 자격증명 제시 응답은 direct_post.jwt — 검증자에게 가는 응답 자체가 암호화·서명됩니다. 관측은 Prometheus · OpenTelemetry · Grafana 로 하고, tail-sampling 으로 에러와 500ms 초과 흐름을 100% 보존합니다.


신뢰 경계의 분리

Veritra는 발급자와 검증자를 별도 시스템으로 배포합니다. 관리자 웹도 발급자용·검증자용이 분리되어 있고, 한쪽의 인증 토큰은 다른 쪽에서 통하지 않습니다. 발급자와 검증자가 법적으로 다른 주체인 신뢰 삼각형 구조를 시스템 경계로 그대로 옮긴 것입니다.

보안 설계 문서가 필요하시면 드립니다.

위협 모델, 키 계층, 감사 설계를 실사 절차에 맞춰 제공합니다.