メインコンテンツまでスキップ

付録 C. 例

この付録には、このドキュメントで定義されているさまざまな機能とメッセージタイプを示す一連の例が含まれています。例を読みやすくするために、バイナリダンプではなく、拡張 CBOR 診断表記([RFC8610] で定義)を使用して提示されています。

[GitHub-Examples] に GitHub プロジェクトが作成されており、このドキュメントで提示されている例だけでなく、より完全なテスト例のセットも含まれています。各例は、例を作成するために使用される入力、例のデバッグに使用できるいくつかの中間値、および 16 進ダンプと CBOR 診断表記形式の両方で提示される例の出力を含む JSON ファイルにあります。サイト上の例の一部は、失敗テストケースとして設計されています。これらは JSON ファイルでそのように明確にマークされています。このドキュメントの例に誤りが見つかった場合、GitHub 上の例が更新され、その旨のメモが JSON ファイルに配置されます。

前述のように、例は CBOR の診断表記を使用して提示されています。診断表記とバイナリの間で変換できる Ruby ベースのツールが存在します。このツールは、次のコマンドラインでインストールできます。

gem install cbor-diag

診断表記は、次のコマンドラインを使用してバイナリファイルに変換できます。

diag2cbor.rb < inputfile > outputfile

すべてのソースコードには属性 type='cbor-diag' タグが付けられているため、XPath 式を使用してこのドキュメントの XML バージョンから例を抽出できます。(使用している XPath エバリュエーターによっては、> エンティティを処理する必要がある場合があります。)

//sourcecode[@type='cbor-diag']/text()

C.1. 署名付きメッセージの例

C.1.1. 単一署名

この例では、以下を使用します。

  • 署名アルゴリズム:ECDSA w/ SHA-256, Curve P-256

バイナリファイルのサイズは 103 バイトです

