2014年5月14日水曜日

ファイルの暗号化

個人的にファイルを暗号化して保存しておきたい場合、方法はいろいろあって、
最も一般的なのがWindowsの適当なアプリケーションで作るパスワード付きZIPかと思います。
が、もっと汎用的にしておきたい場合に私が使っているのがopensslコマンドです。
UNIX系なら使えないOSはないでしょうし、Windowsもcygwin等で使えます。

いつもの癖で
$ openssl --help
などと実行すればコマンド一覧等が表示されますが、
実はこれ存在しないオプション"--help"に対するエラー表示で、
コマンドを一覧する正しい方法は
$ openssl list-standard-commands
だったりします。
また暗号化に関するコマンドの一覧は、
$ openssl list-cipher-commands
で表示されます。
ちなみに利用可能な暗号アルゴリズムは
$ openssl ciphers
で一覧されます。

さて、他人に秘密裏にファイルを渡したいような場合は公開鍵暗号を使うことも考えられますが、
個人的に保管するためであれば秘密鍵暗号で十分です。
というかそんな用途でわざわざ公開鍵暗号を使うのは面倒でやってられません。
秘密鍵方式にもいろいろありますが、現時点ではAESを使うべきで、しかも主流は256ビットでしょう。
ところでopensslで使えるAESにはecbとcbcがあります。
前者は単純なブロック毎の暗号化ですが、
後者はブロックの暗号結果を次のブロックの暗号化に連鎖的に反映させるモードです。
したがって、暗号方式には"aes-256-cbc"がいいと思います。

実際の暗号化作業ですが、対象は単一ファイルである必要があるので、
"~/secret"ディレクトリを暗号化したい場合は以下を実行します。
$ cd ~/
$ tar jcf secret.tar.bz2 secret/
$ openssl enc -e -aes-256-cbc -in secret.tar.bz2 -out secret.tar.bz2.a8c
途中入力したパスワードは覚えておきましょう。
元に戻すには以下を実行します。
$ openssl enc -d -aes-256-cbc -in secret.tar.bz2.a8c > secret.tar.bz2
$ tar jxf secret.tar.bz2
途中暗号化時に指定したパスワードを要求されます。
忘れたら復号化はあきらめましょう。
なお、暗号化したファイルの拡張子を"a8c"にしているのは
暗号方式に"aes-256-cbc"を利用したことを忘れないようにするためで、
ファイル名は好き勝手につけて構いません。
むしろ何かを類推されないように意味不明なファイル名にした方がいいかもしれません。
ただし自分で判別できなくなると話にならないのでほどほどにしましょう。

0 件のコメント:

コメントを投稿