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()

Python OpenCV 빈 화면 만들기

tensorflow tf.random.uniform()

Android Notification with Full Screen

KiCad 시작하기 2 (PCB 만들기)

Android Minimum touch target size

Python bs4.SoupStrainer()

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

음악 총보(Score), 파트보(Part)

tensorflow tf.expand_dims()