OpenSSL

密碼學和 SSL/TLS 工具組

openssl-genpkey

名稱

openssl-genpkey - 產生私密金鑰或金鑰對

語法

openssl genpkey [-help] [-out 檔名] [-outpubkey 檔名] [-outform DER|PEM] [-verbose] [-quiet] [-pass arg] [-cipher] [-paramfile 檔案] [-algorithm alg] [-pkeyopt opt:value] [-genparam] [-text] [-rand 檔案] [-writerand 檔案] [-engine id]

[-provider 名稱] [-provider-path 路徑] [-propquery propq] [-config 設定檔]

說明

此指令會產生私密金鑰或金鑰對。

選項

-help

列印使用說明。

-out 檔名

將私密金鑰輸出至指定的檔案。如果未指定此參數,則使用標準輸出。

-outpubkey 檔名

將公開金鑰輸出至指定的檔案。如果未指定此參數,則不會輸出公開金鑰。

-outform DER|PEM

輸出格式,但 -genparam 除外;預設為 PEM。詳細資訊請參閱 openssl-format-options(1)

如果指定 -genparam,則會忽略 -outform

-verbose

在產生金鑰時輸出「狀態點」。

-quiet

在產生金鑰時不輸出「狀態點」。

-pass arg

輸出檔案密碼來源。如需有關 arg 格式的詳細資訊,請參閱 openssl-passphrase-options(1)

-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。

請注意,演算法名稱 X9.42 DH 可用作 DHX 金鑰的同義詞,而 PKCS#3 則指 DH 金鑰。某些選項不會在 DH 和 DHX 金鑰之間共用。

-pkeyopt opt:value

將公開金鑰演算法選項 opt 設定為 value。支援的精確選項組取決於所使用的公開金鑰演算法及其實作。請參閱下方的 「金鑰產生選項」「參數產生選項」 以取得更多詳細資料。

若要列出演算法可能的 opt 值,請使用:openssl genpkey -algorithm XXX -help

-genparam

產生一組參數,而非私密金鑰。如果使用,此選項必須先於任何 -algorithm-paramfile-pkeyopt 選項。

-paramfile filename

有些公開金鑰演算法會根據一組參數產生私密金鑰。可以使用此選項提供這些參數。如果使用此選項,則所使用的公開金鑰演算法會由參數決定。如果使用,此選項必須先於任何 -pkeyopt 選項。-paramfile-algorithm 選項互斥。

-text

列印私密金鑰、公開金鑰和參數的(未加密)文字表示,以及 PEM 或 DER 結構。

-rand files-writerand file

請參閱 openssl(1) 中的「隨機狀態選項」 以取得詳細資料。

-engine id

請參閱 openssl(1) 中的「引擎選項」。此選項已棄用。

-provider name
-provider-path path
-propquery propq

請參閱 openssl(1) 中的「提供者選項」provider(7)property(7)

-config configfile

請參閱 openssl(1) 中的「組態選項」

金鑰產生選項

每個演算法和演算法的每個實作所支援的選項可能有所不同。OpenSSL 實作的選項詳述如下。X25519、X448、ED25519 或 ED448 演算法未定義任何金鑰產生選項。

RSA 金鑰產生選項

rsa_keygen_bits:numbits

產生金鑰中的位元數。如果未指定,則使用 2048。

rsa_keygen_primes:numprimes

產生金鑰中的質數數。如果未指定,則使用 2。

rsa_keygen_pubexp:value

RSA 公用指數值。如果在前面加上 0x,則可以是大十進位或十六進位值。預設值為 65537。

RSA-PSS 金鑰產生選項

注意:預設情況下,RSA-PSS 金鑰沒有參數限制。

rsa_keygen_bits:numbits, rsa_keygen_primes:numprimes, rsa_keygen_pubexp:value

這些選項與RSA演算法有相同的意義。

rsa_pss_keygen_md:digest

如果設定,則金鑰會受到限制,且只能使用digest進行簽署。

rsa_pss_keygen_mgf1_md:digest

如果設定,則金鑰會受到限制,且只能使用digest作為其MGF1參數。

rsa_pss_keygen_saltlen:len

如果設定,則金鑰會受到限制,且len指定最小鹽長度。

EC金鑰產生選項

EC金鑰產生選項也可以用於參數產生。

ec_paramgen_curve:curve

要使用的EC曲線。OpenSSL支援NIST曲線名稱,例如「P-256」。

ec_param_enc:encoding

要使用的參數編碼。encoding參數必須是named_curveexplicit。預設值為named_curve

DH金鑰產生選項

group:name

如果在此處使用命名群組,則不需要paramfile選項。請參閱下方的「DH參數產生選項」部分。

參數產生選項

每個演算法支援的選項,以及演算法的每個實作,都可能有所不同。OpenSSL實作的選項詳述如下。

DSA參數產生選項

dsa_paramgen_bits:numbits

產生質數中的位元數。如果未指定,則使用2048。

dsa_paramgen_q_bits:numbits
qbits:numbits

q參數中的位元數。必須是160、224或256之一。如果未指定,則使用224。

dsa_paramgen_md:digest
digest:digest

參數產生期間使用的摘要。必須為 sha1sha224sha256 之一。如果已設定,則 q 中的位元數目會與指定摘要的輸出大小相符,且會略過 dsa_paramgen_q_bits 參數。如果未設定,則會使用提供與 q 中位元數目相符的輸出的摘要,亦即如果 q 長度為 160,則為 sha1;如果為 224,則為 sha224;如果為 256,則為 sha256

