8と9のリビジョン間の差分
2018-08-15 00:58:49時点のリビジョン8
サイズ: 3424
コメント:
2018-12-18 22:14:32時点のリビジョン9
サイズ: 5397
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 2: 行 2:
 * 各種公開鍵暗号アルゴリズム(RSA、ECDSA等)の秘密鍵を生成するためのコマンド。  * 各種公開鍵暗号アルゴリズム(RSA、ECDSA、EdDSA等)の秘密鍵を生成するためのコマンド。
行 20: 行 20:

なお秘密鍵ファイルのパーミッションはバージョン1.1.1になってから気にしないで大丈夫になったようだ。
行 43: 行 45:
ただし、他の環境でも使えるかどうかは別の話なので、先に示したメジャーな「楕円曲線」を推奨する。 ただし、他の環境でも使えるかどうかは別の話なので、先に示したメジャーな「楕円曲線」の使用を推奨する。

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

== EdSA公開鍵暗号の秘密鍵の作り方 ==
本機能はバージョン1.1.1での新機能となる。よって、1.1.0はもちろんのこと、それよりも古いバージョンでは実行できない。
{{{
openssl genpkey -algorithm ED25519 -out 秘密鍵ファイル名.pem

}}}
または
{{{
openssl genpkey -algorithm ED448 -out 秘密鍵ファイル名.pem

}}}

 * EdDSAで対応しているエドワーズ曲線はED25519(253ビット)とED448(448ビット)である。
 * ご覧の通り、ED25519は現役だが、ED448はバックアップで早々使われることは無いと思われ。
 * なおED25519は強度的にはPrime256v1つまり、RSA3072級となる。
 * 実用面においてはサポートが始まったばかりなので、認証局で使えるようになるまではあと数年かかると思われる。

=== X25519/X448 ===
 * {{{openssl genpkey}}} ではX25519とX448の秘密鍵の作成が行える。
 * ただしこれはキー交換用の鍵であるため、できた秘密鍵から証明書は作成できない。
 * なおX25519については鍵交換アルゴリズムとして、ED25519とは違い、既に稼働している。
行 48: 行 74:
 * 結論から言えば、RSAでのみ指定できる。ECDSAでは指定できない。
 * 指定できる暗号化アルゴリズムも数が限られている。
 * 結論から言えば、RSAでのみ指定できる。ECDSAでは指定できない。未検証だがEdDSAも指定できないと思う。
 * また指定できる暗号化アルゴリズムも数が限られている。
行 55: 行 81:
 * [[https://kazu-yamamoto.hatenablog.jp/entry/20171114/1510635277|TLS 1.3 開発日記 その22 公開鍵暗号の動向]]

openssl genpkey

  • 各種公開鍵暗号アルゴリズム(RSA、ECDSA、EdDSA等)の秘密鍵を生成するためのコマンド。
  • 通常、CSR作成する程度であれば、秘密鍵をわざわざ分けて作る必要は無い、と考えてるけど、それでも分けて実行したい場合に使用する。
  • もうそろそろ openssl genrsa コマンド使うの止めよう:-)。

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
  • EdDSAで対応しているエドワーズ曲線はED25519(253ビット)とED448(448ビット)である。
  • ご覧の通り、ED25519は現役だが、ED448はバックアップで早々使われることは無いと思われ。
  • なおED25519は強度的にはPrime256v1つまり、RSA3072級となる。
  • 実用面においてはサポートが始まったばかりなので、認証局で使えるようになるまではあと数年かかると思われる。

X25519/X448

  • openssl genpkey ではX25519とX448の秘密鍵の作成が行える。

  • ただしこれはキー交換用の鍵であるため、できた秘密鍵から証明書は作成できない。
  • なおX25519については鍵交換アルゴリズムとして、ED25519とは違い、既に稼働している。

秘密鍵の暗号化について

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

  • 結論から言えば、RSAでのみ指定できる。ECDSAでは指定できない。未検証だがEdDSAも指定できないと思う。
  • また指定できる暗号化アルゴリズムも数が限られている。
  • 具体的には「openssl enc --help」(オプションは --help のように存在しないものを指定)を実行して「Valid ciphername values:」行より後に出る一覧が指定できる。

  • 厳密には更にカウンタ系(CNT、GCM、XTS)や特殊なところで -chacha(ストリーム暗号だから?), -rc4-hmac-md5(秘密鍵が必要でパラメーターとして渡せないから) は指定できない。

参考文献

OpenSSL/genpkey (最終更新日時 2021-10-11 02:47:51 更新者 NorikatsuShigemura)