Shell-Script
我的 linux 作業系統是如何實現如此快速的登錄過程的?
我編寫了這個 shell 腳本來測試 sha-516 雜湊密碼字元串:
myhash='$6$nxIRLUXhRQlj$t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU.' #Which is created by mkpasswd for test i=0 while [[ 1 -eq 1 ]] do testpass=$(mkpasswd -m sha-512 "test") i=$[ $i + 1 ] if [[ "$testpass" == "$myhash" ]]; then echo -e "found\n" break else echo -e "$myhash /= $testpass :-> $i Testing....\n" fi done
執行216107 個數字循環測試後,我從未找到匹配項。但是如果我的 linux OS(Ubuntu)系統如此快速地匹配登錄憑據。我的問題是為什麼我不能這麼快得到相同的結果?
密碼雜湊(就像您輸入的內容
myhash
)包含一些元數據,指示使用哪個雜湊函式以及使用哪些參數,例如成本、鹽和雜湊函式的輸出。在現代 Unix 密碼雜湊格式中,各部分由$
:
6
表示Unix 迭代 SHA-512 方法(與PBKDF2相似但不相同的設計)。- 沒有參數,所以成本因子是預設值。
nxIRLUXhRQlj
是鹽。t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU.
是預期的輸出。每次執行時
mkpasswd -m sha-512
,它都會創建一個帶有隨機鹽的密碼雜湊。因此,此命令的每次執行都會產生不同的輸出。當您輸入密碼時,系統會計算
iterated_sha512(default_cost, "nxIRLUXhRQlj", typed_password)
並檢查輸出是否為"t29nGt1moX3KcuFZmRwUjdiS9pcLWpqKhAY0Y0bp2pqs3fPrnVAXKKbLfyZcvkkcwcbr2Abc8sBZBXI9UaguU."
.你的程序正在做的是不同的:你生成一個隨機鹽,然後將它加上密碼散列函式的輸出與
myhash
. 這僅在您碰巧生成相同的鹽時才匹配,其機率可以忽略不計(您的電腦不會在您的一生中兩次生成相同的鹽)。但是您無需猜測鹽:它就在密碼雜湊中。推薦閱讀:如何安全地散列密碼?