« 電子処方箋対応 4Dプラグイン開発 pkcs#11、OpenSSL、電子署名、HPKIカード 導入備忘録 | トップページ | 忘れないうちにOpenSSLでの暗号化と復号 (その2) »

2022年8月12日 (金)

忘れないうちにOpenSSLでの暗号化と復号 (その1)

今回は完全に備忘録(笑)

 

OpenSSLで暗号の基本を復習する。

電子署名は、秘密鍵で暗号化して公開鍵で復号する

SSL(TSL)は、公開鍵で暗号化して秘密鍵で復号する

まずはやってみる

このページを参考にした。

OpenSSL で RSA の秘密鍵を作成する方法WEB ARCH LABO

 

秘密鍵をつくる

openssl genrsa」コマンドで、2024bit(253バイト)のRSA秘密鍵を作る。通常は2048bit。ビット数を少なくした時の状態が見たかったので記事のまま指定してみた。コマンドの詳細はリンク先を参照

$ openssl genrsa 2024 > server.key
Generating RSA private key, 2024 bit long modulus (2 primes)
................................................................................
.....................................+++++
.........................+++++
e is 65537 (0x010001)

 

できたキーの中身をテキストとして表示してみる

$ cat server.key
-----BEGIN RSA PRIVATE KEY-----
MIIEjwIBAAKB/gDeRJbhTAshOXp6uJig8IGfZEvofJb5ndHVwm5o4UssOsEWxlPb
VZkO2V3HmfDNbYzSvI5WIFYb3FW+e0cZf+0zh+drECs/8pJ5ryQhJgNqVXn2gR5m
(略)
CfSTk/DqVqK6mFsduBRtdp8+p2Pde/h1aSwfrUiiCvDbZOJvb0JcRLC4CUL8MYOU
iN+SgL5CC9cOFo3/mKncY19psQExepkSnwNv39PbSS7xLicO++tDW3arMtcn7k6t
Dz3rHznsGgUymLsjvcdlwX6Zdw==
-----END RSA PRIVATE KEY-----

頭と最後に種類の表示があって、中身がbase64でエンコードされているのでpem形式の鍵である。ちなみに改行はLF(0x0A)である。

 

詳しく見てみよう「openssl rsa」を使う。「-text」オプションでプレーンテキストの出力となる。「-in」で入力ファイル(秘密鍵)を指定。

$ openssl rsa -text -in server.key
RSA Private-Key: (2024 bit, 2 primes)
modulus:
00:de:44:96:e1:4c:0b:21:39:7a:7a:b8:98:a0:f0:
81:9f:64:4b:e8:7c:96:f9:9d:d1:d5:c2:6e:68:e1:
(略)
publicExponent: 65537 (0x10001)
privateExponent:
00:bd:77:28:4a:4a:a1:1e:24:39:f4:8c:90:86:78:
1d:76:7a:6f:7e:71:5d:dc:d0:1c:03:a4:26:ab:be:
(略)
prime1:
0f:56:0d:7e:f0:16:ca:e7:62:14:98:bc:6e:46:52:
0f:cd:3f:1f:18:d5:ea:ba:f1:c9:cb:2b:20:b8:15:
(略)
prime2:
0e:7e:3a:60:ce:5c:d9:8f:06:82:05:b1:40:b3:e5:
57:f0:1c:eb:81:bf:fa:ce:6a:ca:b0:7a:5d:2a:04:
(略)
exponent1:
0c:48:e1:3c:aa:73:87:8b:3b:5c:c6:50:42:81:5f:
e0:ba:87:72:90:81:62:aa:e7:5d:be:ba:48:56:4c:
(略)
exponent2:
03:15:cd:d9:93:b4:62:3f:b7:13:f0:a0:45:f4:c5:
aa:8d:9b:aa:6a:89:72:9b:84:52:37:75:24:e5:ef:
(略)
coefficient:
03:e0:f6:14:9b:95:01:01:8f:28:aa:fd:09:f4:93:
93:f0:ea:56:a2:ba:98:5b:1d:b8:14:6d:76:9f:3e:
(略)
writing RSA key -----BEGIN RSA PRIVATE KEY-----
MIIEjwIBAAKB/gDeRJbhTAshOXp6uJig8IGfZEvofJb5ndHVwm5o4UssOsEWxlPb
VZkO2V3HmfDNbYzSvI5WIFYb3FW+e0cZf+0zh+drECs/8pJ5ryQhJgNqVXn2gR5m
(略)
iN+SgL5CC9cOFo3/mKncY19psQExepkSnwNv39PbSS7xLicO++tDW3arMtcn7k6t
Dz3rHznsGgUymLsjvcdlwX6Zdw==
-----END RSA PRIVATE KEY-----

