非対称鍵暗号
このレッスンでは、今日の多くの安全なネットワーク通信の基盤を成す非対称鍵暗号について学びます。
レッスンを終えると、次の内容を理解できるようになります:
- 非対称鍵暗号とは何か
- 鍵交換やデジタル署名を含む、非対称鍵暗号の利用方法
- 非対称鍵暗号全般のセキュリティ
- RSA、DSA、楕円曲線アルゴリズムとそのセキュリティの詳細
- アルゴリズムの実際の動作を示すPythonコード例
- 古典コンピューターおよび量子コンピューターからこれらのアルゴリズムへの脅威
非対称鍵暗号入門
前回のレッス ンで学んだように、対称鍵暗号は情報保護において非常に高速かつ効率的ですが、いくつかの限界があります:
- 安全な情報交換を希望する当事者の数が増えるにつれて、必要な鍵の数は組み合わせ爆発的に増大します。送信者と受信者の間でこれらの鍵を安全に配布するメカニズムは提供されていません。
- 否認防止の仕組みがありません。いかなる当事者もメッセージを復号または暗号化でき、メッセージが受信されたこと、あるいはその発信元を保証する方法がありません。
これら両方の問題の解決策が、非対称鍵暗号(AKC)、別名公開鍵暗号(PKC)によって提供されており、それゆえに現代のデジタルセキュリティの礎となっています。
非対称鍵暗号(AKC)では、公開鍵と秘密鍵の一対の鍵を使用します。公開鍵と秘密鍵は暗号学的に連携しており、通常は特殊な数学的アルゴリズムを使って同時に鍵ペアとして生成されます。公開鍵はその名が示す通り自由に配布されることを意図している一方、秘密鍵は鍵ペアを生成した当事者によって秘密に保たれ ます。非対称鍵ペアを使った通信のセキュリティは、秘密鍵が機密に保たれている限り保証されます。

図1. 非対称鍵暗号化
AKCは以下のような有用な機能を提供します:
- 暗号化と復号 による通信の機密性の確保。
- デジタル署名 による真正性、完全性、否認防止の保証。
- 安全な鍵交換 による対称暗号システムの後続利用の促進。
現代のアプリケーションでは、AKCは主にデジタル署名と安全な鍵交換に使用されます。このレッスンでは、これら二つの主要な機能を紹介し、それらの機能に対するいくつかの暗号プロトコルのバリエーションについて説明します。
非対称鍵暗号による鍵交換
暗号学における基本的な問題の一つが、鍵を安全に交換することです。たとえば、二者が対称暗号を使いたい場合、両者がメッセージを暗号化・復号するために同じ鍵を必要とします。しかし、その鍵をどうやって安全に交換するのでしょうか?非対称鍵暗号は、インタラクティブおよび非インタラクティブな鍵交換メカニズムによってこの問題に対処します。
インタラクティブな鍵交換
インタラクティブな鍵交換プロトコルとは、安全でない通信チャネルを通じて二者が協力して共有秘密鍵を作成する方法を指します。この共有秘密鍵はその後、対称暗号化と復号の作業に使用できます。
このようなプロトコルの中で最もよく知られているのが、鍵交換を促進するために特別に考案されたDiffie-Hellmanアルゴリズム(DH)です。このプロトコルでは、各当事者が鍵ペア(公開鍵と秘密鍵)を生成し、公開鍵を公開します。次に各当事者は、自分の秘密鍵と相手の公開鍵を使って共有秘密鍵を生成します。DHは剰余算の原理を用いることで、互いに相手の公開鍵にしかアクセスできない状況でも両者が同じ共有秘密にたどり着けるようにしています。
楕円曲線暗号(ECC)に基づく現代の暗号システムは、楕円曲線Diffie-Hellman(ECDH)鍵交換によってこの概念を拡張しています。ECDHはDHと同様に機能しますが、楕円曲線の性質を利用することで、より安全かつ効率的なシステムを実現しています。

図2. 鍵交換プロトコル
非インタラクティブな鍵交換
DHやECDHのような鍵交換プロトコルは対話的であり、対称鍵を決めるために双方向の通信を必要とします。それとは異なり、AKCは共有秘密鍵を確立するための非インタラクティブな方法も提供しています。このような方式では、一方の当事者が鍵ペア(公開鍵と秘密鍵)を生成し、もう一方の当事者と公開鍵を共有します。この第二の当事者はランダムな対称鍵を生成し、受け取った公開鍵で暗号化して第一の当事者に送り返します。第一の当事者は秘密鍵を使って受け取ったメッセージを復号し、共有対称鍵を取得します。この方式は、対称鍵が一方の当事者によって決定され、暗号化された形で安全にもう一方に通知されるという意味で非インタラクティブです。
非インタラクティブな鍵交換における重要な考慮事項として、交換したい対称鍵のビット長とAKCで推奨されるメッセージサイズの差異があります。通常、現代の対称鍵は128〜256ビット程度ですが、RSAなどの非対称鍵暗号システムは1024〜4096ビット程度のメッセージサイズで動作します。そのため、AKCを使って対称鍵を送信する場合でも、セキュリティ上の理由から1024〜4096ビットの長いメッセージにエンコードする必要があります。これには二つのアプローチで対応できます:
-
パディングベースの鍵交換: このアプローチでは、まず短い(128〜256ビットの)対称鍵を生成し、次にOAEPなどの合意済みの可逆パディング方式を使って長い(1024〜4096ビットの)メッセージに埋め込みます。この長いメッセージはAKCで暗号化され、暗号文として送信されます。受信者はまず暗号文を復号し、次にパディングを除去して短い対称鍵を取り出します。
-
鍵カプセル化メカニズム(KEM): KEM ベースの鍵交換では、まずランダムな長い(1024〜4096ビットの)平文メッセージを生成し、そこから合意済みの鍵導出関数(KDF)を使って短い(128 〜256ビットの)対称鍵を導出します。長い平文はAKCで暗号化され、暗号文として受信者に送信されます。受信者は秘密鍵を使って暗号文をデコードし、KDFを使って短い(128〜256ビットの)対称鍵を導出します。RSAのような一般的な暗号システムは、データを直接暗号化できる能力を持つことからKEMの実装に使用できます。

