Blowfish 暗号を使用して一部のバイナリ データを暗号化するために、php mcrypt ライブラリを使用してコードの一部を確認しています。基本的に、モードでフグ記述子を作成し、常に「12345678」に等しいパラメータで関数をMCRYPT_MODE_CBC
呼び出します。mcrypt_generic_init
iv
簡素化されたコード抽出:
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($cipher, $key, '12345678');
mcrypt-generic-init関数のドキュメントには、次のように記載されています。
IV は通常、アルゴリズム ブロック サイズのサイズを持つ必要がありますが、mcrypt_enc_get_iv_size() を呼び出してサイズを取得する必要があります。IV は ECB では無視されます。IV は、CFB、CBC、STREAM、nOFB、および OFB モードで存在する必要があります。ランダムで一意である必要があります(ただし、秘密ではありません)。暗号化/復号化には同じ IV を使用する必要があります。使用したくない場合はゼロに設定する必要がありますが、これはお勧めしません。
私の質問は次のとおりです。
このパラメーターは何に使用されますか? パラメータのそのような値を使用するiv
ことは弱点ですか? 秘密にする必要はないと言われているので、攻撃者はどうにか入手できるのでわかりません。それが弱点ではなく、このパラメータのそのような値が完全に問題ない場合、ゼロに設定することが推奨されないのはなぜですか? 「12345678」の代わりに疑似ランダム文字列をハードコーディングした方がはるかに良いでしょうか?