EVP_PKEY-FFC
名称
EVP_PKEY-FFC - EVP_PKEY DSA 和 DH/DHX 共享 FFC 参数。
描述
有限域密码学 (FFC) 是一种使用有限域数学实现离散对数密码学的方法。DSA 是 FFC 的一个例子,SP800-56A 中指定的 Diffie-Hellman 密钥建立算法也可以作为 FFC 实现。
DSA、DH 和 DHX 密钥类型在 OpenSSL 的默认提供程序和 FIPS 提供程序中实现。这些实现支持基本的 DSA、DH 和 DHX 密钥,包含公钥和私钥pub 和 priv 以及三个主要域参数p、q 和 g。
对于DSA(以及不是命名组的DH),FIPS186-4 标准规定用于 FFC 参数生成的数值也需要用于参数验证。这意味着可能需要存储用于验证目的的seed、pcounter 和 gindex 的可选 FFC 域参数值。对于DH,seed 和 pcounter 可以存储在 ASN1 数据中(但gindex 不可以)。但是,对于DSA,这些字段不存储在 ASN1 数据中,因此如果需要验证,则需要外部存储。
DH 密钥类型使用 PKCS#3 格式,该格式保存 p 和 g,但不保存“q”值。DHX 密钥类型使用 X9.42 格式,该格式保存“q”的值,并且必须用于 FIPS186-4。
FFC 参数
除了所有密钥类型都应支持的通用参数(请参阅“provider-keymgmt(7)”中的“通用参数”)之外,DSA、DH 和 DHX 密钥类型实现还支持以下参数。
- "pub" (OSSL_PKEY_PARAM_PUB_KEY) <无符号整数>
-
公钥值。
- "priv" (OSSL_PKEY_PARAM_PRIV_KEY) <无符号整数>
-
私钥值。
FFC DSA、DH 和 DHX 域参数
- "p" (OSSL_PKEY_PARAM_FFC_P) <无符号整数>
-
DSA 或 Diffie-Hellman 素数“p”值。
- "g" (OSSL_PKEY_PARAM_FFC_G) <无符号整数>
-
DSA 或 Diffie-Hellman 生成器“g”值。
FFC DSA 和 DHX 域参数
- "q" (OSSL_PKEY_PARAM_FFC_Q) <无符号整数>
-
DSA 或 Diffie-Hellman 素数“q”值。
- "seed" (OSSL_PKEY_PARAM_FFC_SEED) <八位字节串>
-
在生成和验证p、q 和规范g期间使用的可选域参数seed值。对于验证,这需要设置生成期间产生的seed。
- "gindex" (OSSL_PKEY_PARAM_FFC_GINDEX) <整数>
-
设置用于生成器g的规范生成和验证的索引。将其设置为 0..FF 之间的一个正值以使用此模式。然后可以在密钥验证期间重复使用此gindex来验证g的值。如果此值未设置或为 -1,则将使用不可验证的生成器g生成。
- "pcounter" (OSSL_PKEY_PARAM_FFC_PCOUNTER) <整数>
-
在生成p期间输出的可选域参数计数器值。如果需要域参数验证,则必须保存此值。
- "hindex" (OSSL_PKEY_PARAM_FFC_H) <整数>
-
对于生成器g的不可验证生成,此值在生成g期间输出。其值为大于 1 的第一个整数,满足 g = h^j mod p(其中 g != 1 且“j”是陪因子)。
- "j" (OSSL_PKEY_PARAM_FFC_COFACTOR) <无符号整数>
-
一个可选的信息陪因子参数,应等于 (p - 1) / q。
- "validate-pq" (OSSL_PKEY_PARAM_FFC_VALIDATE_PQ) <无符号整数>
- "validate-g" (OSSL_PKEY_PARAM_FFC_VALIDATE_G) <无符号整数>
-
这些布尔值在 FIPS186-4 或 FIPS186-2 密钥验证检查期间使用(请参阅EVP_PKEY_param_check(3))以选择验证选项。默认情况下,validate-pq 和 validate-g 均设置为 1 以检查 p、q 和 g 是否有效。可以将其中任何一个设置为 0 以跳过测试,这主要用于测试目的。
- "validate-legacy" (OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY) <无符号整数>
-
此布尔值在密钥验证检查期间使用(请参阅EVP_PKEY_param_check(3))以选择验证类型。默认值为 0,选择 FIPS186-4 验证。将此值设置为 1 选择 FIPS186-2 验证。
FFC 密钥生成参数
DSA 和 DHX 算法提供以下密钥生成类型
- "type" (OSSL_PKEY_PARAM_FFC_TYPE) <UTF8 字符串>
-
设置参数生成类型。共享的有效值为
- "fips186_4"
-
当前标准。
- "fips186_2"
-
旧标准,仅应用于遗留目的。
- "default"
-
这可以根据为参数生成设置的其他参数选择“fips186_4”或“fips186_2”之一。
- "pbits" (OSSL_PKEY_PARAM_FFC_PBITS) <无符号整数>
-
设置素数“p”的大小(以位为单位)。
- "qbits" (OSSL_PKEY_PARAM_FFC_QBITS) <无符号整数>
-
设置素数“q”的大小(以位为单位)。
对于“fips186_4”,这可以是 224 或 256。对于“fips186_2”,其大小为 160。
- "digest" (OSSL_PKEY_PARAM_FFC_DIGEST) <UTF8 字符串>
-
设置要作为与给定密钥生成ctx关联的密钥生成函数的一部分使用的摘要算法。这对于密钥验证也必须设置。
- "properties" (OSSL_PKEY_PARAM_FFC_DIGEST_PROPS) <UTF8 字符串>
-
设置要在查找与给定密钥生成ctx关联的密钥生成函数的所选摘要算法的实现时使用的属性。这也可以为密钥验证设置。
- "seed" (OSSL_PKEY_PARAM_FFC_SEED) <八位字节串>
-
对于“fips186_4”或“fips186_2”生成,这会设置要使用的seed数据,而不是在内部生成随机种子。这仅应用于测试目的。这将要么为生成的参数生成固定值,要么如果种子未生成有效素数则会失败。
- "gindex" (OSSL_PKEY_PARAM_FFC_GINDEX) <整数>
- "pcounter" (OSSL_PKEY_PARAM_FFC_PCOUNTER) <整数>
- "hindex" (OSSL_PKEY_PARAM_FFC_H) <整数>
-
这些类型在上面有描述。
符合标准
SP800-56Ar3 的以下部分
- 5.5.1.1 FFC 域参数选择/生成
FIPS186-4 的以下部分
- A.1.1.2 使用批准的哈希函数生成可能的素数 p 和 q。
- A.2.3 规范生成器 g 的生成。
- A.2.1 生成器 g 的不可验证生成。
另请参见
EVP_PKEY-DSA(7)、EVP_PKEY-DH(7)、EVP_SIGNATURE-DSA(7)、EVP_KEYEXCH-DH(7) EVP_KEYMGMT(3)、EVP_PKEY(3)、provider-keymgmt(7)、OSSL_PROVIDER-default(7)、OSSL_PROVIDER-FIPS(7),
版权
版权所有 2020-2021 OpenSSL 项目作者。保留所有权利。
根据 Apache 许可证 2.0(“许可证”)获得许可。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。