2017-05-24 12 views
1

私の知る限り、OpenSSLの関数FIPS_mode_setは暗号化に影響を与えてはなりません。弱い暗号が使用されている場合は、プログラムを終了するだけです。FIPS_mode_set関数は暗号化に影響します

私はEVP_aes_128暗号化を使用するコードの部分を持っている:

EVP_CIPHER_CTX ctx;// = EVP_CIPHER_CTX_new(); 
EVP_CIPHER_CTX_init(&ctx); 
const EVP_CIPHER *cipher = EVP_aes_128_cbc(); 
EVP_EncryptInit(&ctx, cipher, key, IV); 
EVP_CIPHER_CTX_set_padding (&ctx, 0); 
EVP_EncryptUpdate(&ctx, encrypted.get(), &encrypted_size, paddedPlain.get(), encrypted_size); 
return encrypted; 

このコードは、一貫性のある(私はすべての実行で同じ出力を得る)されており、期待通りに常に働いて(復号化機能は何で戻ってそれを復号化されていません問題)。しかし、実行の開始時にFIPS_mode_set(1)と呼ぶと、出力バッファに一貫性のない出力(毎回異なる出力)が出ます。

入力IV: IV file contents in HexEditor view

キーファイル: key file contents in HexEditor view

入力テキスト: the input text

暗号化出力なし 'FIPS_mode_set'(1): the encryption output without FIPS_mode_set

で暗号化出力'FIPS_mode_set'(1): the encryption output with FIPS_mode_set

私は、OpenSSLバージョン1.0.2kを使用しています。

このような現象が発生する可能性はありますか?

+0

"一貫性のない出力"とはどういう意味ですか?あなたは期待値を持っていますか(あなたがそれを期待している理由)と実際の結果はありますか?もしあなたが質問*にそれを含めてください。 –

+0

@MaartenBodewes - 私はすべてのあなたの質問に答えるいくつかの情報を追加しました。 –

答えて

1

EVP_EncryptFinal_ex()に電話するのを忘れているため、APIを正しく使用していません。 FIPSモードでは、バッファをクリアすることに関してより厳しい要件があります。だから、EVP_EncryptFinal_ex()(あなたは使用していないようです)の呼び出しの前に暗号文を返さないのかもしれません。


さらに、あなたは廃止された機能を使用している:

The functions EVP_EncryptInit() , EVP_EncryptFinal() , EVP_DecryptInit() , EVP_CipherInit() and EVP_CipherFinal() are obsolete but are retained for compatibility with existing code. New code should use EVP_EncryptInit_ex() , EVP_EncryptFinal_ex() , EVP_DecryptInit_ex() , EVP_DecryptFinal_ex() , EVP_CipherInit_ex() and EVP_CipherFinal_ex() because they can reuse an existing context without allocating and freeing it up on each call.


あなたはOpenSSL (EVP) Wikiの例に可能な限り維持することを確認してください。

+0

リンクからコードをコピーし、使用された暗号(EVP_aes_256_cbcではなくEVP_aes_128_cbc)のみを変更しました。 1. EVP_EncryptInit_exが失敗し、出力にゴミが出るのはなぜですか? 2.これは出力です。 '139693591844832:エラー:2D078072:lib(45):func(120) ):理由(114):fips.c:311: 139693591844832:エラー:2D06D073:lib(45):func(109):理由(115):fips_enc.c:124: –

関連する問題