使ってみた系の記事を書くのはあまり好きじゃないのですが、日本語の情報が少なかったので投稿します。
要件と選定の理由
- ファイルを透過的に暗号化し、ディスクとしてマウントできること
- Linux (Debian) で簡単に使え、WindowsやmacOSでも使えること
この分野のソフトは古くはTrueCryptが有名でしたが、2014年に開発が終了し今は後継としてVeraCryptがよく使われているようです。VeraCryptはLinux版、Windows版、macOS版すべてあるのですが、TrueCryptのフォークでTrueCrypt Licenseを含んでおりソースコードは公開されていますが、オープンソースライセンスとして問題が少しあるためDebian等で公式パッケージが用意されていません。
Debian公式パッケージがあるという条件で見つけたのがzuluCryptです。zuluCryptは(今の所)Linux版しかありませんが、標準のLUKSに加え、TrueCrypt、VeraCrypt、dm-crypt、BitLockerのボリュームを扱うことができます。そこで暗号化ボリュームとしてVeraCryptを使い、ソフトウェアはLinuxではzuluCrypt、WindowsやmacOSではVeraCryptを使用することとしました。
またファイルシステムとしてはWindowsやmacOSでも使えるように(少々不安が残りますが)NTFSを使用しています。FAT系でないのはシンボリックリンクが使えないためです。
使い方
まずzuluCryptはGUIが用意されていますが、GUIは使っていません。あしからず。
zuluCryptを使用するにはzuluCrypt-cli
コマンドを使用します。オプションに癖があって少々分かりづらいですがman zuluCrypt-cli
のexamplesが参考になると思います。
examples:
create volume: zuluCrypt-cli -c -d /dev/sdc1 -z ext4 -t luks -p xxx
open volume : zuluCrypt-cli -o -d /dev/sdc1 -m sdc1 -e ro -p xxx
close volume ; zuluCrypt-cli -q -d /dev/sdc1
remove key ; zuluCrypt-cli -r -d /dev/sdc1 -p xxx
add key : zuluCrypt-cli -a -d /dev/sdc1 -y xxx -l yyy
get device path from mapper : zuluCrypt-cli -P -d /dev/mapper/zuluCrypt-sdc1
check if partition with UUID is present : zuluCrypt-cli -w -d UUID="d2d210b8-0b1f-419f-9172-9d509ea9af0c"
暗号化ボリュームの作成
今回は(デバイスではなく)ファイルをVeraCrypt暗号化ボリュームでNTFS(別途ntfs-3gパッケージが必要)で作成したかったので以下のコマンドで作成しました。
$ # 空ファイル作成
$ dd if=/dev/zero of=ファイル bs=10MB count=1
$ # 暗号化ボリュームファイルにする
$ zuluCrypt-cli -c -d ファイル -k -z ntfs -t vcrypt
暗号化ボリュームのマウント
マウント(正確には暗号化ボリュームのオープンとマウント)は以下のように実行します。
$ # オープンとマウント
$ zuluCrypt-cli -o -d 暗号化ボリュームファイル -t vcrypt
zuluMount-cli
というマウント・アンマウント専用のコマンドもあるのですが、zuluCrypt-cli
コマンドでもできるため使用していません。
コマンドを実行すると、/dev/mappter/zuluCrypt-
で始まるデバイスが作成(オープン)され/run/media/private/$USER/マウント名
以下にマウントされます。デフォルトのマウント名は(ディレクトリ部分を除いた)暗号化ボリュームファイル名です。マウント名を指定したい場合は、-m foo
のように指定します。
マウント場所などがこれで良ければこのまま使用できるのですが、マウントオプションとマウント場所を変更したかったので、暗号化ボリュームのオープンとマウントを別々に行っています。
$ # オープン
$ zuluCrypt-cli -O -d 暗号化ボリュームファイル -t vcrypt
$ # マウント
$ mount -t ntfs -o permissions,windows_names /dev/mappter/zuluCrypt-デバイス名 /var/data
ただ一つ問題があって、暗号化ボリュームをオープンしたときに作成されるデバイス名を簡単に知る方法がわかりませんでした。一応-s
オプションでわかるのですが、メッセージの一部なので将来フォーマットが変わる可能性がある気がします。
$ zuluCrypt-cli -s -d 暗号化ボリュームファイル名
/dev/mapper/zuluCrypt-省略 is active and is in use.
type: Nil
cipher: aes-xts-plain64
keysize: 512 bits
offset: 256 sectors / 128.0 KB
device: /dev/loop0
loop: 暗号化ボリュームファイル名
mode: read and write
active slots: Nil
-L
オプションにprint a list of all opened volumes and their mount point.The list is not formattedとあるので zuluCrypt-cli -L
と実行してみましたが、使い方が間違っているのかこちらは何も表示されず。
逆にデバイス名から暗号化ボリュームファイル名を知るのはzuluCrypt-cli -P -d /dev/mapper/zuluCrypt-デバイス名
で出来たので、/dev/mapper/zuluCrypt-*
を列挙してファイル名が一致したデバイス名を取得しています。
get_zulucrypt_device() {
for device in /dev/mapper/zuluCrypt*; do
device_path=$(zuluCrypt-cli -P -d "$device")
[ "$device_path" = "$1" ] && echo "$device" && return 0
done
return 1
}
device=$(get_zulucrypt_device 暗号化ボリュームファイル)
暗号化ボリュームのアンマウント
正確には暗号化ボリュームのアンマウントとクローズです。マウントしたままクローズしようとするとエラーになります。オープンと違って暗号化ボリュームのアンマウントとクローズを同時にやってくれるコマンドはなさそうです。
$ # アンマウント
$ umount /run/media/private/$USER/マウント名
$ # クローズ
$ zuluCrypt-cli -q -d 暗号化ボリュームファイル
さいごに
以上、私が使用した最低限のコマンドだけなので少ないですが、誰かが使用するきっかけになれば幸いです。