openssl genpkey

RSA公開鍵暗号の秘密鍵の作り方

openssl genpkey -algorithm RSA -out 秘密鍵ファイル名.pem -pkeyopt rsa_keygen_bits:ビット数
chmod 0400 秘密鍵ファイル名.pem

-pkeyout rsa_keygen_bits: を指定しない場合、通常(今時?)2048ビットと解釈される。 指定可能なビット数は256から1073741696(0x3fffff80)まで可能(openssl のバージョンによる)。

なおマニュアル読むと -pkeyopt rsa_keygen_pubexp:3 と「冪指数」に「3」を指定している例が記載されているが、 実用的にはデフォルトの65537(0x10001)で十分だし、(素数である必要があるにしても)他を指定する意味は無い(処理速度的にも)。

なお秘密鍵ファイルのパーミッションはバージョン1.1.1になってから気にしないで大丈夫になったようだ。

ECDSA公開鍵暗号の秘密鍵の作り方

openssl genpkey -algorithm EC -out 秘密鍵ファイル名.pem -pkeyopt ec_paramgen_curve:ECパラメータ名 -pkeyopt ec_param_enc:named_curve
chmod 0400 秘密鍵ファイル名.pem

または

openssl genpkey -paramfile <(openssl ecparam -name ECパラメータ名) -out 秘密鍵ファイル名.pem
chmod 0400 秘密鍵ファイル名.pem

<(command)というイディオム(実行結果をテンポラリファイル名で渡してくれる)は zsh/bash 拡張なので、シェルスクリプト(sh/ash/ksh)中では使わないこと。

「ECパラメータ名」はいわゆる「prime256v1」「secp384r1」「secp521r1」と言った 「楕円曲線」を示す。具体的には下記コマンドを実行することで、使用できる「楕円曲線」を選べる。

openssl ecparam -list_curves

ただし、他の環境でも使えるかどうかは別の話なので、先に示したメジャーな「楕円曲線」の使用を推奨する。

なお秘密鍵ファイルのパーミッションはバージョン1.1.1になってから気にしないで大丈夫になったようだ。

EdSA公開鍵暗号の秘密鍵の作り方

本機能はバージョン1.1.1での新機能となる。よって、1.1.0はもちろんのこと、それよりも古いバージョンでは実行できない。

openssl genpkey -algorithm ED25519 -out 秘密鍵ファイル名.pem

または

openssl genpkey -algorithm ED448 -out 秘密鍵ファイル名.pem

X25519/X448

秘密鍵の暗号化について

実運用で必要だと思ったことは無いが、世の中には秘密鍵を暗号化しないといけないユースケースがあるようで、その場合の指定方法について調査した。

参考文献