' ECB暗号化を使用すべきではないのはなぜですか?
On 2月 18, 2021 by adminJavaを使用して暗号化された文字列を生成していますが、ビルド時に次の警告が表示されます:
ECB暗号化モードは使用しないでください
だから、なぜECBを使用すべきではないのか、代わりに何を使用できるのか疑問に思います。 ?
コメント
- コメントは詳細なディスカッション用ではありません。この会話はチャットに移動されました。
- ズームで作業していますか?;)
回答
ECB暗号化を使用すべきではないのはなぜですか?
ECBモード暗号化を使用しない主な理由は、
意味的に安全 —つまり、ECBで暗号化された暗号化テキストを観察するだけで、プレーンテキストに関する情報が漏洩する可能性があります(長さを超えても、任意の長さのプレーンテキストを受け入れるすべての暗号化スキームは、ある程度リークします。
特定つまり、ECBモードの問題は、ECBモードを使用してプレーンテキストの同じブロック(8バイトまたは16バイト、または基になる暗号のブロックサイズが大きい)を暗号化すると、常に同じ暗号文のブロックが生成されることです。これにより、攻撃者は次のことが可能になります。
- 2つのECB暗号化メッセージが同一であるかどうかを検出する。
- 2つのECB暗号化メッセージが共通のプレフィックスを共有するかどうかを検出する。
- 2つのECB暗号化メッセージが他の共通の部分文字列を共有しているかどうかを検出します。ただし、それらの部分文字列がブロック境界で整列されている場合に限ります。または
- 単一のECB暗号化メッセージに繰り返しデータが含まれているかどうか(およびどこにあるか)を検出します(スペースやヌルバイトの長い実行、繰り返されるヘッダーフィールド、テキスト内の偶然に繰り返されるフレーズなど)。
ウィキペディアには、この弱点の優れたグラフィックデモンストレーションがあります。ここでは、同じ(未加工の非圧縮)画像がECBモードと意味的に安全な暗号モード(CBC、CTR、CFB、OFBなど):
このシナリオはやや人工的ですが(通常、このような生の画像を暗号化することはありません)、 ECBモードの問題をうまく示しています。入力画像の繰り返し領域により、暗号化された出力に繰り返しパターンが生じるため、暗号化されていても画像の大規模な特徴の多くが認識されたままになります。現実の世界では、暗号分析者がECBを攻撃します-ベースの暗号化スキームは暗号文の16進ダンプでそのようなパターンを探す可能性が高くなりますが、原則は同じです。
実際のデータ侵害に寄与するECB暗号化のこの弱点の実際のケースは、 この回答で説明されているように、2013年の Adobeパスワードデータベースのリークによって与えられました。ここで、リークの重大度に寄与する1つの要素は、適切にハッシュするのではなく、AdobeがECBモードを使用してパスワードを暗号化したことです。これにより、攻撃者は複数のアカウントで共有されているパスワードや、他のパスワード( password1 や password2 など)と共通のプレフィックスを共有しているパスワードをすばやく見つけることができ、それぞれのおおよその長さも明らかになりました。パスワード。
ECB暗号化モードには、他にも弱点があります。たとえば、柔軟であるという事実があります。平文のブロックは個別に暗号化され、攻撃者は以前に観察された暗号化テキストからブロックをつなぎ合わせることで、新しい有効な暗号化テキストを簡単に生成できます。
ただし、順応性は、ECB暗号化がメッセージ認証コード。この状況では、他のすべての非認証暗号化モードによって(ある程度)共有されます、前述のCBC、CTR、CFB、OFBと同様。したがって、ECBモードの特定の弱点とは見なされませんが、次の場合に追加の問題になる傾向があります。 ECBモードが使用されることはありません。
代わりに何を使用する必要がありますか?
認証済み暗号化を使用する必要がありますモード( GCM 、 EAX 、 OCB 。
個人的には、短いメッセージの場合、私は SIVモード( RFC 5279 )。これにより、誤用に対する耐性がさらに高まります。 (他の多くの暗号化モードは、同じIV /ナンスが誤って複数のメッセージの暗号化に使用された場合、かなりひどく壊れます。SIVモードは、暗号化されたメッセージが同一であるかどうかのリークを除いて、この状況ですべてのセキュリティプロパティを保持します。)
従来の意味的に安全な暗号化モード( CBC や CTR )、暗号化を使用してメッセージ認証コード( HMAC など)と組み合わせる-次に-MAC の構築。 (つまり、最初にメッセージを暗号化し、次に暗号文のMACを計算し、それを暗号文に追加する必要があります。)メッセージを復号化する前にMACを確認する限り、この構造はあなたを保護します。アクティブな(選択された暗号文)攻撃に対するこれらのモードのさまざまな脆弱性。
ディスク暗号化またはパーツを変更する機能を必要とする同様のアプリケーションの場合すべてのデータを再暗号化せずに暗号文を暗号化するには、 XTS などのその目的のために設計された暗号モードを使用する必要があります。このようなモードは一般にアクティブな攻撃に対する耐性がなく、使用する前に理解しておく必要のある他の弱点がある可能性があることに注意してください。可能であれば、ハッシュツリーのMACなどの何らかの形式の整合性保護と組み合わせる必要があります。
コメント
- データストアのブロックを任意の順序で読み取り/書き込みできるようにしたい場合、できればすべて1のブロックをすべてにマップするときに何を提案しますか?ものはブロックしますか?私の傾向は、ブロック番号の非常に単純なハッシュを使用してブロックデータを排他的論理和し、すべてが1のブロックを生成する場合は、排他的論理和演算を元に戻し/繰り返し、結果にECBを使用し、結果の補数を排他的論理和することです。オールワンブロックを暗号化する方法[補数はキーごとに1回だけ計算する必要があります]。それは良いアプローチのように思われますか?
- @supercat:その'は基本的にディスク暗号化、そのために設計されたモードを使用できます。 XTSは良い選択だと思いますが、すべてのディスク暗号化モードと同様に、制限があります(使用する前に理解しておく必要があります)。可能であれば、アクティブな攻撃から防御するために、何らかのMACと組み合わせる必要があります。
- @IlmariKaronen:" don ECBを使用しない"は少しやり過ぎです。私はリスクを理解していますが、多くの場合(あなたのドキュメント(暗号化するもの)が'非常に秘密でなく、敵が'機能が多すぎるなど)、大丈夫です。
- @giorgim:'本当に良い理由はありません。 ECBを使用する(他のモードの構成要素としてを除く)。ほとんどすべての暗号ライブラリは、少なくともCBCまたはCTRモードを提供しますが、そうでない場合は、'自分で実装するのは簡単です。その上にHMAC(またはCMAC)を叩くと、'準備が整います。
- @giorgim:たとえしなくても' any MACまたはAEモードを使用できませんが、CBCの使用はECBよりも厳密に優れています。 MAC機能がある場合、CBC-then-MACは完全に優れたAEモードです。
回答
ECBモードは、同一のメッセージブロック(つまり、ブロック暗号の各呼び出しで暗号化されるデータの量)を同一の暗号文ブロックに暗号化するため、使用しないでください。同じメッセージブロックが複数回暗号化されているかどうかが明らかになるため、これは問題です。ウィキペディアには、この問題の非常に優れた図があります。
コメント
- コメント広範な議論のためではありません。この会話はチャットに移動されました。
回答
@Guut Boyが述べたように、ECBは意味的に安全ではありません。つまり、同一のブロックを持つメッセージが暗号化されている場合、攻撃者はCipherTextを監視するだけで、平文に関する情報を入手できるという一定の利点が得られます。
できればCBCモードを使用して長いメッセージを暗号化します。このモードでは、IV(初期値)と呼ばれる追加のパラメーターが導入され、同じメッセージを2回暗号化する場合の攻撃を防ぐために、セッション番号で初期化します。
コメント
- IVは初期値ではなく、初期化ベクトルを表します。
- 1。これは良いアドバイスではありません。認証は、暗号学者からの約10年のアドバイスを無視します。IlmariKaronenが推奨するように、認証された暗号化を使用することをお勧めします。2。この回答はIlmari Karonen 'に取って代わられているようです。答え。
- それに加えて、IVは攻撃者にとって予測不可能でなければならないという事実があります(つまり、ランダムと区別がつかない)、この回答は、セッション番号を使用する必要があることを示しています。これは通常、まったくランダムではありません。
コメントを残す