Blowfish、AES、RC4、DES、Sealなどの暗号化アルゴリズムは、2つのカテゴリの暗号のいずれかに実装されています。暗号の種類の長所/短所は何ですか?
回答
どちらも対称暗号ですが、ストリーム暗号はに基づいています「無限の」暗号鍵ストリームを生成し、それを使用して一度に1ビットまたはバイトを暗号化します(ワンタイムパッドと同様)が、ブロック暗号は一度に大きなデータチャンク(つまりブロック)で機能し、多くの場合ブロックを組み合わせます追加のセキュリティ(例:CBCモードのAES)。
- ストリーム暗号は通常、ブロックよりも高速ですが、それには独自の価格があります。
- ブロック暗号は、より大きなデータチャンクで機能し、多くの場合、前のブロックから「持ち越され」ますが、ストリーム暗号は一度に数ビットでしか機能しないため、メモリ要件は比較的低くなります(したがって、組み込みデバイス、ファームウェア、特にハードウェアなどの限られたシナリオで実装する方が安価です)。 。
- ストリーム暗号は正しく実装するのがより難しく、使用法に基づいて弱点になりがちです。原則はワンタイムパッドに似ているため、キーストリームには非常に厳しい要件があります。一方、それは」 s通常は注意が必要な部分であり、たとえば次のようにオフロードできます。外箱。
- ブロック暗号は一度にブロック全体を暗号化するため(さらに、最も推奨される「フィードバック」モードがあるため)、送信時のノイズの影響を受けやすくなります。つまり、ブロック暗号の一部を台無しにした場合です。データ、残りはすべておそらく回復不能です。一方、ストリーム暗号では、バイトは(ほとんどの暗号/モードで)他のデータチャンクに接続せずに個別に暗号化され、多くの場合、回線の中断をサポートします。
- また、ストリーム暗号は整合性保護または認証を提供しませんが、一部のブロック暗号(モードによって異なります)は、機密性に加えて整合性保護を提供できます。
- 上記のすべての理由により、ストリーム暗号は通常、データの量が不明であるか、ネットワークストリームなどの連続的な場合に最適です。一方、ブロック暗号、またはデータの量が事前にわかっている場合はより便利です-ファイル、データフィールド、またはメッセージ全体の長さがすでにわかっているHTTPなどの要求/応答プロトコルなど始まり。
コメント
- 2番目の箇条書きは正確ではありません。前のブロックからの"キャリーオーバー"によるメモリの違いはごくわずかであり、アルゴリズムごとのメモリの違いよりもはるかに小さいです(たとえば、内部状態が256バイトのRC4を、一部の実装では内部状態が0バイトのAESと比較します。最後の箇条書きは誤った区別を示しており、悪いアドバイスです。
- @ D.W。 2番目の箇条書きは"一般的に言えば"でしたが、これは一般的なケースです(ただし、厳密には正確ではないことを認めます)。
- @DW最後の箇条書きについてのコメントの根拠はありますか?誤った区別はどこにあり、なぜこれが悪いアドバイスだと言うのですか?
- はい、最後の箇条書きについての私のコメントの根拠があります。全体的に混乱しているようです。ブロック暗号はストリーミングデータに適しています。ストリーミングデータで正常に機能するさまざまな動作モードについては、CBCモード、CTRモードなどを参照してください。ブロック暗号は、データ量が事前にわかっている場合に限定されません。私は'ストリーミングデータのブロック暗号よりもストリーム暗号の方が優れていると考える理由を知りません(名前にもかかわらず)。
- D.W。正解:StreamCipherの' Stream 'という単語は、キーストリーム(平文と組み合わされたビットのストリーム)があることを反映しています。暗号文を生成します。平文の構成は反映されていません。明らかに、これは、後者が通常暗示される開発者やエンジニアをしばしば混乱させる詳細です。ブロック暗号を使用して、ストリーミング平文を適切に操作できます。また、ブロック暗号は、適切な動作モードで、ブロックサイズがアトミック(1バイトなど)の場合にストリーム暗号として使用できることもよく混乱します。
回答
ブロック暗号は、キーを実装する多用途のアルゴリズムです-固定数のビットのシーケンスである値の依存順列(「ブロック」と呼ばれる)。これは、さまざまな種類の暗号化プロトコルのさまざまな役割に使用できます。そのような役割の1つは、データの長いストリームの一括暗号化です。このようなことを実現するには、ブロック暗号を適切な動作モード(別名「チェーンモード」)で使用する必要があります。従来のモードはCBCであり、トレンディな新しいモードはCTRです。
ストリーム暗号は、データの長いストリームの一括暗号化を目的とした特殊なアルゴリズムです。アイデアは、ブロック暗号の多様性を失うことによって、より効率的なアルゴリズム(つまり、データをより速く暗号化するもの)を作成することが可能になるということです。
両方のブロック暗号ストリーム指向の暗号化モードとストリーム暗号を使用すると、適切で一意/ランダムな初期化ベクトルがなくても、2つの異なるストリームに対して同じキーを2回使用すると、セキュリティの問題が発生する可能性があります。 CBC暗号化の場合、IVは、新しいメッセージごとに、ブロックと同じサイズの新しい均一にランダムなビットシーケンスである必要があります。優れたストリーム暗号もIVを受け入れます。 RC4 と呼ばれる従来のストリーム暗号はIVがなく(仕様にはIVを挿入できる場所や方法が記載されていません)、多くの混乱を招き、ストリーム暗号の概念の悪い名前。
より新しく、より安全な(そしてより高速な)ストリーム暗号については、 eSTREAMポートフォリオを参照してください。これらのアルゴリズムは、多くの暗号技術者によってかなり徹底的な分析が行われ、「非常に安全」と見なされています。
ストリーム暗号は疑似乱数ジェネレータに変換できます。 値がゼロのバイトの長いシーケンスを暗号化する。実際、多くの(すべてではない)ストリーム暗号はPRNGとして内部的に機能し、キーに依存する疑似ランダムバイトの長いシーケンスを生成します。これは、その後、暗号化(または復号化)するためにデータと(ビット単位のXORによって)結合されます。ゼロバイトを暗号化することは、XORを完全に省略することと同じです。したがって、ストリーム暗号はカスタムPRNGとしてよく使用されます。
コメント
- 一般的にどちらがより安全か(ストリームとブロック)について言及するのを忘れました。
- アサーションが一般的に意味をなさないので、私は忘れませんでした。ブロック暗号とストリーム暗号はどちらも、適切に適用され、'構造上の弱点がない場合、適切なセキュリティを提供できます。
- "ブロック暗号の多様性"この部分に問題があります。ブロック暗号を本質的により用途の広いものにしているのは何ですか?ブロック暗号は、ストリーム(TLSなど)またはパケット化されたデータ(ESPなど)の両方を暗号化および認証するために使用でき、ストリーム暗号(TLSまたはDTLSなど)についても同じです。ストリーム暗号がより"自然な"(オーディオの暗号化など)に見える場合や、ブロック暗号がより natural "(ディスクの暗号化など)が、合理的なアプリケーションに大きなギャップが見られない'
回答
これまでに言及されていないストリーム暗号の利点の1つは、 「パディングは必要ありません(ブロック暗号は完全なブロックで動作するため、十分なデータがない場合は、なんらかの方法で生成する必要があります)。驚いたことに(実際には、暗号化はマーフィーがどこにでもある分野です)、パディングを行うことができます。たとえば、実用的なパディングOracle攻撃に例示されているように間違っています。
また、ブロック暗号のセキュリティは、その動作モードに大きく依存します。 ECBが時々あちこちで使用されているのを今でも見てください。すべて。
基本的に、一方が他方より優れているとは言えません。セキュリティ判断を下すために、完全な暗号システムを検討する必要があります。
コメント
- 最初の段落:'パディングを必要としないブロック暗号の操作モードがあります。たとえば、CTRモードです。したがって、これはストリーム暗号に固有の利点ではありません。しかし、最後の段落に+1します-よく言われます!
- そうですね' CTRとOFBは、ブロック暗号からストリーム暗号を作成するための構造です。 'は、ブロック暗号のもう1つの優れた点です。ストリーム暗号であれ、一方向ハッシュであれ、他のものの構成要素として簡単に使用できます。ストリーム暗号はそれほど用途が広いわけではありません。
- 一般的にどちらがより安全であるか(ストリームとブロック)について言及するのを忘れました。
- 本質的に安全なものはありません。'実際の使用方法
回答
ストリーム暗号はプレーンテキストデータを暗号化しますビットのランダムストリームを使用します(簡単に元に戻すことができるため、通常はXORを使用します)。 128ビットのデータがある場合は、128ビットの疑似ランダムストレム(キー)を使用して暗号化します。
ブロック暗号は、(キーに基づいて)同じ変換で一度に1ブロックずつ平文データを暗号化します。 )。つまり、128ビットデータがあり、暗号はそれをブロックに分割し(32ビットの4ブロックなど)、4つの暗号化ブロックを取得するすべてのブロックに同じ変換を適用し、それらを組み合わせて最終的な暗号文を形成します。
Ofもちろん、このブロック暗号のおかげで、ハードウェアの複雑さの観点から、より安全ですが、使用するには費用がかかります。ストリーム暗号はより高速で「安価」ですが、正しく実装されていない場合、セキュリティの問題の影響を受けやすくなります。
コメント
- 最後の段落にはいくつかの事実上の誤りがあります。ブロック暗号は一般的に安全ではなく、ハードウェアで必ずしも悪いわけでもありません。ストリーム暗号は必ずしも高速または安価であるとは限りません。
- @DW:それにもかかわらず、ストリーム暗号はブロック暗号よりも通常高速または安価です。'の取引:パフォーマンスの向上と引き換えに、汎用性の低いアルゴリズム。たまたまAES / CTRよりも低速で高価なストリーム暗号は、まったく使用されません。
- 一般的にどちらがより安全か(ストリームとブロック)について言及するのを忘れました。
回答
データ(暗号化されるもの)は通常、ストリームで送信されます。それを暗号化するには、ストリーム暗号、つまりデータのストリームでの使用に適した暗号化アルゴリズムを採用する必要があります。ストリームは、任意、可変、または不特定の長さのビット(またはバイト)のシーケンスです。
これまでに発明した最高の暗号は、通常、ブロック暗号です。ブロック暗号は、単一の固定サイズのデータブロックを暗号化することができます。そして、私たちの周りの証拠によると、ストリーム暗号よりも優れたブロック暗号を構築する方が明らかに簡単です。
ただし、朗報です。特定のパターン(「動作モード」)で特定のブロック暗号を使用し、特定のパディング戦略を利用することで、任意のブロック暗号をストリーム暗号に変換できます。つまり、ブロック暗号であるより優れた暗号を使用して、データの大部分がストリームで送信されるデータを暗号化できます。
コメント
- 2番目の文は誤解を招くようです。 CBCモード、CTRモードなど、いくつかの標準的な操作モードのいずれかを使用して、ブロック暗号を使用してストリーミングデータを暗号化できます。AES-CBCは依然としてブロック暗号です。実際、ブロック暗号のほぼすべての標準操作モードは、すでにストリーミングデータをサポートしています。さらに、ブロック暗号は動作モードなしでは安全ではないため、'動作モードとは異なり、ストリーミングデータを暗号化する場合にのみ必要なオプションです。 。