Linux

試圖理解 LUKS 加密

  • January 15, 2015

我決定用 LUKS+LVM 加密我的根分區。

我的 ThinkPad 設置:

  • 三星 830 128GB SSD
  • 750GB 硬碟
  • Core 2 Duo 2,5 GHz P9500
  • 8GB 記憶體

但是我讀的越多,我對以下兩個主題的了解就越少:

1a。密碼

cryptsetup由於FAQ中的引用,我打算使用SHA1而不是2/512(正如一些人建議的那樣) :

5.20 LUKS 壞了!它使用 SHA-1!

不它不是。SHA-1(在學術上)因發現衝突而被破壞,但不適用於在密鑰派生函式中使用它。並且該碰撞漏洞僅供非迭代使用。你需要逐字逐句的雜湊值。

這基本上意味著,如果您已經有一個 slot-key,並且您已將 PBKDF2 迭代計數設置為 1(通常 > 10'000),您可以(也許)派生一個不同的密碼,為您提供相同的 slot-鑰匙。但是如果你有槽鑰匙,你已經可以解鎖鑰匙槽並獲得萬能鑰匙,打破一切。所以基本上,這個 SHA-1 漏洞允許你在已經打開的 LUKS 容器中打開它。

這裡真正的問題是那些不了解加密並聲稱事情被破壞的人只是因為使用了一些已經被破壞用於特定的不同用途的機制。該機制的使用方式非常重要。一個用途被破壞的散列對於其他用途來說是完全安全的,就是這樣。

我讀為“除了 SHA-1 之外沒有任何意義”。但後來有人告訴我,這不完全是那樣。所以我不再知道該怎麼想。

1b。

此外,一旦磁碟解鎖並登錄系統,我找不到任何資訊是否密碼對磁碟讀/寫/尋軌性能有任何影響。

那麼密碼的複雜性是否僅影響密碼輸入階段的“性能”,或者在系統的正常使用過程中?

2.算法

這幾天我一直在讀這個,但我讀得越多,我就越困惑。我讀到的所有內容都說 AES 是最快的,而 Serpent 是最慢的。但不是根據我的筆記型電腦:

$ cryptsetup benchmark
Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       344926 iterations per second
PBKDF2-sha256     198593 iterations per second
PBKDF2-sha512     129007 iterations per second
PBKDF2-ripemd160  271933 iterations per second
PBKDF2-whirlpool  134295 iterations per second
#  Algorithm | Key |  Encryption |  Decryption
    aes-cbc   128b   149.8 MiB/s   147.9 MiB/s
serpent-cbc   128b    51.0 MiB/s   196.4 MiB/s
twofish-cbc   128b   127.6 MiB/s   152.5 MiB/s
    aes-cbc   256b   114.3 MiB/s   113.8 MiB/s
serpent-cbc   256b    51.2 MiB/s   198.9 MiB/s
twofish-cbc   256b   129.8 MiB/s   167.5 MiB/s
    aes-xts   256b   153.3 MiB/s   150.6 MiB/s
serpent-xts   256b   176.4 MiB/s   184.1 MiB/s
twofish-xts   256b   160.8 MiB/s   159.8 MiB/s
    aes-xts   512b   115.4 MiB/s   112.1 MiB/s
serpent-xts   512b   178.6 MiB/s   184.2 MiB/s
twofish-xts   512b   160.7 MiB/s   158.9 MiB/s

因此,Serpent 不僅是最快的,而且最重要的是,它是最快的,鍵也最複雜。

不應該反過來嗎?我讀錯了嗎,還是什麼?

1a - 這真的沒那麼重要。無論您將哪個雜湊用於密鑰派生函式,LUKS 都會確保它的計算成本很高。它會簡單地循環它,直到 1 秒的實際時間過去。

1b - 密鑰派生方法對性能沒有影響。密碼本身可以。cryptsetup benchmark盡可能多地向您展示。

2 - 如果您的 CPU 足夠現代以支持 AES-NI 指令(AES 的硬體加速),則 AES 是最快的。如果您現在使用 serpent,您可能無法使用下一台筆記型電腦的 AES-NI。

# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1      1165084 iterations per second
PBKDF2-sha256     781353 iterations per second
PBKDF2-sha512     588426 iterations per second
PBKDF2-ripemd160  726160 iterations per second
PBKDF2-whirlpool  261882 iterations per second
#  Algorithm | Key |  Encryption |  Decryption
    aes-cbc   128b   692.9 MiB/s  3091.3 MiB/s
serpent-cbc   128b    94.6 MiB/s   308.6 MiB/s
twofish-cbc   128b   195.2 MiB/s   378.7 MiB/s
    aes-cbc   256b   519.5 MiB/s  2374.0 MiB/s
serpent-cbc   256b    96.5 MiB/s   311.3 MiB/s
twofish-cbc   256b   197.9 MiB/s   378.0 MiB/s
    aes-xts   256b  2630.6 MiB/s  2714.8 MiB/s
serpent-xts   256b   310.4 MiB/s   303.8 MiB/s
twofish-xts   256b   367.4 MiB/s   376.6 MiB/s
    aes-xts   512b  2048.6 MiB/s  2076.1 MiB/s
serpent-xts   512b   317.0 MiB/s   304.2 MiB/s
twofish-xts   512b   368.7 MiB/s   377.0 MiB/s

請記住,此基準測試不使用儲存,因此您應該使用您實際要使用的任何儲存和文件系統來驗證這些結果。

引用自:https://unix.stackexchange.com/questions/107975