おれさまラボ

実際に手を動かして理解を深めるブログ。

公開鍵の中身を観察してみる

はじめに

前回は秘密鍵について調べてみました。今回は公開鍵をつくっていきます。

前回の記事はコチラです。

skkskynw.hateblo.jp

秘密鍵を作る

まずは前回の復習です。鍵長が長いと見づらくなるので短い鍵長(16 bit)で秘密鍵 s.key を作ります。

$ openssl genrsa -out s.key 16
Generating RSA private key, 16 bit long modulus
.+++++++++++++++++++++++++++
.+++++++++++++++++++++++++++
e is 65537 (0x010001)

生成された秘密鍵 s.key は以下のとおりです。前回の復習をすると、ASN.1 形式で書かれたデータを DER エンコードしてバイナリ化されたデータをさらに base64エンコードして ASCII 文字列化した PEM と呼ばれるファイル形式で秘密鍵が出力されます。

$ cat s.key
-----BEGIN RSA PRIVATE KEY-----
MCYCAQACAwDQMQIDAQABAgMAmuUCAgDvAgIA3wICAJECAgCJAgIA4A==
-----END RSA PRIVATE KEY-----

PEM ファイルの中に入っている情報は rsa コマンドで確認できるということを学びました。

$ openssl rsa -text -in s.key
Private-Key: (16 bit)
modulus: 53297 (0xd031)
publicExponent: 65537 (0x10001)
privateExponent: 39653 (0x9ae5)
prime1: 239 (0xef)
prime2: 223 (0xdf)
exponent1: 145 (0x91)
exponent2: 137 (0x89)
coefficient: 224 (0xe0)
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MCYCAQACAwDQMQIDAQABAgMAmuUCAgDvAgIA3wICAJECAgCJAgIA4A==
-----END RSA PRIVATE KEY-----

公開鍵を作る

公開鍵は秘密鍵から生成します。キーペアたる所以ですね。

$ openssl rsa -in s.key -pubout -out p.key
writing RSA key

生成された公開鍵 p.key は以下のとおりです。秘密鍵同様、PEM 形式で出力されています。PUBLIC KEY と書かれており、公開鍵であることがわかりやすいです。

$ cat p.key
-----BEGIN PUBLIC KEY-----
MB4wDQYJKoZIhvcNAQEBBQADDQAwCgIDANAxAgMBAAE=
-----END PUBLIC KEY-----

秘密鍵同様、PEM ファイルの中に入っている情報は rsa コマンドで確認できます1

$ openssl rsa -text -pubin < p.key
Public-Key: (16 bit)
Modulus: 53297 (0xd031)      # Modulus = 係数[n]
Exponent: 65537 (0x10001)    # Exponent = 暗号化指数[e]
writing RSA key
-----BEGIN PUBLIC KEY-----
MB4wDQYJKoZIhvcNAQEBBQADDQAwCgIDANAxAgMBAAE=
-----END PUBLIC KEY-----

秘密鍵にはさまざまな情報が含まれていましたが、公開鍵には e と n しか含まれていないようです。

おわりに

今回は公開鍵の中身を確認してみましたが、秘密鍵よりも情報量が圧倒的に少ないことがわかりました。

次回は RSA 暗号のしくみを紐解くことで鍵と証明書の理解を深めていきたいと思います。

以上


  1. 秘密鍵と違ってリダイレクト < を入れないとダメだったのでご注意ください。