
由於記憶體限制,我無法在 Raspberry PI 上開啟我的 LUKS 分割區之一。我已經發現這種情況下的建議是在最慢的設備上重新建立分區,該設備將訪問它(在本例中為 Raspberry PI)。
但是,我擔心安全等級可能會降低(可能在計算能力較低的情況下,將使用較弱的金鑰)。
這是 cryptsetup 的文檔對此問題的描述:
注意:密碼迭代由 cryptsetup 根據 CPU 功率決定。在速度較慢的裝置上,該值可能低於您想要的值。我最近在 Raspberry Pi 上對此進行了基準測試,其迭代次數約為典型 PC 的 1/15。如果安全性至關重要,您可能想要增加迭代所花費的時間,但代價是稍後解鎖速度會變慢。對於樹莓派,使用
cryptsetup luksFormat -i 15000 <target device>
為您提供相當於普通 PC 的密碼迭代和主密鑰迭代的迭代次數和安全等級。如果有疑問,請檢查迭代計數
cryptsetup luksDump <target device>
並且透過使用不同的迭代時間再次建立容器來相應地調整迭代計數(「-i」後面的數字是以毫秒為單位的迭代時間),直到滿足您的要求。
現在,我不確定如果我遵循上述建議會發生什麼?
- 分割區是否像 PC 上一樣安全(如果迭代次數正確),只是慢一點?
- 如果速度較慢,只是解鎖速度較慢,還是以後的讀/寫速度與沒有額外迭代時一樣快? (如果是這樣,為什麼?是因為透過解鎖我們只解密了稍後將用於解密分區中內容的金鑰嗎?)
- 它仍然會比在快速 PC 上建立的分割區消耗更少的記憶體嗎? (換句話說:我想重新建立分區,以便能夠將其與 Raspberry PI 一起使用。使用預設值,它將可用,但安全性較低。隨著迭代次數的增加,它仍然可用嗎?或者又消耗太多內存?
答案1
首先請注意,您正在閱讀的 LUKS 文件是為 LUKS1 編寫的,現在有些過時了。您引用的所有內容(例如迭代計數)都是特定於 PBKDF2 演算法的,您的分區並沒有實際使用。
LUKS2 支援兩種將密碼轉換為金鑰的演算法:傳統的 PBKDF2 以及較新的 Argon2。後者是 LUKS 現在預設使用的,而且它是唯一具有(可調整的)最小所需記憶體量的。這與“迭代計數”不同。
但是,我擔心安全等級可能會降低(可能在計算能力較低的情況下,將使用較弱的金鑰)。
您不是在調整按鍵強度,而是在調整按鍵的強度保護。
您正在調整的參數旨在防止有人試圖攻擊您輸入的密碼短語,它們透過使密鑰派生過程極其緩慢來防止暴力攻擊(即連續嘗試各種密碼短語)。
然而,生成的密鑰本身始終同樣強大(它與任何其他 AES 密鑰一樣好),並且沒有人會費心直接攻擊它。
如果速度較慢,只是解鎖速度較慢,還是以後的讀/寫速度與沒有額外迭代時一樣快? (如果是這樣,為什麼?是因為透過解鎖我們只解密了稍後將用於解密分區中內容的金鑰嗎?)
每次您解鎖磁碟區時,LUKS 都會使用“金鑰派生函數”(KDF)將您的密碼轉換為加密金鑰,以便該過程更能抵抗暴力攻擊 - LUKS1 始終使用“PBKDF2”,它可以抵抗計算速度較慢(但不強加任何記憶體需求),而LUKS2 也支援“Argon2”,而“Argon2”需要一定程度的RAM。
密鑰派生僅在解鎖時發生一次;其餘的(實際資料加密)根本不需要涉及密碼。
(換句話說:我想重新建立分區,以便能夠將其與 Raspberry PI 一起使用。使用預設值,它將可用,但安全性較低。隨著迭代次數的增加,它仍然可用嗎?或者又消耗太多內存?
您根本不需要重新建立分割區,因為即使是密碼短語派生的金鑰也不會直接用於加密您的資料:它只加密掌握密鑰儲存在 LUKS 磁碟區標頭中。
這就是為什麼可以快速更改密碼而無需重新加密整個磁碟(甚至擁有多個密碼)的原因,同樣 LUKS 允許您輕鬆更改 KDF 參數。
如果預設的 Argon2 參數使用了太多內存,只需告訴 LUKS:
cryptsetup luksConvertKey --pbkdf "argon2i" --pbkdf-memory <num_kilobytes> <device>
如果您根本無法使用 Argon2,您仍然可以告訴 LUKS 使用 PBKDF2 代替:
cryptsetup luksConvertKey --pbkdf "pbkdf2" --iter-time <milliseconds> <device>
您可以直接指定 PBKDF2 的數量,而不是毫秒(與設備相關)迭代你想要的(無論你在什麼設備上執行,總是給出相同的結果)——PC 上的預設值約為 100 萬:
cryptsetup luksConvertKey --pbkdf "pbkdf2" --pbkdf-force-iterations <count> <target>
luksChangeKey
(更改密碼時)接受相同的選項,事實上,它們似乎需要每次更改密碼時都要指定。