使用磁碟加密進行預啟動身份驗證在技術上是如何運作的?

使用磁碟加密進行預啟動身份驗證在技術上是如何運作的?

我正在尋找一種解決方案來完全加密我的雙啟動 SSD 驅動器(它仍然是新的且空的,我想在放置任何內容之前設定加密)。

雖然網路上關於這個問題有很多混亂,但看起來 TrueCrypt 可能能夠做到這一點,儘管我可能需要在額外的啟動磁碟上使用它的啟動載入程式。據我所知,一些 Linux 工具(包括一些修改過的 GRUB2)也可能能夠做到這一點。

但是,我有疑問,我讀過的文章沒有真正深入到足以回答一個基本問題:如果整個磁碟都被加密,並且某些預啟動工具要求用戶提供密鑰來解密它,不是嗎?工具必須在要啟動的作業系統下運作?換句話說,是否有工具可以讓作業系統不知道它看到的磁碟實際上是加密的?

如果沒有這樣的工具,這是否意味著解密工具必須以某種方式在啟動時將解密訊息傳遞給作業系統?我可以想像這很難跨平台實現。

答案1

如果整個磁碟都被加密,而某些預啟動工具要求使用者提供金鑰來解密它,那麼這是否意味著該工具必須在要啟動的作業系統下運行?

是的,差不多。基於硬體的全盤加密這樣做:加密完全由裝置(硬碟/快閃記憶體)或可能在通往實體裝置的鏈上的控制器中處理,並且對作業系統不「可見」。
有了這個,作業系統的 I/O 操作就像處理普通的、未加密的設備一樣,神奇的事情發生在硬體(和/或韌體 - 無論如何「低於」作業系統)中。

如果沒有這樣的工具,這是否意味著解密工具必須以某種方式在啟動時將解密訊息傳遞給作業系統?

如果加密無法在作業系統「下方」完成(如上所述,或者可能使用虛擬化技術,但隨後您可能會執行兩個(或更多)作業系統),那麼確實必須有某種形式的資訊傳輸。是的,這意味著跨作業系統很困難。
如果您沒有硬體/韌體幫助,您還需要未加密引導程式代碼(至少是引導程式)。

維基百科磁碟加密文章有更多相關內容。

答案2

如果您有支援加密磁碟機的硬體(或更準確地說固件,即 BIOS),那麼您可以使用韌體加密整個磁碟。這樣做有缺點:周圍支援磁碟加密的電腦並不多,而且它會將您與特定韌體聯繫起來(或者更糟的是,如果您的電腦有TPM 並且加密金鑰位於TPM 中,它會將您與特定韌體連結)此特定主機板,除非您已備份儲存加密金鑰)。

如果作業系統進行了加密,那麼磁碟上必須有一小塊未加密的空間,用於儲存作業系統的初始部分。 Linux 的常見配置是擁有一個單獨的明文/boot分割區,並對每個其他分割區進行加密。 「全磁碟加密」有點用詞不當:它通常用來表示“全磁碟區加密”,其中磁碟區通常是一個分割區而不是磁碟。全碟加密是指您不會單獨加密每個檔案(或至少一個目錄樹)。

Linux下全碟加密的標準工具是加密。它在所有主要發行版中均可用,並整合在許多安裝程式中。

答案3

是的,使用 Grub2/boot分割區可以由 LUK 加密:

  • /boot/作為LUK 加密分割區上的資料夾
  • /boot在分割區上加密的 LUK 上
  • 依此類推,由於Linux允許您使用任何非排序區塊清單作為設備,並且可以作為根(initramfs為此類非排序區塊清單配置非常複雜,但可以做到,這是一種偏執的方式)

/boot我還測試了具有多個層的偏執加密方式(何時是分割區):

  1. /dev/sda5作為磁碟上唯一的邏輯分割區(MBR 僅具有兩個擴充分割區/boot/
  2. /dev/sda5我把 LUK 等級 1 放在上面,映射到/dev/mapper/level_0001
  3. /dev/mapper/level_0001我把 LUK 等級 2 放在上面,映射到/dev/mapper/level_0002
  4. /dev/mapper/level_0002我把 LUK 等級 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_3437放了一個 Ext4,安裝為/boot
  8. /boot運行後我安裝了Grub2echo GRUB_CRYPTODISK_ENABLE=y >> /etc/default/grub
  9. 我只/dev/sda6放了/一層 LUK

啟動時它會詢問我 3437 個不同的密碼,每個密碼都超過 32 個字元。

這只是一個概念驗證,啟動時間很糟糕。

但如果我做同樣的事情,/那麼所有系統的讀/寫速度也很糟糕,但至少 Linux 可以工作。我也測試過一萬多關;它部分工作,我的CPU 上的讀取/寫入速度下降到10KiB/s(是的,真的很糟糕),啟動需要一整天,並且在進行線上存取(衝浪等)時,由於磁碟超時,應用程式往往會崩潰。

因此,放置三級或四級 LUK 是可以接受的,也可以是十級,這在很大程度上取決於您的 CPU 以及您使用 CPU 與 DISK、3D 渲染與巨大資料擾亂等的情況。

PD:您還可以在每個層級的 LUK 上使用不同的雜湊函數和演算法,並且還可以使用--iter-time=#來增加掛載時間(警告:在Grub2 預啟動時,掛載時間會增加三到四倍,使用大約一萬個值會導致預啟動時接近三十秒)。

相關內容