Public Key Pinning
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を組み込むことはできません。
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に対応しているユーザーエージェントには、以下のものがあります。
関連項目
ツイート