modulus部分は公開鍵の部分だ。bit列だが、RSAなので生成時に指定したbit数の正の整数である。ビッグ エンディアンで格納されている。今回は2024bitなので253バイトのはずであるが、先頭bitが1のため負数になってしまうので、先頭に1バイトの0を追加して254バイトになってる。

それぞれの数値の意味は次のサイトが詳しい

RSA鍵の要素と暗号化Qiita

 

公開鍵をつくる

openssl rsa」で公開鍵を作る。作るというより秘密鍵から公開鍵を取り出すと言ったほうが正しい。「-pubout」オプションで公開鍵を取り出す。コマンドがgen~ではなくrsaであることからも、作るのではなくRSA鍵を操作して取り出すという意味合いなのだろう。

$ openssl rsa -in server.key -out pub.key -pubout
writing RSA key

 

できたキーの中身をテキストとして表示してみる

$ cat pub.key
-----BEGIN PUBLIC KEY-----
MIIBHjANBgkqhkiG9w0BAQEFAAOCAQsAMIIBBgKB/gDeRJbhTAshOXp6uJig8IGf
ZEvofJb5ndHVwm5o4UssOsEWxlPbVZkO2V3HmfDNbYzSvI5WIFYb3FW+e0cZf+0z
h+drECs/8pJ5ryQhJgNqVXn2gR5m6UIZikS300f1Rzd4+GyW5SJxJ4cogi45/v+Y
yNrIsC6PGXk6rOHmuAoCHIzF6fPq+dsNuZP9iwMXwH4UgEJa9nI8GKsM3NiX1IdH
5evHhdNzeTWYsWxPzJvBIfckNIT8KGlE5o4s3HsmLQHa2jGjxFkk086JeOcc0QrL
9b3TsgvYzfzvGMQovYaAAg+O7RANdZuo+X2jspmH9OcbAPH6QzuSCXdA63tLAgMB
AAE=
-----END PUBLIC KEY-----

同じくpem形式のファイルになってる

 

秘密鍵の時と同じように詳細を見てよう。「-pubin」で公開鍵を読み込むことを指定する。

$ openssl rsa -text -pubin -in pub.key
RSA Public-Key: (2024 bit)
Modulus:
00:de:44:96:e1:4c:0b:21:39:7a:7a:b8:98:a0:f0:
81:9f:64:4b:e8:7c:96:f9:9d:d1:d5:c2:6e:68:e1:
(略)
e7:1b:00:f1:fa:43:3b:92:09:77:40:eb:7b:4b
Exponent: 65537 (0x10001)
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBHjANBgkqhkiG9w0BAQEFAAOCAQsAMIIBBgKB/gDeRJbhTAshOXp6uJig8IGf
ZEvofJb5ndHVwm5o4UssOsEWxlPbVZkO2V3HmfDNbYzSvI5WIFYb3FW+e0cZf+0z
(略)
-----END PUBLIC KEY-----

秘密鍵のModulus:部分が公開鍵であることが確認できる。Exponent:は公開指数(public exponent)と呼ばれるもので鍵生成の元となる数字らしいがよくわからない(笑)奇数じゃないといけないらしいが、ほぼ全部この数字。謎だ。

ここに詳しい説明あった。

RSA鍵の要素と暗号化Qiita

 

今日はここまで

 


歯科電子カルテシステム・カルテメーカー は利用料月額16,500円(税込)
MacとWinの両方で利用可能な電子カルテです。介護保険にも対応してます。

カルテメーカーの詳細はカルテメーカー・ホームページまで。
カルテメーカーを実際に動かしてみたいときは評価版をダウンロードできます。

 

|

« 電子処方箋対応 4Dプラグイン開発 pkcs#11、OpenSSL、電子署名、HPKIカード 導入備忘録 | トップページ | 忘れないうちにOpenSSLでの暗号化と復号 (その2) »

カルテメーカー」カテゴリの記事

開発記録」カテゴリの記事

電子処方せん」カテゴリの記事

電子署名」カテゴリの記事

HPKIカード」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 電子処方箋対応 4Dプラグイン開発 pkcs#11、OpenSSL、電子署名、HPKIカード 導入備忘録 | トップページ | 忘れないうちにOpenSSLでの暗号化と復号 (その2) »