Linux 密碼哈希中的鹽值是什麼?它為什麼重要?

最後更新: 04/12/2025
作者: 艾薩克
  • 鹽值是一個隨機字串,在對密碼進行雜湊運算之前添加到密碼中,以確保每個用戶產生唯一的雜湊值。
  • Linux 它將雜湊值、鹽值和演算法儲存在 /etc/shadow 中,從而增強了對字典攻擊和彩虹表的安全性。
  • 良好的實踐要求使用長、隨機且唯一的鹽值,以及強大的雜湊演算法。 數據庫 保護得很好。
  • 密碼加鹽應該融入更廣泛的安全策略中,包括強密碼、多因素身份驗證和密碼管理器。

Linux 中密碼哈希的鹽值

如果您使用 GNU/Linux 系統,或者只是關心您的帳戶安全,您可能聽說過… 密碼哈希中的鹽值這是一個經常被提及但往往只理解了一半的概念:它聽起來很技術性,但實際上它決定了一個系統是容易被破解還是更能抵抗攻擊。

簡而言之,鹽是一種 使密碼雜湊值不可預測的關鍵要素它的工作原理是在應用哈希演算法之前添加隨機數據,這樣即使兩個用戶擁有相同的密碼,儲存在資料庫中的結果也會不同。接下來,我們將詳細探討Linux中的具體實現、它與/etc/shadow文件的關係、mkpasswd等工具以及現代安全最佳實踐,這些內容構成了一個龐大的世界。

密碼雜湊中的鹽值究竟是什麼?

密碼哈希中鹽的定義

在密碼學中, (鹽)是一種 隨機字串 在應用雜湊函數之前,會將一個附加到使用者密碼上的參數加入密碼末端。這樣做的目的是即使多個用戶的明文密碼相同,也能確保產生的雜湊值是唯一的。

當使用者建立或更改密碼時,系統會產生一個 隨機鹽它將密碼與雜湊值(根據方案的不同,可以放在密碼之前、之後或採用特定格式)結合,並對結合後的資訊應用雜湊演算法,例如: SHA-256 o SHA-512密碼並非儲存在資料庫中,而是儲存在… (密碼 + 鹽值)的雜湊值而且在大多數方案中,鹽值本身也與雜湊值一起儲存。

這項技術使得許多 基於預先計算哈希值的攻擊技術類似於彩虹表,它大大增加了大規模字典攻擊和暴力破解攻擊的難度。攻擊者無法再利用多個使用者共用一個密碼的漏洞,因為每個使用者都會產生不同的雜湊值。

重要的是要明白,鹽本身並不是一個秘密: 它不是密碼,也不是私鑰。它的作用是為雜湊過程引入隨機性和唯一性。安全性仍然取決於使用 強密碼 y 合適的哈希演算法最好使用專為密碼設計的加密演算法(例如 bcrypt、scrypt、Argon2),儘管許多經典的 Linux 系統使用 SHA-256 或 SHA-512 的變體。

密碼加鹽的工作原理詳解

密碼加鹽的工作原理

鹽漬過程可以概括為一系列相當簡單的步驟,但是… 對安全性產生巨大影響:

  如何使用 Process Explorer 和 VirusTotal 偵測惡意進程

首先,當使用者註冊或更改密碼時,系統會產生一個 獨特且隨機的鹽 對於該憑證,鹽值通常足夠長(例如,16 個位元組或更多),並且由加密安全的隨機數產生器產生。

接下來,將使用者選擇的密碼與該鹽值結合,形成一個 中間鏈這種組合可以很簡單,例如將鹽值和密碼連接起來,也可以採用由雜湊方案定義的更複雜的格式。重要的是,每個用戶最終都會得到不同的組合。

然後, 單向哈希演算法最終結果是一個看似隨機的字串,即哈希值,其長度固定,並將與鹽值一起儲存在資料庫中。在現代系統中,人們正在尋找能夠產生雜湊值的演算法。 漫長而複雜的出口這擴大了搜索空間,使暴力破解攻擊的成本更高。

最後,當使用者登入時,系統再次檢索輸入的密碼。 相關鹽 它從資料庫中重複相同的組合和雜湊過程,並將結果與儲存的雜湊值進行比較。如果匹配,則無需知道明文即可確認密碼正確。

這種機制確保即使資料庫洩露,攻擊者也只能看到部分資料。 每個哈希值都帶有各自的鹽值雖然阻止攻擊並非易事,但與一組可比較的雜湊值相比,計算成本會顯著增加。

在密碼雜湊中使用鹽的優勢

在密碼中使用鹽的優點

使用鹽醃的主要原因是: 增強儲存密碼的安全性 它能抵禦多種攻擊。但值得詳細介紹一下它的具體優點。

首先,加鹽可以提供 對字典攻擊的抵抗如果沒有鹽值,攻擊者可以預先準備一份包含大量常用密碼及其雜湊值的列表,然後將其與竊取的資料庫進行比對。而使用每個使用者唯一的鹽值後,這些預先計算好的雜湊值就失效了,因為每個密碼和鹽值的組合都會產生不同的雜湊值。

其次,使用鹽會降低其有效性。 彩虹桌這些資料庫只是預先計算好的常用密碼雜湊值,旨在加快密碼恢復速度。然而,由於雜湊值取決於特定的鹽值,這些為無鹽雜湊值設計的雜湊表要么毫無用處,要么效率極低。

