生き恥

生きるは恥だが役に立つ

id0-rsa.pubのメモ【Hello OpenSSL】

Hello OpenSSL

opensslコマンドの使い方の話。以下問題文。

This is an RSA key

-----BEGIN RSA PRIVATE KEY-----
MIGtAgEAAiEA5tygpSZdOZUMfuO3oTGWR4cALBtWui5UzrQw2/8JlZ0CAwEAAQIh
AI9n4Yp1KFfKlHaF8d15tgUONQXn+e3aI+beFKoi2XipAhEA/ZkHPmcDwXIqloGr
minb1wIRAOkMdv7emMGd08gwwOQ6i6sCEQC0pjcXx9BQFCCsWDDCwAC/AhEAxYcn
JQeO+izH4JpSJB/rWQIRAOO9m6JHEWgzLYD+fe003vw=
-----END RSA PRIVATE KEY-----

It was generated with the command $ openssl genrsa 256. A secret 64 bit number was encrypted with this key, resulting in this cipher text
6794893f3c47247262e95fbed846e1a623fc67b1dd96e13c7f9fc3b880642e42
Recover the secret number (in lowercase hex).

opensslコマンド

opensslコマンドの書式について以下にまとめる。[ ]内は省略可能。

openssl [サブコマンド] [オプション]

主なサブコマンド

サブコマンド 説明
ca 認証局の証明書を管理
crl CRLを管理
dgst メッセージダイジェストを計算
genrsa RSA秘密鍵を生成
md5 MD5ダイジェスト
pkcs12 PKCS#12形式のファイルの作成と管理
req X.509証明書署名要求(CSR)を管理
rsa RSA秘密鍵を管理
rsautl RSAアルゴリズムを使用したメッセージの署名、検証、暗号化および復号
s_client SSL/TLSプロトコルを使用して指定サーバに接続
s_server SSL/TLSプロトコルを使用してメッセージを受信するサーバーとして動作
version OpenSSLのバージョン情報を表示
x509 X.509証明書データを管理

公開鍵と秘密鍵の生成

opensslでは、秘密鍵と公開鍵の作成や、それらを利用した暗号化と復号が可能。
サブコマンドとして、genrsa、rsa、rsautlを利用する。

genrsa

genrsaはRSA秘密鍵を生成するサブコマンド。

openssl genrsa [オプション]

主なオプション

オプション 説明
-out <ファイル名> 生成したRSA形式の秘密鍵を出力するファイル名を指定。指定がない場合は標準出力に表示
-des 暗号化にDESを使用
-des3 暗号化にTripleDESを使用
-idea 暗号化にIDEAを使用
ビット数 生成するRSA形式の秘密鍵のビット数。指定がない場合は512ビット

rsa

rsaRSAの鍵を管理するサブコマンド。

openssl rsa [オプション]

主なオプション

オプション 説明
-in <ファイル名> 生成したRSA形式の秘密鍵のファイル名を指定。指定がない場合は標準入力から読み込む
-noout エンコードされた鍵を表示しない
-out <ファイル名> RSA形式の秘密鍵を出力するファイル名を指定。指定がない場合は標準出力に表示
-pubin <ファイル名> 生成したRSA形式の公開鍵ファイル名を指定。指定がない場合は標準入力から読み込む
-pubout 秘密鍵とペアとなる公開鍵を標準出力
-text テキスト形式で表示
-des 暗号化にDESを使用
-des3 暗号化にTripleDESを使用
-idea 暗号化にIDEAを使用

rsautl

rsautlはRSAによるメッセージの署名、検証、暗号化、復号を行うサブコマンド。

openssl rsautl [オプション]

主なオプション

オプション 説明
-decrypt ファイルの復号を行う
-encrypt ファイルの暗号化を行う
-in <ファイル名> 暗号化もしくは復号対象のファイル名を指定
-inkey <ファイル名> 秘密鍵とペアとなる公開鍵を標準出力
-out <ファイル名> 暗号化もしくは復号したファイルの内容を出力するファイル名を指定。指定がない場合は標準出力に表示
-pubin 公開鍵ファイルを入力する場合に指定

solution

長々とopensslのコマンド、オプションを書いたが、今回は与えられた秘密鍵をprivate.keyとして保存して以下のコマンドを実行すればOK。

printf "6794893f3c47247262e95fbed846e1a623fc67b1dd96e13c7f9fc3b880642e42" | xxd -r -p | openssl rsautl -inkey private.key -raw -decrypt | xxd -p -c 8 | tail -n 1

おわりに

気が向いたら証明書周りのサブコマンドも書く。

参考

2年前くらいにLPIC Level3 303 を取得したときに使っていた以下の本を参考に書きました。 www.amazon.co.jp