OpenSSL はインターネットで広く利用されている暗号化通信の仕組みである、SSL/TLS を実現するためのオープンソースのライブラリです。
今回は証明機関の構築において、多く利用されている公開鍵暗号方式の RSA を OpenSSL で利用する方法について紹介します。
OpenSSL で RSA のキーペアの作成、およびデータの暗号化、復号する方法を見ていきましょう。
事前準備
Windows 端末にて OpenSSL を利用するためには、事前準備として、まず端末に OpenSSL をインストールする必要がございます。
Windows 端末にて OpenSSL をインストールする方法については、以下の記事にて紹介しております。
OpenSSL はインターネットで広く利用されている暗号化通信の仕組みである、SSL/TLS を実現するためのオープンソースのライブラリです。 OpenSSL を利用することで、手軽に証明書を発行して SSL/TLS 通信を行った Web[…]
RSA のキーペアの作成
RSA は公開鍵暗号化方式であるため、暗号化と復号に使用する鍵が異なります。
暗号化と復号に使用する鍵は数学的な関係性があり、キーペアとして作成します。
キーペアとなっている鍵でないと、暗号化したデータを復号することはできません。
キーペアのうち内部に保持して、絶対に外部から入手できないようにする鍵を秘密鍵、外部に公開して誰でも利用できるようにする鍵を公開鍵と呼びます。
OpenSSL で鍵のキーペア(暗号鍵、復号鍵) を作成する手順は以下の通りです。
秘密鍵の作成
1) コマンド プロンプトを立ち上げます。
2) 以下のコマンドにて、秘密キーの長さを指定して、秘密キーを作成します。
openssl genrsa -out <秘密キーのファイル名> <鍵長>
上記のコマンドを実行すると、カレントディレクトリ配下に以下の秘密キーのファイルが作成されます。
秘密キーのファイル(private.key)をテキスト エディタで開いてみると、以下のようなものとなります。
公開鍵の作成
作成した秘密鍵のデータをベースに、公開鍵を作成します。
1) コマンド プロンプトにて、作成した秘密キーのファイルを指定して、秘密キーを作成します。
openssl rsa -in <秘密キーのファイル名> -out <公開キーのファイル名>
上記のコマンドを実行すると、カレントディレクトリ配下に以下の公開キーのファイルが作成されます。
秘密キーのファイル(public.key)をテキスト エディタで開いてみると、以下のようなものとなります。
RSA キーでデータの暗号化と復号
OpenSSL で RSA キーを利用してデータの暗号化、復号を行います。
データを秘密キーで暗号化を行い、キーペアとなる公開キーでしかデータの復号を行うことはできません。
キーペアではない公開キーでデータを復号を試みても、元のデータに戻すことはできません。
OpenSSL で RSA キーでデータを暗号化、復号を行う方法、またキーペア同士でないと正常にデータを復元できない動作を見ていきます。
データを公開キーで暗号化
1) 平文のデータを用意します
2) コマンド プロンプトを立ち上げます。
3) 以下のコマンドにて、暗号化に使用する公開キーと平文ファイルを指定して、秘密キーを作成します。
openssl rsautl -encrypt -pubin -inkey <公開キー> -in <平文ファイル> -out <暗号化ファイル>
上記のコマンドを実行すると、カレントディレクトリ配下に平文のファイルが暗号化されたファイルが作成されます。
暗号化されたファイルをテキスト エディタで開いてみると、以下のようなものとなります。
データを秘密キーで復号
1) コマンド プロンプトを立ち上げます。
2) 以下のコマンドを実行して、暗号化に使用する公開キーと平文ファイルを指定して、秘密キーを作成します。
openssl rsautl -decrypt -inkey <秘密キー> -in <暗号化ファイル> -out <復号ファイル>
上記のコマンドを実行すると、カレントディレクトリ配下に暗号化ファイルを復号したファイルが作成されます。
復号したファイルをテキスト エディタで開いてみると、以下の通り、元のデータが復元できていることが確認できます。
おまけ:別の秘密キーで暗号化データの復号を試してみる
公開キーで暗号化されたデータは、キーペアとなる秘密キーでしか復号できません。
キーペアではない別の秘密キーで復号しようとしても失敗します。
新たに別の秘密キーを作成して、暗号化したデータを復号しようとすると以下のエラー メッセージが表示されて失敗します。
“RSA operation error”
秘密キーの暗号化
秘密キーは内部で厳重に保持する必要があるデータであり、秘密キーをそのまま保持しておくとデータが漏洩した時に悪用される恐れがあります。
そのため、OpenSSL では秘密キーが漏洩した時のセキュリティ リスクを軽減するために、共通鍵暗号方式で秘密キーのデータを暗号化することができます。
秘密キーのデータを暗号化するためには、秘密キーを作成する時に共通鍵暗号方式の種類とパスワードを指定します。
暗号化された秘密キーを利用する場合、利用する度に秘密キーの作成時に設定したパスワードを入力します。
OpenSSL で暗号化された秘密キーの作成方法は以下の通りです。
1) コマンド プロンプトを開きます。
2) 以下のコマンドを実行して、暗号化に使用する公開キーと平文ファイルを指定して、秘密キーを作成します。
openssl genrsa -out <秘密キーのファイル名> -des3 <鍵長>
上記のコマンドを実行すると、カレントディレクトリ配下に以下の暗号化された秘密キーのファイルが作成されます。
暗号化された秘密キーを利用すると設定したパスワードの入力が求められます。
下図の例から確認できる通り、暗号化された秘密キーから公開キーを作成したコマンドを入力したタイミングで、設定したパスワードの入力が求められます。