VeraCryptをLinuxでコマンドラインから使う方法についてのメモです。
Arch Linux環境で動作することを確認しています。
説明の前提
デスクトップ環境の端末から操作する場合、コマンド実行時に-t
または--text
をつけないとGUIで動作してしまいます。
GUIが動作しない環境ならこのオプションは不要です。
veracrypt --text
# ↑または↓
veracrypt -t
加えて大抵の操作にはroot権限が必要なので、sudo
が必要なケースも多いです。
以後の説明はこれらを省略しているので、予めご了承ください。
暗号化ボリューム作成する
ファイルコンテナを作る場合
いくつか具体的なオプションパラメータを指定しているので、実際の利用時は適切なものに置き換えてください。
veracrypt --create --size 64M --keyfiles='' --encryption=AES --hash=SHA-512 --random-source=/dev/random --volume-type=normal --filesystem=none /path/to/container
- -c, --create
ボリュームを作成する場合につけるオプション - --size
例えば64Mだと64メガバイトサイズのファイルコンテナを作成する
単位としてK, KiB, M, MiB, G, GiB, T, TiB
が指定できる
単位指定無しだとバイト単位になる - --keyfiles
パスワードとは別に鍵ファイルも使いたい場合にパスを指定する
不要なら空文字列を指定する - --encryption
暗号化アルゴリズムを指定する
例えばAES
、Serpent
、Camellia-Kuznyechik
など
指定できるパラメータは公式ドキュメントのEncryption Algorithmsの表のAlgorithmの列を参照 - --hash
ハッシュアルゴリズムを指定する
例えばSHA-256
、Whirlpool
など
指定できるパラメータは公式ドキュメントのHash Algorithmsを参照 - --random-source
乱数源にするファイルのパスを指定する
指定がない場合はユーザがキーボードから適当なランダム文字列を入力するハメになるので結構大変
/dev/random
で動作が固まる場合は/dev/urandom
を使えばよいが、その場合は予測可能な擬似乱数が混ざるかも知れないので気にする人は注意 - --volume-type=normal
normal
(通常ボリューム)またはhidden
(隠しボリューム)を指定する
隠しボリュームを作る場合も通常ボリュームは必要なので、まずはnormal
でOK - --filesystem
ボリュームのファイルシステムを指定する
後で別途ファイルシステムを指定してフォーマットするので、ここではnoneを指定して何もしない
最後の/path/to/containerはファイルコンテナを生成するパスを指定してください。
またコマンド実行時にパスワードとPIMの設定を求められるので、適宜設定してください。
この後、ボリューム全体の暗号化が始まります。
サイズによってはかなり待たされます。
ブロックデバイスを直接暗号化する場合
各オプションの意味はファイルコンテナと同様。
/path/to/device は自分の環境に合わせたものに置き換えてください。
例えば/dev/sdb2
や/dev/nvme1n1p2
などです。
veracrypt --create --keyfiles='' --encryption=AES --hash=SHA-512 --random-source=/dev/random --volume-type=normal --filesystem=none /path/to/device
暗号化ボリュームを利用する
まず暗号化ボリュームをマウントします。
/path/to/volume は自分の環境に合わせたものに置き換えてください。
例えば/home/hoge/file_container.vc
や/dev/sdb2
などです。
veracrypt --filesystem=none /path/to/volume
どこにマウントされたかは以下のコマンドで確認できます。
おそらく/dev/mapper/veracrypt1
のように/dev/mapper/
下にマウントされます。
veracrypt -l
続いてマウントしたデバイスをフォーマットします。
少なくともEXT4とXFSで動作することを確認していますが、ここではEXT4を例にあげます。
フォーマット時に設定しているオプションの意味は以下の通り。
-
-E lazy_itable_init=0,lazy_journal_init=0
により高速フォーマットを無効化し、バックグラウンドでのストレージ書き込みを防ぐ -
-m 1
によりrootの予約領域サイズを全体の1%に設定
mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 -m 1 /path/to/device
フォーマット完了後は一旦アンマウントします。
/path/to/volumeはファイルコンテナや元々のブロックデバイスのパスを指定してください。
面倒ならveracrypt -d
で全てのボリュームをアンマウントできます。
veracrypt -d /path/to/volume
その後、以下の操作でボリュームをマウントすれば早速利用可能になります。
マウント直後は所有者がrootになっていると思われるので、適宜設定を変更してください。
veracrypt /path/to/volume /where/to/mount
隠しボリュームを作る
まず隠しボリュームを隠す通常の暗号化ボリュームを作成しておきます。
続いて以下の操作を実行します。
各種オプションは適宜変更してください。
veracrypt --create --keyfiles='' --encryption=Camellia-Kuznyechik --hash=Streebog --random-source=/dev/urandom --volume-type=hidden --filesystem=none --size=32M /path/to/normal/volume
ほとんどのオプションは通常ボリューム作成時と同じですが、以下のオプションが異なります。
- --volume-type=hidden
隠しボリューム作成時はhidden
を指定する(通常ボリュームはnormal
) - --size
必須オプション
通常ボリュームのサイズより小さい値を設定すること
/path/to/normal/volumeは隠しボリュームを隠す通常ボリュームです。
コマンド実行後にパスワードなどが求められるので、隠しボリューム用のものを入力してください。
なお隠しボリューム作成時はボリューム全体の暗号化は行われないので、この操作はすぐ終わります。
隠しボリュームを利用する
通常ボリュームを利用する場合と同じ操作をすればよいですが、ボリュームマウント時のパスワードは隠しボリュームのものを入力する点には気をつけてください。
ボリュームをアンマウントする
ボリュームを使用しているプロセスがあるとアンマウント出来ないので、それらのプロセスを落としてください。
fuser -mv
やlsof
でボリュームが使用中かどうか確認できます。
まずは以下の操作でどのボリュームがどこにマウントされているか確認します。
veracrypt -l
アンマウントしたいボリュームまたはマウントポイントを指定します。
veracrypt -d /path/to/volume
# または
veracrypt -d /path/to/mount/point
ボリュームまたはマウントポイントを指定しないと、アンマウント可能な全てのVeraCryptボリュームをアンマウントするので注意してください。
Tips
- HDDを丸々1台暗号化する場合、半日は見ておいたほうがよい
- あまり複雑な暗号化アルゴリズムを採用すると、ディスクI/OよりCPUパワーがボトルネックになってパフォーマンスが落ちる場合がある
- AES-NI拡張命令に対応したIntel/AMD CPUを使うと、AES暗号化のスループットがよくなる
- GUIで利用可能なベンチマーク機能はコマンドラインでは利用できない
-
ベンチマークを行うbashスクリプトを作ってくれた人がいる🙏🙏
ただし動作にはある程度環境整備が必要(bcコマンドのインストールとか)
-
ベンチマークを行うbashスクリプトを作ってくれた人がいる🙏🙏