暗号化と復号化

暗号化とは、意図した受信者以外には理解できないように情報を変換するプロセスです。復号化とは、暗号化された情報を再び理解できるように変換するプロセスです。 暗号アルゴリズムは暗号とも呼ばれ、暗号化または復号化に用いられる数学的な関数です。ほとんどの場合、2 つの関連する関数が採用され、1 つは暗号化に、もう 1 つは復号化に用いられます。

ほとんどの最新の暗号技術では、暗号化された情報を秘密にしておく能力は、広く知られている暗号アルゴリズムではなく、暗号化された結果を生成したり、以前に暗号化された情報を復号化したりするために、アルゴリズムと一緒に使用されなければならない鍵と呼ばれる数字に基づいています。正しい鍵を使った復号化は簡単です。正しい鍵を使わない復号化は非常に難しく、場合によっては実用上不可能な場合もあります。

以下のセクションでは、暗号化と復号化のための鍵の使用について紹介します。

対称鍵暗号

対称鍵暗号化では、暗号化鍵は復号鍵から計算でき、その逆も可能です。ほとんどの対称アルゴリズムでは、図1に示すように、暗号化と復号の両方に同じ鍵が使用されます。

Figure 1. Symmetric-Key Encryption

対称鍵暗号化の実装は非常に効率的で、ユーザーが暗号化と復号化の結果として著しい時間遅延を経験しないようにすることができます。1つの対称鍵で暗号化された情報は、他の対称鍵では復号化できないため、対称鍵暗号化はある程度の認証を提供します。このように、対称鍵が通信を暗号化するためにそれを使用する2つの当事者によって秘密にされている限り、各当事者は、復号化されたメッセージが意味のあるものであり続ける限り、他の当事者と通信していることを確信することができます。

対称鍵暗号化は、対称鍵が関係する2つの当事者によって秘密にされている場合にのみ有効です。他の誰かが鍵を発見した場合、機密性と認証の両方に影響します。未承認の対称鍵を持つ人は、その鍵で送信されたメッセージを復号化できるだけでなく、新しいメッセージを暗号化して、あたかも元々鍵を使用していた2つの当事者のどちらかから来たかのように送信することができます。

対称鍵暗号化は SSL プロトコルにおいて重要な役割を果たしており、TCP/IP ネットワーク上での認証、改ざん検知、暗号化に広く使用されています。SSL は公開鍵暗号化の技術も使用していますが、これについては次のセクションで説明します。

公開鍵暗号

公開鍵暗号化の最も一般的に使用されている実装は、RSA Data Security が特許を取得したアルゴリズムに基づいています。したがって、このセクションでは公開鍵暗号化に対する RSA のアプローチについて説明します。

公開鍵暗号化(非対称暗号化とも呼ばれる)では、電子的に身元を認証したり、データに署名したり暗号化したりする必要があるエンティティに関連付けられた公開鍵と秘密鍵のペアの鍵を使用します。それぞれの公開鍵は公開され、対応する秘密鍵は秘密にされます。公開鍵で暗号化されたデータは、秘密鍵でのみ復号化できます。図2は、公開鍵暗号化の仕組みを簡略化したものです。

Figure 2. Public-Key Encryption

図2のスキームでは、公開鍵を自由に配布することができ、自分だけがこの鍵で暗号化されたデータを読むことができるようになります。一般的に、暗号化されたデータを誰かに送るには、その人の公開鍵でデータを暗号化し、暗号化されたデータを受け取った人が対応する秘密鍵で復号化します。

対称鍵暗号化と比較すると、公開鍵暗号化はより多くの計算を必要とするため、大容量のデータには必ずしも適切ではありません。しかし、公開鍵暗号化を使って対称鍵を送信し、それを使って追加のデータを暗号化することは可能です。これが SSL プロトコルで使われているアプローチです。

偶然ですが、図2に示したスキームの逆も機能します。秘密鍵で暗号化されたデータは、公開鍵でのみ復号化できます。しかし、これは機密データを暗号化するのに好ましい方法ではありません。とはいえ、秘密鍵暗号化は有用です。秘密鍵を使用してデジタル署名でデータに署名することができるからです。これは、電子商取引や暗号化の他の商用アプリケーションでの重要な要件です。Firefox などのクライアントソフトウェアは、公開鍵を使用して、メッセージが秘密鍵で署名されたこと、および署名後に改ざんされていないことを確認できます。"電子署名" では、この確認プロセスがどのように機能するかを説明しています。

鍵の長さと暗号化強度

暗号化アルゴリズムを破るとは、基本的には平文で暗号化されたデータにアクセスするための鍵を見つけることです。対称的アルゴリズムの場合、アルゴリズムを破るということは、通常、テキストを暗号化するために使用される鍵を決定しようとすることを意味します。公開鍵アルゴリズムの場合、アルゴリズムを破るということは、通常、2人の受信者間で共有されている秘密情報を取得することを意味します。

対称アルゴリズムを破る方法の1つは、正しい鍵が見つかるまで、完全なアルゴリズム内のすべての鍵を単純に試すことです。公開鍵アルゴリズムの場合、鍵ペアの半分は公開されているので、残りの半分(秘密鍵)は、複雑ではあるが公開されている数学的計算を使って導き出すことができます。アルゴリズムを破るための鍵を手動で見つけることは、ブルートフォース攻撃と呼ばれます。

アルゴリズムを破ると、個人情報を傍受したり、個人情報になりすまして不正に検証したりするリスクが発生します。

アルゴリズムの鍵の強度は、アルゴリズムを破る最速の方法を見つけ出し、総当たり攻撃と比較することで決定されます。

対称鍵の場合、暗号化の強さは暗号化を実行するために使用される鍵の大きさや長さで表されることが多い。鍵の長さはビット単位で表される。たとえば、SSL でサポートされている RC4 の対称鍵暗号で使用する 128 ビットの鍵は、同じ暗号で使用する 40 ビットの鍵よりも格段に優れた暗号保護を提供します。大まかに言えば、128 ビットの RC4 暗号化は 40 ビットの RC4 暗号化の 3 x 1026 倍の強度があります。(RC4 と SSL で使用される他の暗号についての詳細は、"SSL 入門" を参照してください)。暗号化鍵は、鍵を破るための最良の既知の攻撃が、あらゆる鍵の可能性をテストするためのブルートフォースの試みよりも速くない場合、完全な強さとみなされます。

異なる暗号化方式では、同じレベルの暗号化強度を達成するために異なる鍵長を必要とする場合があります。例えば、公開鍵暗号化に使用される RSA 暗号は、それがベースになっている数学的な問題の性質上、ある長さの鍵に対して可能なすべての値のサブセットしか使用できません。対称鍵暗号化に使用されるような他の暗号化方式は、それらの値のサブセットではなく、与えられた長さの鍵に対して可能なすべての値を使用することができます。

RSA 鍵を破ることは比較的簡単なので、RSA 公開鍵暗号化暗号は非常に長い鍵を持たなければなりません。一方、対称鍵暗号は、ほとんどのアルゴリズムで80ビットの鍵でほぼ同じレベルの強度を達成することができます。

Original Document Information