«

openssl genpkey 帮助手册

srdf 发布于 阅读:156 OpenSSL


概要

openssl genpkey [-help] [-out filename] [-outform DER|PEM] [-quiet] [-pass arg] [-cipher] [-paramfile file] [-algorithm alg] [-pkeyopt opt:value] [-genparam] [-text] [-engine id] [-provider name] [-provider-path path] [-propquery propq] [-config configfile]

用途

  此命令用于生成一个私钥。

选项

-help

打印一些有用的消息

-out filename

文件名:将密钥输出到指定的文件。如果没有指定这个参数,就使用标准输出。

-outform DER|PEM

输出格式;除非你使用 -genparam 以外,默认格式为 PEM。查阅  openssl格式选项(1) 获取详情。

使用 -genparam 时,将忽略 -outform

-quiet

输出密钥时不要输出“状态点(status dots)”。

-pass arg

输出文件的密码源。前往openssl 密码短语(1)获取更多关于arg的格式信息。

-cipher

这一选项使用给定的密码加密私钥。由 EVP_get_cipherbyname() 建议的算法名称是可以接受的,例如 des3

-algorithm alg

生成公钥使用的算法,例如:RSA、DSA、DH或DHX。如果使用这个选项,那么这个选项必须位于 -pkeyopt 选项的前面。-paramfile-algorithm 是互斥的。除了标准内置算法之外,引擎可以添加算法。

用于生成私钥的有效内置算法名是RSA、RSA-PSS、EC、X25519、X448、ED25519 和 ED448。

用于参数生成的有效内置算法名称(请参阅 -genparam 选项)是 DH、DSA 和 EC。

-pkeyopt opt:value

设置公钥算法。选项格式如下:opt:value。支持的精确选项集取决于所使用的公钥算法及其实现。查看下方的密钥生成选项参数生成选项获取更多信息。

-genparam

生成一组参数而非一个私钥。这一选项必须位于 、-paramfile-pkeyopt 选项的前面。

-paramfile file-algorithm

一些公钥算法基于一组参数生成私钥。可以使用这一选项接收参数组。如果使用这一选项,使用的公钥算法就由参数决定。这一选项必须在所有 -pkeyopt 选项的前面。-paramfile-algorithm 不能同时出现。

-text

使用 PEM 或 DER 结构打印与私钥、公钥和参数相关的未加密的文本。

-engine id

详情见  "Engine Options" in openssl(1)。这一选项已弃用。

-provider name

-provider-path path

-propquery propq

详情见 "Provider Options" in openssl(1)provider(7) 以及  property(7)

-config configfile

详见"Configuration Option" in openssl(1)

密钥生成选项

每个算法支持的选项和每个算法的实现实际上都可能不同。OpenSSL中生效的选项在下方列出。X25519、X448、ED25519算法没有密钥生成选项。

RSA 密钥生成选项

rsa_keygen_bits : numbits

要生成的密钥的位数。如果没有指明,默认使用2048位。

rsa_keygen_primes : numprimes

要生成的密钥的质数。如果没有指明,默认为2。

译者注:质数有范围限制。具体如下:

质数的最大值 = 5

质数的最小值 = 2,默认值即最小值;

当位数(bits)小于1024时,质数固定为2;

当位数大于等于1024,小于4096时,质数可以选择2或3;

当位数大于等于4096,小于8192时,质数为2、3和4;

当位数大于等于8192时,质数为2、3、4、5。

具体代码参照文件:

rsa_keygen_pubexp : value

RSA 公共指数。它可以是一个大的十进制或十六进制数值,十六进制数值以 0x 作为开头。默认值是65537。

RSA - PSS 密钥生成选项

备注:默认情况下 RSA-PSS 密钥没有参数限制。

rsa_keygen_bits : numbitsrsa_keygen_primes : numprimesrsa_keygen_pubexp : value

这些选项的用途与 RSA 算法相同。

rsa_pss_keygen_md : digest

如果设置,密钥将受到限制,只能使用摘要进行签名。

rss_pss_keygen_mgf1_md : digest

如果设置,密钥将受到限制,只能使用摘要作为密钥的 MGF1 参数。

rsa_pss_keygen_saltlen : len

如果设置,密钥将受到限制,len 指定了最小的盐的长度。

EC 密钥生成选项

EC 密钥生成选项也可以用于参数生成。

ec_paramgen_curve : curve

要使用的 EC 曲线。OpenSSL 支持 NIST 曲线名称,例如“P-256”。

ec_paramgen_enc : encoding

用于参数的编码。编码的参数必须是一个 named_curve 或者 explicit

DH 密钥生成选项

group : name

如果在此处使用 named group,paramfile 选项就不再需要。详情请查阅下方的“DH 参数生成选项”一节。

参数生成选项

每个算法支持的选项和每个算法的实现实际上都可能不同。OpenSSL中生效的选项列在下方。

DSA 参数生成选项

dsa_paramgen_bits : numbits

