TL;DR
LPIC303試験のハンズオン学習です。
opensslコマンドを使用し、公開鍵・秘密鍵を作成します。
また作成した公開鍵を使用してテキストを暗号化し、同じく秘密鍵を使って復号します。
今回も参考書はこちらです。
opensslコマンド
書式は次の通り。
openssl <サブコマンド> [オプション]
主なサブコマンド
サブコマンド | 説明 |
ca | 認証局の証明書を管理 |
ciphers | 使用可能な暗号スイートの一覧を表示 |
crl | CRLを管理 |
dgst | メッセージダイジェストの出力、およびメッセージダイジェストの暗号化、複合 |
genrsa | RSA秘密鍵を生成 |
pkcs12 | PKCS#12形式のファイルの作成と管理 |
req | X.509証明書署名要求を管理 |
rsa | RSAの鍵を管理 |
rsautl | RSAアルゴリズムを使用したメッセージの暗号化および復号 |
s_client | SSL/TLSプロトコルを使用するクライアントとして動作 |
s_server | SSL/TLSプロトコルを使用するサーバーとして動作 |
x509 | X.509証明書データを管理 |
秘密鍵の作成
鍵長2048ビットのTripleDESで暗号化したRSA形式の秘密鍵を作成する
openssl genrsa -out private.key -des 2048
openssl genrsaサブコマンドについて
genrsaサブコマンドはRSA鍵を生成するコマンド。
オプション | サブオプション | 説明 |
-out <ファイル名> | 生成したRSA形式の秘密鍵を出力するファイル名を指定。 指定がない場合は標準出力に表示。 | |
暗号化方法 | -des | 暗号化にDESを使用 |
-des3 | 暗号化にTripleDESを使用 | |
-idea | 暗号化にIDEAを使用 | |
ビット数 | 生成するRSA形式の秘密鍵のビット数。指定がない場合は512ビット。 |
秘密鍵に対応した公開鍵を作成
先に作成した秘密鍵「private.key」を元に、公開鍵「pubkey.key」を作成します。
openssl rsa -in private.key -pubout -out pubkey.key
openssl rsaサブコマンドについて
rsaサブコマンドはRSA鍵を管理するためのコマンド。
オプション | サブオプション | 説明 |
-in <ファイル名> | 生成したRSA形式の鍵ファイル名を指定。 指定がない場合は標準入力から読み込む。 | |
-noout | エンコードされた鍵を表示しない。 | |
-out <ファイル名> | RSA形式の鍵を出力するファイル名を指定。 指定がない場合は標準出力に表示。 | |
-pubin | 公開鍵を入力する場合に指定。 | |
-pubout | 公開鍵を出力する場合に指定。 | |
-text | テキスト形式で表示。 | |
暗号化方法 | -des | 暗号化にDESを使用。 |
-des3 | 暗号化にTripleDESを使用。 | |
-idea | 暗号化にIDEAを使用。 |
確認のため適当なテキストを作成
vi hoge.txt
適当に平文のテキストを作ります。
hogehoge
hoho
ge
作成したテキストを公開鍵で暗号化
openssl rsautl -encrypt -pubin -inkey pubkey.key -in hoge.txt -out hoge.txt.enc
確認すると、こんな感じになっている。

openssl rsautlサブコマンドについて
rsautlサブコマンドはRSAアルゴリズムを使用して、データの暗号化・復号を行う。
オプション | 説明 |
-decrypt | 秘密鍵を用いてデータの復号を行う。 |
-encrypt | 公開鍵を用いてデータの暗号化を行う。 |
-in <ファイル名> | 暗号化もしくは複合対象のファイル名を指定。 指定がない場合は標準入力から読み込む。 |
-inkey <ファイル名> | 使用する鍵のファイル名を指定。 |
-out <ファイル名> | 暗号化もしくは複合したファイルの内容を出力するファイル名を指定。 指定がない場合は標準出力に表示。 |
-pubin | 公開鍵ファイルを入力する場合に指定。 |
公開鍵で暗号化したファイルを秘密鍵で復号
openssl rsautl -decrypt -inkey private.key -in hoge.txt.enc -out hoge.txt.dec
確認すると…
hogehoge
hoho
ge
となっており、元のhoge.txtと同じになっている。

今回は以上です。お疲れ様でした!