3

私はチャームのように機能する次の暗号化コードを使用していますが、それがFIPS 197に準拠していることを検証する必要があります。そうでない場合、法務部門は私を殺します。

mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SALT, $plaintext, MCRYPT_MODE_ECB,
               mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),
                                MCRYPT_RAND))

mcrypt_decrypt(MCRYPT_RIJNDAEL_256, SALT, $plaintext, MCRYPT_MODE_ECB,
               mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),
                                MCRYPT_RAND))
4

3 に答える 3

6

Mcrypt のRIJNDAEL_256アルゴリズムは、256 ビット ブロック サイズの Rijndael アルゴリズムのバージョンです。AES (FIPS 197 で定義されているもの) には、128 ビットのブロック サイズ (および 3 つの異なるキー サイズ) のバージョンしかありません。

いいえ、ここでは AES を使用していません。代わりに、AES と同じ RIJNDAEL_128 を使用してください。

コードには他にも問題があります。

  • 同じキーで複数のブロックを暗号化する場合は、ECB を使用しないでください。だから、決して。代わりに、CBC や CTR などの安全な操作モードを使用してください。

  • CodeInChaos がコメントしたように、通常、機密性だけでなく信頼性も確保する必要があります (プロトコルによっては、機密性のために認証が必要になる場合もあります)。そのため、メッセージに MAC を追加するか、機密性とともに認証も提供する操作モード (CCM や GCM など) を使用します。どれが mcrypt に含まれているかはわかりません。

  • 暗号化 (良い) と復号化 (悪い) でランダムな初期化ベクトルを生成します。ECB では初期化ベクトルを使用しないため、これは問題ではありませんが、他のモードでは、両方のアクションに対して異なる初期化ベクトルが得られるため、復号化で異なる​​結果が得られます。CBC では最初のブロックのみがガベージになりますが、CTR ではすべてがガベージになります (CCM/GCM は単に「失敗」を報告します)。

    初期化ベクトルは秘密である必要がないため (モードに応じて、予測不能または非反復のみ)、メッセージと一緒に (接頭辞として) 送信するか、派生させる (両側) 共通の秘密から (SSL/TLS の最初の初期化ベクトルのように、暗号化キーと MAC キーと同様に、マスター シークレットから派生します)。

于 2011-11-08T17:45:44.177 に答える
1

FIPS 197は、実装ではなく、Rijndaelアルゴリズムのみを指定します。そうです、それは準拠しています。

ただし、実装はNISTSP800-38Aで指定されています。

残りの部分(平文のパディング、PRNGの強度など)についてはわかりませんが、ECBはRijndaelの実装の99%で行うのは非常に悪いことであるため、お勧めしません。

于 2011-11-08T16:09:35.307 に答える
1

「準拠」の定義によって異なります。FIPS 197 で定められたすべての規則に準拠していますか? はい、そう思います。

FIPS 197検証済みではありません。検証済みの実装とは、NIST / CST ラボによって具体的にテストされ、FIPS pub 197 に準拠することが認定されていることを意味します。このリストを使用して、FIPS 197 検証済みのすべてのベンダーと製品のリストを確認できます。

于 2011-11-08T15:58:49.237 に答える