Luks

cryptsetup open for luks : –key-file 參數處理不當

  • August 22, 2018

一個相關的問題是:luksOpen 不會使用 keyfile 解密,除非提供了 –key-file 參數

然而,在 Ubuntu 仿生上cryptsetup 2.0.2,我確實遇到了以下問題:

當使用文件中包含的密碼打開 luks 加密設備時,它在直接呼叫中執行良好:

cat mypass.txt | sudo cryptsetup open --type luks /dev/sda1 enc-store

嘗試使用記錄在案的--key-file=-參數,這應該會導致相同的行為

cat mypass.txt | sudo cryptsetup open --type luks --key-file=- /dev/sda1 enc-store

只是產生延遲的消息

此密碼沒有可用的密鑰。

當嘗試使用cryptdisks_start enc-store依賴於--key-file=-選項的腳本時,這尤其是一個問題,該選項會三次生成上述消息

這使生活變得不那麼愉快。

我在這裡錯過了什麼嗎?

-謝謝!

這兩個命令之間存在差異,如下所述man cryptsetup

–key-file, -d name

從文件中讀取密碼。

如果給定的名稱是“-”,則將從標準輸入讀取密碼。在這種情況下,讀取不會在換行符處停止。

這意味著如果您使用 、 或複制/粘貼來生成文件echovi它很可能在末尾包含一個換行符。如果用作純標準輸入(無--key-file選項),它將忽略其最後的換行符,但當用作 的參數時--key-file,即使它是相同的標準輸入 ( --key-file=-),它也會將此換行符包含在密碼片語中:它變成一個新密碼片語是無效的。

要驗證這一點:

cat mypass.txt | tr -d '\r\n' | sudo cryptsetup open --type luks --key-file=- /dev/sda1 enc-store

應該按預期工作(以防我也刪除任何 CR)。

如果這是原因,只需刪除此換行符:例如

mv -i mypass.txt mypass.old && tr -d '\r\n' < mypass.old > mypass.txt

無論如何,您可能應該做的是從純隨機數生成新密碼,將其放入安全文件中,並將其包含在單獨的 LUKS 插槽中。

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