新刊のお知らせ
2016年12月17日に、この連載をベースにした新刊『エンジニアが生き残るためのテクノロジーの授業』が発売されました!
ITとビジネスの関係、コンピュータ、ネットワーク、プログラミング、データベース、セキュリティ、人工知能など、本連載で解説した内容も含め、エンジニアなら誰もが知っておくべきテーマを一冊で学ぶことができます。
安全性を高める暗号技術
前回はエンジニアが気をつけるべきセキュリティについて考えましたが、今回はもう少し踏み込んで、安全性を高める技術である「暗号」について解説します。エンジニアの多くはすでにある暗号技術を利用する立場ですが、仕組みを理解していないと、無意味な対策になってしまったり、現実的でない実装をしようとしてしまったりします。基本的な暗号技術と、暗号化される範囲を押さえておきましょう。
暗号の基本的な考え方
コンピュータの世界ならではの危険
日常生活を送る中で、私たちは「暗号」を意識していません。友人や家族との会話、店頭での商品の購入など、私たちは暗号を使わずに相手とやりとりしています。それは周囲に知られても問題のない内容で、相手と対面で会話しているからです。
コンピュータを使った通信では、「相手にだけ伝えたい重要な情報を、ほかの人に知られてしまう(盗聴)」だけでなく、「伝えたい内容を誰かに書き換えられてしまう(改ざん)」「やり取りしている相手が実は本人ではない(なりすまし)」といった事態が発生するリスクがあります。これは、対面でのコミュニケーションが中心だった従来の社会では存在しなかったリスクです。
暗号化とは
盗聴や改ざんなどによる被害を防ぐために、通信相手とは相互に理解でき、第三者には理解できないメッセージに変換して通信を行います。この変換を「暗号化」といい、元に戻すことを「復号」といいます。また、元の内容を「平文」、変換されたメッセージを「暗号文」と呼びます。
古くからあるものに、平文の文字に別の文字を割り当てる「換字式暗号」があります。図1のようにアルファベットを1文字ずらすだけでも、人間には分かりにくくなります。正規の受信者は、逆方向に1文字ずらせば復号できます。
この暗号は、ずらす文字数が分からないと元のメッセージを理解できません。しかしこの程度の暗号では、コンピュータを使えば簡単に復号されてしまいます。そこで、現在使われている暗号はもっと複雑になっています。上記のような、旧来の単純な暗号は「古典暗号」といい、現在使われている複雑な暗号は「現代暗号」といいます。
現代暗号の代表「共通鍵暗号」
共通鍵暗号の仕組み
現代暗号の代表的な例として「共通鍵暗号」があります。名前のとおり、送信者と受信者が共通の鍵を使う方法です。身近な例で考えると、大事なものを金庫に入れて鍵をかけ、それを配送するイメージです。受け取った人はスペアキーで金庫を開けて中身を手に入れます(図2)。
共通鍵暗号では、これと似たような作業をデータに対して行います。送信者はデータを鍵で暗号化し、出力された暗号文を送信します。受信者は送信者と同じ鍵を使って復号し、元のデータを得ます。途中の経路は暗号文しか通らないので、鍵を持っていないとデータを見ることはできません。
共通鍵暗号は実装が容易で、暗号化や復号を行う際の負荷も小さく、高速に処理できます。大きなファイルを暗号化するとき、処理に膨大な時間がかかるようでは実用に耐えないため、高速に処理できることは重要です。
鍵の渡し方が難しい
一方で、「鍵をどうやって相手に渡すか」という問題があります。ネットワーク経由で鍵を渡すと、ほかの人に知られてしまう可能性があり、暗号文を復号できてしまいます。
また、やり取りする相手が増えると鍵の数が膨大になり、管理が大変です(図3)。2人が通信する場合には1つの鍵でよいですが、3人になると各通信に別々の鍵が必要です。つまり、3人だと3個の鍵、4人だと6個、5人だと10個……のように増えていきます。n人の場合、n(n-1)/2の数が必要になってしまいます。