Gocryptfs でクライアントサイド暗号化

需要がなさそうな話題ですが,忘れそう……というか今日必要になって調べ直したので,メモしておきます。

Debian 10 のレポジトリには ecryptfs-utils がない

ないんです。はい。Backports にもない。

ecryptfs-utils は eCryptFS を扱うためのツールで,Ubuntu に由来するものです。

直接の原因としては,Stable になる前にバグの再発が見つかって自動除外され,そのままになっているらしい。

では何故そのままになっているかというと,もともと Ubuntu 専用ツールといった感じで色々しんどいので作業に手を挙げる人がいないことに加え,そもそも Debian で ecryptfs-utils を使っている人がぜんぜんいないからのようです。

実際,Reddit にトピックがありますが,盛り上がらないまま終わっています。

ではどうするべきか?

eCryptFS を使い続ける?

私はその数少ない Debian での ecryptfs-utils ユーザだったので,少し困ってしましました。

オンラインファイル同期のクライアントサイド暗号化に eCryptFS を使っていたのです。

eCryptFS 自体はカーネルに取り込まれている機能なので,インタフェースさえあれば使えます。あまり手のかからない範囲では

  1. eCryptfs 用の他のユーティリティを使う
  2. Sid の ecryptfs-utils を突っ込んで workaround を考える

の2つでしょうが,1.については他のユーティリティもまたレポジトリにはなく,ユーザ数自体が少なそうなことを考えれば茨の道になりそうですし,そもそも検証の手間が大きく大変です。2.も同様なうえ,unstable (sid) でも一つ古い 111-4 のままとなっており閑古鳥が鳴いています。eCryptFS 自体はよいものだと思いますが,Debian で使うのは今後も大変そうなので,これを機に別の暗号化ツールに移行したほうがよいでしょう。

Gocryptfs を使う!

それでどの暗号化ツールを使うかですが,結論から言うと Gocryptfs を使うのがよいかと思います。

理由はこんな感じ。

  • Debian を含む主要ディストロのレポジトリに収録されている
  • 開発途上ではあるが安定しており,第三者のセキュリティ監査を経験している
  • 開発が活発
  • 使いやすい
  • Go 製で速い
  • ユーザスペースのツールなので Linux(カーネル)に限定せず使える ―― MacOS や(サードパーティソフトで)Windows にも対応するほか,eCryptFS が組み込まれていないカーネルでも利用可
  • コンテナ型と比較して,差分だけアップロードできるのでネットワーク向き
  • 高度な機能にも試験的に対応
  • Github の Issues を見る限り開発者の rfjakob 氏はかなりやる気満々だし,いい人っぽい

Gocryptfs の使い方

Gocryptfs は多機能でありながら,基本的な機能はシンプルに利用でき非常に使いやすいです。

たとえば,~/plain にマウントするファイルを ~/Nextcloud/encrypted に保存する場合は、

# apt install gocryptfs
$ mkdir ~/Nextcloud/encrypted
$ gocryptfs -init ~/Nextcloud/encrypted
$ mkdir ~/plain
$ gocryptfs ~/Nextcloud/encrypted ~/plain

とするだけで可能です(init 時にパスワードの設定を求められるので設定し,マウント時に入力します)。

~/passfile というテキストファイルにパスワードを書いておいて

gocryptfs -passfile ~/passfile ~/Nextcloud/encrypted ~/plain

をシェルスクリプトにして自動実行するようにすれば,ログイン時の自動マウントもカンタンです(もちろんローカルは LUKS 等で保護されている前提です)。

ホームディレクトリ暗号化はどうする?

そもそもホームディレクトリ暗号化は安全ではない

ところで,eCryptfs はホームディレクトリ暗号化にも使われます。Debian 10 ではホームディレクトリ暗号化をどのようにすればいいのでしょうか。

確認として,ホームディレクトリ暗号化はあまり安全ではなく,LUKS による FDE の代替にはなりません。/tmp や /var,swap 領域(デスクトップユース・SSD ではそもそも別パーティションではなく ~/ にファイルとして作ったほうがよいですが)に機密データが残ることが考えられますし,それ以前の問題として気づかぬうちにシステムが改竄されているかもしれません。

とはいえ,オンスクリーンキーボードを要するタブレットなど,どうしてもホームディレクトリ暗号化が必要な局面があるのも確かです。

Gocryptfs で暗号化

Gocryptfs でも,reverse mode (-reverse) を使い,手動で PAM 連動を設定することでホームディレクトリ暗号化ができるようです。

ただし自動化・抽象化してくれる仕組みはないため,ecryptfs-utils のように手軽ではありませんし,システムのアップデートなどがきっかけで設定が壊れることも大いにありえます。

EncFS で暗号化

EncFS はとても古い設計で,数々のセキュリティホールが残されていることからもはや安全ではないとも言われていますが,深刻な問題は適宜修正されており,ホームディレクトリ暗号化というコンセプトの要求を満たす程度の安全性はあると思われます。

Gocryptfs より情報が多い分,導入・トラブルシューティングはいくらか容易かと思われます。

/home を別パーティションに切って LUKS 暗号化

安定性は非常に高いですが,DM 起動前にパスワードが求められるのでタブレットや Bluetooth キーボードでは解錠ができませんし,ログイン操作との統合もできず,あえてこうする実益があるケースは思いつきません。

諦めて Ubuntu 系ディストロを使う

ecryptfs-utils は Ubuntu のためのものですから,Ubuntu では問題なく機能しますし,バグも修正されます。身も蓋もありませんが,タブレット等で Linux を使いたいだけであれば,さしあたりこれが一番よいのではないかと思います。

参考:

コメントを残す

投稿にあたり,完全な IP アドレスが保存されます(公開されません)。

コメントはスパムフィルタで処理され,承認後に公開されます。