Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

疑似的にパスワード付きtar.gz圧縮ファイルを作成してみる

今回は暗号化技術を用いてtar.gz圧縮させたフォルダにパスワードをかけ、第3者が見れないようにしたいと思います。
ちょっと圧縮ファイルにパスワードを付与しなければならない機会があったのですが、、、
zip化したファイルのパスワードは簡単に見つかったのですが、tarだと見つけるのに苦労しました。。
今後困らないように、備忘録として残しておきたいと思います!!



■環境

環境ですが、今回はraspberryPi 3を用いました。
ただ、Linux OSであれば使える手順になっているかと思います。

■パスワード付きtar.gz圧縮ファイルの作成方法

ではまず、tar.gz圧縮ファイルにパスワードを付与してみたいと思います。

今回例として、tar.gz圧縮ファイル名をhoge.tar.gzとします。
一応、tar.gz圧縮方法のおさらい。
圧縮前のフォルダ名を"hoge"とした場合、tar.gz圧縮は下記コマンドで行えます。

tar -zcv hoge.tar.gz hoge

hoge.tar.gzにパスワードを付与する方法は下記になります。

openssl enc -e -aes-256-cbc -in hoge.tar.gz -out hoge.enc 

上記を実行するとパスワード登録の要求が来るので2回登録したいパスワードを入力すればOK。

実施していることは、openssl enc -eによりtarファイルを暗号化させているのみになります。

もしパスワードをコマンドライン上で登録したい場合には、

openssl enc -e -aes-256-cbc -in hoge.tar.gz -out hoge.enc -pass pass:password

と-passオプションを付与して、パスワードを入力すればOKです。

もしフォルダに対して、暗号化したtar.gzファイルのみを出力させたいのであれば、

tar zcv hoge | openssl enc -e -aes-256-cbc -out hoge.enc-pass pass:password

の通り、パイプラインを用いてtar圧縮⇒openssl暗号化の流れで実行すればOKです。
もしパスワード付き暗号化tar.gzファイルだけが欲しい場合には、
上記を実行すれば中間ファイルであるtar.gz圧縮ファイルが生成されないのでよさそうです。

■パスワード付き暗号化tarファイルを解凍

では先ほどパスワードを付与した暗号化tar.gz圧縮ファイルを解凍してみます。
まず、暗号化したファイルを復号化するには、

openssl enc -aes-256-cbc -d -in hoge.enc -out hoge.tar.gz -pass pass:password

の通り、opensslの復号化を実行すればOKです。
もしtarを解凍したい場合には、

tar -xz hoge.tar.gz hoge

とすればOKですね。

ここで、パスワードを誤って入力すれば、

bad decrypt

とメッセージが出力されます。
hoge.tar.gzは生成されますが、tarを解凍しようとしても解凍できないことも確認できるかと思います。

こちらもパイプラインを用いることで、解凍後のフォルダのみ得ることが出来ます。

openssl enc -aes-256-cbc -d -in hoge.enc -pass pass:password | tar xz

もし上記パイプラインを用いたコマンドで誤ったパスワードを入力すると、

gzip: stdin: not in gzip format
tar: Child died with signal 13
tar: Error is not recoverable: exiting now
error writing output file

といったエラーが出力され、解凍後のフォルダは出力されません。

■補足

今回のコマンドでは、-aes-256-cbcのオプションを付与しています。
こちらは、AES 256形式の暗号化技術を用いて暗号化することを意味しています。

AES暗号化技術は下記に詳しく載っておりますのでこちらを参考にしてください。
qiita.com

■最後に

今回は暗号化・復号化技術を用いて圧縮ファイルにパスワードを付与してみました。
パイプラインで実行すれば中間ファイルを生成せずにパスワード付き圧縮ファイルの生成・解凍が行えるので便利です。