図3. 鍵カプセル化メカニズム
非対称鍵暗号によるデジタル署名
デジタル署名は非対称鍵暗号のもう一つの強力な応用です。AKCにおいて各エンティティが固有の秘密鍵を持つという事実を活かし、認証、完全性、否認防止を実現します。署名プロトコルの基本的な考え方は、安全なメッセージの送信者が固有の秘密鍵を使ってメッセージにデジタル署名を付加するというものです。受信者は送信者の公開鍵を使ってデジタル署名を検証します。AKCにおけるデジタル署名は、専用に設計されたアルゴリズムを使用するか 、汎用暗号システムを使って実装できます。

図4. 非対称鍵暗号によるデジタル署名
専用デジタル署名アルゴリズム
現在、デジタル署名に関する米国連邦情報処理標準(FIPS)は、単にデジタル署名アルゴリズム(DSA)と呼ばれる専用方式です。Diffie-Hellmanプロトコルとある程度類似した形で、DSAは署名の生成と検証に剰余指数演算と乗法逆元の代数的性質を活用します。
楕円曲線 デジタル署名アルゴリズム(ECDSA)はDSAのECCバリアントであり、同じ機能を提供しながら鍵長が大幅に短くなっています。これにより効率が向上し、リソース制約のあるシステムでの人気の選択肢となっています。
DSAとECDSAの両方については、後でより詳しく説明します。
汎用暗号システムを使ったデジタル署名方式
専用アルゴリズムに加えて、デジタル署名はRSAのような汎用非対称暗号システムを使っても生成できます。
RSAについては後のセクションで詳しく説明しますが、これも剰余乗法逆元と剰余指数演算を基本演算として活用しますが、DSAとは異なる順序でそれらを組み合わせています。RSAでは、署名者が通常メッセージのハッシュを作成し、そのハッシュを秘密鍵で暗号化してデジタル署名を生成します。どの当事者も署名者の公開鍵でその署名を復号し、ハッシュ化されたメッセージと比較すること で署名を検証できます。
非対称鍵暗号の応用
非対称鍵暗号は現代のデジタル技術アプリケーションに遍在しています。上述のAKCの基本機能は、以下を含む多くの上位アプリケーションプロトコルの構成要素となっています:
-
インターネット通信: HTTPSなどのインターネット上の安全な通信は、非対称鍵暗号に大きく依存しています。トランスポート層セキュリティ(TLS)およびその前身であるセキュアソケットレイヤー(SSL)は、初期ハンドシェイクプロセスで非対称鍵暗号を使って対称鍵を確立し、その後の通信セッションで使用します。
-
認証: 非対称鍵暗号はデジタル署名の作成に使用され、エンティティが特定の送信者からのデジタル文書やメッセージを認証できるようにします。ソフトウェアアップデートの検証から法的拘束力のあるデジタル契約まで、多くの場面で使用されています。
-
メール暗号化: PGP(Pretty Good Privacy)やそのオープンソース代替であるGPG(GNU Privacy Guard)などのメール暗号化プロトコルは、意図した受信者だけがメール内容を読めるよう非対称鍵暗号を使用します。
-
セキュアシェル(SSH): SSHは、安全でないネットワーク上でのリモートログインやその他の安全なネットワークサービスのためのプロトコルです。非対称鍵暗号を使ってサーバーをクライアントに対して認証し、オプションでクライアントをサーバーに対して認証します。
-
VPN(仮想プライベートネットワーク): 非対称鍵暗号はVPNにおける安全な接続の確立に使用され、パブリックネットワーク上での安全な通信を保証します。
-
ブロックチェーンと暗号通貨: BitcoinやEthereumを含むブロックチェーン技術は非対称鍵暗号を使用しています。たとえば、Bitcoinの所有権は非対称鍵暗号を使ったデジタル署名によって確立されます。
-
認証局: 非対称鍵暗号は認証局(CA)がデジタル証明書を発行・署名するために使用され、TLS通信、コード署名、メール暗号化などで利用されます。デジタル証明書は公開鍵を特定のエンティティ(たとえば個人やサーバー)に結びつけます。

図5. 非対称鍵暗号を使ったデジタル証明書の発行と署名