-
Notifications
You must be signed in to change notification settings - Fork 4
/
245.txt
200 lines (171 loc) · 8.79 KB
/
245.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
* 仕様書
[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>
-- [47] [CITE@en[RFC 7515 - JSON Web Signature (JWS)]], [TIME[2020-03-29 16:13:43 +09:00]] <https://tools.ietf.org/html/rfc7515#section-4>
-- [129] [CITE@en[RFC 7515 - JSON Web Signature (JWS)]], [TIME[2020-03-29 16:13:43 +09:00]] <https://tools.ietf.org/html/rfc7515#section-6>
-- [138] [CITE@en[RFC 7515 - JSON Web Signature (JWS)]], [TIME[2020-03-29 16:13:43 +09:00]] <https://tools.ietf.org/html/rfc7515#section-8>
-- [150] [CITE@en[RFC 7515 - JSON Web Signature (JWS)]], [TIME[2020-03-29 16:13:43 +09:00]] <https://tools.ietf.org/html/rfc7515#appendix-D>
- [1]
[CITE@en[[[RFC 7516]] - JSON Web Encryption (JWE)]], [TIME[2022-11-23T13:04:47.000Z]] <https://datatracker.ietf.org/doc/html/rfc7516#section-6>
]REFS]
* 鍵識別
[132]
[[JWK]] において、
[[RFC 4949]] [[デジタル署名]]または [[RFC 4949]] [[MAC]]
は、
必要な[[鍵]]を決定できないとき、[[失敗]]します。
[SRC[>>129, >>47]]
[130]
[[受信器]]は、
[[JWS]] の演算で使用する[[鍵]]を、
[[ヘッダー引数]]
[CODE[jku]],
[CODE[jwk]],
[CODE[kid]],
[CODE[x5u]],
[CODE[x5c]],
[CODE[x5t]],
[CODE[x5t#S256]]
の値から決定することもできますし、
[[JWS]] [[仕様書]]の定めない別の方法で決めても構いません。
[2]
[[JWE]] にあっては、
それに対して [[JWE]] が[[暗号化]]された[[公開鍵]]について、
同様であります。
[SRC[>>1]]
[131]
[[生成器]]は、
他の方法によって[[鍵]]が決定されるべき場合を除き、
十分な情報を[[ヘッダー引数]]に含める[SHOULD[べきです]]。
[SRC[>>129]]
;; [137] [CODE[x5u]]、[CODE[jku]] のように、
[[鍵]]の決定に[[ネットワーク]]アクセスが発生し得るものもあります。
その場合、[[鍵]]の選択に不定の時間を要することがあり、
パフォーマンスや実装戦略上、[[エラー処理]]上の特段の配慮が必要となります。
また[[鍵]]の取得を試みた事実が送信者側または送信者の指定した第三者
(改竄を想定し得るケースでは、悪意ある第三者)
に伝わり得ることにも注意が必要となります。
こうした懸念を排除できる場合を除き、
[[応用]]は外部から[[鍵]]を取得する方法を認めるべきではありません。
汎用的な [[JWS]] の実装は、
明示的に求められない限り、
こうした手法を有効にするべきではありません。
[133]
これら[[ヘッダー引数]]の情報を使って[RUBYB[信頼決定][trust decision]]する場合にあっては、
これら[[ヘッダー引数]]は[[一貫性]]保護しなければ[MUST[なりません]]
[SRC[>>129]]。
(つまり [[JWS保護ヘッダー]]としなければなりません。)
しかし信頼決定に使われる情報が[[鍵]]だけの場合にあっては、
これら[[ヘッダー引数]]を[[一貫性]]保護せずとも構いません
[SRC[>>129]]。
なぜなら、[[鍵]]が違えば[[検証]]が[[失敗]]するからです
[SRC[>>129]]。
;; [136] ところがこの要件が満たされない時[[受信者]]がこれを[[失敗]]とみなさなければならないという規定はありません。
[[セキュリティー]]の根幹に関わる部分がこんな曖昧でいいのでしょうか。
[151]
[[鍵]]選択は、[[応用]]次第で異なる方法で行われ得るのであって、
[[仕様書]]には一定の指針が示されているものの、
すべての情報源を使う必要もなく、
適用し得るすべての[[鍵]]を使う必要もなく、
また順序もその通りである必要はないものとされています。
ともかく、指針として、次のようにします。
[SRC[>>150]]
[FIG(steps)[
= [152] 適用し得る[[鍵]]を探します。情報源には次のものが含まれ得ます。
-- [153] [[応用プロトコル]]で指定されるもの
-- [154] [CODE[jku]] で指定されたもの
-- [155] [CODE[jwk]] で与えられたもの
-- [156] [CODE[x5u]] で指定されたもの
-- [157] [CODE[x5c]] で与えられたもの
-- [158] その他[[応用]]で利用可能なもの
= [159] 集めた[[鍵]]から適切なものを選択します。
-- [160] 例えば、 [CODE[kid]] や [CODE[x5t]]
が合致するもののみを選ぶことができます。
-- [161] [[応用]]が
[CODE[alg]], [CODE[use]], [CODE[key_ops]]
を使う場合、これらの値に合わないものを除外します。
-- [162] その他[[応用]]規定の方法で適当なもののみ選んで構いませんし、
[[応用]]次第でまったく除外しなくても構いません。
= [164] [[鍵]]を[[整列]]します。
-- [165] 例えば、
[CODE[kid]] や [CODE[x5t]]
に合致するものを、それ以外より先に試すことにできます。
-- [163] その他特定条件のものを優先しても構いませんし、
[[応用]]次第でまったく順序を改めなくても構いません。
= [166] [[鍵]]について、信頼決定します。
-- [167] [[応用]]の信頼条件に満たない鍵を使った署名は、拒絶します。
-- [168] 信頼条件とは、例えば、
鍵の出所、
[[URL]] から取得した[[鍵]]にあっては[[TLS証明書]]が[[妥当]]であったか否か、
[[X.509証明書]]中の[[鍵]]にあっては妥当な[[証明書鎖]]に裏付けられたものか否か、
その他[[応用]]の有する情報を用い得ます。
= [169] [[鍵]]について、
[[JWS]] の [[RFC 4949]] [[デジタル署名]]や [[RFC 4949]] [[MAC]] の検証を試みたり、
[[JWE]] の[[解読]]を試みたりします。
-- [170] 得られた[[鍵]]をすべて試みても構いませんし、
上限数を設定しても構いません。
]FIG]
;; [171]
[[デジタル署名]]や [[MAC]] の検証や[[解読]]に失敗するなら、
信頼決定するまでもありませんから、
[[応用]]次第で信頼決定を後回しにすることもできます。
[SRC[>>150]]
* JWS 取得プロトコル
[63] [[JWS]] は [CODE[jku]], [CODE[x5u]] に [[URL]]
を指定して別ファイルを参照できます。
[DFN[JWSの取得プロトコル]]には次のような制約が規定されています。
[64]
[[資源]]の[RUBYB[取得][acquire]]に使う[[プロトコル]]は、
[[一貫性]]保護を提供するものでなければ[MUST[なりません]]。
[SRC[>>47]]
[66]
[RUBYB[取得][retrieve]]に使う [[HTTP]] [CODE[GET]] [[要求]]は、
[[TLS]] を使わなければ[MUST[なりません]] [SRC[>>47]]。
[CODE[jku]] や [CODE[x5u]] に対応する実装は、
[[TLS]] に対応しなければ[MUST[なりません]] [SRC[>>138]]。
[141]
[[RFC 6125]]
[[service identity]]
[[検証]]を実施しなければ[MUST[なりません]]。
[SRC[>>47, >>138]]
[67]
ここで[[仕様書]]は [[TLS]] について [[RFC 2818]] ([[HTTPS]])
と
[[RFC 5246]] ([[TLS/1.2]])
を参照していますが、その意図するところは不明です。
(他の理論上はあり得る方法ではなく) [[HTTPS]]
を使うことを要求するべきでしょうか。
さらに [[RFC 6125]] が参照されていますが、
[[RFC 6125]] 自身は [[HTTPS]] に適用されるとはしておらず、
適用する場合 [[HTTPS]] の[[仕様書]]の改訂が必要になることを述べています。
[SEE[ [[service identity]] ]]
現時点でそのような改訂版はありません。
これは [[JWS]]
に関して [[RFC 6125]] を適用するべき特別の規定と解すべきなのか、
勇み足なのか、判断しかねます。
(現実の実装状況がどうなっているのかはまた別の問題であります。)
[140]
[[TLS]] については、
実装するべき版は時代により変化し得るものであって、執筆時点では
[[RFC 5246]] [[TLS/1.2]] である [SRC[>>138]]
と明記されています。
[139]
[[TLS]]
では[RUBYB[[[機密性]]][confidentiality]]保護と[[一貫性]]保護を提供する
[[ciphersuite]]
を使わなければ[MUST[なりません]]。
適切な [[ciphersuite]]
については
[[RFC 6176]]
その他現行の [[IETF TLS working group]]
出版物を参照するべきです。
[[RFC 7572]] も参照するべきです。
[SRC[>>138]]
[68]
こうした要件を満たし現実的に運用可能な[[プロトコル]]となると、
[[HTTPS]] ([[URL scheme]] は [CODE[https:]])
をおいて他にはありません。
(理論上は [[FTP]] over [[TLS]] なども該当し得ますが、
[[相互運用性]]に問題があります。)
;; [65] 一昔前ならこうした要件は[[保安輸送路]]といわれていました。
* メモ