98(
[
/ protected / h'',
/ unprotected / {},
/ payload / 'This is the content.',
/ signatures / [
[
/ protected h'a10126' / << {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb
5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b
98f53afd2fa0f30a'
]
]
]
)

C.1.2. 複数の署名者

この例では、以下を使用します。

  • 署名アルゴリズム:ECDSA w/ SHA-256, Curve P-256

  • 署名アルゴリズム:ECDSA w/ SHA-512, Curve P-521

バイナリファイルのサイズは 277 バイトです

98(
[
/ protected / h'',
/ unprotected / {},
/ payload / 'This is the content.',
/ signatures / [
[
/ protected h'a10126' / << {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb
5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b
98f53afd2fa0f30a'
],
[
/ protected h'a1013823' / << {
/ alg / 1:-36 / ECDSA 521 /
} >> ,
/ unprotected / {
/ kid / 4:'[email protected]'
},
/ signature / h'00a2d28a7c2bdb1587877420f65adf7d0b9a06635dd1
de64bb62974c863f0b160dd2163734034e6ac003b01e8705524c5c4ca479a952f024
7ee8cb0b4fb7397ba08d009e0c8bf482270cc5771aa143966e5a469a09f613488030
c5b07ec6d722e3835adb5b2d8c44e95ffb13877dd2582866883535de3bb03d01753f
83ab87bb4f7a0297'
]
]
]
)

C.1.3. クリティカリティを持つ署名

この例では、以下を使用します。

  • 署名アルゴリズム:ECDSA w/ SHA-256, Curve P-256

  • "reserved" ヘッダーパラメータにクリティカリティマーカーがあります。

バイナリファイルのサイズは 125 バイトです

98(
[
/ protected h'a2687265736572766564f40281687265736572766564' /
<< {
"reserved":false,
/ crit / 2:[
"reserved"
]
} >>,
/ unprotected / {},
/ payload / 'This is the content.',
/ signatures / [
[
/ protected h'a10126' / << {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ signature / h'3fc54702aa56e1b2cb20284294c9106a63f91bac658d
69351210a031d8fc7c5ff3e4be39445b1a3e83e1510d1aca2f2e8a7c081c7645042b
18aba9d1fad1bd9c'
]
]
]
)

C.2. 単一署名者の例

C.2.1. 単一 ECDSA 署名

この例では、以下を使用します。

  • 署名アルゴリズム:ECDSA w/ SHA-256, Curve P-256

バイナリファイルのサイズは 98 バイトです

18(
[
/ protected h'a10126' / << {
/ alg / 1:-7 / ECDSA 256 /
} >>,
/ unprotected / {
/ kid / 4:'11'
},
/ payload / 'This is the content.',
/ signature / h'8eb33e4ca31d1c465ab05aac34cc6b23d58fef5c083106c4
d25a91aef0b0117e2af9a291aa32e14ab834dc56ed2a223444547e01f11d3b0916e5
a4c345cacb36'
]
)

C.3. エンベロープメッセージの例

C.3.1. ダイレクト ECDH

この例では、以下を使用します。

  • CEK:AES-GCM w/ 128 ビット鍵

  • 受信者クラス:ECDH Ephemeral-Static, Curve P-256

バイナリファイルのサイズは 151 バイトです

96(
[
/ protected h'a10101' / << {
/ alg / 1:1 / AES-GCM 128 /
} >>,
/ unprotected / {
/ iv / 5:h'c9cf4df2fe6c632bf7886413'
},
/ ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0
c52a357da7a644b8070a151b0',
/ recipients / [
[
/ protected h'a1013818' / << {
/ alg / 1:-25 / ECDH-ES + HKDF-256 /
} >>,
/ unprotected / {
/ ephemeral / -1:{
/ kty / 1:2,
/ crv / -1:1,
/ x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf
bf054e1c7b4d91d6280',
/ y / -3:true
},
/ kid / 4:'[email protected]'
},
/ ciphertext / h''
]
]
]
)

C.3.2. ダイレクトおよび鍵導出

この例では、以下を使用します。

  • CEK:AES-CCM w/ 128 ビット鍵、タグを 64 ビットに切り詰め

  • 受信者クラス:共有秘密で HKDF を使用し、以下の暗黙的フィールドをコンテキストの一部として使用します。

    • ソルト:"aabbccddeeffgghh"

    • PartyU アイデンティティ:"lighting-client"

    • PartyV アイデンティティ:"lighting-server"

    • 補足公開その他:"Encryption Example 02"

バイナリファイルのサイズは 91 バイトです

96(
[
/ protected h'a1010a' / << {
/ alg / 1:10 / AES-CCM-16-64-128 /
} >>,
/ unprotected / {
/ iv / 5:h'89f52f65a1c580933b5261a76c'
},
/ ciphertext / h'753548a19b1307084ca7b2056924ed95f2e3b17006dfe93
1b687b847',
/ recipients / [
[
/ protected h'a10129' / << {
/ alg / 1:-10
} >>,
/ unprotected / {
/ salt / -20:'aabbccddeeffgghh',
/ kid / 4:'our-secret'
},
/ ciphertext / h''
]
]
]
)

C.3.3. 外部データを含む暗号化されたコンテンツ

この例では、以下を使用します。

  • CEK:AES-GCM w/ 128 ビット鍵

  • 受信者クラス:ECDH Static-Static, Curve P-256 with AES Key Wrap

  • 外部提供 AAD:h'0011bbcc22dd44ee55ff660077'

バイナリファイルのサイズは 173 バイトです

96(
[
/ protected h'a10101' / << {
/ alg / 1:1 / AES-GCM 128 /
} >> ,
/ unprotected / {
/ iv / 5:h'02d1f7e6f26c43d4868d87ce'
},
/ ciphertext / h'64f84d913ba60a76070a9a48f26e97e863e28529d8f5335
e5f0165eee976b4a5f6c6f09d',
/ recipients / [
[
/ protected / h'a101381f' / {
\ alg \ 1:-32 \ ECDH-SS+A128KW \
} / ,
/ unprotected / {
/ static kid / -3:'[email protected]',
/ kid / 4:'[email protected]',
/ U nonce / -22:h'0101'
},
/ ciphertext / h'41e0d76f579dbd0d936a662d54d8582037de2e366fd
e1c62'
]
]
]
)

C.4. 暗号化されたメッセージの例

C.4.1. 単純な暗号化されたメッセージ

この例では、以下を使用します。

  • CEK:AES-CCM w/ 128 ビット鍵と 64 ビットタグ

バイナリファイルのサイズは 52 バイトです

16(
[
/ protected h'a1010a' / << {
/ alg / 1:10 / AES-CCM-16-64-128 /
} >> ,
/ unprotected / {
/ iv / 5:h'89f52f65a1c580933b5261a78c'
},
/ ciphertext / h'5974e1b99a3a4cc09a659aa2e9e7fff161d38ce71cb45ce
460ffb569'
]
)

C.4.2. 部分的な IV を持つ暗号化されたメッセージ

この例では、以下を使用します。

  • CEK:AES-CCM w/ 128 ビット鍵と 64 ビットタグ

  • IV のプレフィックスは 89F52F65A1C580933B52

バイナリファイルのサイズは 41 バイトです

16(
[
/ protected h'a1010a' / << {
/ alg / 1:10 / AES-CCM-16-64-128 /
} >> ,
/ unprotected / {
/ partial iv / 6:h'61a7'
},
/ ciphertext / h'252a8911d465c125b6764739700f0141ed09192de139e05
3bd09abca'
]
)

C.5. MAC付きメッセージの例

C.5.1. 共有秘密ダイレクト MAC

この例では、以下を使用します。

  • MAC:AES-CMAC, 256 ビット鍵、64 ビットに切り詰め

  • 受信者クラス:ダイレクト共有秘密

バイナリファイルのサイズは 57 バイトです

97(
[
/ protected h'a1010f' / << {
/ alg / 1:15 / AES-CBC-MAC-256//64 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'9e1226ba1f81b848',
/ recipients / [
[
/ protected / h'',
/ unprotected / {
/ alg / 1:-6 / direct /,
/ kid / 4:'our-secret'
},
/ ciphertext / h''
]
]
]
)

C.5.2. ECDH ダイレクト MAC

この例では、以下を使用します。

  • MAC:HMAC w/SHA-256, 256 ビット鍵

  • 受信者クラス:ECDH 鍵協定、2 つの静的鍵、HKDF w/ コンテキスト構造

バイナリファイルのサイズは 214 バイトです

97(
[
/ protected h'a10105' / << {
/ alg / 1:5 / HMAC 256//256 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'81a03448acd3d305376eaa11fb3fe416a955be2cbe7ec96f012c99
4bc3f16a41',
/ recipients / [
[
/ protected h'a101381a' / << {
/ alg / 1:-27 / ECDH-SS + HKDF-256 /
} >> ,
/ unprotected / {
/ static kid / -3:'[email protected]',
/ kid / 4:'[email protected]',
/ U nonce / -22:h'4d8553e7e74f3c6a3a9dd3ef286a8195cbf8a23d
19558ccfec7d34b824f42d92bd06bd2c7f0271f0214e141fb779ae2856abf585a583
68b017e7f2a9e5ce4db5'
},
/ ciphertext / h''
]
]
]
)

C.5.3. ラップされた MAC

この例では、以下を使用します。

  • MAC:AES-MAC, 128 ビット鍵、64 ビットに切り詰め

  • 受信者クラス:AES Key Wrap w/ 事前共有 256 ビット鍵

バイナリファイルのサイズは 109 バイトです

97(
[
/ protected h'a1010e' / << {
/ alg / 1:14 / AES-CBC-MAC-128//64 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'36f5afaf0bab5d43',
/ recipients / [
[
/ protected / h'',
/ unprotected / {
/ alg / 1:-5 / A256KW /,
/ kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037'
},
/ ciphertext / h'711ab0dc2fc4585dce27effa6781c8093eba906f227
b6eb0'
]
]
]
)

C.5.4. 複数受信者の MAC付きメッセージ

この例では、以下を使用します。

  • MAC:HMAC w/ SHA-256, 128 ビット鍵

  • 受信者クラス:2 つの異なる方法を使用します。

    1. ECDH Ephemeral-Static, Curve P-521, AES Key Wrap w/ 128 ビット鍵

    2. AES Key Wrap w/ 256 ビット鍵

バイナリファイルのサイズは 309 バイトです

97(
[
/ protected h'a10105' / << {
/ alg / 1:5 / HMAC 256//256 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'bf48235e809b5c42e995f2b7d5fa13620e7ed834e337f6aa43df16
1e49e9323e',
/ recipients / [
[
/ protected h'a101381c' / << {
/ alg / 1:-29 / ECDH-ES+A128KW /
} >> ,
/ unprotected / {
/ ephemeral / -1:{
/ kty / 1:2,
/ crv / -1:3,
/ x / -2:h'0043b12669acac3fd27898ffba0bcd2e6c366d53bc4db
71f909a759304acfb5e18cdc7ba0b13ff8c7636271a6924b1ac63c02688075b55ef2
d613574e7dc242f79c3',
/ y / -3:true
},
/ kid / 4:'[email protected]'
},
/ ciphertext / h'339bc4f79984cdc6b3e6ce5f315a4c7d2b0ac466fce
a69e8c07dfbca5bb1f661bc5f8e0df9e3eff5'
],
[
/ protected / h'',
/ unprotected / {
/ alg / 1:-5 / A256KW /,
/ kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037'
},
/ ciphertext / h'0b2c7cfce04e98276342d6476a7723c090dfdd15f9a
518e7736549e998370695e6d6a83b4ae507bb'
]
]
]
)

C.6. MAC0 メッセージの例

C.6.1. 共有秘密ダイレクト MAC

この例では、以下を使用します。

  • MAC:AES-CMAC, 256 ビット鍵、64 ビットに切り詰め

  • 受信者クラス:ダイレクト共有秘密

バイナリファイルのサイズは 37 バイトです

17(
[
/ protected h'a1010f' / << {
/ alg / 1:15 / AES-CBC-MAC-256//64 /
} >> ,
/ unprotected / {},
/ payload / 'This is the content.',
/ tag / h'726043745027214f'
]
)

この例では、付録 C.5.1 と同じ入力を使用していることに注意してください。

C.7. COSE 鍵

C.7.1. 公開鍵

これは COSE 鍵セットの例です。この例には、これまでのすべての例の公開鍵が含まれています。

順番に、鍵は以下のとおりです。

バイナリファイルのサイズは 481 バイトです

[
{
-1:1,
-2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0
8551d',
-3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008
4d19c',
1:2,
2:'[email protected]'
},
{
-1:1,
-2:h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f745228255a219a86d6a
09eff',
-3:h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72ccfed6b6fb6ed28bbf
c117e',
1:2,
2:'11'
},
{
-1:3,
-2:h'0072992cb3ac08ecf3e5c63dedec0d51a8c1f79ef2f82f94f3c737bf5de
7986671eac625fe8257bbd0394644caaa3aaf8f27a4585fbbcad0f2457620085e5c8
f42ad',
-3:h'01dca6947bce88bc5790485ac97427342bc35f887d86d65a089377e247e
60baa55e4e8501e2ada5724ac51d6909008033ebc10ac999b9d7f5cc2519f3fe1ea1
d9475',
1:2,
2:'[email protected]'
},
{
-1:1,
-2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91
d6280',
-3:h'f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf
822bb',
1:2,
2:'[email protected]'
}
]

C.7.2. 秘密鍵

これは COSE 鍵セットの例です。この例には、これまでのすべての例の秘密鍵が含まれています。

順番に、鍵は以下のとおりです。

  • kid が "[email protected]" の EC 鍵

  • kid が "11" の EC 鍵

  • kid が "[email protected]" の EC 鍵

  • kid が "our-secret" の共有秘密鍵

  • kid が "[email protected]" の EC 鍵

  • kid が "our-secret2" の共有秘密鍵

  • kid が "018c0ae5-4d9b-471b-bfd6-eef314bc7037" の共有秘密鍵

バイナリファイルのサイズは 816 バイトです

[
{
1:2,
2:'[email protected]',
-1:1,
-2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0
8551d',
-3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008
4d19c',
-4:h'aff907c99f9ad3aae6c4cdf21122bce2bd68b5283e6907154ad911840fa
208cf'
},
{
1:2,
2:'11',
-1:1,
-2:h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f745228255a219a86d6a
09eff',
-3:h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72ccfed6b6fb6ed28bbf
c117e',
-4:h'57c92077664146e876760c9520d054aa93c3afb04e306705db609030850
7b4d3'
},
{
1:2,
2:'[email protected]',
-1:3,
-2:h'0072992cb3ac08ecf3e5c63dedec0d51a8c1f79ef2f82f94f3c737bf5de
7986671eac625fe8257bbd0394644caaa3aaf8f27a4585fbbcad0f2457620085e5c8
f42ad',
-3:h'01dca6947bce88bc5790485ac97427342bc35f887d86d65a089377e247e
60baa55e4e8501e2ada5724ac51d6909008033ebc10ac999b9d7f5cc2519f3fe1ea1
d9475',
-4:h'00085138ddabf5ca975f5860f91a08e91d6d5f9a76ad4018766a476680b
55cd339e8ab6c72b5facdb2a2a50ac25bd086647dd3e2e6e99e84ca2c3609fdf177f
eb26d'
},
{
1:4,
2:'our-secret',
-1:h'849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c4
27188'
},
{
1:2,
-1:1,
2:'[email protected]',
-2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91
d6280',
-3:h'f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf
822bb',
-4:h'02d1f7e6f26c43d4868d87ceb2353161740aacf1f7163647984b522a848
df1c3'
},
{
1:4,
2:'our-secret2',
-1:h'849b5786457c1491be3a76dcea6c4271'
},
{
1:4,
2:'018c0ae5-4d9b-471b-bfd6-eef314bc7037',
-1:h'849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c4
27188'
}
]