OpenSSLを使用して楕円曲線の証明書チェーンを生成します

関数グラフy ^ 2 = x ^ 3-x + 1 多くの人が楕円曲線の暗号化について聞いたことがあると思います。

RSAよりも何倍も高速に動作し、キーの長さが比較できないほど短いと、耐クラック性が比較にならないほど大きくなります。 聞いたことがない場合は、 wikiを見るか、AAの本を読むことができます。 ボロトバ。

残念ながら、このタイプの暗号化は十分に配布されていません。 使用方法を説明し、OpenSSLでこれを支援します。



根拠にならないように、必要なキーの長さを比較して、さまざまなアルゴリズムで同等の耐破損性を確保します。 右側に興味があります。

アルゴリズム比較

現在人気のある1024-2048ビットの長さのRSAキーは、160-224ビットECCキー(楕円曲線暗号)にのみ対応していることがわかります。



さて、どのRSAブレーキを理解するためには、テーブルで提案されている最長のキーを生成しようとする(そして仮眠を取る)ことで十分です:



openssl genrsa 15360


すでに1985年に発明された「次世代」暗号に触れたい場合は、猫をお願いします。



まず最初に、キーが必要な期間を決定します。 ECCでは、特定の曲線パラメーターは特定のキー長に対応します。 しかし、私たちはそれらを選択する必要はありません。なぜなら、私たちはNISTの賢い叔父たちがそれをしたからです。

次のコマンドを使用して、使用可能な曲線のリストを表示できます

openssl ecparam -list_curves


このコマンドは印象的なリストを提供します。特定の設定がない場合は、好きなものを選択し、160ビット以上、たとえば最長のものを選択します。

secp521r1 :521ビットプライムフィールド上のNIST / SECG曲線


c:\ ec \などのフォルダーを作成すると、すべてをそこに配置します。 CAフォルダーでは、ルート証明書のすべて、クライアントフォルダーでは、クライアント証明書のすべて。



必要です

  1. ルート自己署名証明書(CA)を生成する
  2. クライアント証明書を生成する
  3. クライアント証明書ルートに署名する


1)ルート証明書を生成します。

1.1)ルート証明書のキーを生成します:

openssl ecparam -name secp521r1 -genkey -out c:\ ec \ CA \ CA.key


のようなものを取得

----- ECパラメータの開始-----

BgUrgQQAIw ==

----- ECパラメータの終了-----

----- ECプライベートキーの開始-----

MIHcAgEBBEIBrtyWCH0 + OAZqbr84CLFvsxbB2 / AfjKD6 + fpXQF5qs7n1yRmxItRH

vNlylh7dNZEwYwleI5RLQV3pz6p06hgo6c2gBwYFK4EEACOhgYkDgYYABAEx + OTa

s3 / djxFMW7GNcWWVGv5Y7Vwvr2k00gXVyUpSySSudXKSaWYrblBtPKOWRcuHzkq5

tks3vTKclq3NgPpdjgAPk4ha68UTdX + JI / oK + EMUwCdaCuIYMDeRO1VHByEx + 3/1

XlkYPvEKRkQDLJP22vXE / NEirdZ / WzO6QTWku5q0UQ ==

----- ECプライベートキーの終了-----

最初に曲線のパラメーター(名前はsecp521r1)があり、次にその基準に基づいて既に生成されたキーがあります。



1.1.1)必要に応じて、パスワード(256ビットのキー長でAESアルゴリズムを使用して暗号化)で保護します:

openssl ec -in c:\ ec \ CA \ CA.key -out c:\ ec \ CA \ ca.protected.key -aes256


この美しさを得る(パスワード-qwerty ):

----- ECプライベートキーの開始-----

Proc-Type:4、暗号化済み

DEK-Info:AES-256-CBC、E34E27512B4DCB01524A5F17937DA7D5



xF7XZyLtpqofqkl0PVCf / 1cOEygL82itDrz7k5tVqJLMDYzG9RnTTPwJgOXsZkV1

dk5MQe9h / ixPkFE / B / Ox1OH5SI4Frb8dgS8mT9mq620A4RJdD6yAZcpicnuyyXma

1dZ + xoyRiGeHxcnErDJpvA7H6BpIAzinz4lMzY1pz2TXTdGLU + 0bK1bMiDFxRvwA

jyUEsrZA2kZ5v ++ MZzmxTsJZ6XTCRzeUPhhvNE0VKF8xPSWMEB6WeJPr + rl3zBZ7

sE71UwiaIddFHkOe3UnlAxjohABpZytUud8uS0Wi + 5E =

----- ECプライベートキーの終了-----



2)証明書リクエストを生成します。 リクエストは、公開鍵、そのハッシュ、および証明書所有者データの構造です。 キーハッシュアルゴリズムはSHA512を選択します:

