EVP_PKEY-DSA
名称
EVP_PKEY-DSA、EVP_KEYMGMT-DSA - EVP_PKEY DSA 密钥类型和算法支持
描述
对于 **DSA**,FIPS186-4 标准规定,用于 FFC 参数生成的数值也需要用于参数验证。这意味着可能需要为验证目的存储 seed、pcounter 和 gindex 的可选 FFC 域参数值。对于 **DSA**,这些字段没有存储在 ASN1 数据中,因此如果需要验证,则需要将它们存储在外部。
DSA 参数
**DSA** 密钥类型支持 FFC 参数(参见 "EVP_PKEY-FFC(7) 中的 FFC 参数")。
DSA 密钥生成参数
**DSA** 密钥类型支持 FFC 密钥生成参数(参见 "EVP_PKEY-FFC(7) 中的 FFC 密钥生成参数")。
以下限制适用于 "pbits" 字段:
对于 "fips186_4",它必须是 2048 或 3072。对于 "fips186_2",它必须是 1024。对于 "group",它可以是 2048、3072、4096、6144 或 8192 中的任何一个。
DSA 密钥验证
对于 DSA 密钥,EVP_PKEY_param_check(3) 的行为方式如下:OpenSSL FIPS 提供程序符合 FIPS186-4 标准中针对 FFC 参数验证的规则。为了向后兼容,OpenSSL 默认提供程序使用更简单的检查(参见下文)进行参数验证,除非设置了 seed 参数。
对于 DSA 密钥,EVP_PKEY_param_check_quick(3) 的行为方式如下:对 L 和 N 以及部分 g 进行简单的检查。默认提供程序还支持对旧版 "fips186_2" 密钥的验证。
对于 DSA 密钥,EVP_PKEY_public_check(3)、EVP_PKEY_private_check(3) 和 EVP_PKEY_pairwise_check(3),OpenSSL 默认提供程序和 FIPS 提供程序分别符合 SP800-56Ar3 中关于公共、私有和成对测试的规则。
示例
可以通过调用以下方法获得 **EVP_PKEY** 上下文:
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_from_name(NULL, "DSA", NULL);
可以通过调用以下方法生成 **DSA** 域参数:
unsigned int pbits = 2048;
unsigned int qbits = 256;
int gindex = 1;
OSSL_PARAM params[5];
EVP_PKEY *param_key = NULL;
EVP_PKEY_CTX *pctx = NULL;
pctx = EVP_PKEY_CTX_new_from_name(NULL, "DSA", NULL);
EVP_PKEY_paramgen_init(pctx);
params[0] = OSSL_PARAM_construct_uint("pbits", &pbits);
params[1] = OSSL_PARAM_construct_uint("qbits", &qbits);
params[2] = OSSL_PARAM_construct_int("gindex", &gindex);
params[3] = OSSL_PARAM_construct_utf8_string("digest", "SHA384", 0);
params[4] = OSSL_PARAM_construct_end();
EVP_PKEY_CTX_set_params(pctx, params);
EVP_PKEY_generate(pctx, ¶m_key);
EVP_PKEY_CTX_free(pctx);
EVP_PKEY_print_params(bio_out, param_key, 0, NULL);
可以通过调用以下方法使用域参数生成 **DSA** 密钥:
EVP_PKEY *key = NULL;
EVP_PKEY_CTX *gctx = NULL;
gctx = EVP_PKEY_CTX_new_from_pkey(NULL, param_key, NULL);
EVP_PKEY_keygen_init(gctx);
EVP_PKEY_generate(gctx, &key);
EVP_PKEY_CTX_free(gctx);
EVP_PKEY_print_private(bio_out, key, 0, NULL);
符合
FIPS186-4 的以下部分:
- A.1.1.2 使用经批准的哈希函数生成可能的素数 p 和 q。
- A.2.3 生成规范生成器 g。
- A.2.1 不可验证地生成生成器 g。
参见
EVP_PKEY-FFC(7)、EVP_SIGNATURE-DSA(7) EVP_PKEY(3)、provider-keymgmt(7)、EVP_KEYMGMT(3)、OSSL_PROVIDER-default(7)、OSSL_PROVIDER-FIPS(7)
版权
版权所有 2020-2021 OpenSSL 项目作者。保留所有权利。
根据 Apache 许可证 2.0 版(“许可证”)许可。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 上获得副本。