マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

以下の内容で最終確認済み。
https://tools.ietf.org/html/rfc7516

  • JWEは、暗号化のオプション(暗号化されたJWT)。
    • 暗号化されたデータを JSON (の Base64 URL Encode) 形式で表現するための仕様
    • 暗号化されたSAML アサーションを Connect に移行するユースケースなどが想定される。

構成要素

JWE Compact Serialization or JWE JSON Serializationのどちらでも、基本的にすべてbase64urlでエンコードされる。

JOSEヘッダ

JWEの基本的なヘッダ(≒JWE Compact Serializationの場合の保護ヘッダ)には、以下のものがある。

ヘッダの例

JWKをサポートする場合

TLS要件

JWSと同じ。

ヘッダ以降

認証付き暗号(AEAD)暗号化アルゴリズムについての知識が必要。

コンテンツ暗号化キー(CEK)

  • "alg"によって暗号化または決定される。
    • ・・・
    • 一部のアルゴリズムでは、空のオクテットシーケンスになる。

初期化ベクトル

"enc"の認証付き暗号(AEAD)操作によって決定される。

  • 平文を暗号化するときに使用される初期化ベクトル値。
  • 一部のアルゴリズムでは、空のオクテットシーケンスになる。

追加認証データ(AAD)

暗号文

認証タグ(MAC)

  • 一部のアルゴリズムでは認証タグを使用しない場合がある。

詳細

暗号化アルゴリズム

暗号化アルゴリズムの以下の要素について理解が必要

基礎用語

認証付き暗号(AEAD)

キー管理モード

キー暗号化

  • 以下の参考資料を参照すると、
  • 公開鍵: JwkSet?を登録(若しくはjwks_uriで公開)
  • 秘密鍵: 証明書やJwkSet?

となるもよう(鍵交換だが、アリスとボブではなく単なる公開鍵暗号化)。

キーラッピング

  • 対称キーラッピングアルゴリズムの利用を意図したキー管理モード。
  • 鍵ラップ・アルゴリズムを使用する。
    • AES128KW
    • AES192KW
    • AES256KW
    • AES128GCMKW
    • AES192GCMKW
    • AES256GCMKW

直接キー契約

鍵合意アルゴリズムの利用を意図したキー管理モード。

キーラッピングによる主要契約

対称キーラッピングアルゴリズムの対称鍵に、
合意アルゴリズムの利用を意図したキー管理モード。

直接暗号化

CEK値が当事者間で共有される鍵管理モード。

表現(エンコード)

JWE Compact Serialization

JWE JSON Serialization

  • JWS JSON Serialization
  • 同じコンテンツを複数の当事者に暗号化することを可能にする。
  • Example
    • Complete JWE JSON Serialization Representation
          {
           "protected":"<integrity-protected shared header contents>",
           "unprotected":<non-integrity-protected shared header contents>,
           "recipients":[
            {"header":<per-recipient unprotected header 1 contents>,
             "encrypted_key":"<encrypted key 1 contents>"},
            ...
            {"header":<per-recipient unprotected header N contents>,
             "encrypted_key":"<encrypted key N contents>"}],
           "aad":"<additional authenticated data contents>",
           "iv":"<initialization vector contents>",
           "ciphertext":"<ciphertext contents>",
           "tag":"<authentication tag contents>"
          }
        
    • JWE Using Flattened JWS JSON Serialization
      受信者が 1 人のみの場合は Flattened JWE JSON Serialization を使える。
          {
           "protected":"<integrity-protected header contents>",
           "unprotected":<non-integrity-protected header contents>,
           "header":<more non-integrity-protected header contents>,
           "encrypted_key":"<encrypted key contents>",
           "aad":"<additional authenticated data contents>",
           "iv":"<initialization vector contents>",
           "ciphertext":"<ciphertext contents>",
           "tag":"<authentication tag contents>"
          }

保護ヘッダ・非保護ヘッダ

JOSEヘッダは、以下のメンバの和集合。

保護ヘッダ

  • 認証された暗号化を利用して、完全性を保証。
    • 認証付き暗号(AEAD)操作によって完全性保護されたヘッダ・パラメタを含むJSONオブジェクト。
    • これらのパラメタは、受信者毎に共通。
  • パラメタ
  • alg : 暗号化キーの値を暗号化または決定するために使用される暗号アルゴリズムを識別
  • zip : 暗号化の前に平文に適用される「圧縮」アルゴリズム
    • {"alg":"RSA-OAEP","enc":"A256GCM"}

共有 非保護ヘッダ

JWE JSON Serializationの場合に必要な、受信者毎に共通の非保護ヘッダ

個別 非保護ヘッダ

JWE JSON Serializationの場合に必要な、受信者毎に個別の非保護ヘッダ

アルゴリズム

RSAES-OAEP and AES GCM

RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256

  • .NETライブラリ
    ・・・

AES Key Wrap and AES_128_CBC_HMAC_SHA_256

  • .NETライブラリ
    ・・・

JWAを確認

手順

暗号化

JWE Protected Headerの決定

{"alg":"RSA-OAEP","enc":"A256GCM"} など。

暗号化キーの生成

  • ランダムなコンテンツ暗号化キーを生成。
    乱数を生成する際の考慮事項については、RFC 4086を参照
  • alg
    • Key Wrapping, Key Encryption, or Key Agreement with Key Wrapping
      • alg:RSAES-OAEPの場合、受信者の公開鍵で暗号化キーを暗号化したバイト列
  • Direct Key Agreement
    • alg:XXXXXの場合、空のバイト列とする。
  • Direct Encryption
    • alg:XXXXXの場合、共有対称鍵のバイト列とする。
  • Base64urlエンコードする。

JWE JSON Serializationを使用している場合は、上記を繰り返す。

初期化ベクトルの生成

  • enc
  • encアルゴリズムに初期化ベクトルが必要な場合
    • ランダムなコンテンツ暗号化の初期化ベクトルを生成。
  • encアルゴリズムに初期化ベクトルが必要でない場合
    • 空のバイト列とする。
  • Base64urlエンコードする。

追加の認証データ暗号化パラメタ

暗号文の生成

  • 平文を
    • 必要ならzipのアルゴリズムで圧縮
    • encのアルゴリズムで暗号化する。
  • Base64urlエンコードする。

認証タグの生成

Serialization

復号化

  • 暗号化の逆プロセス
  • としては、を使用する。

具体例

RSAES-OAEP and AES GCM

RSAES-PKCS1-v1_5 and AES_128_CBC_HMAC_SHA_256

AES Key Wrap and AES_128_CBC_HMAC_SHA_256

自作ライブラリ

署名・暗号化アルゴリズム

ココの署名・暗号化アルゴリズムを使用すると良い。

参考サイト

検証サイト

参考

jose-jwt(ライブラリ)

暗号化アルゴリズム

JWA - JWE用

.NETの署名・暗号化アルゴリズム


Tags: :IT国際標準, :プログラミング, :通信技術, :認証基盤, :クレームベース認証, :暗号化


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-06-24 (月) 11:13:40 (1762d)