OpenSSL で RSA 公開鍵暗号を試してみよう

投稿者 : OSCA

[PR] "出川哲朗の充電させてもらえませんか?"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

 2回に渡り OpenSSL で RSA 公開鍵暗号の秘密鍵と公開鍵の作成方法について解説してきました。 今回は、作成した秘密鍵と公開鍵を利用して、暗号メッセージを生成してそれを復号する方法を解説したいと思います。

OpenSSL

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

OpenSSL

OpenSSL で RSA の公開鍵を作成する方法

秘密鍵の作成

 前々回のおさらいですが、秘密鍵をまずは作成します。 詳しい方法は前々回を参考にしてください。

$ openssl genrsa 2024 > secret.key
Generating RSA private key, 2024 bit long modulus
....................+++
....................................................................+++
e is 65537 (0x10001)

秘密鍵が secret.key という名前で作成されました。

公開鍵の作成

 これも前回のおさらいですが公開鍵を作成します。 詳しい方法は前回を参考にしてください。

$ openssl rsa -pubout < secret.key > public.key
writing RSA key

 公開鍵が public.key というファイル名で作成されました。

 これで2つのキーが揃いましたので、ここから公開鍵暗号を試していきます。

暗号メッセージの生成

 公開鍵暗号方式は、公開鍵で暗号化したメッセージを秘密鍵で復号することができる暗号方式ですので、まずは上で作成した公開鍵でメッセージを暗号化します。 openssl rsautl コマンドに次のようにオプションを指定して実行します。 今回は “Hello World” という文字列を暗号化します。

$ echo "Hello World" | openssl rsautl -encrypt -pubin -inkey public.key > message.dat

 ”Hello World” という文字列が暗号化され message.dat というファイルに保存されました。 ファイルはバイナリですし暗号データですので、cat などで開いても閲覧することができません。

メッセージの復号

 次は復号です、上で作成された message.dat に書き込まれた暗号メッセージを秘密鍵を利用して復号してみましょう。 復号も openssl rsautl コマンドを次のように実行します。

$ cat message.dat | openssl rsautl -decrypt -inkey secret.key
Hello World

 コマンドの結果に、”Hello World”という文字列が表示されました、見事復号されました! openssl コマンドだけで簡単に暗号と復号ができましたね。

おわりに

 OpenSSL コマンドによる公開鍵暗号について解説してきました。 OpenSSLのコマンドについて理解を深めることができたでしょうか? また公開鍵暗号方式についてイメージが湧いたでしょうか? 皆様のお仕事のお役に立てれば幸いです。

OpenSSL 入門へ戻る

OpenSSLのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca