HPKPは非推奨のWebセキュリティ応答ヘッダーであり、頭字語はHTTP公開鍵ピンを表します。 これは、侵害された、または不正な認証局が、公的に信頼されているがハッカーが制御するHTTPS証明書をWebサイトに発行するのを防ぐことを目的としています。 このシナリオでは、ハッカーは影響を受けるWebサイトへの傍受されたHTTPSトラフィックを復号化できます。
ヒント:Web応答ヘッダーは、サーバーが要求に応答するときに含めるメタデータの一部です。 これらの小さなサブセットは、さまざまなセキュリティ機能を有効にして構成するため、セキュリティヘッダーと呼ばれます。
HTTPS証明書インフラストラクチャ
HTTPSが構築されている証明書インフラストラクチャは、信頼のWebに基づいています。 多くの企業が、1つ以上のルート証明書を発行する認証局(CA)として機能します。 ルート証明書のセットは、トラストストア内のすべてのデバイスに含まれています。 WebサイトがCAに独自のHTTPS証明書を要求すると、証明書はルート証明書によって署名されます。 コンピューターがHTTPS証明書を検出すると、署名をチェックします。 証明書が信頼するルート証明書によって署名されている場合、コンピューターはHTTPS証明書も信頼します。
ヒント:CAは、ルート証明書によって署名された中間証明書を持つこともできます。 これらの中間証明書は、WebサイトのHTTPS証明書に署名するためにも使用できます。
認証局の仕事は、要求者がWebサイトの真の所有者であることを確認した場合にのみ証明書を発行することです。 この構造の考え方は、ハッカーがWebサイト用に独自の証明書を作成した場合、その証明書はコンピューターが信頼するCAによって署名されないため、警告が表示されるというものです。
HPKPは何をしましたか?
証明書システム全体は、認証局の信頼性に依存しています。 ただし、元々、CAがハッカーによって侵害されたり、不正になり、証明書を誤って発行することを選択したりすることに対する保護はありませんでした。
HPKPは、この可能性に対する保護となるように設計されています。 これにより、Webサイトは、ピン留めと呼ばれるプロセスでWebサイトに対して信頼できる証明書の排他的なリストを指定できます。 ルート証明書または中間証明書を固定することが可能であり、基本的に単一のCAがWebサイトの証明書を発行できるようになりました。 Webサイト自体の証明書を固定して、適切なCAでさえ別の有効な証明書を発行できないようにすることも可能でした。
技術的には、固定されるのは証明書自体ではなく、証明書のキーのハッシュです。 ハッシュは一方向の暗号化関数です。 つまり、ウェブサイトからブラウザに提示された証明書が固定された証明書と一致することを確認することはできますが、ハッシュを使用して有効な証明書を作成することはできません。
HPKPでは、少なくとも2つのキーを固定する必要があり、そのうちの少なくとも1つはバックアップであり、現在の証明書チェーンに含まれていない必要があります。 このバックアップにより、ユーザーが接続できなくなることのない新しい証明書へのスムーズなハンドオーバーを構成できます。
Webサイトによってブラウザに提示されたHTTPS証明書が、固定されたものの1つと一致しない場合 証明書の場合、ブラウザはそれを拒否し、ユーザーが証明書をバイパスできないようにする必要があります エラーメッセージ。
HPKPの構造
HPKPヘッダーには、3つの必須部分と2つのオプション部分があります。 ヘッダーには「Public-Key-Pins」というタイトルを付ける必要があります。次の2つ以上の証明書には、base64でエンコードされたSHA256ハッシュを「pin-sha256 =」の形式で固定する必要があります。
ヒント:SHA256は、HPKPで使用されるハッシュアルゴリズムです。 Base64は、0〜9、a〜z、A〜Z、および特殊文字「+」と「/」の64文字の文字セットです。 「=」は、必要に応じて最後の2文字までを埋めるために使用されます。
オプションの設定は「includeSubDomains」と「report-uri」です。 「includeSubDomainsは、「max-age」タイマーの期間中、現在のWebサイトの任意のサブドメインにHPKP保護を適用するようにブラウザに指示します。 「report-uri」は、エラーレポートを送信できるWebサイトを指定できる機能であり、問題の特定と解決に役立つように設計されています。
「Public-Key-Pins-Report-Only」というタイトルのヘッダーの2番目のバリアントがあります。 すべて同じですが、エラーが見つかった場合、エラーメッセージをブラウザに返し、設定されている場合は「report-uri」に返す以外のアクションは実行されません。 レポートのみのバリアントは、展開前にヘッダーの本格的なテストを可能にするように設計されており、エラーによってユーザーに問題が発生することはありません。
HPKPの問題
HPKPは、主に2つの理由で非推奨になりました。 ヘッダーがそれを使用するWebサイトに深刻な問題を引き起こす可能性がある2つの方法があり、これらはHPKPSuicideとRansomPKPと名付けられました。
HPKP Suicideは、Webサイトの正当な所有者がピン留めされたすべてのキーにアクセスできなくなる問題です。 これは、偶発的な削除、ハッキング、ウイルス、データ破損、またはその他の多くの理由で発生する可能性があります。 HPKPを正しく実装すること、特に証明書のローテーション中にHPKPを最新の状態に保つことは複雑であるため、構成エラーが発生するのは比較的簡単です。 ただし、HPKPを使用すると、問題が発生した場合、Webサイトに最近アクセスしたすべてのユーザーが、「最大年齢」タイマーの期間中、Webサイトにアクセスできなくなります。 ウェブサイトsmashingmagazine.comは投稿しました 論文 修正が展開される前の4日間、ほとんどの訪問者にとって基本的にサイトをオフラインにしたこの問題の経験を詳しく説明します。
身代金PKPは、ハッカーがWebサーバーにアクセスし、信頼できるすべての証明書とキーを盗み、それらを返すために身代金を要求する理論上の攻撃です。 通常の設定では、新しいキーと証明書を生成するだけで、1時間以内にWebサイトをバックアップして実行できます。 ただし、HPKPを有効にすると、これらのキーは固定されます。固定された証明書をユーザーに提供できない場合、「最大年齢」タイマーの間、ユーザーはWebサイトにアクセスできません。 構成によっては、バックアップが存在する場合、この問題を解決できない可能性があります。
これらの問題の両方で、新しいユーザーは通常どおりにWebサイトにアクセスできるようになります。 古いHPKPヘッダーが、現在欠落しているものだけを信頼するようにブラウザに指示しているのを見たことがありません。 証明書。 ただし、常連客や読者など、最近のすべての訪問者は、「最大年齢」タイマーの全期間を待つ必要があります。
これらの問題の重大性と構成および保守の複雑さを考えると、HPKPヘッダーの使用は非常に少なかった。 最終的に、主要なブラウザは完全にサポートを終了することに同意し、数年以内にHPKPヘッダーは一般的に非推奨になりました。