Logo Logo
GitHub Designed by Logto

JSON 웹 암호화 (JWE)란 무엇인가?

RFC 7516에 정의된 바와 같이, JSON 웹 암호화 (JWE)는 JSON 형식의 데이터를 암호화하고 복호화하는 메커니즘입니다. JWE는 데이터에 기밀성을 추가하며, 신뢰할 수 없는 네트워크를 통해 민감한 정보를 전송할 때 매우 유용합니다.

JWE는 종종 JSON 웹 토큰 (JWT) 과 함께 사용되어 페이로드 데이터를 보호합니다. 예를 들어, ID 토큰 (ID token) 이나 액세스 토큰 은 JWE를 사용하여 암호화되어 전송 중에 데이터가 안전하게 보호될 수 있습니다.

JWE는 어떻게 작동하는가?

JWE는 두 가지 직렬화 형식을 가집니다: compact와 JSON입니다. 각 형식은 암호화된 데이터를 표현하는 고유한 방법을 가집니다.

Compact 직렬화

compact 직렬화에서는 JWE가 점(.)으로 구분된 다섯 개의 Base64URL로 인코딩된 부분으로 문자열 형태로 표현됩니다. 그 다섯 부분은 다음과 같습니다:

{{header}}.{{encrypted-key}}.{{iv}}.{{ciphertext}}.{{tag}}

각 부분의 목적은 다음과 같습니다:

  • header: 암호화 알고리즘과 키 관리에 대한 메타데이터를 포함합니다.
  • encrypted-key: 페이로드를 암호화하는 데 사용된 암호화된 콘텐츠 암호화 키 (CEK)입니다.
  • iv: 암호화 과정에서 사용된 초기화 벡터입니다.
  • ciphertext: 암호화된 페이로드 데이터입니다.
  • tag: 암호화된 데이터의 무결성을 검증하는 인증 태그입니다.

JSON 직렬화

JSON 직렬화는 더 장황하며 JWE를 표현하는 구조적인 방법을 제공합니다. JWE는 다음과 같은 속성을 가진 JSON 객체로 표현됩니다:

{
  "protected": "{{protected-header}}",
  "unprotected": "{{unprotected-header}}",
  "header": "{{header}}",
  "encrypted_key": "{{encrypted-key}}",
  "iv": "{{iv}}",
  "ciphertext": "{{ciphertext}}",
  "tag": "{{tag}}",
  "aad": "{{additional-authenticated-data}}"
}
  • protected: Base64URL로 인코딩된 보호 헤더를 포함합니다.
  • unprotected: JWE의 공유 보호되지 않은 헤더를 포함합니다.
  • header: JWE의 각 수신자별 보호되지 않은 헤더를 포함합니다.
  • encrypted_key: Base64URL로 인코딩된 암호화된 콘텐츠 암호화 키 (CEK)를 포함합니다.
  • iv: Base64URL로 인코딩된 초기화 벡터를 포함합니다.
  • ciphertext: Base64URL로 인코딩된 암호문 (암호화된 페이로드)을 포함합니다.
  • tag: Base64URL로 인코딩된 인증 태그를 포함합니다.
  • aad: Base64URL로 인코딩된 추가 인증된 데이터를 포함합니다.

클라이언트는 적절한 키와 알고리즘을 사용하여 JWE를 복호화할 수 있어야 합니다. 미리 통신된 키 또는 키 합의 프로토콜을 통해 파생된 키를 사용하여 JWE를 복호화할 수 있습니다.

예를 들어, ID 토큰 (ID token) 이 JWE를 사용하여 암호화될 수 있으며, 클라이언트는 OpenID 제공자의 jwks_uri 엔드포인트에서 얻은 적절한 키를 사용하여 이를 복호화할 수 있습니다.

참고