GNU/Linux >> Linux の 問題 >  >> Linux

コマンドライン楕円曲線操作

OpenSSL®は、楕円曲線(EC)暗号化アルゴリズムに適したキーを操作するための次のコマンドラインツールを提供します。

  • openssl ecparam
  • openssl ec

現在、OpenSSLは次のECアルゴリズムをサポートしています。

  • 鍵共有のための楕円曲線ディフィーヘルマン(ECDH)
  • 署名と検証のための楕円曲線デジタル署名アルゴリズム(ECDSA)

ecparams およびec x25519をサポートしていません 、ed25519 、およびed448 曲線。 genpkeyを参照してください これらの曲線に関する情報のサブコマンド。

EC秘密鍵ファイル形式

OpenSSLは、デフォルトでプライバシー強化メール(PEM)ファイルを使用してEC秘密鍵を保存します。これらのファイルにはbase-64でエンコードされたデータが含まれており、 .pemを使用します 拡大。次の例は、PEM形式の秘密鍵ファイルを示しています。

-----BEGIN EC PRIVATE KEY-----
MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG
SM49AQECGQD////////////////////+//////////8wSwQY////////////////
/////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z
eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz
S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0
AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5
0g9/pw==
-----END EC PRIVATE KEY-----

次の例は、PEM形式の暗号化された秘密鍵ファイルを示しています。

-----BEGIN EC PRIVATE KEY-----<br/>
Proc-Type: 4,ENCRYPTED<br/>
DEK-Info: DES-EDE3-CBC,258248872DB25390<br/>

JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn
24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o
zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF
0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk
n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S
6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp
kDny2v3D8sU=
-----END EC PRIVATE KEY-----

次の例は、PEM形式のPublicKey Cryptography Standard 8(PKCS8)を使用する秘密鍵ファイルを示しています。

-----BEGIN PRIVATE KEY-----
MIIBMAIBADCB0wYHKoZIzj0CATCBxwIBATAkBgcqhkjOPQEBAhkA////////////
/////////v//////////MEsEGP////////////////////7//////////AQYIhI9
wjlaBcqnQj2uzMlHYKfUYiVr1WkWAxUAxGloRDXes3jEtlypWR4qV2MFmi4EMQR9
KXeBAMZaHaF4NxZYjc4ri0rujiKPGJY4qQ8iY3M3M0tJ3LZqbcj5l4rKdkipQ7AC
GQD///////////////96YtAxyD9ClPZA7BMCAQEEVTBTAgEBBBiKtwssqrxHY/gu
KDD4QgmyLDKaqBv2wEWhNAMyAAT5j6o+ojeB6jaFAfx4rtGf5hYbT1N6NnlAWiP1
+bEWtTJiEVqnpeZN0m0SLybIGZY=``
-----END PRIVATE KEY-----

次の例は、暗号化されたPKCS8秘密鍵ファイルをPEM形式で示しています。

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIBWTAbBgkqhkiG9w0BBQMwDgQIGIcvnv17Q8oCAggABIIBOK+i1pk7em94F0Bn
+yKxU5p7e2+cnnW/8b2mjvga0Uj8JVxRHi5eR2/u+3fjHQItq0df+qzyVC0TTCPz
YZVrgHO9hPilgbGQKQQSpy9bpbGGiZ7I+aFpriEaJzugHUi8XTXY6XtnxgHAqTOX
nma2HHoGRic2wNgIGKQ+B1pULy2kFDMvQ/AwvYS13uH2Trfja9M9wRqYjM2MS0Ky
ii03OsNhJjZQcPmy2ALciR+umG4IQ7qszfrCA7L95F3qVXa7DgAPDZyUSdF3ucSh
IlrEvaP7FeLfJ1/ilUaXK6XC9EDYPDWMErUQJZJAywczQMqjY4/pdhb8Y+TpbN/r
q1I5j+JbRwfvvJV7CAHv1EEjvWiWvjHamlb7iqh3gneOYPbvSfjuaOyVd5YhwQ7P
nGOah+eEf9uyDSZabg==``
-----END ENCRYPTED PRIVATE KEY-----

PKCS8秘密鍵ファイルは、EC鍵とは別に、さまざまな秘密鍵タイプをサポートします。ファイルを変換してさまざまな秘密鍵タイプを使用し、暗号化として設定できます。 または暗号化されていない

次のコマンドを使用して、PKCS8ファイルを従来の暗号化されたECキーファイルに変換します。

openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem

引数-aes-128-cbcを置き換えます 他の有効なOpenSSL暗号名を使用します。 (有効な暗号名のリストについては、OpenSSLのドキュメントを参照してください。)

次のコマンドを使用して、PKCS8ファイルを従来の暗号化されていないECキーファイルに変換します。

openssl ec -in p8file.pem -out tradfile.pem

次のコマンドを使用して、ECキーファイルを暗号化されたPKCS8形式に変換します。

openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem

次のコマンドを使用して、ECキーファイルを暗号化されていないPKCS8形式に変換します。

openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem

:EC秘密鍵ファイルはデフォルトでは暗号化されていません。ファイルを明示的に暗号化に設定し、暗号化アルゴリズムを指定する必要があります。 PKCS8ファイルはデフォルトで暗号化されています。 -nocryptを使用します ファイルを暗号化されていない状態に設定するオプション。

PEMファイルは、ヘッダーとフッターを使用して、base64エンコードルールを使用してエンコードされたDERデータです。 PEMファイルは人間が読める形式であるため、使い勝手がよくなりますが、上記のすべてのファイルをDER形式で保存できます。 DER形式はバイナリ形式であり、PEMファイルとは異なり、人間が読める形式ではありません。

