RFC 9421
오늘은 RFC 9421에 대해 알아보겠습니다.
https://datatracker.ietf.org/doc/html/rfc94211. 기술이 생겨난 이유
보통 TLS를 많이 사용합니다. TLS는 하나의 연결만 보증하지 중계기 간의 연결은 보증할 수 없습니다.
또한, Application은 검증을 위해 TLS 인증서와 독립적인 key가 필요하기도 합니다.
그리고, 전체적인 message를 모르더라도 message를 보호할 수 있어야 합니다.
JSON Web Signature의 경우 매번 중복된 payload가 필요하게 됩니다.
HTTP message만을 위한 무결성과 검증 기술을 만들게 되었습니다.
2. 구성 목록
• Signature base
• Signature-Input
• Signature
• Accept-Signature
3. Signature base
중계기에서 HTTP 변형이 가능하기 때문에 bit 단위를 비교할 순 없습니다. 대신, 의미가 같은지를 확인합니다.
여기에 사용되는 것이 Signature base입니다.
아래는 signature base를 만드는 표현식입니다.
예시를 보시죠.
위의 HTTP Header는 아래의 Signature base로 표현될 수 있습니다. (Signature-Input을 바탕으로 생성)
Component Identifier는 아래와 같습니다.
• Derived Component
@method
@target-url
@authority
@scheme
@request-target
@path
@query
@query-param
@status
• Field-content
accept 등
@signature-params
Signature base 제일 마지막에 추가되며, 생성, 검증을 위한 metadata를 포함합니다.
서명되는 모든 항목과 추가적인 signature parameters로 구성됩니다.
• created (생성 시각)
• expires (종료 시각)
• nonce (signature를 위한 랜덤 값)
• alg (signature algorithm)
• keyid (key material을 위한 identifier)
• tag (application을 위한 tag)
4. Signature-Input
• Signature에 대한 metadata를 가지고 있습니다.
• 하나의 Signature-Input은 하나의 Signature를 설명합니다.
5. Signature
실질적으로 Signer와 Verifier가 비교할 값입니다.
• 생성 및 검증
알고리듬을 간략하게 도식화하면 아래와 같습니다.
HTTP_SIGN (M, Ks) -> S
HTTP_VERIFY (M, Kv, S) -> V
Signature base(M), 서명용 key material(Ks), Signature(S)
Signature base(M), 검증용 key material(Kv), 재생성 한 Signature(S), Boolean(V)
• 알고리듬
RSASSA-PSS Using SHA-512 (alg=rsa-pss-sha512)
RSASSA-PKCS1-v1_5 Using SHA-256 (alg=rsa-v1_5-sha256)
HMAC Using SHA-256 (alg=hmac-sha256)
ECDSA Using Curve P-256 DSS and SHA-256 (alg=ecdsa-p256-sha256)
DCDSA Using Curve P-384 DSS and SHA-384 (alg=ecdsa-p384-sha384)
EdDSA Using Curve edwards25519 (alg=ed25519)
JSON Web Signature (JWS) Algorithms
이렇게 생성한 Signature는 HTTP에 Field로 보냅니다.
Signature는 여러 개일 수 있습니다.
6. Acccept-Signature
Signer에 해당 parameter 추가를 요청할 수 있습니다.
• created (생성 시각)
• expires (종료 시각)
• nonce (signature를 위한 랜덤 값)
• alg (signature algorithm)
• keyid (key material을 위한 identifier)
• tag (application을 위한 tag)
카테고리: network
댓글
댓글 쓰기
궁금한 점은 댓글 달아주세요.
Comment if you have any questions.