コマンドラインでgzipファイルをパスワードで保護するには?
Ubuntu 10.04でtarコマンドを使って、いくつかのtar.gzファイル(場合によってはtar.bz2)を作成したいと思います。
ファイルをパスワードで保護したい。
これを行うためのコマンドは何でしょうか(ググってみましたが、パスワードを使って圧縮ファイルを作成・解凍する方法を示すものは見つかりませんでした)。
誰かやり方を知っている人はいますか?
このタスクには unix の哲学を適用しなければなりません: 各タスクに1つのツールを使用します。
ターリングと圧縮はtar
とgzip
またはbzip2
のジョブであり、暗号化はgpg
またはopenssl
のどちらかのジョブである。
Encrypt
% tar cz folder_to_encrypt | \
openssl enc -aes-256-cbc -e > out.tar.gz.enc
Decrypt
% openssl enc -aes-256-cbc -d -in out.tar.gz.enc | tar xz
Or using gpg
% gpg --encrypt out.tar.gz
openssl-variant はシンメトリック暗号化を使用するので、受信側に使用した「パスワード」(別名「鍵」)を伝える必要があります。gpg-variant はシンメトリック暗号化と非シンメトリック暗号化を組み合わせて使用していますが、受信側の鍵を使用してセッション鍵を作成し、その鍵でコンテンツを暗号化します。
zip (または 7z) ルートの場合: 基本的には openssl-variant と同じですが、受信側にパスワードを伝える必要があります。
ファイルをパスワードで保護したい場合は、コマンドライン
zip -e <file_name>.zip <list_of_files>
-e で指定されたファイルを暗号化するように zip ユーティリティを使用します。
これを行うためのいくつかの方法を紹介します。注意すべき点としては、圧縮と暗号化ツールを別々に使う場合は、暗号化する前に必ず圧縮しておくべきだということです。
これらの例では、clear_text
というファイルを圧縮して暗号化しています。
gpg
$ gpg -c clear_text #Compress & Encrypt
$ gpg -d clear_text.gpg #Decrypt & Decompress
gpgはデフォルトでは暗号化の前に入力ファイルを圧縮しますが、-c
はパスワード付きの対称暗号化を使用することを意味します。出力ファイルはclear_text.gpg
になります。gpg
を使用する利点の一つは、標準のOpenPGPフォーマットを使用しているため、OpenPGPをサポートしている暗号化ソフトウェアであれば、どのような暗号化ソフトウェアでも復号することができるということです。
mcrypt
$ mcrypt -z clear_text #Compress & Encrypt
$ mdecrypt -z clear_text.gz.nc #Decrypt & Decompress
-z
オプションは圧縮を行います。デフォルトでは、これは clear_text.gz.nc
というファイルを出力します。
bcrypt
$ bcrypt -r clear_text #Compress & Encrypt
$ bcrypt -r clear_text.bfe #Decrypt & Decompress
bcrypt は、デフォルトでは暗号化する前に圧縮します。出力ファイルはデフォルトでは-r
と呼ばれます。
clear_text.bfe
と gzip
$ cat clear_text | gzip | aespipe > clear_text.gz.aes #Compress & Encrypt
$ cat clear_text.gz.aes | aespipe -d | gunzip > clear_text #Decrypt & Decompress
aespipe はその名の通り、標準入力を受け取り、暗号化された aes データを標準出力に出力するプログラムです。これは圧縮をサポートしていないので、まず入力を gzip でパイプします。出力は標準出力に送られるので、自分で選んだ名前のファイルにリダイレクトする必要があります。おそらく、あなたが求めていることを行うための最も効果的な方法ではないでしょうが、aespipe は汎用性の高いツールなので、言及する価値があると思いました。
7zip を使ってパスワードで保護されたアーカイブを作成することができます。コマンドライン (またはスクリプト) でパスワードを指定するには、次のようにします:
7z a -p<password> <someprotectedfile>.7z file1.txt file2.txt
7zip は、次のように STDIN から読み込むこともできます。
cat <somefile> | 7z a -si -p<password> <someprotectedfile>.7z
zip ファイルの使用が必須の場合は、-t<type>
パラメータ (例: -tzip
) で遊んでみるのもいいかもしれません。
tar、gzip、bzip2 はいずれもパスワード保護をサポートしていません。zip のようなパスワード保護をサポートしている圧縮形式を使うか、GnuPG のような別のツールで暗号化してください。