2017-05-24 32 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 : ' –