web-dev-qa-db-ja.com

ユーザーごとに異なる暗号化を使用して、使用可能なフルディスク暗号化を取得する方法

ラップトップで完全なシステム暗号化を使用したい。しかし、私には2人のユーザーがいます。1人は自宅用、もう1人は職場用で、両方に別々の暗号化が必要です。確かに、dm-cryptを使用してフルディスク暗号化を実行し、ecryptfsを使用して2番目の暗号化レイヤーを使用してホームディレクトリを暗号化することができます。ただし、これはパフォーマンス上の理由からお勧めできません。では、どうすれば次のようなシステムをセットアップできますか?

  • ハードドライブ全体が暗号化されます
  • ユーザー1がログインし、ユーザー2がログインしていない場合、ユーザー2のデータはユーザー1に対して暗号化され、その逆も同様です。
  • 起動時にシステムを復号化する1つのパスワード(通常のLVM/dm-cryptセットアップのように)と、ユーザーxにログインしてパーティションを復号化する2つ目のパスワードを入力する必要があります
  • パフォーマンスは、単純なフルディスク暗号化に似ています
  • ソリューションはssdと連携する必要があります。つまり、TRIMをサポートする必要があります。

これが重要な場合は、ubuntuをこのディストリビューションとして使用したいと思います。

5
student
  1. ハードドライブ全体を暗号化しないでください(/dev/sdaのように、パーティションごとに(またはより正確にはファイルシステムごとに-以下を参照)暗号化します)。

  2. 2人のユーザーのために、自宅に別々のファイルシステムをマウントします。個別のパーティションを作成することは意図的に避けています。これは通常の方法ですが、いくつかの面で制約があるためです。暗号化されたファイルシステムを含み、必要に応じてマウントされる大きなファイルを保持する1つの大きなホームパーティションがある方が便利な場合があります。利点は、ユーザーの家を分離したまま、家のサイズを簡単に変更できることです。

  3. ログイン時の自動マウントは、PAMを介して可能です。ログインと実際のデータ暗号化に同じパスワードを使用したくないことに注意してください。代わりに、LUKSを使用するか、ログインパスワードで暗号化されたファイルに暗号化キーを保存して模倣します。これにより、ログインパスワードの変更が暗号化されたデータに影響を与えることはなく、暗号化されたキーのみに影響を与えるため、ユーザーの家全体を再暗号化する必要がなくなります。

一般的な手順:

  • パーティショニングには、gdiskgptfdiskとも呼ばれる)、parted、またはその他の適切なプログラムを使用します。詳細については、manページを参照してください(パーティショニングはこのQAの範囲外です)。

  • 暗号化されたファイルベースのファイルシステム-私はLUKSの設計にいくつかの異議を唱えているので、私は通常、いくつかの側面でLUKSを模倣する「プレーン」モードでcryptsetupを使用しています。 LUKSを選択した場合は、ステップをcryptsetupに減らすことができます(適切に変更されたオプションを使用)

    1. 暗号化キーとパスワードを準備します。これは興味深い部分です-必要なデータを十分なランダム性で暗号化し(8文字のパスワードでは実際には十分ではありません)、パスワードを簡単に変更でき(ファイルシステム全体を再暗号化する必要なしに)、適度に簡単です覚えて入力します。これらの要件は互いにまったく逆になります。したがって、LUKSと同じトリックを使用します(実際には、 ハイブリッド暗号システム のバリエーションと見なすことができます))。 暗号化キーは、多かれ少なかれランダムにすることができます-いくつかの本当にランダムなデータ(たとえば、/dev/randomから)を使用するか、次のような適度に長いハッシュを使用します適度に長いパスフレーズのSHA-2またはSHA 最初のものはNSAによって設計されたもので、最近のイベントに照らして使用するかどうか疑問に思われる場合)。

      最初のケース(および実際にランダムなデータの場合)で適度に長いということは、長さが使用される暗号に選択されたキーの長さplus---(初期化ベクトル の長さ。 2番目のケースでは、 brute-force それを行うのは難しいはずです。ハッシュを使用すると、キーが破損または紛失した場合にキーを回復できるという利点があります(もちろん、ハッシュされた最初のパスフレーズを覚えている場合)。次に、このキーは暗号化されてファイルに保存されます。あなたの場合の暗号化された鍵のパスフレーズは、ログインパスワードと同じになります。

      # 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はそれを使用して暗号化します Blowfish -お好みに応じてハッシュと暗号を自由に選択してください(TwofishまたはRijndaelどちらもかなりよく試されていますが、カーネルで利用可能な他の暗号も問題ないはずです)。

      暗号化されたデバイスの外部にキーを保持することには、暗号化されたデータ自体とは別に追加のものが必要になるという欠点があります。LUKSはキーをヘッダーに格納するため、自己完結型です。一方、特定のツールセットに縛られています。不注意に設計されておらず、ほとんどのインストールに存在しますが、アクセスするには特別なツールが必要です。

      一方、別のファイルを使用すると、キーの保存方法を自由に選択できます。リムーバブルメディアに配置し、ログイン前に挿入し、ファイルシステムがマウントされたら削除することもできます(メディアをコンピューターに接続する場合は、自動ログインをフックすることもできます)。もちろん、セキュリティマキシム「独自の暗号を発明しないでください」が適用されるため、これはすべてよく考えておく必要があります(例 セキュリティSEに関するこの投稿 を参照) -これは実際にはLUKSを使用するための議論かもしれません。キーのバックアップは明らかに簡単です。

    2. ファイルシステムを保持する空のファイルを作成します

      dd if=/dev/zero of=/path/to/backing_file.enc bs=1M count=X
      
    3. 暗号化されたデバイスを作成する

      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と呼ばれるデバイス。重要なオプションは暗号化暗号を選択する-candその動作モード

    4. デバイスをゼロで埋めます-これにより、バッキングファイルに「ランダムなゴミ」が効果的に配置され、ファイルの内容がわかりにくくなります(そうでない場合は、ゼロになっていないブロックをスキャンすることで、書き込み先がわかります。ステップ2から)。

      dd if=/dev/zero of=/dev/mapper/encryptedfs bs=1M
      
    5. ファイルシステムを作成する

      mkfs.[favourite_filesystem] [tuning options] /dev/mapper/encryptedfs
      
    6. すべてを自分で行いたい場合は対応する行を/etc/fstabに入れ、システムツールと何らかの統合が必要な場合は /etc/crypttab に入れます。

  • ログイン/ログアウト時の自動(アン)マウントについては、 pam_mountドキュメント を参照してください。

5
peterph

私はあなたの家を二度暗号化せずにそのようなシステムを達成するための2つの価値ある方法を考えることができます。

  • 個別のホームパーティション:/homeにマウントされる個別のパーティションを作成します。次に、各ユーザーはencfsを介してホームを暗号化します。
  • ユーザーごとに個別のホームパーティション:すべてのユーザーは、dm-cryptを使用して暗号化された自宅用の個別のパーティションを取得します。このパーティションは、ログイン時に/home/userにマウントされます。

もちろん、それに加えて/の暗号化;-)

どちらの場合も、ログインと暗号化に同じパスワードを使用すると、ログインプロセス中に家を自動的にマウントできます。 (たとえば、/etc/security/pam_mount.conf.xmlで構成できますが、ハウツーはたくさんあります)最初の方法ではユーザーのフォルダーの名前は暗号化されませんが、2番目の方法では実際にはすべてが暗号化されます。だから私は方法2を好む(そして実際に使う);-)

2
binfalse