Blowfish、AES、RC4、DES、Sealなどの暗号化アルゴリズムは、2つの暗号カテゴリのいずれかに実装されています。暗号のタイプの利点/欠点は何ですか?
どちらも対称暗号ですが、ストリーム暗号は「無限」の暗号鍵ストリームを生成し、それを使用して一度に1ビットまたは1バイトを暗号化することに基づいています(ワンタイムパッドと同様)、ブロック暗号はより大きなデータのチャンクで機能します。 (つまりブロック)一度に、多くの場合、追加のセキュリティのためにブロックを組み合わせます(たとえば、CBCモードのAES)。
ブロック暗号は、固定数のビット(「ブロック」と呼ばれる)のシーケンスである値のキー依存の置換を実装する多目的なアルゴリズムです。多くの種類の暗号化プロトコルでさまざまな役割に使用できます。そのような役割の1つは、長いデータストリームの一括暗号化です。このようなことを達成するには、ブロック暗号を適切な 操作モード (別名「連鎖モード」)で使用する必要があります。従来のモードはCBCであり、流行の新しいモードはCTRです。
ストリーム暗号は、長いデータストリームのバルク暗号化を目的とした特殊なアルゴリズムです。アイデアは、ブロック暗号の多様性を失うことにより、より効率的なアルゴリズム(つまり、データを暗号化するものより高速)を作成することが可能になるということです。
ストリーム指向の暗号化モードを備えたブロック暗号とストリーム暗号の両方は、適切な一意/ランダムがなければ、2つの異なるストリームに対して同じキーが2回使用されると、セキュリティの問題が発生する可能性がありますベクター。 CBC暗号化の場合、IVは、新しいメッセージごとに、ブロックと同じサイズの新しいランダムなビットシーケンスでなければなりません。優れたストリーム暗号もIVを受け入れます。 RC4 と呼ばれる従来のストリーム暗号はIVなし(IVをどこにどのように挿入できるかは仕様に記載されていません)であり、多くの騒乱を招き、ストリーム暗号の概念に悪い名前を与えました。
より新しく、より安全な(そしてより速い)ストリーム暗号については、 eSTREAMポートフォリオ を参照してください。これらのアルゴリズムは、多くの暗号技術者によるかなり徹底的な分析を経ており、「非常に安全」と見なされています。
ストリーム暗号は、値がゼロの長いバイトシーケンスを暗号化することにより、 疑似乱数ジェネレータ に変換できます。実際、多くの(すべてではない)ストリーム暗号はPRNGとして内部的に機能し、キー依存の疑似ランダムバイトの長いシーケンスを生成します。これは、その後(ビットごとのXORによって)暗号化(または復号化)するデータと結合されます。ゼロバイトを暗号化することは、XORを完全に省略することと同じです。したがって、カスタムPRNGとしてストリーム暗号がよく使用されます。
以前に言及されていないストリーム暗号の1つの利点は、パディングが必要ないことです(ブロック暗号は完全なブロックで動作するため、十分なデータがない場合は、何らかの方法で生成する必要があります)。そして、サプライズ(実際には、暗号化はマーフィーが至るところにある分野です)、たとえば Practical Padding Oracle Attacks で例示されているように、パディングが間違って行われる可能性があります。
また、ブロック暗号のセキュリティは動作モードに大きく依存します。ECBが時折見られることもあり、暗号を使用しないよりもはるかに優れています。
基本的に、どちらかが他よりも優れているとは言えません。1つは完全な暗号システムを調べてセキュリティを判断する必要があります。
ストリーム暗号は、ビットのランダムストリームで平文データを暗号化します(通常はXOR簡単に逆転できるため)。128ビットデータがある場合は、128ビットのpsedurandom strem(鍵)を暗号化します。
ブロック暗号は、(キーに基づいて)同じ変換を使用して、プレーンテキストデータを一度に1ブロックずつ暗号化します。つまり、128ビットのデータがある場合、暗号はそれをブロック(32ビットの4ブロックなど)に分割し、すべてのブロックに同じ変換を適用して4つの暗号化されたブロックを取得します。これらを組み合わせると、最終的な暗号文が形成されます。
もちろん、このため、ブロックサイファーは安全ですが、関連するハードウェアの複雑さの点で使用するにはコストがかかります。ストリーム暗号はより高速で「安価」ですが、誤って実装すると セキュリティの問題 の影響を受けやすくなります。