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
- -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_curve或explicit。預設值為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
-
參數產生期間使用的摘要。必須為 sha1、sha224 或 sha256 之一。如果已設定,則 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
-
參數產生期間要使用的摘要。必須為 sha1、sha224 或 sha256 之一。如果設定,則 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 取得。