OpenSSL의 EVP 인터페이스를 사용하여 GCM 모드를 사용하여 AES 암호화를 구현하고 있습니다.OpenSSL GCM 암호 해독에서 지연 인증
인증 모드 중 하나 인 GCM은 암호 텍스트 무결성을 제공합니다. 즉, 암호 텍스트 (및 제공되는 경우 추가 데이터)에 태그 (MAC - 메시지 인증 코드)를 생성합니다. 암호 텍스트가 수정되지 않았는지 확인하기 위해 해독 전에이 태그를 나중에 확인할 수 있습니다.
나는이 블로그 게시물에 따라 암호화를 구현 한 : http://incog-izick.blogspot.in/2011/08/using-openssl-aes-gcm.html
나는 다음과 같은 API를 (순서대로) 호출을 사용하고 해독하는 동안 :
// setting cipher, key and iv
EVP_DecryptInit (ctx, EVP_aes_128_gcm(), key, iv);
// setting tag
EVP_CIPHER_CTX_ctrl (ctx, EVP_CTRL_GCM_SET_TAG, taglength, tagbuffer);
// adding Additional Authenticated Data (AAD)
EVP_DecryptUpdate (ctx, NULL, &length, aad, aadlength);
// decrypting data
EVP_DecryptUpdate (ctx, decrypteddata, &length, encrypteddata, encryptedlength);
// authentication step
EVP_DecryptFinal(ctx, outbuffer, &length);
문제는, 그 나는 경우 암호 텍스트 또는 AAD를 수정하면 암호문은 여전히 암호 해독되고 암호 해독 프로세스의 최종 호출, 즉 EVP_DecryptFinal에 대한 호출에서 오류가 감지됩니다. 오류를 나타내는 0 값이 리턴됩니다.
내 의견으로는 EVP_DecryptUpdate 호출 자체에 오류가 발생하여 암호 해독이 실패해야합니다. 늦은 오류 탐지는 인증 된 암호화의 목적을 상실합니다.
무엇이 문제입니까?
답장을 보내 주셔서 감사합니다.하지만 EVP 인터페이스를 사용하여 CCM을 구현하려했으나 정상적으로 작동합니다. 암호문이 수정되면 암호 해독에 실패합니다. 둘의 차이점은 무엇입니까? – sg1