クラウドストレージの検閲&BANを防ぐ
AmazonDriveの容量無制限プラン(Unlimited)を使用していたのですが、残念ながら容量制限が入ることになってしまったため、ひとまず退避場所としてOneDriveが1Tbyteまるまる空いていたのを思い出し移動することにしたのですが…。
OneDriveと言えば検閲に始まり誤判定からのBAN祭りが一時期話題になりました。現在は改善されているかもしれないですし、不正利用をチェックするのは当然といえば当然なんですがあまりにこの噂が広まりすぎてて怖くて利用できないw it.srad.jp
精神的な安寧を得るべく、仕方なしにファイルは暗号化した上でアップしようと思ったというわけです。
2つの暗号化方法
パスワード付きZip
古来から伝わる手法としてzipコマンドに -e オプションをつけることで気軽に暗号化できます。以下の例だと「memo.txt」を「memo.zip」に圧縮しつつパスワードをかけています。ネット上だとパスワード付きZIPはネタにされがちですが、何だかんだで便利なんですよねw 仕事相手に送りつける場合など互換性とか気にしなくて良いので。
暗号化
### ファイル $ zip -e memo.zip memo.txt Enter password: Verify password: adding: memo.txt (deflated 48%) ### ディレクトリをまるごと $ zip -e -r memo.zip memo/ Enter password: Verify password: adding: memo/ (stored 0%) adding: memo/.DS_Store (deflated 96%) adding: memo/foo/ (stored 0%) adding: memo/foo/memo.txt (deflated 48%)
復号化
復号化(解凍)のする場合はunzipコマンドで。もちろんGUIでダブルクリックしても大丈夫w
$ unzip memo.zip Archive: memo.zip [memo.zip] memo.txt password: inflating: memo.txt
OpenSSLを使用したAES形式の暗号化
本来の用途であればここまでで十分な気もするのですが、Zipでの暗号化は最近のPCのスペックだと総当りで挑まれるとやはり辛い、面倒なことはしたくないがもう少し強固に…という場合に使うのがこの方法。
OpenSSLのインストール
HomeBrewで一発で入ります。
### 存在するか確認しておく $ brew search openssl ==> Searching local taps... openssl openssl@1.1 glib-openssl ### インストール $ brew install openssl
HomeBrew自体はデフォルトでMacには含まれませんので、導入していない方は以下を先に実行してbrewを入れておいてください。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
https://brew.sh/index_ja.htmlbrew.sh
暗号化
コマンドは以下の通り。
$ openssl enc -e -aes-256-cbc -salt -k 【パスワード】 -in 【対象ファイル】 -out 【出力したいファイル名orパス】
実際に暗号化してみます。odコマンドは対象のバイナリをTerminalに表示する時に使用する物です。別のデータに変換されているのが確認できます。
### 暗号化 $ openssl enc -e -aes-256-cbc -salt -k password -in memo.txt -out memo.txt.aes $ cat memo.txt Hello! ### ファイルの中身を確認 $ od -h memo.txt 0000000 6548 6c6c 216f 0000006 $ od -h memo.txt.aes 0000000 6153 746c 6465 5f5f d497 c1db ec99 a058 0000020 3372 3c93 b0ef a6ed 69dc 8a3c a507 5308 0000040
復号化
先ほどのデータを複合化してみます。コマンドは以下の通り。暗号化時との違いは「-e」オプションが「-d」に変わったところだけですね。
$ openssl enc -d -aes-256-cbc -salt -k 【パスワード】 -in 【対象ファイル】 -out 【出力したいファイル名orパス】
試してみます。バイナリレベルでも元に戻ったことが確認できると思います。
### 復号化 $ openssl enc -d -aes-256-cbc -salt -k password -in memo.txt.aes -out memo.txt ### 確認します。 $ cat memo.txt Hello! $ od -h memo.txt 0000000 6548 6c6c 216f 0000006
今回の目的を果たすにはここまでやっていれば十分でしょう。 ここまでの内容で今回はOneDriveに保存することにしました。
何となく不安だったので、Zipで固めた後にOpenSSLで簡単な暗号化かけといた。このくらいやっとけば個人のファイルを本気で検閲しにかかったりしないだろう…。 pic.twitter.com/A5FaRE1RD3
— 勝部麻季人@はわわ軍師 (@katsube) 2018年1月23日
履歴(history)から削除する
最後にhistoryから削除しておきます。 ここに書いた方法だとhistoryコマンドを打たれるとパスワードがバレてしまいます。
Terminalはデフォルトではbashになっていますので ~/.bash_historyを直接編集してしまうか、以下のコマンドを打ちます。
history -d [削除したい行番行]
zshの場合は ~/.zsh_historyです。 あとは背後から覗き込まれると丸見えなので、ショルダーハックなどにも気をつけたいところですねぇ。
巨大なファイルでどれくらい膨れあげるのか?
一つ不安な点があるとすれば、わずか数バイトのファイルでこれくらいでかくなるということは、巨大なファイルだと一体どうなっちゃうのか心配になりますが、そこらへんはうまいこと出来ています。
以下は大量の画像ファイルをZipで圧縮し、AES方式で暗号化したファイル一覧です。
$ ls -l total 52890560 -rw-r--r-- 1 katsube staff 1972888 1 24 05:25 2006.zip -rw-r--r-- 1 katsube staff 1972912 1 24 05:38 2006.zip.aes -rw-r--r-- 1 katsube staff 3577796 1 24 05:25 2010.zip -rw-r--r-- 1 katsube staff 3577824 1 24 05:41 2010.zip.aes -rw-r--r-- 1 katsube staff 768549864 1 24 05:26 2011.zip -rw-r--r-- 1 katsube staff 768549888 1 24 05:41 2011.zip.aes -rw-r--r-- 1 katsube staff 891087945 1 24 05:27 2012.zip -rw-r--r-- 1 katsube staff 891087968 1 24 05:43 2012.zip.aes -rw-r--r-- 1 katsube staff 970920182 1 24 05:28 2013.zip -rw-r--r-- 1 katsube staff 970920208 1 24 05:44 2013.zip.aes -rw-r--r-- 1 katsube staff 349654854 1 24 05:29 2014.zip -rw-r--r-- 1 katsube staff 349654880 1 24 05:44 2014.zip.aes -rw-r--r-- 1 katsube staff 1465334619 1 24 05:32 2015.zip -rw-r--r-- 1 katsube staff 1465334640 1 24 05:46 2015.zip.aes -rw-r--r-- 1 katsube staff 4483621338 1 24 05:39 2016.zip -rw-r--r-- 1 katsube staff 4483621360 1 24 05:50 2016.zip.aes
ファイルサイズ的にはほとんど変わっていませんね。
クラウドストレージ向けの自動暗号化ツール
Boxcrypt、Cryptomator、airDriveなどクラウドストレージに保存するファイルを自動的に暗号化してくれるツールも色々あるようです。これらを使えば暗号化や復号化といった面倒な作業を一切気にしなくて良いので楽ちんですね。
https://www.boxcryptor.com/en/ https://cryptomator.org/ https://airdrive.jp/details.html
ただし突然サポートが終了した場合に対処できるか…という点と、いずれも有償ですのでコストメリットがどれくらいあるかは検討した方が良いかもです。また独自の暗号化方式を採用しているソフトは注意が必要です。AESは暗号化の仕様が定められていますので、仮にOpenSSLのプロジェクトが解散したとしても何とかなる可能性が高いですが、独自形式の場合はそう簡単にはいきません。
私の場合は完全にバックアップ用のファイルのみであったので、これらのツールは見送りました。
利用者の負担と不安が大きすぎる
そもそも利用者にこのような負担を強いることが間違ってる気もするんですけどね…。特にOneDriveはOffice365Soloを契約した上で使用してるというのに。
「OneDrive for Business」であれば検閲はしないとMSが公約しているので、暗号化とか面倒なことしたくないが、1TbyteのOneDrive使いたいといった場合にはBusiness番のOffice365の契約を検討した方が良さそうですね。個人でも購入できる上になぜかSoloよりBuisinessの方が安いという謎価格設定だったりもするので。
無課金の方は諦めてください(;´∀`)