「暗号」とひとくくりに呼ばれるものは、実は2つの系統に分かれます。暗号化と復号に同じ鍵を使う共通鍵暗号と、RSAのように鍵がペアになっている公開鍵暗号です。

どちらが優れているという話ではなく、両者は得意分野がまったく違います。そして私たちが毎日使っているWebの通信(TLS)は、この2つの合わせ技で成り立っています。この役割分担を知っておくと、暗号関連のニュース——たとえばPQC移行で「何が」入れ替わるのか——が急に読みやすくなります。

共通鍵暗号——速いが「鍵の受け渡し」に泣く

共通鍵暗号は、金庫の鍵のイメージです。同じ鍵で施錠も解錠もする。現在の標準はAES(Advanced Encryption Standard)という方式で、処理が非常に速く、大量のデータを暗号化するのに向いています。ファイルの暗号化も、Wi-Fiも、動画配信の保護も、データ本体を暗号化しているのはほぼ共通鍵暗号です。

弱点はただひとつ、鍵をどうやって相手に渡すかです。暗号化した文書をメールで送るとして、その鍵もメールで送ったら、通信を盗み見ている攻撃者には鍵ごと渡ってしまいます。かといって、通信したい相手全員と事前に対面で鍵を交換するのは現実的ではありません。インターネットのように「初対面の相手(初めて訪れるWebサイト)と今すぐ安全に話したい」世界では、これは致命的な問題でした。これを鍵配送問題と呼びます。

公開鍵暗号——鍵配送を解決したが、遅い

公開鍵暗号は、この鍵配送問題への回答として1970年代に生まれました。「暗号化する鍵(公開鍵)は配ってしまってよく、復号する鍵(秘密鍵)だけ手元に置く」という設計なら、事前の鍵の受け渡しそのものが不要になります。初対面の相手でも、相手の公開鍵さえ入手すれば安全にメッセージを送れる——インターネット商用化の前提を作った発明です。

ただし公開鍵暗号には代償があります。計算が重いのです。同じデータ量を暗号化する場合、共通鍵暗号と比べて桁違いに時間がかかります。Webページの画像や動画をすべて公開鍵暗号で処理していたら、通信は使いものにならないほど遅くなります。

つまりこういう非対称な状況です。共通鍵は「速いが、渡せない」。公開鍵は「渡せるが、遅い」。ならば答えは自然に決まります。

TLSの合わせ技——公開鍵で「鍵を」渡し、共通鍵で「データを」守る

ブラウザがWebサイトに接続するとき(TLS通信の開始時)、内部ではおおよそ次のことが起きています。

  • まず公開鍵暗号の技術を使って、サイトが本物かを確認し、その場限りの共通鍵を安全に共有する(鍵交換)。渡すのは小さな鍵ひとつだけなので、遅さは問題にならない
  • 以降の通信データは、いま共有した共通鍵(AES)で高速に暗号化する

公開鍵暗号は配送係、共通鍵暗号は運搬係。それぞれの得意分野だけを担当する、きれいな役割分担です。ハイブリッド暗号方式とも呼ばれ、TLSに限らずVPNも暗号化メッセージアプリも、基本はこの構造でできています。

この構造が分かると、量子コンピュータの脅威の焦点も見えてきます。危ないのは主に配送係(RSAや楕円曲線暗号による鍵交換・署名)で、運搬係のAESは鍵の長さを伸ばせば当面持ちこたえると考えられています。だからPQC移行でまず入れ替わるのは鍵交換と署名なのです。どこで何の暗号が使われているかを把握すること——それが移行の出発点になります。

公開鍵暗号共通鍵暗号AES鍵交換暗号の基礎