openssl req -new -key c:\ ec \ CA \ ca.protected.key -sha512 -out c:\ ec \ CA \ CA.req


もう1つの美しさを取得します。

-----証明書リクエストの開始-----

MIIBrzCCARACAQAwazELMAkGA1UEBhMCUlUxDzANBgNVBAgMBk1vc2NvdzEPMA0G

A1UEBwwGTW9zY293MRIwEAYDVQQKDAloYWJyYWhhYnIxCzAJBgNVBAsMAklUMRkw

FwYDVQQDDBB3d3cuaGFicmFoYWJyLnJ1MIGbMBAGByqGSM49AgEGBSuBBAAjA4GG

AAQBMfjk2rN / 3Y8RTFuxjXFllRr + WO1cL69pNNIF1clKUskkrnVykmlmK25QbTyj

lkXLh85KubZLN70ynJatzYD6XY4AD5OIWuvFE3V / iSP6CvhDFMAnWgriGDA3kTtV

RwchMft / 9V5ZGD7xCkZEAyyT9tr1xPzRIq3Wf1szukE1pLuatFGgADAKBggqhkjO

PQQDBAOBjAAwgYgCQgHa0d5nc9UX41jj42lOnv0Hh9EXfROFm7QoUSoKdye7s7uE

nZPmGTM + h5bRG8Y + hHD3QQyM8vY9TnMVVp0r2xmYHwJCAbE5CTRDoeXf3ZpKUW77

SpXtPgYEEelkOm3Ua + / 0XVoZviBT7wF5nrqTYnMJ2MQtyvKKMCO74qqUiMoudZ7z

Msgo

-----証明書リクエストの終了-----



3)最終ステップ。 秘密鍵でリクエストに署名します。 リクエスト全体がサブスクライブされるのではなく、そのハッシュのみがサブスクライブされるため、前のステップで選択するハッシュアルゴリズムを示しました

このために必要です

3.1)[CA_default] dirセクションのopenssl.cfgをデフォルトの./DemoCAではなく「c:/ ec」に変更します

3.2)c:\ ecフォルダーに、空のindex.txtシリアルファイルの2つのファイルを作成します。01はスペースや改行なし書き込まれます。



3.3)マジックコマンドを実行する

openssl ca -days 365 -policy policy_anything -keyfile c:\ ec \ CA \ CA.protected.key -in c:\ ec \ CA \ CA.req -selfsign -out c:\ ec \ CA \ ca.crt -outdir c:\ ec \ CA


入り口で、証明書要求、秘密キーへのパスを送信し、証明書が自己署名されることを伝えます( -selfsign )。 出力では、本当に美しい証明書を取得します(ca.crtとして保存し、Windowsツールを使用して表示できます)。

証明書:

データ:

バージョン:3(0x2)

シリアル番号:1(0x1)

署名アルゴリズム:ecdsa-with-SHA1

発行者:C = RU、ST =モスクワ、L =モスクワ、O = habrahabr、OU = IT、CN = www.habrahabr.ru

有効性

以前:6月11日05:12:03 2010 GMT

終了後:2011年6月11日05:12:03 GMT

件名:C = RU、ST =モスクワ、L =モスクワ、O = habrahabr、OU = IT、CN = www.habrahabr.ru

サブジェクト公開鍵情報:

公開鍵アルゴリズム:id-ecPublicKey

公開鍵:(521ビット)

パブ:

04:01:31:f8:e4:da:b3:7f:dd:8f:11:4c:5b:b1:8d:

71:65:95:1a:fe:58:ed:5c:2f:af:69:34:d2:05:d5:

c9:4a:52:c9:24:ae:75:72:92:69:66:2b:6e:50:6d:

3c:a3:96:45:cb:87:ce:4a:b9:b6:4b:37:bd:32:9c:

96:広告:cd:80:fa:5d:8e:00:0f:93:88:5a:eb:c5:13:

75:7f:89:23:fa:0a:f8:43:14:c0:27:5a:0a:e2:18:

30:37:91:3b:55:47:07:21:31:fb:7f:f5:5e:59:18:

3e:f1:0a:46:44:03:2c:93:f6:da:f5:c4:fc:d1:22:

広告:d6:7f:5b:33:ba:41:35:a4:bb:9a:b4:51

ASN1 OID:secp521r1

X509v3拡張機能:

X509v3の基本的な制約:

CA:偽

Netscapeコメント:

OpenSSLが生成した証明書

X509v3サブジェクトキー識別子:

3D:FF:46:92:1C:7E:C1:F3:84:D0:26:BA:CD:5D:AD:25:B8:CC:DE:44

X509v3機関キー識別子:

keyid:3D:FF:46:92:1C:7E:C1:F3:84:D0:26:BA:CD:5D:AD:25:B8:CC:DE:44



署名アルゴリズム:ecdsa-with-SHA1

