公開鍵暗号の基礎と実務:TLS/HTTPSから鍵管理と信頼構築までを徹底解説

公開鍵とは

公開鍵(こうかいかぎ、public key)とは、公開しても安全な暗号鍵の一種で、非対称暗号(公開鍵暗号)における一方の鍵を指します。公開鍵は誰でも入手できることが前提ですが、「公開」イコール「無条件に信頼できる」わけではありません。公開鍵は対応する秘密鍵(private key)と数学的に結び付いており、暗号化や電子署名の検証などに使われます。秘密鍵を安全に保管することで、通信の機密性・完全性・送信者認証を実現します。

公開鍵暗号の基本的な仕組み

公開鍵暗号は「鍵対(key pair)」を用います。鍵対は公開鍵と秘密鍵から成り、次のような基本的な利用方法があります。

  • 暗号化:送信者が受信者の公開鍵でデータを暗号化し、受信者のみが自分の秘密鍵で復号して内容を読む。
  • 電子署名:送信者が自分の秘密鍵でデータに署名を作成し、受信者は送信者の公開鍵でその署名を検証して送信元の真正性と改ざんの有無を確認する。
  • 鍵交換(例:ECDH):公開鍵を使って共通鍵を安全に作り、対称暗号での通信に利用する(多くのプロトコルでハイブリッドに利用)。

主な用途

  • TLS/HTTPS:Webサーバの証明書(X.509)に含まれる公開鍵でサーバ認証と鍵交換を行う。
  • SSH:リモートログインの公開鍵認証。公開鍵はサーバに置かれ、秘密鍵で接続を認証する。
  • 電子メール(PGP/GPG):公開鍵で暗号化し、秘密鍵で署名・復号。
  • コード署名、ソフトウェア配布:公開鍵で署名検証を行い改ざんを検出。
  • 電子証明書とPKI:公開鍵と所有者情報を結び付け、信頼チェーンで真正性を保証する。

代表的なアルゴリズムと鍵長の目安

  • RSA:古典的で広く使われている。一般的な鍵長は2048ビット(最小推奨)、長期保護には3072ビット以上が推奨される。
  • 楕円曲線暗号(ECC):短い鍵長で高い安全性を提供。代表例はP-256(≈128ビット安全性)、P-384(≈192ビット)。
  • EdDSA(Ed25519など):速度と安全性のバランスが良く、署名用途で近年の推奨実装となっている(Ed25519は約128ビットの安全性)。
  • ハイブリッド方式:公開鍵で共通鍵を確立し、実際のデータ転送は高速な対称鍵暗号(AES等)で行うのが一般的。

公開鍵の配布と「信頼」の問題

公開鍵自体は公開してよいものですが、重要なのは「その公開鍵が本当に主張する相手のものか」をどう確かめるかです。代表的な信頼モデルは以下の通りです。

  • PKI(公開鍵基盤):発行主体(CA)がX.509証明書で公開鍵と主体情報を結び付け、ルートCAからの信頼チェーンで検証する(例:ブラウザのルートストア)。
  • Web of Trust:PGPのようにユーザ同士の署名で信頼を構築する分散型モデル。
  • TOFU(Trust On First Use):初回接続時に公開鍵(またはフィンガープリント)を受け入れ、以降その鍵を固定する手法。SSHのknown_hostsが例。

鍵のフォーマットと管理

公開鍵は様々なフォーマットで表現されます(PEM, DER, OpenSSH形式など)。公開鍵を安全かつ運用しやすく管理するには以下が重要です。

  • 秘密鍵は決して公開しない。パスフレーズやハードウェア(HSM、スマートカード、TPM)で保護する。
  • 鍵のローテーション(定期的な差し替え)と、失効(revocation)の運用を整備する。証明書失効にはCRLやOCSPが利用される。
  • バックアップと可用性。秘密鍵を紛失すると復号不能やサービス停止を招くため、安全なバックアップが必要。
  • 鍵の最小権限原則。運用用鍵と開発用鍵を分離し、アクセス制御を厳格にする。

代表的な脅威と対策

  • 秘密鍵の漏洩:最も致命的。HSMや鍵管理システムの導入、厳格なアクセス制御、ログ監査が有効。
  • 中間者攻撃(MitM):公開鍵のなりすましを防ぐためにPKIやピンニング、証明書検証を行う。
  • 乱数生成の弱さ:安全な乱数源を使わないと鍵生成が脆弱化する。OSやハードのCSPRNGを利用する。
  • サイドチャネル攻撃:実装レベルでの時間差や電力解析を狙う攻撃に対し、定数時間実装や物理対策が必要。
  • 量子コンピュータの脅威:将来的に現在の公開鍵アルゴリズム(RSA、ECC)が破られる可能性があるため、NISTのポスト量子暗号標準化動向を注視し移行計画を立てる。

実務でのチェックポイント

  • 証明書チェーンが正しいか、失効情報(CRL/OCSP)を確認しているか。
  • 使用アルゴリズムや鍵長が現行の推奨に沿っているか(古いRSA/MD5等は廃止する)。
  • 公開鍵のフィンガープリントを用いた初回確認や、公開鍵の配布経路の検証を行う。
  • 自動化:ACME(例:Let's Encrypt)や証明書管理ツールで証明書の更新と失効対応を自動化する。

まとめ

公開鍵は非対称暗号の重要な要素であり、正しく使えば機密性・認証性・完全性を高められます。しかし「公開」だからといって何もしなくてよいわけではなく、配布経路の検証、鍵管理、失効処理、アルゴリズム選定など運用面の対策が不可欠です。将来を見据えたアルゴリズム選定や鍵ライフサイクル管理を組織的に整備することが安全なシステム運用の要になります。

参考文献