出于教育目的,我尝试使用 Openssl 创建 RSA 128 密钥对。尝试以下命令时,出现“密钥大小太小”的错误
$ openssl genrsa 128
Generating RSA private key, 128 bit long modulus (2 primes)
140216022529216:error:04081078:rsa routines:rsa_builtin_keygen:key size too small:../crypto/rsa/rsa_gen.c:78:
我尝试将安全级别设置为 0,如下所示这里,但我仍然遇到同样的问题。我也尝试从源代码构建软件并设置 DOPENSSL_TLS_SECURITY_LEVEL=0,但还是不起作用。
知道我目前正在使用:
$ openssl version -a
OpenSSL 1.1.1f 31 Mar 2020
built on: Mon Mar 22 11:37:17 2021 UTC
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-Juj39H/openssl-1.1.1f=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_TLS_SECURITY_LEVEL=2 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific
答案1
该限制被硬编码为最小“安全”长度,目前为 512 位(请参阅下面的 RSA_MIN_MODULUS_BITS)。为了规避它,例如,在嵌入式应用程序中使用,您必须重新编译 OpenSSL:
crypto/rsa/rsa_local.h:14:#define RSA_MIN_MODULUS_BITS 512
--
crypto/rsa/rsa_gen.c:76: if (bits < RSA_MIN_MODULUS_BITS) {
crypto/rsa/rsa_gen.c-77- ok = 0; /* we set our own err */
crypto/rsa/rsa_gen.c-78- RSAerr(RSA_F_RSA_BUILTIN_KEYGEN, RSA_R_KEY_SIZE_TOO_SMALL);
crypto/rsa/rsa_gen.c-79- goto err;
--
crypto/rsa/rsa_pmeth.c:464: if (p1 < RSA_MIN_MODULUS_BITS) {
crypto/rsa/rsa_pmeth.c-465- RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_KEY_SIZE_TOO_SMALL);
crypto/rsa/rsa_pmeth.c-466- return -2;