ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OAuth 2.0 API 보안] JWE를 이용한 메시지 수준 보안
    보안/OAuth 2.0 2022. 6. 30. 12:09

    1. JWE Compact Serialization (JWE 콤팩트 직렬화)

    JWE 콤팩트 직렬화를 사용한 JWE 토큰은 5개의 구성 요소로 이루어진다.

    각 요소는 마침표(.)로 구별되며 헤더, 암호화 키, 초기화 벡터, 암호문, 인증 태그로 구분된다.

    1.1. JOSE 헤더

    JWE 콤팩트 직렬화의 첫 번째 구성 요소다. 기존의 JWS에서 추가된 파라미터가 있다.

    • enc : 콘텐츠 암호화 알고리즘
    • AEAD(Authenticated Encryption with Associated Data)가 포함된 대칭 인증 암호 알고리즘이 필요하다. JOSE 헤더의 필수 속성이며 포함되지 않으면 토큰 구문 분석 오류가 발생한다.
    • zip : 압축 알고리즘기본 압축 알고리즘은 JWA 사양에 정의된 것을 사용한다.
    • 압축이 필수는 아니며 토큰 발행자가 자체 압축 알고리즘을 정의할 수도 있다.

    1.2. JWE 암호화 키

    헤더의 enc 파라미터로 정의된 암호화 알고리즘에 따라 결정된다.

    1.3. JWE 초기화 벡터

    암호화 프로세스 중 IV가 필요한 일부 암호 알고리즘이 있다.

    이 경우 무작위 숫자를 바탕으로 비밀키와 함께 사용된다.

    이 값을 비워둘 수도 있다.

    1.4. JWE 암호문

    암호문을 base64url로 인코딩한 값이다.

    초기에 헤더에서 enc로 정한 암호 알고리즘을 사용하며 CEK, IV를 AAD를 통해 암호화한다.

    1.5. JWE 인증 태그

    이 값은 base64url의 인코딩 값이다.

    토큰에서 암호문과 함께 AEAD 암호화 과정 중 생성된다.

    이는 암호문과 AAD의 무결성을 보장한다.

     


    2. JSON Serialization (JSON 직렬화)

    JSON 직렬화 또한 마찬가지로 초기화 벡터(IV), 암호문, 인증 태그를 가진다.

    하지만 헤더 부분에서 차이가 있으며 최종적으로 JSON 페이로드 그 자체가 아닌 JSON 페이로드를 담은 JSON 객체를 가진다.

    2.1. JWE 보호 헤더

    AEAD를 통해 무결성을 보장해야 하는 헤더 파라미터를 포함한다.

    이 값에서 protected 파라미터가 JWE 보호헤더의 base64url 인코딩 값이다.

    2.2. JWE 공유 비보호 헤더

    무결성이 보장되지 않은 헤더 파라미터를 포함한다.

    마찬가지로 JSON 객체이며 unprotected 파라미터를 통해 비보호 헤더를 나타낸다.

    2.3. JWE Per-Recipient 비보호 헤더

    무결성이 보장되지 않은 헤더 파라미터를 포함한다.

    JWE 토큰의 특정 수신자에게만 적용되며 recipients 파라미터를 통해 수신자를 배열로 나타낸다.

    배열의 각 수신자는 다음과 같이 표현된다.

    {
    	//...
    	"recipients" : [
    		{
    			"header" : {"alg" : "...", "kid" : "..." }
    			"encrypted_key" : "..."
    		},
    		{
    			"header" : {"alg" : "...", "kid" : "..." }
    			"encrypted_key" : "..."
    		}
    	]
    }
    

    3. Nested JWT

    JWS 토큰이나 JWE 토큰 모두 페이로드에 어떤 내용이라도 담길 수 있다.

    XML의 내용도 담을 수 있다.

    Nested JWT의 페이로드는 JWT 그 자체여야 한다.

    이는 중첩된 서명과 암호화를 수행하는데 사용한다.

    헤더의 cty 파라미터가 존재하고 JWT 값으로 설정된다.

    빌드된 JWS을 JWE 토큰을 Nested 토큰으로 한번 더 빌드하는 것이다.

    댓글

Designed by Tistory.