
我正在讀維基百科文章在影子文件上,它提到行的格式是這樣的:
$id$salt$hashed
所以,我的問題是,它是如何運作的?
我嘗試計算我自己擁有密碼的帳戶的雜湊值,因此我使用了以下命令:
sha512sum {鹽}+{my_clear_text_password}
但輸出與我自己看到的雜湊值不同。那麼它是怎樣工作的呢?我缺什麼?
答案1
有幾點需要考慮(您必須閱讀 Linux coreutils 和 glibc2 中的原始程式碼來確認)
sha512sum 的輸出似乎是可列印的十六進位表示法,而儲存在影子檔案中的輸出似乎是 base64,因此它們會有所不同。
我認為影子檔案中的 sha512sum 已多次通過哈希函數(
#define ROUNDS_DEFAULT 5000
),而 sha512sum 僅將「檔案」通過哈希一次。一個或兩個命令可能會添加填充來對齊可能不同的資料。
答案2
如果您想以與檔案儲存哈希相同的方式建立哈希/etc/shadow
,請使用以下命令:
mkpasswd --method=sha-512 --salt=YOUR_SALT PASSWORD
答案3
來自shadow(5)
手冊頁:
加密密碼
參考地穴(3) 有關如何解釋該字串的詳細資訊。
如果密碼欄位包含一些不是有效結果的字串地穴(3) 例如!或*,使用者將無法使用unix密碼登入(但使用者可以透過其他方式登入系統)。
此欄位可能為空,在這種情況下,不需要密碼即可作為指定的登入名稱進行身份驗證。但是,如果密碼欄位為空,某些讀取 /etc/shadow 檔案的應用程式可能會決定根本不允許任何存取。
以感嘆號開頭的密碼欄位表示密碼已鎖定。該行的其餘字元代表密碼被鎖定之前的密碼欄位。
來自crypt(3)
手冊頁:
crypt()是密碼加密函數。它基於數據加密標準演算法,其變化旨在(除其他外)阻止使用密鑰搜尋的硬體實現。
key 是使用者輸入的密碼。
salt 是從 [a–zA–Z0–9./] 集合中選擇的兩個字元的字串。該字串用於以 4096 種不同方式之一擾亂演算法。
透過取密鑰前 8 個字元中每個字元的最低 7 位,即可獲得 56 位元密鑰。這個56位元密鑰用於重複加密一個常數字串(通常是全零組成的字串)。傳回的值指向加密的密碼,一系列 13 個可列印 ASCII 字元(前兩個字元代表鹽本身)。傳回值指向靜態數據,其內容會被每次呼叫覆蓋。