web-dev-qa-db-ja.com

ストリーム暗号とブロック暗号の利点と欠点

Blowfish、AES、RC4、DES、Sealなどの暗号化アルゴリズムは、2つの暗号カテゴリのいずれかに実装されています。暗号のタイプの利点/欠点は何ですか?

66
Eric Warriner

どちらも対称暗号ですが、ストリーム暗号は「無限」の暗号鍵ストリームを生成し、それを使用して一度に1ビットまたは1バイトを暗号化することに基づいています(ワンタイムパッドと同様)、ブロック暗号はより大きなデータのチャンクで機能します。 (つまりブロック)一度に、多くの場合、追加のセキュリティのためにブロックを組み合わせます(たとえば、CBCモードのAES)。

  • ストリーム暗号は通常ブロックよりも高速ですが、それはそれ自身の代償を伴います。
  • ブロック暗号は、より大きなデータのチャンクで機能し、以前のブロックから「キャリーオーバー」することが多いため、通常はより多くのメモリを必要とします。一方、ストリーム暗号は一度に数ビットでしか機能しないため、メモリ要件が比較的低いため(組み込みデバイス、ファームウェア、特にハードウェアなどの限られたシナリオで実装します)。
  • ストリーム暗号は正しく実装するのがより難しく、使用法に基づいて弱点になりがちです。原理はワンタイムパッドに似ているため、キーストリームには非常に厳しい要件があります。一方、これは通常、扱いにくい部分であり、オフロードすることができます。外部ボックス。
  • ブロック暗号は一度にブロック全体を暗号化するため(さらに、最も推奨される「フィードバック」モードがあるため)、送信時にノイズの影響を受けやすくなります。つまり、データの一部をめちゃくちゃにすると、残りのすべてがおそらく回復不能。一方、ストリーム暗号では、バイトは個別に暗号化され、他のデータチャンク(ほとんどの暗号/モード)への接続はありません。多くの場合、回線の中断をサポートしています。
  • また、ストリーム暗号は整合性保護または認証を提供しませんが、一部のブロック暗号(モードによって異なります)は、機密性に加えて整合性保護を提供できます。
  • 上記のすべてのため、ストリーム暗号は通常、ネットワークストリームなど、データの量が不明または継続的である場合に最適です。一方、暗号をブロックするか、データの量が事前にわかっている場合(ファイル、データフィールド、またはHTTPなどの要求/応答プロトコル(メッセージ全体の長さがすでにわかっている場合)など)に便利です。始まり。
48
AviD

ブロック暗号は、固定数のビット(「ブロック」と呼ばれる)のシーケンスである値のキー依存の置換を実装する多目的なアルゴリズムです。多くの種類の暗号化プロトコルでさまざまな役割に使用できます。そのような役割の1つは、長いデータストリームの一括暗号化です。このようなことを達成するには、ブロック暗号を適切な 操作モード (別名「連鎖モード」)で使用する必要があります。従来のモードはCBCであり、流行の新しいモードはCTRです。

ストリーム暗号は、長いデータストリームのバルク暗号化を目的とした特殊なアルゴリズムです。アイデアは、ブロック暗号の多様性を失うことにより、より効率的なアルゴリズム(つまり、データを暗号化するものより高速)を作成することが可能になるということです。

ストリーム指向の暗号化モードを備えたブロック暗号とストリーム暗号の両方は、適切な一意/ランダムがなければ、2つの異なるストリームに対して同じキーが2回使用されると、セキュリティの問題が発生する可能性がありますベクター。 CBC暗号化の場合、IVは、新しいメッセージごとに、ブロックと同じサイズの新しいランダムなビットシーケンスでなければなりません。優れたストリーム暗号もIVを受け入れます。 RC4 と呼ばれる従来のストリーム暗号はIVなし(IVをどこにどのように挿入できるかは仕様に記載されていません)であり、多くの騒乱を招き、ストリーム暗号の概念に悪い名前を与えました。

より新しく、より安全な(そしてより速い)ストリーム暗号については、 eSTREAMポートフォリオ を参照してください。これらのアルゴリズムは、多くの暗号技術者によるかなり徹底的な分析を経ており、「非常に安全」と見なされています。

ストリーム暗号は、値がゼロの長いバイトシーケンスを暗号化することにより、 疑似乱数ジェネレータ に変換できます。実際、多くの(すべてではない)ストリーム暗号はPRNGとして内部的に機能し、キー依存の疑似ランダムバイトの長いシーケンスを生成します。これは、その後(ビットごとのXORによって)暗号化(または復号化)するデータと結合されます。ゼロバイトを暗号化することは、XORを完全に省略することと同じです。したがって、カスタムPRNGとしてストリーム暗号がよく使用されます。

26
Thomas Pornin

以前に言及されていないストリーム暗号の1つの利点は、パディングが必要ないことです(ブロック暗号は完全なブロックで動作するため、十分なデータがない場合は、何らかの方法で生成する必要があります)。そして、サプライズ(実際には、暗号化はマーフィーが至るところにある分野です)、たとえば Practical Padding Oracle Attacks で例示されているように、パディングが間違って行われる可能性があります。

また、ブロック暗号のセキュリティは動作モードに大きく依存します。ECBが時折見られることもあり、暗号を使用しないよりもはるかに優れています。

基本的に、どちらかが他よりも優れているとは言えません。1つは完全な暗号システムを調べてセキュリティを判断する必要があります。

9
Bruno Rohée

ストリーム暗号は、ビットのランダムストリームで平文データを暗号化します(通常はXOR簡単に逆転できるため)。128ビットデータがある場合は、128ビットのpsedurandom strem(鍵)を暗号化します。

ブロック暗号は、(キーに基づいて)同じ変換を使用して、プレーンテキストデータを一度に1ブロックずつ暗号化します。つまり、128ビットのデータがある場合、暗号はそれをブロック(32ビットの4ブロックなど)に分割し、すべてのブロックに同じ変換を適用して4つの暗号化されたブロックを取得します。これらを組み合わせると、最終的な暗号文が形成されます。

もちろん、このため、ブロックサイファーは安全ですが、関連するハードウェアの複雑さの点で使用するにはコストがかかります。ストリーム暗号はより高速で「安価」ですが、誤って実装すると セキュリティの問題 の影響を受けやすくなります。

1
gbr