1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-09-21 15:01:41 +02:00

gpg: Reject signatures made with MD5.

* g10/gpg.c: Add option --allow-weak-digest-algos.
(main): Set option also in PGP2 mode.
* g10/options.h (struct opt): Add flags.allow_weak_digest_algos.
* g10/sig-check.c (do_check): Reject MD5 signatures.
* tests/openpgp/gpg.conf.tmpl: Add allow_weak_digest_algos.
--
(cherry picked from commit f90cfe6b66)

Resolved conflicts:
	g10/gpg.c - adjust.
	tests/openpgp/defs.inc - no changes
This commit is contained in:
Werner Koch 2015-10-27 00:01:31 -04:00
parent fc30a414d8
commit 43e5d28c6d
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
5 changed files with 33 additions and 1 deletions

View File

@ -3,3 +3,4 @@ no-secmem-warning
no-permission-warning no-permission-warning
batch batch
no-auto-check-trustdb no-auto-check-trustdb
allow-weak-digest-algos

View File

@ -2178,7 +2178,7 @@ available, but the MIT release is a good common baseline.
This option implies This option implies
@option{--rfc1991 --disable-mdc --no-force-v4-certs @option{--rfc1991 --disable-mdc --no-force-v4-certs
--escape-from-lines --force-v3-sigs --escape-from-lines --force-v3-sigs --allow-weak-digest-algos
--cipher-algo IDEA --digest-algo MD5 --compress-algo ZIP}. --cipher-algo IDEA --digest-algo MD5 --compress-algo ZIP}.
It also disables @option{--textmode} when encrypting. It also disables @option{--textmode} when encrypting.
@ -2608,6 +2608,13 @@ necessary to get as much data as possible out of the corrupt message.
However, be aware that a MDC protection failure may also mean that the However, be aware that a MDC protection failure may also mean that the
message was tampered with intentionally by an attacker. message was tampered with intentionally by an attacker.
@item --allow-weak-digest-algos
@opindex allow-weak-digest-algos
Signatures made with the broken MD5 algorithm are normally rejected
with an ``invalid digest algorithm'' message. This option allows the
verification of signatures made with such weak algorithms.
@item --no-default-keyring @item --no-default-keyring
@opindex no-default-keyring @opindex no-default-keyring
Do not add the default keyrings to the list of keyrings. Note that Do not add the default keyrings to the list of keyrings. Note that

View File

@ -376,6 +376,7 @@ enum cmd_and_opt_values
oDisableDSA2, oDisableDSA2,
oAllowMultipleMessages, oAllowMultipleMessages,
oNoAllowMultipleMessages, oNoAllowMultipleMessages,
oAllowWeakDigestAlgos,
oNoop oNoop
}; };
@ -725,6 +726,7 @@ static ARGPARSE_OPTS opts[] = {
{ oDisableDSA2, "disable-dsa2", 0, "@"}, { oDisableDSA2, "disable-dsa2", 0, "@"},
{ oAllowMultipleMessages, "allow-multiple-messages", 0, "@"}, { oAllowMultipleMessages, "allow-multiple-messages", 0, "@"},
{ oNoAllowMultipleMessages, "no-allow-multiple-messages", 0, "@"}, { oNoAllowMultipleMessages, "no-allow-multiple-messages", 0, "@"},
{ oAllowWeakDigestAlgos, "allow-weak-digest-algos", 0, "@"},
/* These two are aliases to help users of the PGP command line /* These two are aliases to help users of the PGP command line
product use gpg with minimal pain. Many commands are common product use gpg with minimal pain. Many commands are common
@ -2876,6 +2878,10 @@ main (int argc, char **argv )
opt.flags.allow_multiple_messages=0; opt.flags.allow_multiple_messages=0;
break; break;
case oAllowWeakDigestAlgos:
opt.flags.allow_weak_digest_algos = 1;
break;
case oNoop: break; case oNoop: break;
default : pargs.err = configfp? 1:2; break; default : pargs.err = configfp? 1:2; break;
@ -3043,6 +3049,7 @@ main (int argc, char **argv )
opt.pgp2_workarounds = 1; opt.pgp2_workarounds = 1;
opt.ask_sig_expire = 0; opt.ask_sig_expire = 0;
opt.ask_cert_expire = 0; opt.ask_cert_expire = 0;
opt.flags.allow_weak_digest_algos = 1;
xfree(def_digest_string); xfree(def_digest_string);
def_digest_string = xstrdup("md5"); def_digest_string = xstrdup("md5");
xfree(s2k_digest_string); xfree(s2k_digest_string);

View File

@ -230,6 +230,7 @@ struct
unsigned int utf8_filename:1; unsigned int utf8_filename:1;
unsigned int dsa2:1; unsigned int dsa2:1;
unsigned int allow_multiple_messages:1; unsigned int allow_multiple_messages:1;
unsigned int allow_weak_digest_algos:1;
unsigned int large_rsa:1; unsigned int large_rsa:1;
} flags; } flags;

View File

@ -243,6 +243,22 @@ do_check( PKT_public_key *pk, PKT_signature *sig, MD_HANDLE digest,
if( (rc=do_check_messages(pk,sig,r_expired,r_revoked)) ) if( (rc=do_check_messages(pk,sig,r_expired,r_revoked)) )
return rc; return rc;
if (sig->digest_algo == DIGEST_ALGO_MD5
&& !opt.flags.allow_weak_digest_algos)
{
static int shown;
if (!shown)
{
log_info
(_("Note: signatures using the %s algorithm are rejected\n"),
"MD5");
shown = 1;
}
return G10ERR_DIGEST_ALGO;
}
/* make sure the digest algo is enabled (in case of a detached signature)*/ /* make sure the digest algo is enabled (in case of a detached signature)*/
md_enable( digest, sig->digest_algo ); md_enable( digest, sig->digest_algo );