UNIX密碼方案和加密功能
最新版本的 Unix 將加密密碼儲存在不可公開訪問的文件中。此類文件稱為影子密碼文件。
在 UNIX 密碼方案中,如果只有作業系統和系統管理員有權訪問密碼文件。底層加密函式 Ek 的安全要求是什麼?
大多數人不會將我們所做的儲存密碼稱為加密,因為它是不可逆的。這是一個加密雜湊。
該圖還有一些特定的數字,它們對應於基於原始 unix DES 的系統,由於許多原因,沒有人應該再使用它們,但主要是 8 個字元的 ASCII 密碼。然而,校長保持不變。
如果影子文件中的數據從系統管理員那裡洩漏到有限的範圍內,我們也希望對系統進行保護。從我們儲存的內容中恢復純文字密碼應該是不可能的,任何試圖暴力破解密碼的人都應該一次需要這個密碼,而不是全部一起使用。暴力破解密碼應該是一個緩慢的過程。即使是失敗的適度密碼集合,預先計算彩虹表也不可行。我們仍然應該能夠驗證給定的純文字是否與儲存的記錄匹配,並且另一個密碼意外匹配的可能性極小。
我們使用一種特殊的加密雜湊函式並藉助隨機鹽來做到這一點。鹽(最初是 12 位現在更多)使得一起攻擊密碼和建構彩虹表變得非常困難。並且雜湊函式應該很慢,因此單個密碼暴力破解是不切實際的。
由於最初的實現,我們還添加了速度應該參數化,以便隨著電腦變得更快,我們可以增加計算難度。這在原始的 Unix 實現中是缺失的。
此外,我們希望支持長密碼,並且我們希望雜湊函式盡可能多地保留密碼中的熵(與臭名昭著的 LanMan 不同)。散列函式應該是原像和抗碰撞的(與 LanMan 不同)。有些人可能想要添加多種字元集支持,現在許多人使用這些支持來增加密碼熵。
密碼實際上沒有加密,而是經過雜湊處理。儲存密碼所需的屬性與加密的屬性完全不同。特別是,加密可以通過解密來逆轉,而不能從其儲存的形式中恢復密碼。
術語“ crypt ”得以保留是因為早期的密碼散列方法是基於加密原語的,而且密碼散列所需的屬性當時還沒有完全理解。我建議閱讀Robert Morris 和 Ken Thompson 1978 年的文章“密碼安全:案例歷史”,以了解歷史。他們已經確定了密碼散列的重要屬性,但“散列”這個詞還沒有確立。
密碼文件包含密碼的密碼雜湊。密碼散列是一種特殊類型的加密散列,它經過專門調整以提高反轉成本:它必須很慢(每次嘗試都會平等地攻擊合法伺服器和攻擊者,但攻擊者必須進行多次嘗試),並且多樣化鹽(迫使攻擊者獨立破解每個帳戶)。請參閱Thomas Pornin 的參考答案以獲得出色的解釋。