舞台裏

Qiita が表でこっちが裏。こっそりやっていく。

HPKP について調べてたけどあきらめた

HPKP (HTTP Public Key Pinning) について調べてたが、あきらめた。

pin の設定がよくわからんし、上手くブロックされたところを調べるための環境を用意するのが面倒そう。

それに 自堕落な技術者の日記 : HPKP(HTTP Public Key Pinning)公開鍵ピニングについて考える - livedoor Blog(ブログ) とかを見るとあまり推奨される機能では無さげ(後述の通り、実際に使っているサイトがほとんどなかった)。

ということで記事内容から削除して闇に葬る。

以下没内容


Public-Key-Pins

SSL(TLS) でサーバーが送ってくる公開鍵の信憑性は、公開鍵をラップしている証明書を発行した認証局(CA)をブラウザが信頼していることによって成り立っている。

もし攻撃者が認証局を乗っ取ることに成功すると、攻撃者は任意のサーバーの公開鍵を偽造できるようになってしまう。 (公開鍵が偽物でも、証明書がブラウザの信頼する認証局(攻撃済)の物だと、ブラウザは証明書を信頼してしまう)

そうなると、攻撃者は中間者攻撃を仕掛けることができるようになってしまう。

Public-Key-Pins をレスポンスヘッダーに乗せると、ブラウザは最初の HTTPS 通信の際にサーバーと公開鍵のハッシュ値の組み合わせを記録する。 そして、二回目以降は保存している公開鍵のハッシュ値と実際に送られてきた公開鍵のハッシュ値が一致することをチェックするようになる。 もし比較の結果に差がある場合、ブラウザは公開鍵に問題があることを検知できることになる。

この仕組み上、当然のことながら一番最初のリクエストの時点ですでに認証局が乗っ取られていて公開鍵が偽造されていた場合は意味をなさない。

実際に使ってるの?

認証局が乗っ取られた場合というかなりのレアケースに備えたヘッダーだが、実際に使っているサイトはあるのだろうか?

Google, Amazon, Twitter, Youtube, Wikipedia, Pixiv, ニコニコ動画, 食べログ, 三井住友銀行, 楽天 などなどを適当に確認してみたが、このヘッダーを使っているところは確認できかった(見逃してたらごめんなさい)。

結局このヘッダーを確認できたのは、自分が確認した中では Facebook だけだった。

あんまり一般的ではないということだろうか。


参考