屬性:查詢

從提供者擷取摘要時要使用的摘要屬性查詢字串。

類型:類型

要使用的產生類型。將其設定為 1 以使用舊版 FIPS186-2 參數產生。預設值 0 使用 FIPS186-4 參數產生。

gindex:索引

用於產生器 g 的正規產生和驗證的索引。將其設定為 0 到 255 之間的正值以使用此模式。較大的值只會使用最低位元組。然後,必須在金鑰驗證期間重複使用此索引以驗證 g 的值。如果未設定此值,則 g 不可驗證。預設值為 -1。

hexseed:種子

種子種子資料用於取代內部產生亂數種子。這應僅用於測試目的。這將為產生的參數產生固定值,或如果種子未產生有效質數,則會失敗。

DH 參數產生選項

對於大多數使用案例,建議使用 group 選項,而不是 type 選項。請注意,如果未指定參數產生選項,則預設不會使用 group 選項。

group:name
dh_param:名稱

使用命名 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:數字

如果設定此選項,則會使用適當的 RFC5114 參數,而不是產生新的參數。值數字可以是 1、2 或 3,等於使用選項 group 搭配 "dh_1024_160"、"dh_2048_224" 或 "dh_2048_256" 之一。如果設定此值,則所有其他選項都將略過。

pbits:位元數
dh_paramgen_prime_len:位元數

質數參數p 中的位元數目。預設值為 2048。

qbits:numbits
dh_paramgen_subprime_len:位元數

次質數參數q 中的位元數目。預設值為 224。僅在與 dh_paramgen_type 選項搭配使用以產生 DHX 參數時才相關。

safeprime-generator:
dh_paramgen_generator:

用於產生器 g 的值。預設值為 2。algorithm 選項必須為 "DH" 才能使用此參數。

type:字串

要產生的 DH 參數的類型名稱。有效值為

"generator"

使用選項 safeprime_generator 的安全質數產生器。algorithm 選項必須為 "DH"

"fips186_4"

FIPS186-4 參數產生。algorithm 選項必須為 "DHX"

"fips186_2"

FIPS186-4 參數產生。algorithm 選項必須為 "DHX"

"group"

可與選項 pbits 搭配使用,以選取 "ffdhe2048"、"ffdhe3072"、"ffdhe4096"、"ffdhe6144" 或 "ffdhe8192" 之一。algorithm 選項必須為 "DH"

"default"

根據 algorithm 選取預設類型。這是 OpenSSL 預設提供者用來設定類型的,以維持向後相容性。如果 algorithm"DH",則使用 "generator"。如果 algorithm"DHX",則使用 "fips186_2"

dh_paramgen_type:

要產生的 DH 參數類型。有效值為 0、1、2 或 3,分別對應於將選項 type 設定為 "generator"、"fips186_2"、"fips186_4" 或 "group"。

digest:digest

參數產生期間要使用的摘要。必須為 sha1sha224sha256 之一。如果設定,則 qbits 中的位元數會與指定摘要的輸出大小相符,且會忽略 qbits 參數。如果未設定,則會使用一個摘要,其輸出的位元數與 q 中的位元數相符,例如:如果 q 的長度為 160,則為 sha1;如果為 224,則為 sha224;如果為 256,則為 sha256。這只用於 "fips186_4" 和 "fips186_2" 金鑰產生。

屬性:查詢

從提供者擷取摘要時要使用的 摘要 屬性 查詢 字串。這只用於 "fips186_4" 和 "fips186_2" 金鑰產生。

gindex:索引

用於正規產生和驗證產生器 g 的索引。將此設定為 0..255 範圍內的正值以使用此模式。較大的值只會使用最低位元組。此索引必須在金鑰驗證期間重複使用以驗證 g 的值。如果未設定此值,則 g 不可驗證。預設值為 -1。這僅由「fips186_4」和「fips186_2」金鑰產生使用。

hexseed:種子

種子資料,用於取代內部產生隨機種子。這應僅用於測試目的。這將為產生的參數產生固定值,或如果種子未產生有效質數,則會失敗。這僅由「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 和種子的輸出值是金鑰驗證目的所必需的,且不會儲存到輸出 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 產生 2048 位元 X9.42 DH 金鑰,並使用 256 位元子群組

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 輸出 2048 位元 X9.42 DH 參數,並使用 224 位元子群組

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

使用 FIP186-4 金鑰產生輸出 2048 位元 X9.42 DH 參數,並使用 224 位元子群組

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 位元子群組

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

歷史記錄

在 OpenSSL 1.0.2 中新增了使用 NIST 曲線名稱和直接產生 EC 金鑰的功能。在 OpenSSL 1.1.0 中新增了產生 X25519 金鑰的功能。在 OpenSSL 1.1.1 中新增了產生 X448、ED25519 和 ED448 金鑰的功能。

-engine 選項已在 OpenSSL 3.0 中棄用。

版權所有 2006-2024 OpenSSL 專案作者。保留所有權利。

根據 Apache 授權條款 2.0(「授權」)授權。您只能在遵守授權條款的情況下使用此檔案。您可以在原始程式碼散佈中的 LICENSE 檔案中取得一份副本,或至 https://www.openssl.org/source/license.html 取得。