暗号化・証明書

証明書ピンニング しょうめいしょぴんにんぐ

証明書ピンニング公開鍵ピンニングHPKPMITMモバイルアプリセキュリティ
証明書ピンニングについて教えて

簡単に言うとこんな感じ!

アプリが「この証明書(または公開鍵)しか信頼しない!」とあらかじめ決め打ちにしておく手法だよ。偽の証明書を使った中間者攻撃(MITM)を防げるんだ。でも証明書更新のたびにアプリの対応も必要になるという諸刃の剣でもあるよ!


証明書ピンニングとは

証明書ピンニング(Certificate Pinning) とは、クライアント(モバイルアプリ・ブラウザなど)が特定の証明書または公開鍵だけを信頼するよう事前に登録(ピン留め)しておくセキュリティ技術です。

通常のTLS認証では、OSやブラウザに登録された任意のルートCAが署名した証明書を信頼します。しかし企業内プロキシや攻撃者が正規のCAから証明書を取得して中間者攻撃(MITM:Man-in-the-Middle Attack)を行うケースがあります。

証明書ピンニングを使うと、たとえ正規CAが署名した別の証明書でも「登録されていない証明書(ピン)は拒否」となるため、MITM攻撃が困難になります。特にモバイルバンキングアプリやセキュリティ重視のAPIクライアントで使われます。


証明書ピンニングの種類

種類ピン留め対象特徴
証明書ピンニング証明書全体(ハッシュ値)厳格だが証明書更新のたびにピン更新が必要
公開鍵ピンニング証明書内の公開鍵(ハッシュ値)証明書を更新しても同じ公開鍵なら再ピン不要
CA/中間CAピンニング特定の中間CAの証明書柔軟だが信頼範囲が広くなる

歴史と背景

  • 2011年:Googleがブラウザに証明書ピンニングを実装(主要Googleドメイン向け)
  • 2012年:モバイルアプリでの実装が広がり始める
  • 2014年:HPKP(HTTP Public Key Pinning)がRFC 7469として標準化
  • 2017年:GoogleがブラウザからのHPKP廃止を発表(誤設定リスクが高く、サービス停止事例も)
  • 2018年:Chrome 67でHPKPが廃止
  • 現在:ブラウザよりモバイルアプリやAPIクライアントでの利用が主流

ピンニングの問題点と代替手法

問題点内容
証明書更新リスクピンの更新を忘れると本物のサービスにも接続できなくなる
アプリのアップデート問題証明書更新に合わせてアプリリリースが必要
トラブルシューティング困難セキュリティツール・企業プロキシを使ったデバッグができない

Certificate Transparency(CT) は証明書ピンニングの代替として注目される手法で、CAが発行したすべての証明書を公開ログに記録することで不正発行を検知できます。


関連する規格・RFC

規格・RFC番号内容
RFC 7469HPKP(HTTP Public Key Pinning)— 現在は廃止
RFC 6962Certificate Transparency(代替手法)

関連用語