生成的质数的大小。如果没有指定,默认使用2048。

dsa_paramgen_q_bits : numbits

qbits : numbits

q 参数里的bits数值。必须是160、224或256之一。如果未指定,默认使用224。

dsa_paramgen_md : digest

digest : digest

在参数生成期间使用摘要。必须为 sha1sha224sha256之一。使用摘要后,q的位数将与指定摘要的输出大小一致,并忽略 dsa_paramgen_q_bits。如果不使用摘要,将使用一个摘要来提供与 q 中的位数匹配的输出。例如,假如 q 的长度是160,摘要是 sha1;如果它是224,摘要为 sha224或者如果它是256,摘要就是 sha256

properties : query

从提供者获取摘要时使用的摘要属性请求字符串。

type : type

要使用的生成器的种类。把它设为1以使用老式的 FIPS186 - 2 参数生成器。默认值为0,使用 FIPS186 - 4 参数生成器。

gindex : index

index 用于规范生成以及发生器的验证。把它设为0 - 255的数值以使用这种模式。更大的值仅使用底部类型。索引在密钥验证期间必须重新使用,用于验证 g 的值。如果没有设置数值,那么 g 无法验证。默认值为 -1。

hexseed : seed

使用 seed 数据代替内部生成随机种子,仅用于测试目的,为生成的参数生成固定值。如果种子未生成有效质数,则失败。

DH 参数生成选项

对于大多数用例而言建议使用 group 选项而不是 type 选项。注意如果没有指定参数生成选项,就不会将 group 选项作为默认使用。

group : name

dh_param : name

使用一个命名的 DH 组为 DH 参数选择常量值。如果设置了这一变量,就忽略其他选项。

DH 算法关联的有效值是:"ffdhe2048"、"ffdhe3072"、"ffdhe4096"、"ffdhe6144"、"ffdhe8192"、"modp_1536"、"modp_2048"、"modp_3072"、"modp_4096"、"modp_6144"、"modp_8192"。

DHX 算法关联的有效值是 RFC5114 命名的 "dh_1024_160"、"dh_2048_224"、"dh_2048_256"。

dh_rfc5114 : num

如果设置了这一选项,那么将使用合适的 RFC5114 参数,不再生成新的参数。num 的值可以是1、2、3之一,相当于使用 "dh_1024_160"、"dh_2048_224"、"dh_2048_256" 之一的选项组(group)

pbits : numbits

dh_paramgen_prime_len : numbits

质数参数 p 的位数。默认值是 2048。

qbits : numbits

dh_paramgena_subprime_len : numbits

子质数参数 q 的位数。默认值是 224。仅与 dh_paramgen_type 一起使用以生成 DHX 参数时才相关。

safeprime-generator : value

dh_paramgen_generator : value

生成 g 使用的值。默认值为2。此参数使用的算法选项必须为 DH

type : string

要生成 DH 参数类型的名称。有效的值如下:

"generator"

使用带有 safeprime_generator 选项的安全质数生成器。algorithm 选项必须为“DH”。

"fips186_4"

FIPS186_4 参数生成。algorithm 选项必须为"DHX"。

"fips186_2"

FIPS186_2 参数生成。algorithm 选项必须为"DHX"。

"group"

可以与 pbits 选项一起使用,用于从 "ffdhe2048"、"ffdhe3072"、"ffdhe4096"、"ffdhe6144" 或 "ffdhe8192" 当中选择其一。

"default"

基于算法选择默认的类型。它由 OpenSSL 的默认提供者使用,用以为向后兼容性设置类型。如果算法选项为“DH”,那么就使用"generator"。如果算法选项为“DHX”,那么就使用"fips186_2"。

dh_paramgen_type : value

要生成的 DH 参数的类型。 有效值为 0、1、2 或 3,对应于将选项类型设置为“generator”、“fips186_2”、“fips186_4”或“group”。

digest : digest

参数生成期间使用的摘要。必须是 sha1sha224sha256 之一。如果设置,则 qbits 中的位数将与指定摘要的输出大小匹配,并且忽略 qbits 参数。如果未设置,则将使用摘要来提供与 q 中位数匹配的输出,即,如果 q 长度为 160,则为 sha1;如果为 224,则为 sha224;如果为 256,则为 sha256。仅由“fips186_4”使用 和“fips186_2”密钥生成。

properties : query

从提供者获取摘要时使用的摘要属性查询字符串。 仅由“fips186_4”和“fips186_2”密钥生成使用。

gindex : index

用于生成器 g 的规范生成和验证的索引。将其设置为 0..255 之间的正值以使用此模式。较大的值将只使用底部字节。然后,必须在密钥验证期间重用该索引来验证 g 的值。如果未设置此值,则 g 无法验证。默认值为-1。只用于“fips186_4”和“fips186_2”密钥生成。

hexseed : seed

