EVP_PKEY-RSA
名称
EVP_PKEY-RSA,EVP_KEYMGMT-RSA,RSA - EVP_PKEY RSA 密钥类型和算法支持
描述
RSA密钥类型在OpenSSL的默认和FIPS提供程序中实现。该实现支持基本的RSA密钥,包含模数n、公钥指数e、私钥指数d以及用于CRT计算的素数因子、指数和系数的集合,其中前几个称为p和q、dP和dQ以及qInv。
常见的RSA参数
除了所有密钥类型都应支持的通用参数(请参见“provider-keymgmt(7)”中的“通用参数”)之外,RSA密钥类型实现还支持以下参数。
- "n" (OSSL_PKEY_PARAM_RSA_N) <无符号整数>
-
RSA模数“n”值。
- "e" (OSSL_PKEY_PARAM_RSA_E) <无符号整数>
-
RSA公钥指数“e”值。使用EVP_PKEY_fromdata(3)创建原始密钥时,必须始终设置此值。请注意,执行解密操作时,此值用于盲化目的,以防止时序攻击。
- "d" (OSSL_PKEY_PARAM_RSA_D) <无符号整数>
-
RSA私钥指数“d”值。
- "rsa-factor1" (OSSL_PKEY_PARAM_RSA_FACTOR1) <无符号整数>
- "rsa-factor2" (OSSL_PKEY_PARAM_RSA_FACTOR2) <无符号整数>
- "rsa-factor3" (OSSL_PKEY_PARAM_RSA_FACTOR3) <无符号整数>
- "rsa-factor4" (OSSL_PKEY_PARAM_RSA_FACTOR4) <无符号整数>
- "rsa-factor5" (OSSL_PKEY_PARAM_RSA_FACTOR5) <无符号整数>
- "rsa-factor6" (OSSL_PKEY_PARAM_RSA_FACTOR6) <无符号整数>
- "rsa-factor7" (OSSL_PKEY_PARAM_RSA_FACTOR7) <无符号整数>
- "rsa-factor8" (OSSL_PKEY_PARAM_RSA_FACTOR8) <无符号整数>
- "rsa-factor9" (OSSL_PKEY_PARAM_RSA_FACTOR9) <无符号整数>
- "rsa-factor10" (OSSL_PKEY_PARAM_RSA_FACTOR10) <无符号整数>
-
RSA素数因子。这些因子在RFC8017中称为“p”、“q”和“r_i”。最多支持八个额外的“r_i”素数因子。
- "rsa-exponent1" (OSSL_PKEY_PARAM_RSA_EXPONENT1) <无符号整数>
- "rsa-exponent2" (OSSL_PKEY_PARAM_RSA_EXPONENT2) <无符号整数>
- "rsa-exponent3" (OSSL_PKEY_PARAM_RSA_EXPONENT3) <无符号整数>
- "rsa-exponent4" (OSSL_PKEY_PARAM_RSA_EXPONENT4) <无符号整数>
- "rsa-exponent5" (OSSL_PKEY_PARAM_RSA_EXPONENT5) <无符号整数>
- "rsa-exponent6" (OSSL_PKEY_PARAM_RSA_EXPONENT6) <无符号整数>
- "rsa-exponent7" (OSSL_PKEY_PARAM_RSA_EXPONENT7) <无符号整数>
- "rsa-exponent8" (OSSL_PKEY_PARAM_RSA_EXPONENT8) <无符号整数>
- "rsa-exponent9" (OSSL_PKEY_PARAM_RSA_EXPONENT9) <无符号整数>
- "rsa-exponent10" (OSSL_PKEY_PARAM_RSA_EXPONENT10) <无符号整数>
-
RSA CRT(中国剩余定理)指数。这些指数在RFC8017中称为“dP”、“dQ”和“d_i”。最多支持八个额外的“d_i”指数。
- "rsa-coefficient1" (OSSL_PKEY_PARAM_RSA_COEFFICIENT1) <无符号整数>
- "rsa-coefficient2" (OSSL_PKEY_PARAM_RSA_COEFFICIENT2) <无符号整数>
- "rsa-coefficient3" (OSSL_PKEY_PARAM_RSA_COEFFICIENT3) <无符号整数>
- "rsa-coefficient4" (OSSL_PKEY_PARAM_RSA_COEFFICIENT4) <无符号整数>
- "rsa-coefficient5" (OSSL_PKEY_PARAM_RSA_COEFFICIENT5) <无符号整数>
- "rsa-coefficient6" (OSSL_PKEY_PARAM_RSA_COEFFICIENT6) <无符号整数>
- "rsa-coefficient7" (OSSL_PKEY_PARAM_RSA_COEFFICIENT7) <无符号整数>
- "rsa-coefficient8" (OSSL_PKEY_PARAM_RSA_COEFFICIENT8) <无符号整数>
- "rsa-coefficient9" (OSSL_PKEY_PARAM_RSA_COEFFICIENT9) <无符号整数>
-
RSA CRT(中国剩余定理)系数。这些系数称为“qInv”和“t_i”。最多支持八个额外的“t_i”指数。
RSA密钥生成参数
生成RSA密钥时,可以使用以下密钥生成参数。
- "bits" (OSSL_PKEY_PARAM_RSA_BITS) <无符号整数>
-
该值应为RSA密码系统的加密长度(以位为单位)。
- "primes" (OSSL_PKEY_PARAM_RSA_PRIMES) <无符号整数>
-
该值应为生成的RSA密钥的素数个数。默认值为2。不允许指定大于10的素数个数。此外,素数个数还受生成密钥长度的限制,因此最大数量可能会更小。某些提供程序可能仅支持值为2。
- "e" (OSSL_PKEY_PARAM_RSA_E) <无符号整数>
-
RSA“e”值。该值可以是任何大于或等于65537的奇数。默认值为65537。出于遗留原因,目前接受值为3,但已弃用。
- "rsa-derive-from-pq" (OSSL_PKEY_PARAM_RSA_DERIVE_FROM_PQ) <无符号整数>
-
指示如果参数列表中未传递缺少的参数,则应在未提供时推导出来。设置非零值将导致在不可用时推导出所有需要的指数和系数。设置此选项需要至少提供OSSL_PARAM_RSA_FACTOR1、OSSL_PARAM_RSA_FACTOR2和OSSL_PARAM_RSA_N。如果在选择参数中未设置OSSL_KEYMGMT_SELECT_PRIVATE_KEY,则忽略此选项。
用于FIPS模块测试的RSA密钥生成参数
生成RSA密钥时,以下其他密钥生成参数仅可用于算法测试目的。请勿使用这些参数为生产环境生成RSA密钥。
- "xp" (OSSL_PKEY_PARAM_RSA_TEST_XP) <无符号整数>
- "xq" (OSSL_PKEY_PARAM_RSA_TEST_XQ) <无符号整数>
-
这两个字段通常是随机生成的,用于生成“p”和“q”。
- "xp1" (OSSL_PKEY_PARAM_RSA_TEST_XP1) <无符号整数>
- "xp2" (OSSL_PKEY_PARAM_RSA_TEST_XP2) <无符号整数>
- "xq1" (OSSL_PKEY_PARAM_RSA_TEST_XQ1) <无符号整数>
- "xq2" (OSSL_PKEY_PARAM_RSA_TEST_XQ2) <无符号整数>
-
这四个字段通常是随机生成的。“p1”、“p2”、“q1”和“q2”素数因子由这些值确定。
用于FIPS模块测试的RSA密钥参数
以下中间值仅在“用于FIPS模块测试的RSA密钥生成参数”中指定的值设置时才能检索。在生产环境中不应访问这些值。
- "p1" (OSSL_PKEY_PARAM_RSA_TEST_P1) <无符号整数>
- "p2" (OSSL_PKEY_PARAM_RSA_TEST_P2) <无符号整数>
- "q1" (OSSL_PKEY_PARAM_RSA_TEST_Q1) <无符号整数>
- "q2" (OSSL_PKEY_PARAM_RSA_TEST_Q2) <无符号整数>
-
辅助可能素数。
RSA密钥验证
对于RSA密钥,EVP_PKEY_param_check(3)和EVP_PKEY_param_check_quick(3)都无条件返回1。
对于RSA密钥,当使用OpenSSL FIPS提供程序时,EVP_PKEY_public_check(3)符合SP800-56Br1的公钥检查。OpenSSL默认提供程序执行类似的测试,但为了向后兼容性而放宽了密钥大小限制。
对于RSA密钥,EVP_PKEY_public_check_quick(3)与EVP_PKEY_public_check(3)相同。
对于RSA密钥,EVP_PKEY_private_check(3)符合SP800-56Br1的私钥测试。
对于RSA密钥,EVP_PKEY_pairwise_check(3)符合OpenSSL FIPS提供程序的SP800-56Br1的密钥对验证检查。OpenSSL默认提供程序允许测试多素数的有效性。
符合标准
- FIPS186-4
-
第B.3.6节 基于辅助可能素数的条件下可能素数的生成
- RFC 8017,不包括RSA-PSS和RSA-OAEP
示例
可以通过调用以下方法获得EVP_PKEY上下文
EVP_PKEY_CTX *pctx =
EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL);
可以像这样简单地生成RSA密钥
pkey = EVP_RSA_gen(4096);
或像这样
EVP_PKEY *pkey = NULL;
EVP_PKEY_CTX *pctx =
EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL);
EVP_PKEY_keygen_init(pctx);
EVP_PKEY_generate(pctx, &pkey);
EVP_PKEY_CTX_free(pctx);
可以使用密钥生成参数生成RSA密钥
unsigned int primes = 3;
unsigned int bits = 4096;
OSSL_PARAM params[3];
EVP_PKEY *pkey = NULL;
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL);
EVP_PKEY_keygen_init(pctx);
params[0] = OSSL_PARAM_construct_uint("bits", &bits);
params[1] = OSSL_PARAM_construct_uint("primes", &primes);
params[2] = OSSL_PARAM_construct_end();
EVP_PKEY_CTX_set_params(pctx, params);
EVP_PKEY_generate(pctx, &pkey);
EVP_PKEY_print_private(bio_out, pkey, 0, NULL);
EVP_PKEY_CTX_free(pctx);
另请参阅
EVP_RSA_gen(3),EVP_KEYMGMT(3),EVP_PKEY(3),provider-keymgmt(7)
版权
版权所有 2020-2024 OpenSSL 项目作者。保留所有权利。
根据 Apache 许可证 2.0(“许可证”)获得许可。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的LICENSE文件中或https://www.openssl.org/source/license.html获取副本。