Disable usage of X9.31 key generation in FIPS mode
Related: rhbz#2167764
This commit is contained in:
parent
7e0fcaf4ab
commit
8d0820609b
139
libgcrypt-1.10.0-fips-x931.patch
Normal file
139
libgcrypt-1.10.0-fips-x931.patch
Normal file
@ -0,0 +1,139 @@
|
||||
From 06ea5b5332ffdb44a0a394d766be8989bcb6a95c Mon Sep 17 00:00:00 2001
|
||||
From: Jakub Jelen <jjelen@redhat.com>
|
||||
Date: Tue, 6 Dec 2022 10:03:47 +0900
|
||||
Subject: [PATCH] fips,rsa: Prevent usage of X9.31 keygen in FIPS mode.
|
||||
|
||||
* cipher/rsa.c (rsa_generate): Do not accept use-x931 or derive-parms
|
||||
in FIPS mode.
|
||||
* tests/pubkey.c (get_keys_x931_new): Expect failure in FIPS mode.
|
||||
(check_run): Skip checking X9.31 keys in FIPS mode.
|
||||
* doc/gcrypt.texi: Document "test-parms" and clarify some cases around
|
||||
the X9.31 keygen.
|
||||
|
||||
--
|
||||
|
||||
Signed-off-by: Jakub Jelen <jjelen@redhat.com>
|
||||
---
|
||||
cipher/rsa.c | 5 +++++
|
||||
doc/gcrypt.texi | 41 ++++++++++++++++++++++++++++++++++++-----
|
||||
tests/pubkey.c | 15 +++++++++++++--
|
||||
3 files changed, 54 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/cipher/rsa.c b/cipher/rsa.c
|
||||
index df4af94b..45523e6b 100644
|
||||
--- a/cipher/rsa.c
|
||||
+++ b/cipher/rsa.c
|
||||
@@ -1256,6 +1256,11 @@ rsa_generate (const gcry_sexp_t genparms, gcry_sexp_t *r_skey)
|
||||
if (deriveparms || (flags & PUBKEY_FLAG_USE_X931))
|
||||
{
|
||||
int swapped;
|
||||
+ if (fips_mode ())
|
||||
+ {
|
||||
+ sexp_release (deriveparms);
|
||||
+ return GPG_ERR_INV_SEXP;
|
||||
+ }
|
||||
ec = generate_x931 (&sk, nbits, evalue, deriveparms, &swapped);
|
||||
sexp_release (deriveparms);
|
||||
if (!ec && swapped)
|
||||
diff --git a/doc/gcrypt.texi b/doc/gcrypt.texi
|
||||
index d0372f3e..e845a4dd 100644
|
||||
--- a/doc/gcrypt.texi
|
||||
+++ b/doc/gcrypt.texi
|
||||
@@ -2699,8 +2699,7 @@ achieve fastest ECC key generation.
|
||||
Force the use of the ANSI X9.31 key generation algorithm instead of
|
||||
the default algorithm. This flag is only meaningful for RSA key
|
||||
generation and usually not required. Note that this algorithm is
|
||||
-implicitly used if either @code{derive-parms} is given or Libgcrypt is
|
||||
-in FIPS mode.
|
||||
+implicitly used if either @code{derive-parms} is given.
|
||||
|
||||
@item use-fips186
|
||||
@cindex FIPS 186
|
||||
@@ -3310,9 +3309,9 @@ This is currently only implemented for RSA and DSA keys. It is not
|
||||
allowed to use this together with a @code{domain} specification. If
|
||||
given, it is used to derive the keys using the given parameters.
|
||||
|
||||
-If given for an RSA key the X9.31 key generation algorithm is used
|
||||
-even if libgcrypt is not in FIPS mode. If given for a DSA key, the
|
||||
-FIPS 186 algorithm is used even if libgcrypt is not in FIPS mode.
|
||||
+If given for an RSA key, the X9.31 key generation algorithm is used.
|
||||
+If given for a DSA key, the FIPS 186 algorithm is used even if
|
||||
+libgcrypt is not in FIPS mode.
|
||||
|
||||
@example
|
||||
(genkey
|
||||
@@ -3342,6 +3341,38 @@ FIPS 186 algorithm is used even if libgcrypt is not in FIPS mode.
|
||||
(seed @var{seed-mpi}))))
|
||||
@end example
|
||||
|
||||
+@item test-parms @var{list}
|
||||
+This is currently only implemented for RSA keys. If given, the
|
||||
+libgcrypt will not generate parameter, but tests whether the p,q is
|
||||
+probably prime. Returns key with zeroes.
|
||||
+
|
||||
+The FIPS key generation algorithm is used even if libgcrypt is not
|
||||
+in FIPS mode.
|
||||
+
|
||||
+@example
|
||||
+(genkey
|
||||
+ (rsa
|
||||
+ (nbits 4:1024)
|
||||
+ (rsa-use-e 1:3)
|
||||
+ (test-parms
|
||||
+ (e "65537")
|
||||
+ (p #00bbccabcee15d343944a47e492d4b1f4de79633e2
|
||||
+ 0cbb46f7d2d6813392a807ad048cf77528edd19f77
|
||||
+ e7453f25173b9dcb70423afa2037aae147b81a33d5
|
||||
+ 41fc58f875eff1e852ab55e2e09a3debfbc151b3b0
|
||||
+ d17fef6f74d81fca14fbae531418e211ef818592af
|
||||
+ 70de5cec3b92795cc3578572bf456099cd8727150e
|
||||
+ 523261#)
|
||||
+ (q #00ca87ecf2883f4ed00a9ec65abdeba81d28edbfcc
|
||||
+ 34ecc563d587f166b52d42bfbe22bbc095b0b8426a
|
||||
+ 2f8bbc55baaa8859b42cbc376ed3067db3ef7b135b
|
||||
+ 63481322911ebbd7014db83aa051e0ca2dbf302b75
|
||||
+ cd37f2ae8df90e134226e92f6353a284b28bb30af0
|
||||
+ bbf925b345b955328379866ebac11d55bc80fe84f1
|
||||
+ 05d415#)
|
||||
+
|
||||
+@end example
|
||||
+
|
||||
|
||||
@item flags @var{flaglist}
|
||||
This is preferred way to define flags. @var{flaglist} may contain any
|
||||
diff --git a/tests/pubkey.c b/tests/pubkey.c
|
||||
index bc44f3a5..2669b41a 100644
|
||||
--- a/tests/pubkey.c
|
||||
+++ b/tests/pubkey.c
|
||||
@@ -430,7 +430,17 @@ get_keys_x931_new (gcry_sexp_t *pkey, gcry_sexp_t *skey)
|
||||
rc = gcry_pk_genkey (&key, key_spec);
|
||||
gcry_sexp_release (key_spec);
|
||||
if (rc)
|
||||
- die ("error generating RSA key: %s\n", gcry_strerror (rc));
|
||||
+ {
|
||||
+ if (in_fips_mode)
|
||||
+ {
|
||||
+ if (verbose)
|
||||
+ fprintf (stderr, "The X9.31 RSA keygen is not available in FIPS modee.\n");
|
||||
+ return;
|
||||
+ }
|
||||
+ die ("error generating RSA key: %s\n", gcry_strerror (rc));
|
||||
+ }
|
||||
+ else if (in_fips_mode)
|
||||
+ die ("generating X9.31 RSA key unexpected worked in FIPS mode\n");
|
||||
|
||||
if (verbose > 1)
|
||||
show_sexp ("generated RSA (X9.31) key:\n", key);
|
||||
@@ -777,7 +787,8 @@ check_run (void)
|
||||
if (verbose)
|
||||
fprintf (stderr, "Checking generated RSA key (X9.31).\n");
|
||||
get_keys_x931_new (&pkey, &skey);
|
||||
- check_keys (pkey, skey, 800, 0);
|
||||
+ if (!in_fips_mode)
|
||||
+ check_keys (pkey, skey, 800, 0);
|
||||
gcry_sexp_release (pkey);
|
||||
gcry_sexp_release (skey);
|
||||
pkey = skey = NULL;
|
||||
--
|
||||
2.39.0
|
||||
|
@ -46,6 +46,8 @@ Patch13: libgcrypt-1.10.0-fips-integrity.patch
|
||||
# 3c8b6c4a9cad59c5e1db5706f6774a3141b60210
|
||||
# 052c5ef4cea56772b7015e36f231fa0bcbf91410
|
||||
Patch14: libgcrypt-1.10.0-fips-integrity2.patch
|
||||
# 06ea5b5332ffdb44a0a394d766be8989bcb6a95c
|
||||
Patch15: libgcrypt-1.10.0-fips-x931.patch
|
||||
|
||||
%global gcrylibdir %{_libdir}
|
||||
%global gcrysoname libgcrypt.so.20
|
||||
@ -93,6 +95,7 @@ applications using libgcrypt.
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
%patch14 -p1
|
||||
%patch15 -p1
|
||||
|
||||
%build
|
||||
# This package has a configure test which uses ASMs, but does not link the
|
||||
|
Loading…
Reference in New Issue
Block a user