/
889.txt
109 lines (81 loc) · 3.65 KB
/
889.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
[2]
[[JWK]]
の[[鍵引数]]
[DFN[[CODE[key_ops]]]]
([RUBYB[key operation][鍵操作]])
は、
[[鍵]]を使う操作の想定を表します。
[SRC[>>1]]
* 仕様書
[REFS[
- [1] [CITE@en[[[RFC 7517]]: JSON Web Key (JWK)]], [TIME[2022-12-01T09:46:46.000Z]] <https://www.rfc-editor.org/rfc/rfc7517.html#section-4.3>
- [29]
[CITE[JSON Object Signing and Encryption ([[JOSE]])]], [TIME[2022-10-17T22:55:51.000Z]], [TIME[2022-12-01T10:05:32.146Z]] <https://www.iana.org/assignments/jose/jose.xhtml#web-key-operations>
]REFS]
* 引数値
[12]
引数値は、鍵操作を表す値の[[配列][JSON配列]]です。
[SRC[>>1]]
[16]
値に重複があっては[MUST[なりません]]。
[SRC[>>1]]
[15]
値は[[大文字・小文字区別]]します。
[SRC[>>1]]
[3]
[[RFC 7515]] では次の値が定義されています。
[SRC[>>1]]
- [4] [DFN[[CODE[sign]]]] ([[デジタル署名]]や [[MAC]] の計算)
- [5] [DFN[[CODE[verify]]]] ([[デジタル署名]]や [[MAC]] の[RUBYB[検証][verify]])
- [6] [DFN[[CODE[encrypt]]]] (内容の[[暗号化]])
- [7] [DFN[[CODE[decrypt]]]] (内容の[[解読]]と, 該当する場合, [[解読]]の[RUBYB[妥当性検証][validate]])
- [8] [DFN[[CODE[wrapKey]]]] ([[鍵]]の[[暗号化]])
- [9] [DFN[[CODE[unwrapKey]]]] ([[鍵]]の[[解読]]と, 該当する場合, [[解読]]の[RUBYB[妥当性検証][validate]])
- [10] [DFN[[CODE[deriveKey]]]] ([[鍵]]の派生)
- [11] [DFN[[CODE[deriveBits]]]] ([[鍵]]として使わないビット群の派生)
;; [13]
[[Web Cryptography API]] の [CODE[KeyUsage]] と一致するよう決められたとされます。
[SRC[>>1]]
[14]
他の値を使って[MAY[構いません]]。
[SRC[>>1]]
[23]
[[IANA登録簿]] [SRC[>>29]] に登録できます。
[SRC[>>1]]
[30]
令和4年時点で登録されているのは [[RFC 7515]] のものだけです。
[SRC[>>29]]
[24]
拡張の値の登録については [CODE[use][use (JWK)]] と同様とされます。
[SRC[>>1]]
;; [27] 同様というのがどこからどこまでか、仕様書の記述上十分に明白ではありませんが、
開放型環境では登録するべきであり、閉鎖環境ではしなくてもよい、
ということと思われます。
[SEE[ [[use (JWK)]] ]]
[18]
1つの[[鍵]]に複数の関係ない鍵操作を指定する[SHOULD[べきではありません]]。
同じ[[鍵]]を複数の[[算法]]で使うことによる[[脆弱性]]のおそれがあるからです。
[SRC[>>1]]
[19] 次の操作の組み合わせは認められます。 [SRC[>>1]]
- [20] [CODE[sign]], [CODE[verify]]
- [21] [CODE[encrypt]], [CODE[decrypt]]
- [22] [CODE[wrapKey]], [CODE[unwrapKey]]
* 文脈
[17]
[[応用]]で要求される場合を除き、
[CODE[key_ops]]
は指定してもしなくても[MAY[構いません]]。
[SRC[>>1]]
[25]
[CODE[use][use (JWK)]] と [CODE[key_ops]] は同時に使う[SHOULD[べきではありません]]。
併用する場合は一貫していなければ[MUST[なりません]]。
[[応用]]はどちらかを使うなら、どちらを指定するかを規定する[RUBYB[べき][should]]です。
[SRC[>>1]]
;; [26] ということは両者が矛盾する場合にどちらを採用するかは[[応用]]が決めろ、
[[JWK]] としては知らない、ということのようです。
[[応用]]を超えた[[相互運用性]]は無いと思っておくのが良さそうです。
* メモ
[28]
[CODE[use][use (JWK)]] と [CODE[key_ops]]
は粒度が違いますがよく似ています。
併用を禁止するくらいなら、なぜ1つにまとめなかったのでしょうね。