RFC 9421

오늘은 RFC 9421에 대해 알아보겠습니다.

https://datatracker.ietf.org/doc/html/rfc9421




1. 기술이 생겨난 이유

보통 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

댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

KiCad 시작하기 4 (기존 회로도 수정 및 추가)

Android Compose Coil library

KiCad 시작하기 1 (회로도 만들기)

Forensics .pyc 파일 .py로 복구하기

Android Notification with Full Screen

iOS Swift callAsFunction

iOS Error Undefined symbol Testing.Trait

황전 휴게소(순천 방향) 추천 메뉴

Android Compose automation for getting localized images to use on Play Store app image