Shell-Script

我的 linux 作業系統是如何實現如此快速的登錄過程的?

  • May 1, 2021

我編寫了這個 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. 這僅在您碰巧生成相同的鹽時才匹配,其機率可以忽略不計(您的電腦不會在您的一生中兩次生成相同的鹽)。但是您無需猜測鹽:它就在密碼雜湊中。

推薦閱讀:如何安全地散列密碼?

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