本章では、ゼロ知識証明を理解するために必要な暗号技術について説明する。はじめに、共通鍵暗号、公開鍵暗号、デジタル署名、ハッシュ関数といった基本的な暗号技術について述べ、次に、それらの暗号技術を活用し、悪意がある第三者(以下、攻撃者と呼ぶ)によるWebサイトのなりすましを防ぐ技術であるSSL/TLS暗号化通信の仕組みを解説する。
2-1 暗号化・復号
暗号化とは、一定の規則に沿ってデータを攻撃者に解読できない状態に変換する処理である。一般に、暗号化されていないデータは平文と呼ばれ、平文を暗号化したデータは暗号文と呼ばれる。また、暗号文を意味のある状態(平文)に変換する処理を復号という(図表2-1)。暗号化と復号には「鍵」と呼ばれる特別なデータを使う。暗号化に用いた鍵に対応する復号用の鍵を保持する者のみが暗号文から平文を復号できる。暗号化と復号処理を行う技術は、共通鍵暗号と公開鍵暗号に大別される。これらの仕組みについて説明しよう。
2-2 共通鍵暗号
共通鍵暗号は、情報の暗号化・復号に同じ鍵(共通鍵)を使用する方式である。ここで、A(送信者)が共通鍵暗号を用いて、B(受信者)へデータを送ることを考える(図表2-2)。
はじめに、Aは共通鍵を用いて送りたいデータを暗号化してBに送る。Bは、共通鍵を用いて受けた暗号文からデータを復号する。
共通鍵暗号においては、Bに届く前に暗号文が盗聴されたとしても、AがBに送るデータは暗号化されているため、攻撃者はこのデータをそのまま読むことはできず、また、鍵を持っていないため復号することもできない。
共通鍵暗号の1つ目の問題点は、暗号化と復号に同じ鍵を使うことから、暗号文の送信者と受信者の間であらかじめ鍵を共有しておかなければならないことである。ただし、送信者と受信者が普段からよく会っていて、共通鍵を手渡しで渡せるのであれば問題はないのかもしれない。
2つ目の問題点は、共通鍵暗号はデータを送受信する相手が多いほど、管理しなければならない鍵の数が多くなることである。共通鍵暗号は、ある人との通信で使っている鍵を別の人との通信で使うことができない。たとえば、AがBとの間の暗号通信で共通鍵αを使っており、AがCとの通信でも共通鍵αを使ったとすると、Bは共通鍵αを使って第三者間通信であるAとCの通信の暗号文を共通鍵αを使って復号できてしまう。したがって、A、B、Cが相互に二者間通信を行い、第三者には暗号文を解読できないようにしたいときは、AB間、BC間、CA間のそれぞれで別の共通鍵が必要である。一般化すれば、n人と通信を行う当事者は、通信相手ごとに異なる共通鍵を使用しなければならないため、各人に対応したn個の共通鍵を秘密に管理しなければならない。
3つ目の問題点は、データを安全に送るためには、その準備のための鍵を安全に送らなければならないが、不特定多数と通信するインターネットのような環境では、通信の可能性がある相手すべてに対して、それぞれ鍵共有を行うということはコストと手間がかかりすぎるため不可能であったことである。共通鍵暗号の方式としては、AES[※]などがある。
[※]AES(Advanced Encryption Standard)とは、米国国立標準技術研究所(National Institute of Standards and Technology, NIST)が策定した共通鍵暗号の標準規格であり、現在広く利用されているものである。