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を組み込むことはできません。

マイクロソフトは、自社で開発している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に対応しているユーザーエージェントには、以下のものがあります。

関連項目




スポンサーリンク