30:81:88:02:42:01:bf:ca:f1:4c:51:85:b4:65:26:de:eb:14:

ee:07:a1:1f:97:1d:35:1a:c3:61:8a:82:97:96:7b:f4:d4:95:

73:4d:84:d2:78:b2:35:fd:72:05:ea:6d:a4:49:e1:18:a0:ff:

13:60:7e:b0:67:ba:7f:cd:8b:ef:15:a6:5d:30:a3:48:9c:02:

42:01:53:27:2c:2c:b9:79:b1:0f:9a:c3:f6:a0:c9:dc:82:cb:

2f:3c:d8:0a:c1:53:d7:3c:37:af:54:39:78:de:ae:d9:d7:55:

6f:de:cc:9c:75:cf:d5:8e:8e:cc:2d:0c:da:d1:be:c5:8d:2d:

2b:68:94:9d:0d:8c:89:aa:b9:1d:e8:a2:05

-----証明書の開始-----

MIICxjCCAiigAwIBAgIBATAJBgcqhkjOPQQBMGsxCzAJBgNVBAYTAlJVMQ8wDQYD

VQQIDAZNb3Njb3cxDzANBgNVBAcMBk1vc2NvdzESMBAGA1UECgwJaGFicmFoYWJy

MQswCQYDVQQLDAJJVDEZMBcGA1UEAwwQd3d3LmhhYnJhaGFici5ydTAeFw0xMDA2

MTEwNTEyMDNaFw0xMTA2MTEwNTEyMDNaMGsxCzAJBgNVBAYTAlJVMQ8wDQYDVQQI

DAZNb3Njb3cxDzANBgNVBAcMBk1vc2NvdzESMBAGA1UECgwJaGFicmFoYWJyMQsw

CQYDVQQLDAJJVDEZMBcGA1UEAwwQd3d3LmhhYnJhaGFici5ydTCBmzAQBgcqhkjO

PQIBBgUrgQQAIwOBhgAEATH45Nqzf92PEUxbsY1xZZUa / ljtXC + vaTTSBdXJSlLJ

JK51cpJpZituUG08o5ZFy4fOSrm2Sze9MpyWrc2A + l2OAA + TiFrrxRN1f4kj + gr4

QxTAJ1oK4hgwN5E7VUcHITH7f / VeWRg + 8QpGRAMsk / ba9cT80SKt1n9bM7pBNaS7

mrRRo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG + EIBDQQfFh1PcGVuU1NMIEdlbmVy

YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUPf9Gkhx + wfOE0Ca6zV2tJbjM3kQw

HwYDVR0jBBgwFoAUPf9Gkhx + wfOE0Ca6zV2tJbjM3kQwCQYHKoZIzj0EAQOBjAAw

gYgCQgG / yvFMUYW0ZSbe6xTuB6Eflx01GsNhioKXlnv01JVzTYTSeLI1 / XIF6m2k

SeEYoP8TYH6wZ7p / zYvvFaZdMKNInAJCAVMnLCy5ebEPmsP2oMncgssvPNgKwVPX

PDevVDl43q7Z11Vv3sycdc / Vjo7MLQza0b7FjS0raJSdDYyJqrkd6KIF

-----証明書の終了-----





できた! クライアントを生成してみましょう。



手順1-2は非常に似ています。 パスのみが異なります:

openssl ecparam -name secp521r1 -genkey -out c:\ ec \ Client \ Client.key

openssl ec -in c:\ ec \ Client \ Client.key -out c:\ ec \ Client \ Client.protected.key -aes256

openssl req -new -key c:\ ec \ Client \ Client.protected.key -sha512 -out c:\ ec \ Client \ Client.req


手順3は、パスに加えて、CA証明書、CA秘密キー、クライアント要求を送信し、-selfsignを削除する点が異なります

openssl ca -days 365 -policy policy_anything -keyfile c:\ ec \ CA \ CA.protected.key -cert c:\ ec \ CA \ CA.crt -in c:\ ec \ Client \ Client.req -out c: \ ec \ Client \ Client.crt -outdir c:\ ec \ Client




それだけです! CA.crtを信頼されたルート証明書のストアにインストールし、Client.crtを開いて、すべてが機能するという事実を楽しむことができます(ルート証明書について少しの誓いに注意を払わず、明らかに他の拡張機能を指定する必要があります)



今、短所について少し:

  1. XPではデフォルトでサポートされていません。 おそらく、代替のセキュリティプロバイダーがあります
  2. Vista \ 7でも、すべてのブラウザがすべての曲線をサポートしているわけではありません。 IEはほとんどすべてを実行でき、Chromeはすべてを実行し、Operaは何も実行しません。




Fedora Webサイトなどで、このような証明書との互換性についてブラウザーをテストできます。



楽しんでください!



UPD:

ecフォルダーのコンテンツのアーカイブは、 ここから入手できます。



All Articles