17

私はPHPの関数で利用できるさまざまなモードをテストしてきました。ECB はほとんどのチュートリアルで使用されるモードですが、リンクされたばかりのページと一部のユーザーの両方に推奨されていないため、 CBCまたはCFBのいずれかでうまくいくと思います。mcrypt

PHPのドキュメントは、利用可能なさまざまなモードの比較でそれほど太っていません。mcrypt代わりに、「シュナイアーによる応用暗号化」の本を参照しています。これは、今のところ購入することにあまり熱心ではありません。

では、mcryptどのモードを使用したいのか、そしてその理由は何ですか?

4

1 に答える 1

22

mcrypt実際には、リストされているよりも多くのモードを実装しています。文字列名を使用してそれらにアクセスできます。

  • cbc–CBCモード_
  • cfb–8ビットCFBモード。
  • ncfb–ブロックサイズのCFBモード。
  • nofbOFBモード(ではないofb);
  • ctr–CTRモード

モードは実装の詳細が異なるため、それらの適合性はデータと環境によって異なります。

パディング

  • CBCモードは完全なブロックのみを暗号化するためmcrypt、独自のパディングを実装しない限り、プレーンテキストをゼロバイトでパディングします。

  • CFBOFB、およびCTRモードは、任意の長さのメッセージを暗号化します。

初期化ベクトル

  • CBCおよびCFBモードにはランダムIVが必要です(使用しないでくださいMCRYPT_RAND)。

  • OFBモードでは、一意のIVが必要です(たとえば、グローバルカウンター、行が変更または削除されない場合はデータベースの主キーなど)。

  • CTRでは、各カウンターブロックが一意である必要があります(最初のカウンターブロックであるメッセージのIVだけでなく、メッセージのブロックごとにカウンターブロックを1ずつインクリメントすることによって形成される残りのブロック)。

NISTの推奨事項の詳細。

暗号化または復号化を並列化できるかどうかや、ブロックごとに使用される暗号の反復回数(通常は1つですが、8ビットCFBモードでは16)など、PHPでは重要ではないパフォーマンスの違いがあります。

可鍛性には違いがありますが、 MAC適用するため重要ではありません。

また、セキュリティに違いがあるかもしれませんが、そのためには暗号学者に相談する必要があります。

于 2011-02-24T20:02:38.637 に答える