Ubuntuのフルディスク暗号化が内部でどのように機能するのか興味があります。以下に例を示します。
次の文字列をすべてのディスクのコンテンツと見なします。
hello world
ある種の暗号化方法を適用すると、次のようになります。
(この例では、シフトが+1のCaesar暗号を使用しました。例:A→B; B→C ...)
ifmmp xpsme
私が理解しているように、コンピューターの電源をオフにすると、ドライブのコンテンツは上記の文字列になります。しかし、Ubuntuをオンに戻すと、Ubuntuが正常に起動するために、そのコンテンツがhello world
に戻る必要があります。
私が実際に得られないのは、現実の世界ではディスクのコンテンツがはるかに多く、暗号化アルゴリズムがより複雑であり、コンピューターがすべてを完全に暗号化/復号化するのが難しいことですほんの数秒で起動します(起動またはシャットダウンに時間がかかりません)。
これはどのように可能ですか?
このページには楽しいものがあります AES(Advanced Encryption Standard)のスティック図ガイド わかりやすく見えますが、50以上の画像のように見えますが、次の2つです。
そして
ここですべてを複製するのは多すぎますが、オールインワンイメージが必要な場合は、次のようになります。
または、より簡潔な説明が http://www.password-depot.com/know-how/blowfish_and_rijndael.htm にあります。
Rijndael暗号化方式は、バイトのxor操作の置換、変更、および実行に基づいています。メソッドは次のようになります。
- Rijndaelは128ビットキーから、それぞれ128ビットの10個のキーを生成します。
- これらのキーは4x4配列に配置されます。
- プレーンテキストも4x4配列(各128ビット)に分割されます。
- 128ビットのプレーンテキストアイテムはそれぞれ10ラウンドで処理されます(128ビットキーの場合は10ラウンド、192の場合は12ラウンド、256の場合は14ラウンド)。
- 10回目のラウンドの後、コードが生成されます。
- 各単一バイトはSボックスで置換され、GF(2 8)の逆数に置き換えられます。
- 次に、ビット単位のモジュロ2行列が適用され、63でXOR演算が続きます。
- 行列の行は周期的にソートされます。
- 行列乗算の列は、GF(2 8)で交換されます。
- 各ラウンドのサブキーは、XOR操作の対象となります。
Rijndaelが異なるサブキーで複数回実行されると、この暗号化方式のセキュリティレベルが向上します。
IbelieveLUKS(AESのデフォルト設定)でパーティションを暗号化することで動作し、LVM(/
、swapなど)でボリュームをいくつか配置します。パスフレーズを入力した後、ブート時にそれらを復号化してマウントします。また、パスフレーズを要求するのに十分なブートを行う通常の(暗号化されていない)ブートパーティションがあります。
the_simple_computerのUbuntuでのフルディスク暗号化ガイド(2015年6月28日更新) は、デフォルトのインストーラーの暗号化がどのように機能するかについて述べており、デュアルブートは機能しません(少なくとも、ボックス)、ドライブはMBRを使用する必要があるため、「コンピューターにUEFIがある場合、ディストリビューションはレガシーBIOSモードでインストールされるため、セキュアブートを使用できません」および「 は、システムRAM(多くの場合、不要)と同じスワップサイズを提供し、使用する暗号化の種類を選択することはできません。 "
cryptsetup benchmark
を実行すると、テストが実行され、暗号化だけでどれだけ速くなるかが示されます(現在の)デフォルトのaes-xts行に注意してください:
# Algorithm | Key | Encryption | Decryption
aes-xts 256b 150.0 MiB/s 145.0 MiB/s
ハードドライブの平均読み取り速度は80〜160 MB/sになる可能性があるため、通常の読み取りよりも長くなることはありません。また、読み取りを待っている間に読み取り直後のセクターが既に復号化されている可能性があります詳細を読むためのハードドライブ。
SSDはおそらくより高速で、おそらく200-550MB/sになる可能性があるため、気づくかもしれません。しかし、ランダム読み取りは遅くなる可能性があり、使用後にSSDの速度が低下する可能性があることを読みました(ドライブが完全にいっぱいになり、セクターの「消去」を開始する必要がある場合)。
最初にすべてを解読する必要はありません。暗号化(LUKS)は、データのブロックで機能し、任意のブロックをランダムに復号化でき、ドライブの暗号化されたデータとファイルシステムが見るものの間のレイヤーのように機能します。
ファイルシステムがデータのブロックを見たい場合、LUKSは最初にそのブロックを解読し、次に解読されたデータをファイルシステムに渡します。最初にドライブがデータブロックを読み取るのを待って(暗号化を使用しない場合と同じように)、データの単一ブロック(または数ブロック)の復号化に余分な遅延のみがあります-ドライブが読み取ることができるよりも復号化が速い場合、ドライブがデータの次のブロックを読み取る前に復号化couldを終了できます。
したがって、通常のファイルシステムがファイル全体を読み込むためにドライブ全体を読み込む必要がないように、暗号化が追加された場合、ドライブ全体を読み込む必要もありませんし、ロット遅い。
ハードドライブ上のデータは常に暗号化されているため、シャットダウン時にキーを忘れる以外に何もする必要はありません。
これは少し単純化されますが、暗号化されたファイルシステム上のファイルにアクセスするプロセスを試してみます。
たとえば、暗号化されたファイルシステムの先頭にファイルテーブルがあるとします。 /foo.bar
を読みたいとしましょう。そのため、最初に行うことは、パーティションの先頭を読み取り、それを復号化し、目的のファイルを探すことです。ファイルが0x10000000バイトから始まると言ってみましょう。そのため、読み取るには、その場所のディスクから読み取りを開始し、解読します。同様に、書き込むために、新しいコンテンツを暗号化して、その新しい場所に書き込むことができます。
うまくいけば、これがプロセスの混乱を解消するのに役立つでしょう。
現代のコンピューターは毎秒何十億もの操作を実行できるため、暗号化と復号化が高速であることは驚くことではありません。
これは、コンピューターの処理速度を直感的にランク付けする方法です。
理解すべきもう1つの重要な点は、システムを起動するためにオペレーティングシステムがハードディスク全体を復号化する必要がないことです。むしろ、オペレーティングシステムは、必要なハードディスクの部分のみをその場で復号化する方法を知っており、書き込みについても同じことが言えます。
直感的には、ボトルネックがディスクであると考えているため、フルディスク暗号化がパフォーマンスに大きな影響を与えないことは驚くことではありません。
もちろん、これらの直感は必ずしも現実と一致するとは限りません。たとえば、実際には、フルディスク暗号化が顕著なパフォーマンスヒットを引き起こした場合がありました。しかし、通常、これらは開発者が最適化の開発を数ラウンド行った後に解決されます。