opensslコマンドで簡単なファイル暗号化

この記事は、2016年08月22日にQiitaで投稿した以下の記事を転記したものです。

opensslコマンドで簡単なファイル暗号化
https://qiita.com/ikuwow/items/1cdb057352c06fd3d727


単純にテキストファイルを暗号化する方法はないかと思って探してみるとopensslコマンドで可能でした。おそらく多くの開発マシンやサーバーにはopensslコマンドが入っているので、汎用性は非常に高い気がしています。

こちらを主に参考にしました。 http://cpplover.blogspot.jp/2013/07/gnulinuxcli.html

opensslのサブコマンドのマニュアルの見方がわからず参照していないので、オプションなど微妙に間違っていたら教えていただけると幸いです。

準備

準備するものは以下の2つ。

  • 暗号化したい対象のテキストファイル rawtext.txt
  • パスワードpassword、もしくはパスワードファイルpassword.txt

ちなみにパスワードは1行目にずらずらっと書く必要があるようです。

これらから暗号化ファイルencrypted.txtを出力して、それをdecrypted.txtに復号します。これがrawtext.txtと一致するはず。

暗号化

パスワードを標準入力から取得する場合

$ openssl aes-256-cbc -e -in rawtext.txt -out encrypted.txt
enter aes-256-cbc encryption password: # パスワード入力
Verifying - enter aes-256-cbc encryption password: # もう一度

パスワードをファイルから読み込む場合

openssl aes-256-cbc -e -in rawtext.txt -out encrypted.txt -pass file:./password.txt

復号

パスワードを標準入力から取得する場合 (復号)

$ openssl aes-256-cbc -d -in encrypted.txt -out decrypted.txt
enter aes-256-cbc decryption password: # パスワードを入力

パスワードをファイルから読み込む場合 (復号)

openssl aes-256-cbc -d -in encrypted.txt -out decrypted.txt -pass file:./password.txt

簡単な説明

aes-256-cbcというのが暗号化方式の1つ。ググった感じでは、これがよく使用されている暗号化方式っぽい。暗号化方式の一覧はopenssl list-cipher-commandsで見られる。

-eというのがencrypt、つまり暗号化を表し、-dがdecryptつまり復号を表す。

-passはパスワードの読み込み先を指定する。file:filepathpathのファイルの内容を読み、env:varで環境変数$varを読む。pass:passwordと直接passwordを指定することもできるが危険なのであまりしないこと。

活用場面

Chefのencrypted data bagみたいに、公開したくない情報をgithubへ上げるときに使えそう。password.txtを.gitignoreするのを忘れずに。個人的にはdotfilesリポジトリに~/.ssh/configを入れるのに使用しようかと思っている。

オマケ

「パスワード」と「パスフレーズ」の違い。この記事を書いていたら気になったので。 https://technet.microsoft.com/ja-jp/library/dd362846.aspx