このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
不整合な暗号操作
途中で再初期化を伴わず、同じ暗号コンテキストを使って連続して暗号化と復号化のステップを実行している
説明
この欠陥は、同じ暗号コンテキストを使用した暗号化ステップと復号化ステップを実行した場合に発生します。それらのステップの間で、コンテキストを再初期化していません。このチェッカーは対称暗号化にのみ適用されます。
たとえば、EVP_DecryptInit_ex
を使用して復号化する暗号コンテキストを設定します。
EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv);
EVP_EncryptUpdate
を使用して暗号化するときにも使用されます。EVP_EncryptUpdate(ctx, out_buf, &out_len, src, len);
リスク
暗号化と復号化のステップを混在させると、コードがわかりにくくなる可能性があります。現在の暗号コンテキストを暗号化または復号化のどちらに使用しているか、一目で判断するのは難しくなります。また、混在により、競合状態、暗号化の失敗、および予期しない暗号文につながる可能性もあります。
修正方法
操作の特定のファミリに対して暗号コンテキストを設定した後は、その操作のファミリにのみそのコンテキストを使用します。
たとえば、EVP_DecryptInit_ex
を使用して復号化するために暗号コンテキストを設定する場合、それ以降は復号化のためだけにそのコンテキストを使用します。
例
結果情報
グループ: 暗号化 |
言語: C | C++ |
既定値: オフ |
コマンド ライン構文: CRYPTO_CIPHER_BAD_FUNCTION |
影響度: Medium |
バージョン履歴
R2017a で導入