使用种子数据代替内部随机生成种子。只能用于测试目的。这将为生成的参数生成固定值,或者如果种子没有生成有效的素数,它将失败。这只用于“fips186_4”和“fips186_2”密钥。

EC 参数生成选项

EC 参数生成选项与密钥生成选项一样。见上方的 “EC 密钥生成选项”。

备注

鼓励使用 genpkey 程序而不是特定于算法的程序因为可以使用额外的算法选项以及 ENGINE 提供的算法。

示例

使用默认参数生成 RSA 私钥:

openssl genpkey -algorithm RSA -out key.pem

使用128位的 AES 算法加密输出的私钥,将密码设为“hello”:

openssl genpkey -algorithm RSA -out key.pem -aes-128-cbc -pass pass:hello

使用3作为公共指数生成2048位的 RSA 密钥:

openssl genpkey -algorithm RSA -out key.pem \
    -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3

生成可以验证的2048位 DSA 参数:需要将 gindex 和 seed 用于密钥验证,不会保存到输出的 pem 文件中。

openssl genpkey -genparam -algorithm DSA -out dsap.pem -pkeyopt pbits:2048 \
    -pkeyopt qbits:224 -pkeyopt digest:SHA256 -pkeyopt gindex:1 -text

从参数生成 DSA 密钥:

openssl genpkey -paramfile dsap.pem -out dsakey.pem

使用安全质数组 ffdhe4096 生成 4096 位 DH 密钥:

openssl genpkey -algorithm DH -out dhkey.pem -pkeyopt group:ffdhe4096

使用 RFC5114 group3 生成具有 256 位 subgroup 的 2048 位 X9.42 DH 密钥:

openssl genpkey -algorithm DHX -out dhkey.pem -pkeyopt dh_rfc5114:3

使用 DH 参数文件生成 DH 密钥:

openssl genpkey -paramfile dhp.pem -out dhkey.pem

输出用于安全质数组 ffdhe2048 的 DH 参数:

openssl genpkey -genparam -algorithm DH -out dhp.pem -pkeyopt group:ffdhe2048

使用 RFC5114 group2 输出具有 224 位子组的 2048 位 X9.42 DH 参数:

openssl genpkey -genparam -algorithm DHX -out dhp.pem -pkeyopt dh_rfc5114:2

使用 FIP186-4 注册机输出 2048 位 X9.42 DH 参数和 224 位 subgroup:

openssl genpkey -genparam -algorithm DHX -out dhp.pem -text \
    -pkeyopt pbits:2048 -pkeyopt qbits:224 -pkeyopt digest:SHA256 \
    -pkeyopt gindex:1 -pkeyopt dh_paramgen_type:2

使用 FIP186-2 注册机输出 1024 位 X9.42 DH 参数和 160 位 subgroup:

openssl genpkey -genparam -algorithm DHX -out dhp.pem -text \
    -pkeyopt pbits:1024 -pkeyopt qbits:160 -pkeyopt digest:SHA1 \
    -pkeyopt gindex:1 -pkeyopt dh_paramgen_type:1

输出2048位DH参数:

openssl genpkey -genparam -algorithm DH -out dhp.pem \
    -pkeyopt dh_paramgen_prime_len:2048

使用生成器输出 2048 位 DH 参数:

openssl genpkey -genparam -algorithm DH -out dhpx.pem \
    -pkeyopt dh_paramgen_prime_len:2048 \
    -pkeyopt dh_paramgen_type:1

生成EC参数:

openssl genpkey -genparam -algorithm EC -out ecp.pem \
       -pkeyopt ec_paramgen_curve:secp384r1 \
       -pkeyopt ec_param_enc:named_curve

从参数生成 EC 密钥:

openssl genpkey -paramfile ecp.pem -out eckey.pem

直接生成EC密钥:

openssl genpkey -algorithm EC -out eckey.pem \
       -pkeyopt ec_paramgen_curve:P-384 \
       -pkeyopt ec_param_enc:named_curve

生成 X25519 私钥:

openssl genpkey -algorithm X25519 -out xkey.pem

生成 ED448 私钥:

openssl genpkey -algorithm ED448 -out xkey.pem

历史

使用 NIST 曲线名,以及直接生成 EC 密钥的能力曾经加入到 OpenSSL 1.0.2 当中。生成 X25519 密钥的能力被加入到 OpenSSL 1.1.0 当中。生成 X448、ED25519 和 ED448 密钥的能力在 OpenSSL 1.1.1 中加入。

-engine 选项从 OpenSSL 3.0 开始弃用。

版权

Copyright 2000 - 2021 OpenSSL项目作者保留所有权利。

根据 Apache License 2.0(以下简称“许可证”)获得许可。 除非遵守许可协议,否则您不得使用此文件。 您可以从源代码分发版中的 LICENSE 文件或者从 https://www.openssl.org/source/license.html 获取副本。

OpenSSL OpenSSL-genpkey V3.1


扫描二维码,在手机上阅读
取消
微信二维码
微信二维码
支付宝二维码