ディスク暗号化によるプリブート認証は技術的にどのように機能しますか?

ディスク暗号化によるプリブート認証は技術的にどのように機能しますか?

デュアルブート SSD ドライブを完全に暗号化するソリューションを探しています (まだ新しくて空なので、何かを入れる前に暗号化を設定したいです)。

この質問に関して Web 上では混乱が続いていますが、TrueCrypt ではこれが実行できる可能性があります。ただし、追加のブート ディスクにブート ローダーが必要になる可能性があります。私が読んだところによると、一部の Linux ツール (修正された GRUB2 を含む) でもこれが実行できる可能性があります。

しかし、私は疑問を抱いています。私が読んだ記事はどれも、基本的な疑問に答えるほど深く掘り下げていませんでした。ディスク全体が暗号化されていて、プリブート ツールがユーザーに復号化キーを要求する場合、このツールは起動する OS の下で実行する必要があるということではありませんか? 言い換えると、OS が認識するディスクが実際に暗号化されているという事実を OS が認識しないツールはあるのでしょうか?

そのようなツールがない場合、復号化ツールは起動時に何らかの方法で復号化情報を OS に渡す必要があるということではないでしょうか? これをクロスプラットフォームで実行するのは難しいだろうと想像できます。

答え1

ディスク全体が暗号化されていて、プリブート ツールがユーザーに暗号化解除キーを要求する場合、このツールは起動する OS の下で実行する必要があるということではないでしょうか?

はい、ほぼそうです。ハードウェアベースのフルディスク暗号化暗号化はデバイス (ハード ディスク/フラッシュ) によって完全に処理されるか、物理デバイスにつながるチェーン上のコントローラによって処理され、OS からは「見えません」。
これにより、OS は、暗号化されていないプレーンなデバイスを扱っている場合とまったく同じように I/O を実行し、魔法はハードウェア (および/またはファームウェア - いずれにせよ OS の「下」) で発生します。

そのようなツールがない場合、復号化ツールは起動時に何らかの方法で復号化情報を OS に渡す必要があるのではないでしょうか?

暗号化を OS の「下」で実行できない場合 (上記のように、または仮想化技術を使用して実行することもできますが、その場合、2 つ (またはそれ以上) の OS が実行されることになります)、確かに何らかの形式の情報転送が必要になります。つまり、OS 間の
暗号化は困難です。ハードウェア/ファームウェアのサポートがない場合は、ブートストラップ コード (少なくともブートローダー) を暗号化解除する必要もあります。

ウィキペディアディスク暗号化これについては記事で詳しく説明しています。

答え2

暗号化されたドライブに対するハードウェア (または、より正確にはファームウェア、つまり BIOS) のサポートがある場合は、ファームウェアを使用してディスク全体を暗号化できます。これを行うには欠点があります。ディスク暗号化をサポートするコンピューターは多くなく、特定のファームウェアに縛られてしまいます (さらに悪いことに、コンピューターに TPM があり、暗号化キーが TPM 内にある場合は、ストレージ暗号化キーをバックアップしていない限り、特定のマザーボードに縛られてしまいます)。

オペレーティング システムが暗号化を行う場合、ディスク上には暗号化されていない小さな領域がなければなりません。そこにオペレーティング システムの初期部分が保存されます。Linux の一般的な構成では、別のクリアテキスト/bootパーティションを用意し、他のすべてのパーティションを暗号化します。「フル ディスク暗号化」は少々誤った名称です。通常は「フル ボリューム暗号化」の意味で使用され、ボリュームは通常ディスクではなくパーティションです。フル ディスク暗号化とは、すべてのファイル (または少なくともディレクトリ ツリー) を個別に暗号化しないことです。

Linuxでは、フルディスク暗号化の標準ツールは暗号化すべての主要なディストリビューションで利用可能であり、多くのインストーラーに統合されています。

答え3

はい、Grub2 では/bootパーティションを LUK で暗号化できます。

  • /boot/LUKs暗号化パーティション上のフォルダとして
  • /bootパーティション上で暗号化されたLUK
  • Linux では、ソートされていないブロック リストをデバイスとして使用できるため、ルートにすることができます (initramfs は、このようなソートされていないブロック リストを構成するのは非常に複雑ですが、実行可能です。これは、偏執的な方法です)。

/boot私はまた、複数のレイヤーで暗号化する(パーティションの場合)という偏執的な方法もテストしました。

  1. /dev/sda5ディスク上の唯一の論理パーティションとして(2つの拡張パーティションとのみを持つ/bootMBR /
  2. 上に/dev/sda5LUKレベル1を配置し、/dev/mapper/level_0001
  3. 上に/dev/mapper/level_0001LUKレベル2を配置し、/dev/mapper/level_0002
  4. 上に/dev/mapper/level_0002LUKレベル3を配置し、/dev/mapper/level_0003
  5. そして、/dev/mapper/level_####私はLUKレベルを上に置き####+1、マッピングします/dev/mapper/level_####+1
  6. 上に/dev/mapper/level_3436LUKレベル3437を配置し、/dev/mapper/level_3436
  7. 上に/dev/mapper/level_3437Ext4をマウントして/boot
  8. /boot実行後にGrub2をインストールしますecho GRUB_CRYPTODISK_ENABLE=y >> /etc/default/grub
  9. LUKのレベルを1つだけ設定/dev/sda6します/

起動時に 3437 種類のパスワードの入力を求められますが、それぞれ 32 文字以上を使用します。

これは単なる概念実証であり、起動時間はひどいです。

しかし、同じことをすると/、すべてのシステムの読み取り/書き込み速度もひどくなりますが、少なくとも Linux は動作します。1 万レベル以上でテストしたところ、部分的に動作し、CPU での読み取り/書き込み速度は 10KiB/秒 (はい、本当にひどいです) まで低下し、起動には丸一日かかり、オンライン アクセス (サーフィンなど) を行うとディスク タイムアウトが原因でアプリケーションが頻繁にクラッシュする傾向があります。

したがって、3 または 4 レベルの LUK を配置することは許容されますが、10 レベルを配置することも許容されます。これは、CPU と、CPU とディスク、3D レンダリングと巨大なデータ スクランブルなど、使用する用途によって大きく異なります。

PD: また、LUK の各レベルで異なるハッシュ関数とアルゴリズムを使用することもできます。また、マウント時間を長くするために使用することもできます--iter-time=#(警告: Grub2 のプリブートでは、マウント時間が 3 倍または 4 倍長くなります。1 万程度の値を使用すると、プリブートで 30 秒近くかかります)。

関連情報