ラップトップでシステム全体を暗号化したいと思っています。しかし、自宅用と職場用の 2 人のユーザーがいて、それぞれに別々の暗号化が必要です。もちろん、dm-crypt でディスク全体を暗号化し、ecryptfs で 2 番目の暗号化レイヤーを使用してホーム ディレクトリを暗号化することはできます。ただし、パフォーマンス上の理由から、これは良いアイデアではないようです。では、次のようにシステムを設定するにはどうすればよいでしょうか。
- ハードドライブ全体が暗号化されている
- ユーザー1がログインしていてユーザー2がログインしていない場合、ユーザー2のデータはユーザー1に対して暗号化され、その逆も同様です。
- 起動時にシステムを復号化するパスワードを1つ入力する必要があります(通常のLVM / dm-crypt設定のように)。そして、ユーザーxにログインしてパーティションを復号化する2番目のパスワードのみを入力する必要があります。
- パフォーマンスは単純なフルディスク暗号化と同様です
- ソリューションはSSDと連携して動作する必要があります。つまり、TRIMをサポートする必要があります。
これが重要であれば、ディストリビューションとして Ubuntu を使用したいと思います。
答え1
ハード ドライブ全体を暗号化するのではなく、
/dev/sda
パーティションごとに暗号化します (より正確にはファイル システムごとに暗号化します - 以下を参照)。2 人のユーザーのホームに別々のファイル システムをマウントします。別々のパーティションを作成することは意図的に避けています。これは通常の方法ですが、いくつかの面で制約があるためです。暗号化されたファイル システムを含む大きなファイルを保持し、必要に応じてマウントされる 1 つの大きなホーム パーティションを用意する方が便利かもしれません。利点は、ユーザーのホームを分離したまま、サイズを簡単に変更できることです。
ログイン時の自動マウントはPAMを介して可能です。ログインと実際のアクセスに同じパスワードを使用しないように注意してください。データ暗号化代わりに、LUKS を使用するか、ログイン パスワードで暗号化されたファイルに暗号化キーを保存することで LUKS を模倣します。これにより、ログイン パスワードを変更しても暗号化されたデータには影響せず、暗号化キーのみに影響するため、ユーザー ホーム全体を再暗号化する必要がなくなります。
一般的な手順:
パーティショニングの使用
gdisk
(時々とも呼ばれるgptfdisk
)parted
またはその他の適切なプログラムについては、詳細についてはマニュアルページを参照してください(パーティショニングはこのQAの範囲外です)暗号化ファイルベースのファイルシステム - 私はLUKSの設計にいくつか異論があるので、通常は
cryptsetup
いくつかの点でLUKSを模倣した「プレーン」モードで使用しています。LUKSを選択した場合は、手順をcryptsetup
(適切に変更されたオプションを使用して)減らすことができます。暗号化キーとパスワードを用意します。これは興味深い部分です。データを暗号化するには、十分なランダム性(8文字のパスワードでは十分ではありません)が必要です。パスワードは簡単に変更でき(ファイルシステム全体を再暗号化する必要はありません)、覚えやすく入力しやすいものでなければなりません。これらの要件は互いにかなり矛盾しています。したがって、LUKSと同じトリックを使用します(これは実際には、ハイブリッド暗号システムある意味では)暗号化キー多かれ少なかれランダムにすることができます。非常にランダムなデータ ( など
/dev/random
) を使用するか、または SHA-2 や SHA-3 (最近の出来事を踏まえて使用すべきかどうか迷っている場合、最初のハッシュは NSA によって設計されました) などの適度に長いパスフレーズを使用します。最初のケース(そして本当にランダムなデータの場合)で適度に長いということは、長さが、使用される暗号に選択されたキーの長さとほぼ同じである必要があることを意味します。プラスの長さ初期化ベクトル2番目のケースでは、強引なハッシュを使用すると、キーが破損したり紛失したりした場合にキーを回復できるという利点があります (もちろん、ハッシュされた最初のパスフレーズを覚えていることが条件です)。このキーは暗号化され、ファイルに保存されます。この場合、暗号化されたキーのパスフレーズは、ログイン パスワードと同じになります。
# set up the encrypted encryption key printf "Reasonably long and complicated passphrase" \ | openssl dgst -sha512 -binary \ | openssl enc -bf > /path/to/key.enc
openssl dgst -sha512 -binary
標準入力からSHA-512ハッシュのバイナリ形式を生成し、openssl enc -bf
それをフグ- ハッシュと暗号はお好みに合わせて自由に選択してください (Twofish または Rijndael はどちらも十分に試されていますが、カーネルで使用可能な他の暗号でも問題ありません)。暗号化されたデバイスの外部にキーを保存すると、暗号化されたデータ自体とは別に追加のものが必要になるという欠点があります。LUKSはキーをヘッダーに保存するため、自己完結的です。その一方で、特定のツールセットに縛られます。これは不注意に設計されたものではなく、ほとんどのインストールに存在しますが、必要アクセスするための特別なツール。
一方、別のファイルの場合は、キーの保存方法を自由に選択できます。リムーバブルメディアに保存したり、ログイン前に挿入したり、ファイルシステムがマウントされたら削除したりすることもできます(メディアをコンピューターに接続したときに自動ログインするように設定することもできます)。もちろん、セキュリティの原則は、「独自の暗号を発明しないでください」適用される(例:Security SEのこの投稿) - これは実際に LUKS を使用する理由になるかもしれません。キーのバックアップは明らかに簡単です。
ファイルシステムを保持する空のファイルを作成する
dd if=/dev/zero of=/path/to/backing_file.enc bs=1M count=X
暗号化されたデバイスを作成する
openssl enc -bf -d -in /path/to/key.enc 2>/dev/null \ | cryptsetup create \ -c twofish-cbc-essiv:sha256 \ -s 256 \ -h plain \ encryptedfs /path/to/backing_file.enc
openssl enc -bf -d
stdinでパスワードを要求し、暗号化キーを復号化しようとします。以前に作成したファイルによってバックアップされたcryptsetup create ... encryptedfs /path/to/backing_file.enc
暗号化されたDMデバイスが作成されます。重要なオプションは、暗号化暗号を選択することです。encryptedfs
-c
そしてその動作モードデバイスをゼロで埋めます - これにより、事実上、バックアップ ファイルに「ランダムなゴミ」が挿入され、ファイルの内容がわかりにくくなります (そうしないと、手順 2 でゼロになっていないブロックをスキャンすることで、どこにデータが書き込まれたかがわかります)。
dd if=/dev/zero of=/dev/mapper/encryptedfs bs=1M
ファイルシステムを作成する
mkfs.[favourite_filesystem] [tuning options] /dev/mapper/encryptedfs
/etc/fstab
自分ですべてやりたい場合は対応する行を記入してください。/etc/crypttab
システムツールとの何らかの統合が必要な場合。
ログイン/ログアウト時に自動的にマウント/アンマウントする方法については、pam_mount ドキュメント。
答え2
自宅を 2 回暗号化せずにこのようなシステムを実現する 2 つの有益な方法が考えられます。
- 別のホームパーティション:にマウントされる別のパーティションを作成します
/home
。各ユーザーは を介してホームを暗号化しますencfs
。 - 各ユーザーごとに個別のホームパーティション:各ユーザーには、ホーム用に個別のパーティションが割り当てられ、それ自体が を使用して暗号化されます。このパーティションは、ユーザーがログインすると
dm-crypt
にマウントされます。/home/user
もちろん、暗号化もプラスします/
;-)
どちらの場合も、ログインと暗号化に同じパスワードを使用すると、ログイン プロセス中にホームを自動的にマウントできます。(たとえば、 で設定できます/etc/security/pam_mount.conf.xml
。ハウツーはたくさんあります) 最初の方法ではユーザーのフォルダーの名前は暗号化されませんが、2 番目の方法を使用するとすべてが暗号化されます。そのため、私は方法 2 を好みます (実際に使用しています) ;-)