ほとんどのopenssl コマンドにはオプションがあります-inform DER および-outform DER-inform DER 入力ファイルがDERであり、-outform DERであることを指定します 出力ファイルがDERであることを指定します。

次のコマンドを使用して、PKCS8形式をDER形式の従来の暗号化されたECキーに変換します。

openssl ec -in p8file.pem -outform DER -out tradfile.der

従来のEC秘密鍵ファイルをDER形式で暗号化することはできません。これを行おうとすると、コマンドは引数を黙って無視します。ただし、PKS8ファイルはDER形式で暗号化できます。

次のコマンドを使用して、従来のECキーファイルをDER形式の暗号化されたPKCS8に変換します。

openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der

EC公開鍵ファイル形式

PEM形式は、OpenSSLでいくつかのタイプの公開鍵をサポートします。次のファイルは、EC公開鍵をPEM形式で示しています。

-----BEGIN PUBLIC KEY-----
MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T
ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW
-----END PUBLIC KEY-----

次のコマンドを使用して、PEM形式の秘密鍵ファイルから公開鍵ファイルを作成します。公開鍵ファイルから秘密鍵ファイルを作成することはできないことに注意してください。

openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem

次のコマンドを使用して、DER形式の秘密鍵ファイルから公開鍵ファイルを作成します。

openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der

ECキーとパラメーターの生成

ECパラメータファイルには、暗号化操作の楕円曲線を定義するために必要なすべての情報が含まれています。 OpenSSLはECDHおよびECDSAアルゴリズムを使用します。次のコマンドを使用して、組み込み曲線のリストを取得します。

openssl ecparam -list_curves

次のコマンドを使用して、曲線secp256k1のECパラメータファイルを生成します。 :

openssl ecparam -name secp256k1 -out secp256k1.pem

secp256k1を置き換えます openssl ecparam -list_curvesから取得した他の名前 コマンド。

ecparamを使用してキーを生成できます 既存のパラメータファイルを使用するか、曲線の名前を使用して、コマンドを実行します。次のコマンドを使用して、パラメータファイルから秘密鍵と公開鍵のペアを生成します。

openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem

次のコマンドを使用して、曲線の名前から秘密鍵と公開鍵のペアを生成します。

openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem

キーファイルには、キー埋め込みを生成するために使用されるパラメータの情報が含まれています。 OpenSSLは、曲線の名前をパラメータファイルまたはキーファイルに保存します。デフォルトでは、名前に関連付けられているパラメーターの完全なセットは明示的に保存されません。次のコマンドを使用して、パラメータファイルの曲線の名前を確認します。

openssl ecparam -in secp256k1.pem -text -noout

出力例:

ASN1 OID: secp256k1

次のコマンドを使用して、パラメータファイルからパラメータの詳細を一覧表示します。

openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout

次のコマンドを使用して、曲線の名前からパラメータの詳細を一覧表示し、それに応じて曲線の名前を置き換えます。

openssl ecparam -name secp256k1 -text -param_enc explicit -noout

出力例:

Field Type: prime-field
Prime:
    00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
    ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:
    ff:fc:2f
A:    0
B:    7 (0x7)
Generator (uncompressed):
    04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:
    0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:
    f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:
    0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:
    8f:fb:10:d4:b8
Order:
    00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
    ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:
    36:41:41
Cofactor:  1 (0x1)

曲線の名前だけでなく、パラメータの完全なセットを明示的に含むパラメータファイルとキーファイルを生成できます。これは、一部のターゲットシステムがを知らない場合に重要です。 曲線の詳細。 OpenSSL version1.0.2は、brainpool512t1などの新しい曲線を追加しました 。 brainpool512t1で構成されたパラメーターファイルまたはキーファイルを使用する以前のバージョンのOpenSSL 次のエラーが発生します:

bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout
unable to load elliptic curve parameters
140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:
140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:
140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:

OpenSSL 1.0.2で次のコマンドに示すように、この問題を回避するために明示的なパラメーターを使用します。

openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit

このコマンドは、すべてのパラメータを含むより長いパラメータファイルを生成します。

-----BEGIN EC PARAMETERS-----
MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc
ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp
xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C
xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj
BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+
uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa
W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn
MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw
MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=
-----END EC PARAMETERS-----

以前のバージョンのOpenSSLは、パラメータファイルを処理できます。 OpenSSLバージョン1.0.1で次のコマンドを使用します:

openssl ecparam -in brainpoolP512t1.pem -text -noout

OpenSSLバージョン1.0.1。曲線がわからなくてもパラメータを表示します。

次のコマンドを使用して、明示的なパラメータを持つキーファイルを生成します。

openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit

以前のバージョンのOpenSSLは、取得したキーファイルを処理できます。

:パラメータが明示的なパラメータに変更された後は、変更を元に戻さないでください。どの明示的なパラメータが曲線に対応するかを見つけるユーティリティはありません。

参照
  • 楕円曲線暗号
  • 楕円曲線ディフィーヘルマン
  • コマンドラインユーティリティ

コメントや質問をするには、[フィードバック]タブを使用します。私たちと会話を始めることもできます。


Linux
  1. マシン間で秘密鍵を共有しますか?

  2. Linux – Linuxでの同期コマンド操作を理解していますか?

  3. Linuxのコマンドライン履歴

  1. Linuxターミナルでラジオを聞く

  2. シンプルなコマンドライン計算機?

  3. VPNの作り方

  1. Bashのファイルでアトミック書き込み操作を実行しますか?

  2. openssh秘密鍵をSsh2秘密鍵に変換しますか?

  3. Linuxのコマンドラインテキストエディタ