web-dev-qa-db-ja.com

Ubuntuの2要素認証によるフルディスク暗号化:どのように?

背景情報

私は最近Windowsから離れたLinux初心者です。私は現在、フルディスク暗号化なしでUbuntu11.04を使用しています。私のホームディレクトリだけが暗号化されており、eCryptFSを使用しています。最近、暗号化が本来あるべきほど透過的ではないことに気づき始めました。たとえば、VMWareは、暗号化されたホームディレクトリに保存されている仮想マシンで問題が発生することがあるため、仮想マシンを暗号化されていない場所に移動し、暗号化されたホームディレクトリからリンクしました。しかし、それだけではありません。Ubuntuのようなオープンソースオペレーティングシステムは、秘密にしておくべき情報を漏らすために非常に簡単に変更できるため、システムを暗号化しないままにしておくことは実際にはあまり安全ではないことに気付きました。


ゴール

起動前認証用のキーデバイスとパスワードを使用して、フルディスク暗号化を機能させたいのですが。


要件/詳細

  1. ディスク全体を暗号化する必要があります。少なくとも、ディスクはすべて暗号化された個々のパーティションで構成されています。暗号化されたパーティションでも隠すことができれば、私はそれを選びます。暗号化の透過性が高いほど、優れています。コンピューターを別の方法で使用したり、他の何かを構成したりする必要はありません。
  2. 暗号化されたパーティションのロック解除と起動に使用するデバイスは、小型の外部ポータブルデバイスである必要があります。これには2つの目的があります。ブートローダーは、使用されていないときは私と一緒にいるので、悪意のある目的で変更される可能性ははるかに低くなります。また、ディスクを復号化するためのキーファイルは、暗号化されたディスク自体のどこにもどのような形式でも見つかりません。
  3. キーファイルはパスワードで暗号化する必要があります。コンピューターとUSBデバイスの両方を紛失した場合でも、データとオペレーティングシステムは安全です。 USBキーを紛失したり、破損したりした場合は、バックアップから別のクリーンなキーを作成できます。いずれの場合も情報は漏えいしません。もちろん、コンピュータを紛失しても、それは重要ではありません。

はい、私は多くの場所からガイドを見てきましたが、問題はそれらがすべての要件(特に3番目)に対応していないことです。私の要件は十分に一般的であるため、誰かがそのようなセットアップをすでに試し、正常に実装していると確信しています。 Linuxのプロが解決策を共有できれば幸いです。

9
Kevin Li

特定のサムドライブと起動するためのパスワードの存在を必要とするフルディスク暗号化を行う簡単な方法があります。

完全に暗号化されたハードドライブからLUKSヘッダーを切り離し、サムドライブに保存します。

すでに次の設定が行われていると仮定します。

# /dev/sda1 is the boot partition (100MB)
# /dev/sda2 is the encrypted partition
parted /dev/sda mklabel msdos
parted /dev/sda -- mkpart primary ext2 1M 200M
parted /dev/sda -- mkpart primary ext4 200M -100M
cryptsetup luksFormat /dev/sda2

Luksヘッダーのコピーを作成し、ローカルデバイスから消去します。

mkdir /media/ramdisk && mount -t tmpfs -osize=20m,rw tmpfs /media/ramdisk
cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file /media/ramdisk/header.img
dd if=/dev/urandom of=/dev/sda2 bs=1M count=2

高予算の代理店のターゲットである場合は、最後のステップを数回実行します。また、ヘッダーを一時的に保持するためのRAMディスクを作成したので、後でヘッダーが長引くことはありません。

/ dev/sdbにあるUSBデバイスで、2MBのパーティションを作成し、それにヘッダーをロードします。

parted /dev/sdb -- mklabel MSDOS
parted /dev/sdb -- mkpart primary 1M 3M
dd if=/media/ramdisk/header.img of=/dev/sdb1

現在、/ dev/sda2のすべてがランダムデータのように見え、/ dev/sdb1にヘッダーがあります。暗号化されたドライブに手動でアクセスするには、次を使用します。

cryptsetup luksOpen --header /dev/sdb1 /dev/sda2 rootfs
mount /dev/mapper/rootfs /target

次のステップは、起動時にペンドライブを挿入するように起動プロセスに要求させることです。そこにあると思い込んで失敗する方が簡単だと思いました。まず、デバイスのIDとUUIDを確認します。

find -L /dev/disk/by-id/ -samefile /dev/sdb1
/dev/disk/by-id/usb-Generic-_Compact_Flash-part1
find -L /dev/disk/by-id/ -samefile /dev/sda2
/dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2

blkid /dev/sdb1
/dev/sdb1: UUID="63347546-2db3-4bc1-9414-1142739a4c9f" TYPE="crypto_LUKS"

次に、/etc/crypttab行を次のように編集します。

root /dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2 none luks,header=/dev/disk/by-id/usb-Generic-_Compact_Flash-part1

headercrypttabオプションのサポートを取得するには、 このパッチ が必要な場合があります)

最後になりましたが、initramを更新してください。

update-initramfs -u

これをさらに一歩進めて、実際に ブートパーティション全体をUSBドライブにロードする 。この記事の著者は、まさにこのサイトで フォローアップ を行っていました。

多くさまざまなアプローチあなたが取ることができます 、さまざまな程度のセキュリティと利便性があります。

セキュリティに関する特別な注意:パスフレーズが危険にさらされた場合、後でパスフレーズを変更した場合でも、ヘッダーのコピーを持っている人は誰でもデータを復号化できます。

2
GnP

TrueCryptがOSX、Windows、Linuxで利用できることを知っています。ドライブ全体に対して2つのレベルの暗号化を行うことができます。私はAESフルディスク暗号化を備えたDebianでそれを使用しました。ハードドライブ上のデータにアクセスするには、起動時にパスワードが必要です。

1
kobaltz