BLOGTIMES
2013/01/05

openssl を使ってファイルを簡単に暗号化する

  ssl 
このエントリーをはてなブックマークに追加

コマンドラインで openssl を使うのは SSL キーや CSR を作るときやデバッグするときだけでしたが、簡単なファイルの暗号化にも使えることが分かったのでメモ。
調べてみると、しっかりとマニュアルにかいてある*1*2内容でしたが、これまで全く使ったことがありませんでした。

オプションを工夫することで、単なるパスワードだけでなく鍵を使った暗号化もできるようです。
以下、作業メモ。

一通りの暗号化・復号化の流れを試してみました。

テスト用平文データ

今回のテストにあたって、下記のような簡単なテキストファイルを用意しました。

$ cat test.txt aaa bbb ccc

aes-256-cbc によるデータの暗号化 ( test.txt → test.aes )

まず、簡単な暗号化をやってみます。ファイルを AES-256-CBC モードで暗号化します。
暗号化の際にはパスワードが必要になりますので、画面の指示に従ってこれを2度入力します。

$ openssl enc -e -aes-256-cbc < test.txt > test.aes enter aes-256-cbc encryption password: [ここでパスワードを入力] Verifying - enter aes-256-cbc encryption password: [もう一度パスワードを入力]

aes-256-cbc によるデータの復号化 ( test.aes → test.txt(STDOUT) )

前述の手順の逆変換をして、データを平文に戻してみます。
パスワードは暗号化の際にいれたものと同じものを入力する必要があります。

$ openssl enc -d -aes-256-cbc < test.aes enter aes-256-cbc decryption password: [暗号化時のパスワードを入力] aaa bbb ccc

秘密鍵の生成 ( φ → private.key )

次は RSA キーを使った暗号化をやってみましょう。
準備として、秘密鍵を新しく生成します。秘密鍵自身も AES256 で暗号化している*3ので、画面の指示に従って秘密鍵のパスワードを2度入力します。

$ openssl genrsa -aes256 2048 > private.key Generating RSA private key, 2048 bit long modulus ...............................+++ ..........................................................+++ e is 65537 (0x10001) Enter pass phrase: [ここで秘密鍵のパスワードを入力] Verifying - Enter pass phrase: [もう一度秘密鍵のパスワードを入力]

公開鍵の生成 ( private.key → public.key )

次のステップで必要となる秘密鍵と対になる公開鍵を生成しておきます。
公開鍵は公開することが前提なので、それ自身を暗号化はしませんから新たなパスワードは必要ありません。
但し、秘密鍵から生成するので、画面の指示に従って前のステップで生成した秘密鍵のパスワードを入力する必要があります。

$ openssl rsa -pubout < private.key > public.key Enter pass phrase: [ここで秘密鍵のパスワードを入力] writing RSA key

公開鍵による暗号化 ( test.txt, public.key → test.rsa )

公開鍵による暗号化をしてみます。
公開鍵は前述のとおりパスワードがありませんから、コマンドを入力するとすぐに暗号化が完了します。

$ openssl rsautl -encrypt -pubin -inkey public.key < test.txt > test.rsa

秘密鍵による復号化 ( test.rsa, private.key → test.txt(STDOUT) )

公開鍵で暗号化したファイルを秘密鍵で元に戻します。
暗号化は公開鍵、復号化は秘密鍵と異なるのが RSA の特徴ですが、慣れないと分かりづらいので注意が必要です。

$ openssl rsautl -decrypt -inkey private.key < test.rsa Enter pass phrase for private.key: [ここで秘密鍵のパスワードを入力] aaa bbb ccc

秘密鍵による署名 ( test.txt, private.key → test.sig )

次は秘密鍵による署名です。
こちらは秘密鍵を使うので、署名時に秘密鍵のパスワードが必要になります。

$ openssl rsautl -sign -inkey private.key < test.txt > test.sig Enter pass phrase for private.key: [ここで秘密鍵のパスワードを入力]

秘密鍵による署名検証 ( test.sig, private.key → test.txt(STDOUT) )

署名の検証はこちらも秘密鍵なので、秘密鍵のパスワードが必要になります。

$ openssl rsautl -verify -inkey private.key < test.sig Enter pass phrase for private.key: [ここで秘密鍵のパスワードを入力] aaa bbb ccc

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5490
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン