公開鍵暗号は、暗号化と復号化に異なる鍵を使用する暗号化方式です。異なる鍵を非対称的に使用することから「非対称鍵暗号」とも呼ばれます。

公開鍵暗号化方式では「秘密鍵」と「公開鍵」の二つの鍵を使用します。

秘密鍵はその名のとおり秘密にする必要がある鍵で、公開鍵はみんなに公開しても良い鍵です。この二つは「鍵ペア」と呼ばれ、二つで一組のペアで存在します。

繰り返しになりますが、公開鍵は公開しても問題ありません。何故なら、公開鍵を知った場合でも秘密鍵を推測することは非常に困難という性質を持っているためです。また、公開鍵によって暗号化したものは対応する秘密鍵でしか復号化できず、逆に秘密鍵によって暗号化したものは対応する公開鍵でしか復号化できないという関係になっています。

公開鍵暗号の使い方

上述の鍵ペアを使用して、公開鍵暗号化方式がどのように働くのか、順を追ってみていきます。

  1. 受信者は公開鍵と秘密鍵(鍵ペア)を作ります
  2. 受信者は公開鍵をみんなに公開・配布し、秘密鍵だけを保管します
  3. 送信者は公開鍵を暗号鍵として暗号化して、送信します
  4. 受信者は秘密鍵を復号鍵として復号します

SSL/TLSでの公開鍵暗号の使われ方

公開鍵暗号の片方の鍵で暗号化した暗号文はもう片方の鍵でなければ復号できないという特徴を利用して、さまざまな応用があります。SSL/TLSでもその特徴を利用して公開鍵暗号を使用しています。

ディジタル署名としての利用

公開鍵暗号を使用してできる主な応用のひとつは、秘密鍵は所有者が限定されることを利用して、データの真正性を保証することです。これをディジタル署名(もしくは電子署名)と言います。これについては別記事で取り上げます。

鍵配送問題を解決するための利用

もうひとつは、公開鍵で暗号化したデータは秘密鍵の所有者しか復号化できないという特徴を利用して、共通鍵暗号で触れた鍵配送問題を解決することです。

公開鍵暗号を使って鍵配送問題を解決するには下記のような手順によります。

  1. 受信者(サーバー側)が公開鍵・秘密鍵のペアを生成
  2. 送信者がその公開鍵で秘匿したい鍵を暗号化して送付

公開鍵で暗号化したデータは、秘密鍵を持っている人でしか復号化できないし、公開鍵から秘密鍵が算出できないため、このような手順を踏むことで鍵を秘密裡に受け渡すことができるというわけです。

代表的な公開鍵暗号・鍵交換方法

代表的な公開鍵暗号・鍵交換方法を下表に示します。

名称鍵長(bit)暗号強度※補足
RSA1024、2048、3072等1024bitは中、2048bitは強発案者であるRivest、Shamir、Adlemanの3人の頭文字を取って名付けられた
DH(ディフィー・ヘルマン鍵交換)1024、2048、3072等1024bitは中、2048bitは高発案者であるDiffieとHellmanの名前を取って名付けられた
ECDH(楕円曲線ディフィー・ヘルマン鍵交換)160、256等160bitは中、256bitは高従来の整数ではなく、楕円曲線を使用して実行される鍵交換プロトコル

※正確にはDHやECDH自体は暗号ではありません。傍受されても解読しにくさの強度と捉えてください。

公開鍵暗号のメリット・デメリット

公開鍵暗号を使用するメリットは鍵配送と言えます。暗号化に使用する公開鍵は誰にでも公開しても良い鍵です。その公開鍵は秘密鍵がない限り機能しないし、公開鍵から秘密鍵が算出できないようにできているため、鍵配送云々を気にする必要はありません。

対して、デメリットは処理速度にあります。公開鍵暗号化方式は処理が複雑なため、演算に時間がかかり、暗号化処理、復号処理に時間がかかります。

まだある問題

SSL/TLSでは、共通鍵暗号の鍵(の基となる値)を安全に受け渡しするために上述のように公開鍵暗号が利用されます。公開鍵暗号を利用することで安全に鍵の受け渡しはできるのですが、それでもまだ問題があります。

それは、鍵を受け渡しする際に、「鍵を渡す先が本当に渡したいと考えている相手であるか」という問題です。

二者間で鍵の受け渡しを安全に(二者以外に秘密裡に)実施できたとしても、そもそも鍵を渡した相手が意図した相手ではなければ、鍵で秘匿したい情報を誤った相手に送信してしまいます。第三者が偽ってなりすましているかもしれません。これでは安全とは言えません。

このような問題を解決するのが「証明書」です。SSL/TLSでは、証明書を利用することで、相手が意図した相手であるかどうかを確認しています。証明書については別の記事で説明していきます。