OpenSSL 1.0.2a でファイルを暗号化して復号する

この記事は公開されてから時間が経っています

故有って、データの暗号化と復号する方法について簡単に調べましたので、忘れないように書いておこう!
 

単純にデータの暗号化と復号について調べてみた
ファイルの安全性や、暗号化自体に付いての問題点などを、ここでは問題にしていません

単に、ファイルを暗号化し復号化しただけの工程で、 と Linux で行いました

1. の入手

OpenSSL コマンドで、ファイルの暗号化と復号が行えるようです

Linux

OpenSSL の入手は Linux なら問題ないと思います
ただし、バージョンに関しては管理方法などによって異なると思います

確認した では
user@ubuntuSouzoku:~$ openssl version
OpenSSL 1.0.1f 6 Jan 2014
user@ubuntuSouzoku:~$

となっています
先ほど apitude full-upgrade したばかりですので問題ないのだと思います

これとは別の Linux のいにしえの版なのですが、アップデード出来ずにいたので、比較対象として併せて確認してみました
[root@xxxx root]# openssl version
OpenSSL 0.9.7d 17 Mar 2004
[root@xxxx root]#

こちらの比較対象の openssl のバージョンはこんな感じです

Windows

Windows 版の openssl は、インストーラーは使用せず、ZIP で配布されているものを利用しました
謹製アプリに同梱する可能性がありますので、個別にインストールせずに利用します

http://www.openssl.org/
から About – Binaries – と辿って、indy と言う物を入手しました

http://indy.fulgan.com/SSL/
ここで配布しているものを利用しました
openssl.org によると、最新版は OpenSSL 1.0.2a の様です

openssl-1.0.2a-x64_86-win64.zip
このファイルを使わせて頂きました

同梱されているライセンスファイルによると BSD スタイルのライセンスですので、有り難く使わせて頂く事にしました

コマンドラインで実行する場合、openssl.conf が見つからないと言う旨のメッセージが表示されます
WARNING: can't open config file: /usr/local/ssl/openssl.cnf

このパスでは、もちろん見つかる訳がありませんね ^^..

環境変数に OPENSSL_CONF を設定するそうですが、今回は割愛しました(必要なら修正します)
.

2. 暗号化と復号

コマンドラインで、次の様に入力します

user@ubuntuSouzoku:~$ openssl aes-256-cbc -e -in ReadMe.txt -out ReadMe.txt2 -pass pass:12345
user@ubuntuSouzoku:~$ openssl aes-256-cbc -d -in ReadMe.txt2 -out ReadMe.txt3 -pass pass:12345
user@ubuntuSouzoku:~$ md5sum ReadMe.txt*
f97a4da150b6de0b262c4e1cce07a50b  ReadMe.txt
db23d70ad6f0ffe000ac6bb9458c58be  ReadMe.txt2
f97a4da150b6de0b262c4e1cce07a50b  ReadMe.txt3
user@ubuntuSouzoku:~$

最初の行で ReadMe.txt を aes-256-cbc で暗号化して ReadMe.txt2 と言うファイルに出力しています
次の行は ReadMe.txt2 を 復号化して ReadMe.txt3 と言うファイル名で出力しています
三行目は ハッシュ値を比較しています
ReadMe.txt と ReadMe.txt3 が同じですので、きちんと復号化されたと言う事です

Windows はこんな感じです

C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>openssl aes-256-cbc -e -in ReadMe.txt -out ReadMe.txt2 -pass pass:12345
 
C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>openssl aes-256-cbc -d -in ReadMe.txt2 -out ReadMe.txt3 -pass pass:12345
 
C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>fciv -md5 ReadMe.txt
//
// File Checksum Integrity Verifier version 2.05.
//
f97a4da150b6de0b262c4e1cce07a50b readme.txt

C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>fciv -md5 ReadMe.txt2
//
// File Checksum Integrity Verifier version 2.05.
//
e9a886c2c31cb75050f8fabd1aca9a7b readme.txt2

 
C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>fciv -md5 ReadMe.txt3
//
// File Checksum Integrity Verifier version 2.05.
//
f97a4da150b6de0b262c4e1cce07a50b readme.txt3

次に Windows と Linux を跨いだときですが、簡単な実験で互換性があるのか確認してみました

C:\Users\user\Downloads\openssl-1.0.2a-x64_86-win64>openssl aes-256-cbc -e -in ReadMe.txt -out ReadMe.txtW -pass pass:12345

結果は
df2168031daa96e5f1760eb8e7f4cea1 readme.txtw

これを Ubuntu へコピーしてデコードしてみます

user@ubuntuSouzoku:~$ md5sum ReadMe.txt*
f97a4da150b6de0b262c4e1cce07a50b  ReadMe.txt
db23d70ad6f0ffe000ac6bb9458c58be  ReadMe.txt2
f97a4da150b6de0b262c4e1cce07a50b  ReadMe.txt3
df2168031daa96e5f1760eb8e7f4cea1  ReadMe.txtW
user@ubuntuSouzoku:~$ openssl aes-256-cbc -d -in ReadMe.txtW -out ReadMe.txt4 -pass pass:12345
user@ubuntuSouzoku:~$ md5sum ReadMe.txt*
f97a4da150b6de0b262c4e1cce07a50b  ReadMe.txt
db23d70ad6f0ffe000ac6bb9458c58be  ReadMe.txt2
f97a4da150b6de0b262c4e1cce07a50b  ReadMe.txt3
f97a4da150b6de0b262c4e1cce07a50b  ReadMe.txt4
df2168031daa96e5f1760eb8e7f4cea1  ReadMe.txtW
user@ubuntuSouzoku:~$

ReadMe.txt と ReadMe.txt4 が同じハッシュになっています
ちなみに、同じ引数で暗号化した暗号化ファイルのハッシュ値が異なるのは
Salt が異なるからですので問題ありません
※ 同じ引数で暗号化しても、同じ暗号化ファイルができるという訳ではありません

.

3. おまけ

その1

一応、古い RedHat 系の Linux でも確認してみました

[root@xxxx root]# md5sum ReadMe.txt*
f97a4da150b6de0b262c4e1cce07a50b  ReadMe.txt
c9357d9cb9c01c1578f00c075324ca71  ReadMe.txtW
[root@xxxx root]# openssl aes-256-cbc -d -pass pass:12345 -in ReadMe.txtW -out ReadMe.txt5
[root@xxxx root]# md5sum ReadMe.txt*
f97a4da150b6de0b262c4e1cce07a50b  ReadMe.txt
f97a4da150b6de0b262c4e1cce07a50b  ReadMe.txt5
c9357d9cb9c01c1578f00c075324ca71  ReadMe.txtW
[root@xxxx root]#

問題ないようです
 

その2

Linux では man openssl とすれば使い方が解りますが、Windows では表示出来ないようです

http://wiki.openssl.org/index.php/Manual:Openssl(1)

こちらを確認すると良いと思います
 

その3

暗号化されているファイルをダンプすると 'Salted ' と先頭に表示されます
-nosalt オプションを付けると Salted にはなりません
 

その4

Salt , Key , iv を併せると同じファイルが出力出来るそうです

-S Salt
-K Key
-iv iv
を指定するそうです
指定された Salt 等を表示するには -P オプションをコマンドラインに追加します
通常、任意の文字が割り当てられると思いますので、問題ありません

.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です