南京錠と鍵のペア(写真はイメージです)

この記事は「暗号って何?(共通鍵編)」の続きです。

まず、前回の問題「Hspy hld estd lcetnwp azdepo?」の答えはこちらです。

前回の答え:
2021/09/02(木)
疑問文の「5W1H」の「W」と暗号文の頭文字「H」を比べると、鍵が計算できます。
暗号化の鍵は「11文字後ろ」で、逆にこの暗号文を「11文字前にずらす」と、「When was this article posted?(この記事が投稿されたのはいつ?)」となります。すなわち、前回の記事の投稿日が答えとなります。

暗号化と復号の鍵の分離

前回でもお話しした通り、共通鍵を配送するにも、配送する過程で鍵を第三者に盗まれては通信内容もだだ洩れとなって意味がありませんし、鍵を暗号化しようにも、共通鍵での暗号化では、この”鍵の鍵”を送り届けるのに同様に経路の問題が起こり、キリがありません。

そこで発明されたのが公開鍵暗号です。暗号化に使う鍵と復号に使う鍵が分離されています。鍵は、公開鍵と秘密鍵のペアになっています。公開鍵はその名の通り不特定多数の人に見せることが前提ですが、秘密鍵は絶対に外に漏らしてはいけません。

なお、公開鍵暗号方式は共通鍵暗号方式と比べると計算に時間がかかる欠点があります。そのため、共通鍵を暗号化するのが用途であり、データのやり取りは主にこの方法で生成した、その場限りの共通鍵暗号を使うことになります。

 

鍵交換

秘密鍵から生成した公開鍵を交換し、受け取った公開鍵と自分の秘密鍵から共通鍵を生成する

共通鍵を共有する手段として、鍵交換方式が使われます。当事者同士が秘密鍵を持ち、そこからその場限りの公開鍵を生成し、お互いに自分の公開鍵を送り合います。
その後、自分の秘密鍵と相手の公開鍵で計算して鍵を生成しますが、この方法で二人がそれぞれ生成した鍵は一致し、共通鍵となります。生成した鍵が一致するように二人の間で公開パラメータを合わせておく必要がありますが、やはりこれだけでは秘密鍵を特定できません。
鍵交換の代表的なアルゴリズムに、DH鍵共有があります。

 

(狭義)公開鍵暗号

受信者の公開鍵で暗号化すれば受信者本人にしか復号できない

当事者同士で使う共通鍵を、送信者が生成し、受信者の公開鍵で暗号化して送信するアルゴリズムも存在します。第三者は、この公開鍵で暗号化することはできても、公開鍵で元に戻すことはできません。受信者が、自分の秘密鍵で復号し、これで送信者が生成した共通鍵を安全に受け取ることができました。

 

デジタル署名

送信者の公開鍵で誰でも復号できるが暗号化自体は送信者本人にしかできない

オンライン上で本人確認をする手段が、デジタル署名です。こちらでは、秘密鍵で暗号化したデータ(実際はハッシュ値(固定長の出力に変換したもの))を、受信者が送信者の公開鍵で検証を行います。暗号鍵は本人しか持たず、第三者が検証鍵から送信者の暗号鍵を偽造することはできません。また、データのハッシュ値を署名に使うことで、データの改竄を検出しやすくする意味もあります。
デジタル署名の代表的なアルゴリズムに、RSA暗号があります。RSA暗号方式では狭義の公開鍵暗号とデジタル署名で同様の計算で鍵を生成します。これについては、また別の機会にて説明することにしましょう。

RSA暗号で遊ぼう