diff options
author | Werner Koch <[email protected]> | 2015-10-06 07:40:57 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2015-10-06 07:44:15 +0000 |
commit | 625e292108cc0fd9077769587a8c22abe7805e33 (patch) | |
tree | 156c7e11ea3285d6e5fdb542a7d5fd966e7b47b4 | |
parent | agent: Fix verification of signature for smartcard. (diff) | |
download | gnupg-625e292108cc0fd9077769587a8c22abe7805e33.tar.gz gnupg-625e292108cc0fd9077769587a8c22abe7805e33.zip |
gpg: Fail decryption for AES etc message w/o MDC.
* g10/mainproc.c (proc_encrypted): Fail for modern messages w/o MDC.
--
This change turns the missing MDC warning into an error if the message
has been encrypted using a cipher with a non-64 bit block length cipher
and it is not Twofish.
We can assume that such messages are created by code which should have
been able to create MDC packets. AES was introduced with 1.0.3 on
2000-09-18 shortly after MDC (1.0.2 on 2000-07-12). We need to
exclude Twofish because that might have been used before MDC.
Signed-off-by: Werner Koch <[email protected]>
-rw-r--r-- | g10/mainproc.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/g10/mainproc.c b/g10/mainproc.c index f7b7c6b2c..9f02b1555 100644 --- a/g10/mainproc.c +++ b/g10/mainproc.c @@ -607,6 +607,22 @@ proc_encrypted (CTX c, PACKET *pkt) if (result == -1) ; + else if (!result + && !opt.ignore_mdc_error + && !pkt->pkt.encrypted->mdc_method + && openpgp_cipher_get_algo_blklen (c->dek->algo) != 8 + && c->dek->algo != CIPHER_ALGO_TWOFISH) + { + /* The message has been decrypted but has no MDC despite that a + modern cipher (blocklength != 64 bit, except for Twofish) is + used and the option to ignore MDC errors is not used: To + avoid attacks changing an MDC message to a non-MDC message, + we fail here. */ + log_error (_("WARNING: message was not integrity protected\n")); + if (opt.verbose > 1) + log_info ("decryption forced to fail\n"); + write_status (STATUS_DECRYPTION_FAILED); + } else if (!result || (gpg_err_code (result) == GPG_ERR_BAD_SIGNATURE && opt.ignore_mdc_error)) { |