「Public Key Pinning」の版間の差分
(ページの作成:「Public Key Pinning とは、中間者攻撃(MITM, Man-In-The-Middle攻撃)により不正なSSLサーバ証明書が利用された場合に、それを検知...」) |
|||
行11: | 行11: | ||
* [[公開鍵]]をあらかじめプログラムに埋め込む Pre-loaded Public Key Pinning | * [[公開鍵]]をあらかじめプログラムに埋め込む Pre-loaded Public Key Pinning | ||
* サーバからHTTPヘッダで[[ウェブブラウザ]]に[[公開鍵]]の情報を通知する HTTP-based Public Key Pinning(HPKP) | * サーバからHTTPヘッダで[[ウェブブラウザ]]に[[公開鍵]]の情報を通知する HTTP-based Public Key Pinning(HPKP) | ||
− | |||
== Pre-loaded Public Key Pinning == | == Pre-loaded Public Key Pinning == | ||
この機能を使用するためには、ブラウザ自身にPinningを埋め込まなければなりません。ソースコードレベルで証明書情報を埋め込み、実行ファイルに組み込むことになります。ブラウザの開発者しか、Pre-loaded Public Key Pinningを組み込むことはできません。 | この機能を使用するためには、ブラウザ自身にPinningを埋め込まなければなりません。ソースコードレベルで証明書情報を埋め込み、実行ファイルに組み込むことになります。ブラウザの開発者しか、Pre-loaded Public Key Pinningを組み込むことはできません。 | ||
+ | |||
+ | マイクロソフトは、自社で開発している[[Internet Explorer]]に自身のサイト(マイクロソフトのサイト)の証明書情報を埋め込んでおくことができます。 | ||
+ | グーグルは、自社で開発しているChrome に自身のサイト(Googleのサイト)の証明書情報を組み込んでおくことができます。 | ||
+ | ブラウザを開発していない場合、「ブラウザを開発している他社」にブラウザごとに証明書情報の組み込みを依頼するなどしないと組み込むことができません。 | ||
== HTTP-based Public Key Pinning(HPKP) == | == HTTP-based Public Key Pinning(HPKP) == | ||
=== Public-Key-Pins ヘッダ === | === Public-Key-Pins ヘッダ === | ||
行27: | 行30: | ||
Key Pinningを持っていない最初の1回目の接続は、信用するしかありません。 | Key Pinningを持っていない最初の1回目の接続は、信用するしかありません。 | ||
1回目の接続は、通常のサーバ証明書の検証のみしかできません。このときにKey Pinning がサーバから提供されれば、それ以降の通信は、 HPKP を使用できます。 | 1回目の接続は、通常のサーバ証明書の検証のみしかできません。このときにKey Pinning がサーバから提供されれば、それ以降の通信は、 HPKP を使用できます。 | ||
− | |||
=== チェック対象は Subject Publik Key Infoフィールド === | === チェック対象は Subject Publik Key Infoフィールド === | ||
[[Public Key Pinning]]は、証明書のSubject Public Key Info(SPKI)フィールドのハッシュ値をチェックします。 | [[Public Key Pinning]]は、証明書のSubject Public Key Info(SPKI)フィールドのハッシュ値をチェックします。 |
2015年3月1日 (日) 16:49時点における最新版
Public Key Pinning とは、中間者攻撃(MITM, Man-In-The-Middle攻撃)により不正なSSLサーバ証明書が利用された場合に、それを検知する機能です。サイトとブラウザの両方で対応している必要があります。
読み方
- Public Key Pinning
- ぱぶりっく きー ぴにんぐ(ぴんにんぐ)
目次
概要
認証局が何らかの事故などによって、不正なSSL証明書が発行される事象が何度も起きてきました。Public Key Pinningは、不正な証明書を検知する対策として開発されました。
Public Key Pinningには、2種類の方法があります。
- 公開鍵をあらかじめプログラムに埋め込む Pre-loaded Public Key Pinning
- サーバからHTTPヘッダでウェブブラウザに公開鍵の情報を通知する HTTP-based Public Key Pinning(HPKP)
Pre-loaded Public Key Pinning
この機能を使用するためには、ブラウザ自身にPinningを埋め込まなければなりません。ソースコードレベルで証明書情報を埋め込み、実行ファイルに組み込むことになります。ブラウザの開発者しか、Pre-loaded Public Key Pinningを組み込むことはできません。
マイクロソフトは、自社で開発しているInternet Explorerに自身のサイト(マイクロソフトのサイト)の証明書情報を埋め込んでおくことができます。 グーグルは、自社で開発しているChrome に自身のサイト(Googleのサイト)の証明書情報を組み込んでおくことができます。 ブラウザを開発していない場合、「ブラウザを開発している他社」にブラウザごとに証明書情報の組み込みを依頼するなどしないと組み込むことができません。
HTTP-based Public Key Pinning(HPKP)
Public-Key-Pins ヘッダ
HTTP-based Public Key Pinning を使用する場合には、HTTPレスポンスヘッダに Public-Key-Pins フィールドをクライアントに送信します。
Public-Key-Pins: max-age=300; includeSubDomains; pin-sha256="hash値"; pin-sha256="hash値"
- max-age
- Pinning の有効期限を指定します。アクセスする都度、更新されます。
- includeSubDomains
- 「サブドメインも対象に含む」ことを示すフラグです。
- pin-sha256
- は、SHA-256のハッシュ値です。
trust-on-first-use (TOFU)
Key Pinning は、trust-on-first-use (TOFU) のメカニズムです。 Key Pinningを持っていない最初の1回目の接続は、信用するしかありません。 1回目の接続は、通常のサーバ証明書の検証のみしかできません。このときにKey Pinning がサーバから提供されれば、それ以降の通信は、 HPKP を使用できます。
チェック対象は Subject Publik Key Infoフィールド
Public Key Pinningは、証明書のSubject Public Key Info(SPKI)フィールドのハッシュ値をチェックします。
Pre-loadedとHTTP-based の併用
Chrome は、 HTTP-based (HPKP) を優先する実装です。
ウェブブラウザ
Firefox
Firefoxが対応しているPre-loaded Public Key Pinning の例を挙げます。
- firefox/mozilla のサイト, Mozilla CDN
- Twitter の twitter.com とサブドメイン
- Google の多くのホスト
- Dropbox
- Tor
対応しているユーザーエージェント
Public Key Pinningに対応しているユーザーエージェントには、以下のものがあります。