-
Notifications
You must be signed in to change notification settings - Fork 4
/
426.txt
110 lines (78 loc) · 7.24 KB
/
426.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
[3] [DFN[[RUBYB[既知ピン付きホスト]@en[Known Pinned Host]]]]は、
以前のアクセスで得られた[[ピン]]の情報を[[利用者エージェント]]が保持している[[ホスト]]です。
* 仕様書
[REFS[
- [1] [CITE@en[RFC 7469 - Public Key Pinning Extension for HTTP]] ([TIME[2015-05-05 21:00:37 +09:00]] 版) <https://tools.ietf.org/html/rfc7469>
-- [4] [CITE@en[RFC 7469 - Public Key Pinning Extension for HTTP]] ([TIME[2015-05-05 21:00:37 +09:00]] 版) <https://tools.ietf.org/html/rfc7469#section-2.5>
-- [5] [CITE@en[RFC 7469 - Public Key Pinning Extension for HTTP]] ([TIME[2015-05-05 21:00:37 +09:00]] 版) <https://tools.ietf.org/html/rfc7469#section-2.7>
-- [7] [CITE@en[RFC 7469 - Public Key Pinning Extension for HTTP]] ([TIME[2015-05-05 21:00:37 +09:00]] 版) <https://tools.ietf.org/html/rfc7469#section-2.8>
-- [14] [CITE@en[RFC 7469 - Public Key Pinning Extension for HTTP]] ([TIME[2015-05-05 21:00:37 +09:00]] 版) <https://tools.ietf.org/html/rfc7469#section-4.5>
-- [17] [CITE@en[RFC 7469 - Public Key Pinning Extension for HTTP]] ([TIME[2015-05-05 21:00:37 +09:00]] 版) <https://tools.ietf.org/html/rfc7469#section-5>
]REFS]
* 意味
[2] [RUBYB[既知ピン付きホスト]@en[Known Pinned Host]]は、
[[PKP]] [[ヘッダー]]で得られた情報を一定期間[[利用者エージェント]]において保持しておくものです。
[63] [[PKP-RO]] [[ヘッダー]]の情報を[[キャッシュ]]しては[['''なりません''']] [SRC[>>5]]。
* 状態
[54] [[既知ピン付きホスト]]の[[キャッシュ]]
([DFN[[[Pinning Metadata]]]] [SRC[>>4]]) は、次の状態を持ちます。
[FIG(list members)[
:[[ドメイン名]]:[RUBYB[ピン付きホスト]@en[Pinned Host]]の[[ドメイン名]]です [SRC[>>5]]。
:[DFN[[RUBYB[実効ピン日付]@en[Effective Pin Date]]]]:
[[利用者エージェント]]が[[ホスト]]に関する[RUBYB[妥当なピン付けヘッダー]@en[Valid Pinning Header]]を観測した[[時刻]]です [SRC[>>5]]。
:[DFN[[RUBYB[実効満期日付]@en[Effective Expiration Date]]]]:
[[実効ピン日付]]に [CODE(HTTP)@en[[[max-age]]]] を足したものです [SRC[>>5]]。
:[CODE(HTTP)@en[[[includeSubDomains]]]]:[CODE(HTTP)@en[[[includeSubDomains]]]]
[[指令]]が指定されたかどうかです [SRC[>>5]]。
:[CODE(HTTP)@en[[[report-uri]]]]:[CODE(HTTP)@en[[[report-uri]]]]
[[指令]]が指定された場合、その値です [SRC[>>5]]。
:[[ピン]]群:0個以上の[[ピン]]のリストです。
]FIG]
[12] なお [CODE[[[report-uri]]]] で指定された [[URL]] に送信される [[JSON]]
では、 [DFN[[CODE[[[effective-expiration-date]]]]]] に[[実効満期日付]]を記述します。
;; [CODE[[[report-uri]]]] を参照。
* ドメイン名
[57] [[既知ピン付きホスト]]は、[[ドメイン名]]により識別します。
[[IPアドレス]]は使いません。 [SRC[>>5]]
[58] [[対象URL]]の[[ホスト]]が [[IPアドレス]]なら、
[[利用者エージェント]]はその[[ホスト]]を[[既知ピン付きホスト]]として記録しては[['''なりません''']] [SRC[>>5]]。
;; [59] [[RFC]] では [[Request-URI]] としています [SRC[>>5]] が、[[Request-URI]]
に[[ホスト]]を指定したとは限りませんから、[[対象URL]] ([[実効要求URL]])
のものを使うべきと思われます。また [[RFC]] は [[RFC 3986]] [[URI]]
を使っているので [CODE(ABNF)@en[[[IP-literal]]]] または [CODE(ABNF)@en[[[IPv4address]]]]
といっています [SRC[>>5]] が、実際の [[URL]] はそれ以外の構文で
[[IPアドレス]]が指定されるかもしれず、その場合でも[[既知ピン付きホスト]]とするのは不適当と思われます。
[28] [[利用者エージェント]]は、[[ドメイン名]]の [[IDNA]] [[正準化]]を行わなければ[['''なりません''']] [SRC[>>5]]。
;; [29] [[RFC]] は [[HSTS]] の [[RFC]] の方法を参照しています。 [[IDNA]]
参照。
[60] [[ドメイン名]]は、[[既知HSTSホストドメイン名一致]]により比較します [SRC[>>5]]。
;; [13] 複数一致するものが見つかる場合 ([CODE(HTTP)@en[[[includeSubDomains]]]]
が使われている場合にあり得ます。) にどう処理するべきかは定かではありません。
すべてにそれぞれ [[Pin Validation]] を行う必要があるのでしょうか。
[62] (完全一致ではなく) [[超ドメイン一致]]する[[既知ピン付きホスト]]のキャッシュを編集しては[['''なりません''']] [SRC[>>5]]。
* 満期
[55] [[既知ピン付きホスト]]が[DFN[[RUBYB[満期]@en[expired]]]]であるとは、
[[実効満期日付]]が[[過去]]の[[日付]]であることをいいます [SRC[>>5]]。
[61] [[利用者エージェント]]は [CODE(HTTP)@en[[[max-age]]]] 値に上限を設けても構いません。
上限を超える値が指定された場合は、上限が指定されたものとして扱って構いません。 [SRC[>>5]]
[56] [[利用者エージェント]]は、[[キャッシュ]]中の[[満期]]の[[既知ピン付きホスト]]を無視しなければ[['''なりません''']] [SRC[>>5]]。
* preloaded pin list
[6] [[利用者エージェント]]は、 [[PKP]] 仕様に基づき[[応答]]から得た[[既知ピン付きホスト]]の他に、
実装組み込みなどの方法で[[ピン付きホスト]]の情報を得て構いません。
[[既知ピン付きホスト]]と衝突する場合にどちらを優先するかは実装定義です。 [SRC[>>5]]
[15] preload は、不正な方法で発行された[[証明書]]を使って攻撃者が [[PKP]]
を[[利用者エージェント]]に与えることを防ぐために有用かもしれません [SRC[>>14]]。
;; [16] そのような使い方をするなら[[利用者エージェント]]の組み込み (preload) の
[[PKP]] が優先される必要がありそうです。
[REFS[
- [9] [CITE@en[SecurityEngineering/Public Key Pinning/Implementation Details - MozillaWiki]] ([TIME[2015-06-04 12:05:21 +09:00]] 版) <https://wiki.mozilla.org/SecurityEngineering/Public_Key_Pinning/Implementation_Details>
- [11] [CITE[Issue 415689 - chromium - Add an HSTS and key pin preload rule for chrome.com - An open-source project to help move the web forward. - Google Project Hosting]] ([TIME[2015-06-04 17:07:50 +09:00]] 版) <https://code.google.com/p/chromium/issues/detail?id=415689>
- [10] [CITE[Issue 158883 - chromium - Support enterprise policy HSTS and key pinning preloads - An open-source project to help move the web forward. - Google Project Hosting]] ([TIME[2015-06-04 17:07:17 +09:00]] 版) <https://code.google.com/p/chromium/issues/detail?id=158883>
]REFS]
* 自己署名証明書の扱い
[8] [[利用者エージェント]]は、
[[自己署名末端実体証明書]]による[[認証]]を受け入れる場合には、
そのような[[証明書]]に関する[[ピン]]も認めても構いません [SRC[>>5]]。
* fingerprinting
[18] [[既知ピン付きホスト]]の情報は [[fingerprinting vector]] となります。
[19] [[利用者エージェント]]は[[既知ピン付きホスト]]の情報を消去する仕組みを[[利用者]]に提供しても[RUBYB[よいかもしれません]@en[advisable]] [SRC[>>17]]。