ファイルを共通鍵で暗号化する方法いろいろ

ファイルに自分でパスワードを設定して暗号化したい、という時はわりとあると思います。(たとえばクラウドストレージにファイルをアップロードするときなど…(参照↓)
グーグルドライブに同人誌や資料データをいれておいらたアカウントが凍結された話 - Togetter
定番ソフトが分からなかったので少し調べてみました。取り上げているのは、無料でオープンソースのソフトだけです。
共通鍵暗号のみ。弱いパスワードだと意味ないので、そこはちゃんとすること)

コマンドライン

Linux系限定ですが…(Macは持ってないので不明)

gpg

Linux系OSなら必ず入っているはず。

gpg -c -o (出力ファイル名) --cipher-algo AES256 (ファイル名)

-c(--symmetric)が共通鍵暗号で暗号化するオプション。-oオプションで暗号化後のファイル名を指定、--cipher-algoオプションで暗号化アルゴリズムを指定することができます(おそらくAES256が一番強いアルゴリズム)。
コマンドを入力するとパスワードの入力画面が表示されるので、そこに入力すればOKです。
復号化は、

gpg -d -o (出力ファイル名) (ファイル名)

-dオプションを使います。
パイプでつなぐことも可能。

curl -L https://example.com/example.jpg | gpg -c --cipher-algo AES256 -o encrypted.gpg
# -aはascii文字列に変換して出力させるオプション
# 出力を標準出力にするときは-o -
gpg -c -a -o - file | less

ディレクトリの場合はtarでまとめてから暗号化すれば良いかと(gpgtarというそれ専用のコマンドもあるので、そちらを使っても良い)。
(ちなみに、gpgはデフォルトだとパスワードをキャッシュするので、再起動等をせずにすぐに復号しようとすると、パスワード入力不要で復号できてしまいます。この挙動が嫌な場合は、--no-symkey-cacheオプションをつけてキャッシュ無効化すること)

openssl

これもLinux系OSなら入っているはず。

openssl enc -e -aes-256-cbc -pbkdf2 -in (ファイル名) -out (出力ファイル名)

コマンドを入力すると、"enter AES-256-CBC encryption password:"と聞かれるので、そこでパスワードを入力すればOK。
(aes-256-cbcの、cbcというのは暗号利用モード(暗号利用モード - Wikipedia)の一つで、安全とされている。他にECBも選択できるが、これは弱いモードなので使わないこと)
(pbkdf2はパスワードをハッシュ化する方式の一つ(PBKDF2 - Wikipedia)。これを使わないとopenssl から警告されてしまう)
復号化は、

openssl enc -d -aes-256-cbc -pbkdf2 -in (ファイル名) -out (出力ファイル名)

GUIあり

Picocrypt

GitHub - HACKERALERT/Picocrypt: A very small, very simple, yet very secure encryption tool.
ややマイナーなツールですが紹介してみます。
PicorcyptはGo言語で開発されたソフトで、WindowsMacLinuxのすべてで使えます。軽量さを売りにしているようです。
GUIは非常にシンプルですが、使い方は難しくないはず。
ダウンロードはこのページから
https://github.com/HACKERALERT/Picocrypt/releases

7zip

ファイル単体の暗号化とは少し違いますが、7zは暗号化にAES256を用いているので、暗号化の強度もおそらく十分なはずです。クロスプラットフォームなのでWindowsMacLinuxのすべてで使えます。パスワードを設定して、普通に7zファイルを作成するだけでOK。
動画や画像ファイルの場合は圧縮する意味があまりない(jpegpng、mp4などは既に圧縮された形式なので、再度圧縮しても容量はあまり減らない)ので、無圧縮にするのが良いかと思います。
暗号化7zに対応したアプリを使えば、スマホ上でも解凍可能です。

Cryptomator

Cryptomator - Free Cloud Encryption for Dropbox & Co
これはクラウドストレージ向けに特化したソフトで、デスクトップ(WindowsMacLinux)だけでなくAndroidiOS版もあるようです。私は使ったことがないですが()、DropBoxGoogle Driveで使うならおそらく利便性は高いのではないかと。
ダウンロードは
https://cryptomator.org/downloads/

VeraCrypt

VeraCrypt - Free Open source disk encryption with strong security for the Paranoid
WindowsMacLinuxで使用可能な、定番の暗号化ツール。様々な工夫が施されているようで、セキュリティについてはおそらく最高峰だと思われます。
まず入れ物として暗号化コンテナファイルを作成して、その中にファイルを入れていく(入れたファイルは自動で暗号化される)、みたいな使い方が基本。
大きな特徴はOn-The-Fly Encryption (Transparent Encryption, 透過的暗号化)という仕組みで、コンテナ内での操作はすべて自動的に暗号化/復号化されます。たとえば、コンテナ内の動画ファイルを直接アプリで再生できます(再生時に自動で復号化してくれる)。これの何が良いのかというと、復号化したファイルを一旦保存する必要がなく、そのためディスクに痕跡を残さないという点です。(参考→https://veracrypt.fr/en/Introduction.html)


コンテナファイルは通常のファイルど同様に、コピーしたり移動したりすることが可能。もちろんクラウドストレージにアップロードすることもできます(スマホに対応していないのはネックですが)。
ダウンロードは
https://veracrypt.fr/en/Downloads.html

Webサイト

hat.sh

Hat.sh - Simple, fast, secure client-side file encryption
ブラウザ上でファイルを暗号化してくれるサイト。Next.jsで実装されているみたい。
ソースコードはここ↓)
https://github.com/sh-dv/hat.sh
暗号化はローカルのブラウザで実行され、ファイルはサイト側に送信はされないので大丈夫です(もし心配なら、暗号化するときはPC(スマホ)の通信を切っておいても良い)

以上に述べた方法で、(ちゃんと複雑なパスワードを設定すれば)この世界の誰にも解読はできないはず…

一応、続き?っぽい記事です↓
bogamp.hatenablog.com
bogamp.hatenablog.com