暗号技術では、情報セキュリティのCIAのうち、C(機密性)とI(完全性)を担保することができます。
暗号化の方法は、共通鍵暗号方式、公開鍵暗号方式、ハッシュ関数などがあります。
本記事を読むことで、各暗号技術の仕組みや利用目的、利用場面を理解することができます。
暗号通信モデルの基礎
暗号通信とは、暗号化した通信のことです。
暗号通信の流れを見てみましょう。
第三者でも内容を判読できる暗号化されていないデータを平文、第三者には判読できない暗号化されたデータを暗号文といます。
平文から暗号文にすることを暗号化、暗号文を平文にすることを復号と言います。
復号は、復号化ではないので、用語のミスに注意しましょう。
暗号化・復号には、鍵が必要です。
鍵はパスワードと違って、2進数の数値です。
例えば、代表的な鍵であるAESは128ビットになります。
この時、同じ鍵を使う方法を共通鍵暗号方式、異なる鍵を使う方法を公開鍵暗号方式と言います。
さらに、公開鍵暗号方式のやり方で「共通の秘密鍵」を受け渡すハイブリット暗号方式(セッション鍵方式)もあります。
共通鍵暗号方式と公開鍵暗号方式のいいところ取りをした方法が、ハイブリット暗号方式です。
現在よく使われているHTTPS通信で利用するTLSや、電子メールの暗号化で利用するS/MIMEも、ハイブリット暗号方式です。
共通鍵暗号方式
共通鍵暗号方式とは?
共通鍵暗号方式とは、暗号化と復号とで共通の鍵を用いる暗号方式です。
同じ鍵を使うため、暗号化、復号のための計算量が少なく済むことがメリットです。
共通鍵暗号方式を採用した理由は、だいたい暗号化・復号の処理時間が短いからです。
一方で、通信を行う相手ごとに異なる鍵が必要になるため、管理すべき鍵の数が多くなってしまうというデメリットがあります。
共通鍵は第三者に見られてしまうと簡単に復号できてしまうので、当事者間だけで秘密にしなければいけないよ。
管理すべき鍵が多いと、大変だね。
秘密にする鍵は、鍵ファイルで保管します。
鍵ファイルには、パスワードがかかっていることが多いです。
管理すべき鍵の計算方法
共通鍵暗号方式を使った場合、管理すべき鍵の数が多くなるというデメリットがありました。
ここでは、実際に管理すべき鍵の数の計算方法をご紹介します。
通信する人数がN人の場合、
鍵の総数は組み合わせになるため、N×(N-1)/2。
例えば、A~Eさんの5人で通信をする場合、
AさんはB~Eさん4名との鍵をそれぞれ持つことになります。
B~Eさんも同様に、一人あたり4つの鍵を管理することになります。
そのため、この5名で通信する場合、5×4=20個の鍵が必要になります。
ここで、Aさん-BさんとBさん-Aさんは同一の鍵を使っているため、重複が起きていることがわかりますね。
そのため、鍵の総数は20/2=10個となります。
一人あたり、相手の個数分の鍵を管理することになります。
ユーザーが多いオンラインショップのサーバーが共通鍵を使う場合、全ユーザー数分の鍵を管理する必要があります。
鍵の配送問題
共通鍵暗号では、事前に共通鍵を相手に送らなければいけません。
この時、第三者に盗まれずに安全に鍵を配送できるよう、両者で取り決めておく必要があります。
これを事前鍵交換といいます。
事前鍵交換を安全に行うために、工夫が必要です。
暗号規格
共通鍵暗号方式には、ブロック暗号とストリーム暗号があります。
ブロック暗号:平文を一定のサイズのブロックに分割
ストリーム暗号:1ビットや1バイトずつ暗号化/復号の変換処理に投入し、順次すすめる
どちらの方が優れているということはないので、注意しましょう。
ブロック暗号
ブロックの長さをブロック長といいます。
1ブロック単位でまとめて暗号化する。
代表的な規格はAESです。
AESとは、米国政府の標準暗号規格です。
ブロック長は128ビットです。
データを128ビットごとに区切るということです。
鍵長(鍵のビット数)は128/192/256ビットで利用可能です。
鍵長が小さいものだと、短時間で暗号化できるが、耐久性(強度)が劣ります。
耐久性が劣るということは、統計的な解析により、暗号が復号される恐れが高くなるという意味です。
ストリーム暗号
1ビットや1バイトずつ暗号化/復号の変換処理に投入し、順次すすめる方式です。
代表的な規格はKCipher-2(ケーサイファーツー)です。
携帯電話の通信暗号化などで利用されています。
TLS(HTTPSなど)で利用されることがおおいストリーム暗号としては、ChaCha20-Poly1305があります。
公開鍵暗号方式
公開鍵暗号方式とは?
暗号化・復号に異なる鍵を使う方式のことです。
暗号化に使う鍵を公開鍵(public key)、復号に使う鍵を秘密鍵(private key)と言います。
公開鍵・秘密鍵のペアを鍵ペアと呼びます。
メリット・デメリット
公開鍵暗号方式のメリットは2点です。
- 管理すべき鍵の数が少なく、2Nで計算できる
- 鍵交換が簡単にできる(公開鍵は秘密にする必要がない)
一方で、デメリットは、暗号化や復号の処理に共通鍵暗号方式に比べて、計算処理に時間がかかることです。
公開鍵や暗号文を読み取られても、秘密鍵がないと復号できません。
鍵ペアの作成方法
- 「鍵のもと」となる、ランダムな値を計算式で計算する。
- 計算した結果が鍵ペアとなる。
鍵の素(乱数)から作成されるため、鍵自体の情報を指定して鍵を作ることはできません。
公開鍵を手に入れても、その公開鍵から秘密鍵を推測することは事実上不可能(困難)です。
そのため、公開鍵は第三者に公開しても問題がありません。
だから、鍵の配送問題がないのね!
公開鍵暗号方式の特徴
公開鍵暗号方式は、守秘と署名を目的として利用されます。
守秘
受信者の公開鍵を入手して、その鍵を用いて暗号化します。
受信者の秘密鍵以外で復号することができないため、受信者本人以外に漏洩することを防げます。
ただし、攻撃者が偽の公開鍵を受信者の公開鍵として送信者に渡してしまう(すり替えてしまう)と、漏洩する恐れがあります。
これを防ぐために、公開鍵証明書を利用します。
公開鍵証明書を送信者に渡すことで、公開鍵をすり替えられないようにします。
署名
ディジタル署名は、公開鍵暗号方式を利用します。
ディジタル署名を利用することで、
- データの改ざんがないこと
- 作成者が本人であること
を担保できます。
暗号アルゴリズム
暗号アルゴリズム(鍵の種類)は色々あります。
例えば、次のようなものがあります。
- RSA:守秘・署名。鍵長2048ビット
- DSA:署名専用。鍵長2048ビット
- ECDSA:署名専用。鍵長224ビットだが、RSA/DSAと同程度の強度。