另一個明顯的優點是它改善了 外洩事件中的隱私保護即使入侵者獲得了包含雜湊值和鹽值的用戶表存取權限,他們也無法快速識別哪些用戶與其他用戶使用了相同的密碼,更無法輕易發動大規模攻擊。每個帳戶都需要單獨處理,這在大規模攻擊中通常是不切實際的。

  警惕新型 WhatsApp 詐騙:Bizum 和視訊通話竊取帳戶和資金

此外,加鹽還會增加複雜性。 暴力攻擊攻擊者無法一次測試候選密碼與所有雜湊值的匹配度,而是被迫考慮每個使用者的加鹽值,這大大增加了總工作量。如果再結合使用速度較慢且參數可控的雜湊演算法(例如 bcrypt 或 Argon2),攻擊成本還會進一步上升。

最後,加鹽加密是一種能夠很好地適應技術發展的技術。即使電腦設備不斷改進,新的攻擊手法層出不窮, 強大的哈希演算法和獨特的鹽值相結合 它保持了較高且可擴展的難度水平:您可以增加鹽的長度、加強演算法、增加計算成本等等。

Linux 如何實作密碼加鹽(/etc/shadow)

在 Linux 系統和其他 *NIX 變體中,使用者密碼不會儲存在 /etc/passwd 檔案中,而是儲存在檔案中。 / etc /陰影該文件只有超級用戶才能訪問,其中存儲了密碼哈希值以及其他信息,從中可以清楚地看到鹽值和哈希演算法的使用。

/etc/shadow 檔案中的各行結構類似:

使用者:$id$sal$hash:附加欄位…

符號 $ 將各個部分分開。用戶名之後的第一部分錶示… 演算法類型 已使用。例如: $ 1 $ 通常代表MD5, $ 5 $ SHA-256 和 $ 6 $ SHA-512 是現代發行版中最常用的演算法,因為它比基於 DES 或 MD5 的舊方案提供了更高的安全性。

演算法標識符出現之後 薩爾然後是 結果哈希所有這些都在同一個字段內進行。驗證密碼時,系統會讀取該識別碼和鹽值,應用與輸入密碼對應的演算法,並將計算的雜湊值與儲存的雜湊值進行比較。

如果您想快速檢查哪些使用者使用了加密密碼以及他們使用的是什麼演算法,可以使用類似這樣的命令。 grep '\$' /etc/shadow在此上下文中,美元符號 ($) 用於定位現代格式中包含井號 (#) 的行。這個符號必須使用反斜線進行轉義,因為在正規表示式中它表示「行尾」。

沒有密碼或已鎖定的帳戶通常會在該欄位中顯示類似這樣的值。 ! o * 它不是用美元符號表示的雜湊值,而是表明它無法使用標準密碼進行身份驗證。這種結構清楚地說明了一點: Linux 將加鹽機制整合到其格式中 存儲 密碼 本機。

密碼哈希和加鹽的區別

明確區分兩個有時會被混淆的概念非常重要: 散列 y 密碼哈希是利用單向演算法將密碼轉換成無法辨識的值的過程。伺服器無需知道原始密碼,只需驗證使用者輸入的雜湊值是否正確即可。

  什麼是 WINUX:擁有自由靈魂和 Windows 外觀的 Linux

問題在於,如果兩個密碼相同, 未加鹽的哈希值也相同。這使得攻擊者能夠透過密碼比較和分組用戶,或使用預先計算好的表格。此外,如果哈希演算法速度快且旨在保證資料完整性(例如簡單的 SHA-256),則更容易受到大規模暴力破解攻擊。

加鹽正是為了解決這個弱點:它關乎… 在密碼中加入隨機數據 在進行哈希處理之前。結果是,即使兩個使用者都選擇“casa”作為密碼,資料庫中的雜湊值也會完全不同,因為例如,一個使用者的預雜湊字串可能是“casa+7Ko#”,而另一個使用者的預雜湊字串可能是“casa8p?M”。

因此,哈希和加鹽並非相互競爭,而是相互補充。哈希提供… 單向性 並且易於驗證;鹽提供 獨特性和抵禦大規模攻擊的韌性安全的密碼儲存實現方案結合了這兩種技術,理想情況下使用為此目的設計的演算法,並且成本可配置。

在 Linux 中使用 mkpasswd 指令取得 salt 值

在 GNU/Linux 環境和其他系統中 Unix的嘗試用鹽醃製的一個非常實用的方法是使用工具。 mkpasswd此命令用於生成 加密密碼 安全可靠,通常整合到使用者建立流程、管理腳本等。

mkpasswd 的基本語法可讓您指定要加密的密碼以及一系列選項,例如使用選項指定演算法類型(例如,des、md5、sha-256、sha-512)。 -m在現代系統中,明智的做法是選擇 SHA-512 至少,或如果分佈支持,則採用更穩健的方案。

在醃製鹽漬食品方面,一個特別有趣的選擇是 -S,這允許 加鹽 在加密密碼之前,請先檢查密碼。如果未手動指定,mkpasswd 可能會產生一個 每次執行中都使用隨機鹽即使使用相同的登入密碼,每次產生的雜湊值也不同。

這一點很容易驗證:如果你使用 mkpasswd 工具,採用 SHA-512 演算法和隨機鹽值,多次加密“password123”,你會得到完全不同的雜湊。但是,如果你使用 -S 參數傳遞相同的鹽值,雜湊值將始終相同,因為密碼和鹽值的組合不會改變。

多虧了這個工具,一切都變得非常簡單。 準備加鹽加密的密碼 無需編寫任何程序,即可為設定檔新增內容、手動管理使用者或測試加鹽行為。

什麼是數位衛生?
相關文章:
數位衛生:保障您網路生活的安全、健康與秩序