/
354.txt
306 lines (243 loc) · 9.9 KB
/
354.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
* 仕様書
[REFS[
- [7] [CITE@en[[[RFC 7515]] - JSON Web Signature (JWS)]], [TIME[2019-11-24 17:13:01 +09:00]] <https://tools.ietf.org/html/rfc7515>
-- [8] [CITE@en[RFC 7515 - JSON Web Signature (JWS)]], [TIME[2020-03-29 16:13:43 +09:00]] <https://tools.ietf.org/html/rfc7515#section-2>
-- [22] [CITE@en[RFC 7515 - JSON Web Signature (JWS)]], [TIME[2020-03-29 16:13:43 +09:00]] <https://tools.ietf.org/html/rfc7515#section-3>
-- [31] [CITE@en[RFC 7515 - JSON Web Signature (JWS)]], [TIME[2020-03-29 16:13:43 +09:00]] <https://tools.ietf.org/html/rfc7515#section-7>
]REFS]
* 構文
[9]
[DFN[JSON Web Signature]] ([DFN[JWS]])
は、
[[デジタル]]的に [[RFC 4949]] [[署名][デジタル署名]]されまたは [[RFC 4949]] [[MAC]]
された[[メッセージ]]です。
[SRC[>>8, >>22]]
;; [21] [[JWS]] には、[[一貫性]]保護のない[[非保安JWS]]が含まれます。
[23] [[JWS]] は、 [[RFC 7159]] [[JSON]] データや [[base64url]]
を使って記述されます。 [[JSON]] は、その定めるところにより、
値の前後に[[空白]]を挿入できます。 [SEE[ [[JSON]] ]]
[SRC[>>22]]
[24] [[JWS]] は、論理的に
[[JOSEヘッダー]]、[[JWSペイロード]]、
[[JWS署名]]で構成されます。
[FIG(list members)[ [25] [[JWS]]
: [[JOSEヘッダー]]:
: [[JWSペイロード]]:
: [[JWS署名]]:
]FIG]
-*-*-
[10]
[DFN[[RUBYB[JOSEヘッダー][JOSE Header]]]]は、
使用する[RUBYB[暗号][cryptographic]]の[[演算]]や[[引数]]を記述する[[引数]]を含めた
[[JSONオブジェクト]]です。
[SRC[>>8]]
[13]
[DFN[[RUBYB[ヘッダー引数][Header Parameter]]]]は、
[[JOSEヘッダー]]の[[メンバー]]たる[[名前]]と[[値]]の[[組]]です。
[SRC[>>8]]
[26] [[JWS]] の [[JOSEヘッダー]]のメンバーは、
[[JWS保護ヘッダー]]と[[JWS非保護ヘッダー]]の各メンバーの[[合同]]です。
[SRC[>>22]]
[14]
[DFN[[RUBYB[JWS保護ヘッダー][JWS Protected Header]]]]は、
[[JWS署名]]の [[RFC 4949]] [[デジタル署名]]または
[[RFC 4949]] [[MAC]]演算によって[[一貫性]]保護された[[ヘッダー引数]]を含む
[[JSONオブジェクト]]です。
[SRC[>>8]]
[15]
[DFN[[RUBYB[JWS非保護ヘッダー][JWS Unprotected Header]]]]は、
[[一貫性]]保護されていない[[ヘッダー引数]]を含む
[[JSONオブジェクト]]です。
[SRC[>>8]]
-*-*-
[11]
[DFN[[RUBYB[JWSペイロード][JWS Payload]]]]は、
[RUBYB[保安される][secured]][[オクテット列]]、[RUBYB[すなわち][[[aka]]]][RUBYB[[[メッセージ]]][message]]です。
[[ペイロード]]は、
任意の[[オクテット列]]を含められます。
[SRC[>>8]]
[12]
[DFN[[RUBYB[JWS署名][JWS Signature]]]]は、
[[JWS保護ヘッダー]]と[[JWSペイロード]]に関する [[RFC 4949]] [[デジタル署名]]や
[[RFC 4949]] [[MAC]]
です。
[SRC[>>8]]
[16]
[DFN[[RUBYB[JWS署名入力][JWS Signing Input]]]]は、
[[RFC 4949]] [[デジタル署名]]または [[RFC 4949]] [[MAC]] 計算への[[入力]]です。
この値は、
= [[RFC 20 ASCII][ASCII()]] ([[RFC 7515 BASE64URL][BASE64URL()]] ([[RFC 3629 UTF8][UTF8()]] ([[JWS保護ヘッダー]])))
= [CODE[.][FULL STOP]]
= [[RFC 7515 BASE64URL][BASE64URL()]] ([[JWSペイロード]])
... を[[順に連結][文字列連結]]した結果です。
[SRC[>>8]]
[19]
[DFN[[RUBYB[耐衝突名][Collision-Resistant Name]]]]は、
他の[[名前]]と[[衝突]]しない可能性が高い方法で[[名前]]を割り当てられる[[名前空間]]中の[[名前]]です。
[[ドメイン名]]、
[[ITU-T]] [[X.660]]、[[X.670]] シリーズの [[OID]]、
[[RFC 4122]] [[UUID]]
などが該当します。
管理権限を移譲された名前空間を使う場合にあっては、
名前の定義者は、
名前を定義するため使う名前空間の部分に関して、
制御下に置かれるべく十分に注意を払う必要があります。
[SRC[>>8]]
[20]
[DFN[StringOrURI]]
は、
[[JSON文字列]]値であって、
任意の[[文字列]]値であっても[MAY[構わない]]ものの、
[CODE[:]] が含まれる場合は
[[RFC 3986]] [[URI]]
でなければ[MUST[ならない]]ものです。
[[比較][文字列の比較]]は、
[[大文字・小文字区別あり]]で変形や[[正準化]]なく行います。
[SRC[>>8]]
* 直列化
[27]
[[JWS]]
は、
[[JWS簡潔直列化]]と
[[JWS JSON直列化]]の
2種類の表現方法があります [SRC[>>31]]。
[[JWS JSON直列化]]の方が高い記述能力を持ちます。
[32]
[[JWS]] を使う[[応用]]は、
どちらの[[直列化]]を使うか、
どの[[直列化]][RUBYB[機能][feature]]を使うかを、
規定する必要があります。
[[JWS]] の実装は、
対応したい[[応用]]で必要な機能のみ実装する必要があります。
[SRC[>>31]]
[EG[
[33]
例えば、
「[[JWS JSON直列化]]で署名か [[MAC]] の値は1つだけ対応する」
のような定めが可能です。
[SRC[>>31]]
]EG]
** JWS簡潔直列化
[17]
[DFN[[RUBYB[JWS簡潔直列化][JWS Compact Serialization]]]]は、
[[JWS]]
を簡潔で [[URL]] 安全な[[文字列]]として表現したものです。
[SRC[>>8]]
[28]
[[JWS簡潔直列化]]では、
[[JWS非保護ヘッダー]]を使うことが出来ません。
[[JOSEヘッダー]] = [[JWS保護ヘッダー]]です。
[SRC[>>8, >>22]]
[29]
[[JWS簡潔直列化]]は、
次のものを[[順に連結][文字列連結]]したものです。
[SRC[>>22, >>31]]
= [[RFC 7515 BASE64URL][BASE64URL()]] ([[RFC 3629 UTF8][UTF8()]] ([[JWS保護ヘッダー]]))
= [CODE[.][FULL STOP]]
= [[RFC 7515 BASE64URL][BASE64URL()]] ([[JWSペイロード]])
= [CODE[.][FULL STOP]]
= [[RFC 7515 BASE64URL][BASE64URL()]] ([[JWS署名]])
[34]
[[署名]]・[[MAC]] は1つだけしか指定できません。 [SRC[>>31]]
** JWS JSON直列化
[18]
[DFN[[RUBYB[JWS JSON直列化][JWS JSON Serialization]]]]は、
[[JWS]]
を
[[JSONオブジェクト]]として表現したものです。
[[JWS簡潔直列化]]と違って、
複数の
[[RFC 4949]] [[デジタル署名]]と
[[RFC 4949]] [[MAC]]
の[[一方又は両方][及び/又は]]を同じ内容に適用できます。
簡潔性や [[URL]] 安全性は重視していません。
[SRC[>>8]]
[30]
[[JWS JSON直列化]]では、
[[JWS保護ヘッダー]]と[[JWS非保護ヘッダー]]の両方を使うことができます
[SRC[>>8, >>22]]。
どちらか一方はなければ[MUST[なりません]] [SRC[>>22]]。
[[JOSEヘッダー]]は両者全体で構成されます [SRC[>>8, >>22]]。
[35] 一般構文と呼ばれるものと、平坦化構文と呼ばれるものの2種類があります。
[SRC[>>31]]
*** 一般構文
[36]
[DFN[[RUBYB[(完全)一般JWS JSON直列化構文][(fully) general JWS JSON serialization syntax]]]]は、
次のような最上位の
[[JSONオブジェクト]]です。
[SRC[>>31]]
[FIG(list members)[ [38] [[JSONオブジェクト]]
: [DFN[[CODE[payload][JWS Payload]]]] :
[[RFC 7516 BASE64URL][BASE64URL()]] ([[JWSペイロード]])。
[MUST[必須]]。
[SRC[>>31]]
: [DFN[[CODE[signatures]]]] :
[[JSONオブジェクト]]の[[配列]]でなければ[MUST[なりません]]。
[FIG(list members)[ [40] [[JSON配列]]
[41]
各[[JSONオブジェクト]]は、
[[JWSペイロード]]と [[JWS保護ヘッダー]]の[[署名]]や [[MAC]] を表します。
[SRC[>>31]]
[FIG(list members)[ [39] [[JSONオブジェクト]]
: [DFN[[CODE[protected]]]] :
[[JWS保護ヘッダー]]値が空でない時、
[[RFC 7515 BASE64URL][BASE64URL()]] ([[RFC 3629 UTF8][UTF8()]] ([[JWS保護ヘッダー]]))
でなければ[MUST[なりません]]。
[[ヘッダー引数]]値は[[一貫性]]保護されます。
そうでないとき、
省略しなければ[MUST[なりません]]。
[SRC[>>31]]
: [DFN[[CODE[header][JOSE Header]]]] :
[[JWS非保護ヘッダー]]値が空でない時、
[[JWS非保護ヘッダー]]たる [[JSON]] 値でなければ[MUST[なりません]]。
[[ヘッダー引数]]値は[[一貫性]]保護されません。
そうでないとき、
省略しなければ[MUST[なりません]]。
[SRC[>>31]]
: [DFN[[CODE[signature][JWS Signature]]]] :
[[RFC 5715 BASE64URL][BASE64URL()]] ([[JWS署名]])
でなければ[MUST[なりません]]。
[SRC[>>31]]
: その他 :
他のメンバーを指定できます。
実装は、理解できないものを無視しなければ[MUST[なりません]]。
[SRC[>>31]]
]FIG]
[42]
[CODE[protected]] または [CODE[header][JOSE Header]]
の一方または両方がなければ[MUST[なりません]]。
最低でも [CODE[alg]] [[ヘッダー引数]]が必要です。
[SRC[>>31]]
]FIG]
: その他 :
他のメンバーを指定できます。
実装は、理解できないものを無視しなければ[MUST[なりません]]。
[SRC[>>31]]
]FIG]
*** 平坦化構文
[37]
[DFN[[RUBYB[平滑化JWS JSON直列化構文][flattened JWS JSON serialization syntax]]]]
* 応用
[FIG(short list)[ [6] [[JWS]] の[[応用]]
- [[JWT]]
-- [[VAPID]]
]FIG]
* 歴史
[1] [CITE@en[JSON Web Signature (JWS)]]
( ([TIME[2011-12-14 23:15:42 +09:00]] 版))
<http://openid.net/specs/draft-jones-json-web-signature-04.html>
[2] [CITE@en[draft-ietf-jose-json-web-signature-19 - JSON Web Signature (JWS)]]
( ([TIME[2013-12-29 22:15:32 +09:00]] 版))
<http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-19>
[3]
[TIME[2015年5月][2015-05]]、
[[IETF]]
[[提案標準]]
[DFN[RFC 7515]]
として出版されました。
[4] [CITE@en[RFC 7797 - JSON Web Signature (JWS) Unencoded Payload Option]]
([TIME[2016-03-31 02:08:14 +09:00]] 版)
<https://tools.ietf.org/html/rfc7797>
[5] [CITE@en[RFC 8055 - Session Initiation Protocol (SIP) Via Header Field Parameter to Indicate Received Realm]]
([TIME[2017-02-03 01:02:37 +09:00]])
<https://tools.ietf.org/html/rfc8055>