Productivity Tools (生產力工具)
密碼熵與密碼學亂數生成:安全基礎
ToolHubJD Team
瀏覽次數:5
密碼安全從根本上取決於熵,熵是隨機性和不可預測性的量化指標。熵以位元(bits)為單位衡量,其中 n 位元的熵代表 2^n 種可能的狀態。一個具有 128 位元熵的密碼,平均需要 2^127 次嘗試才能透過暴力破解來破解,這使得透過窮舉搜索來破解它在計算上不可行。
熵的計算取決於字元集的大小和密碼的長度。公式 H = log2(N^L) 表示熵,其中 N 是字元集大小,L 是密碼長度。一個使用 94 個可列印 ASCII 字元的 16 字元密碼約提供 104 位元的熵,這超過了 NIST 對隨機生成密碼的建議。然而,這種計算假設了真正的隨機字元選擇;人類選擇的密碼由於可預測的模式和字典詞,通常會表現出低得多的熵。
密碼學安全亂數產生器 (CSRNG) 是密碼產生安全性的關鍵組成部分。CSRNG 利用熵源(例如 Unix 系統上的 `/dev/urandom` 或 Windows 上的 `CryptGenRandom`)來產生計算上與真隨機數無法區分的序列。 這些產生器會維護內部狀態,該狀態會透過硬體來源的熵進行更新,確保即使知道先前的輸出,也無法預測輸出序列。
JavaScript 中的 `Math.random()` 或 C 語言中的 `rand()` 等弱亂數產生器不適用於安全性要求嚴苛的應用程式。 這些產生器採用具有有限內部狀態的確定性演算法,使得攻擊者只要知道演算法和初始種子,就能預測其輸出。 資安研究人員已證明,針對使用弱亂數產生器進行加密的系統,存在實際可行的攻擊方式。
熵源的品質和可用性各不相同。硬體亂數產生器利用熱雜訊或量子效應等物理現象來產生真正的隨機位元。 軟體熵源則匯總系統事件,例如磁碟 I/O 計時、網路封包計時和使用者輸入計時來累積熵。 軟體熵源的品質取決於系統活動;活動有限的系統可能會緩慢累積熵。
熵與計算機安全之間的關係源於資訊理論。 攻擊者試圖破解密碼時,必須搜尋所有可能的密碼組合。 擁有 n 位元熵的密碼,平均需要 2^(n-1) 次嘗試才能破解。 現代計算能力使專用硬體每秒能執行約 10^12 次運算,因此 128 位元的熵可以抵禦暴力破解攻擊長達數世紀。
當密碼來源的熵值較低時,就會發生熵值降級。字典攻擊利用人類從有限詞彙中選擇密碼的事實,從而降低有效熵值。基於個人資訊(例如生日或姓名)的密碼,其熵值受限於個人資訊空間的大小。具有可預測模式(例如「password123」)的密碼,其熵值受限於模式變化的數量。
密碼熵值衡量密碼的隨機性和不可預測性,熵值越高表示密碼越難被猜測或破解。 字典攻擊是一種暴力破解密碼的方式,攻擊者會使用常用詞彙、短語和常見密碼列表來嘗試破解密碼。 這些「字典詞彙」不僅限於字典中的單字,還可以包括寵物名字、電影角色和人名,駭客也會利用變形,例如在字母後面加上數字和特殊字元。
人類在隨機選擇密碼方面表現不佳,傾向於使用可預測的模式,這導致自行創建的密碼的實際熵值通常遠低於理論值。 例如,許多人會使用簡單、可預測的模式或在多個平台重複使用密碼,這使得他們容易受到各種網路攻擊。 常見的弱密碼包括「123456」、「password」和「qwerty」等。 此外,使用個人資訊(例如生日、電話號碼或姓名)作為密碼,也因為這些資訊容易透過其他管道取得,而使其容易被破解。 具有可預測模式的密碼,例如鍵盤上的連續按鍵(如「asdf」或「qwerty」),也容易被猜到。
為了提高密碼的熵值,建議增加密碼長度並使用多種字元類型,例如大小寫字母、數字和特殊符號。 密碼長度比複雜度更重要,一個較長的密碼即使只包含小寫字母,在數學上也可能比一個較短但複雜的密碼更安全。 建議使用密碼產生器來確保密碼的真正隨機性。
密碼管理器利用加密安全偽亂數生成器(CSRNG)來生成具有最大熵的密碼。 這些工具通常允許使用者指定字元集和密碼長度,從而精確控制熵。 使用者應配置密碼生成器以包含所有字元類型(大寫字母、小寫字母、數字、符號),以最大化熵。
密碼破解的計算成本取決於用於儲存密碼的雜湊函數。現代密碼雜湊函數,例如 bcrypt、scrypt 和 Argon2,被設計成故意緩慢,即使知道雜湊函數,也需要大量的計算資源。 這些函數增加了測試每個候選密碼所需的時間,從而有效地減少了單位時間內可以測試的候選數量。
Salt 值透過確保相同的密碼雜湊成不同的值來防止彩虹表攻擊。 Salt 應使用 CSRNG 隨機生成,並且每個密碼都應是唯一的。 Salt 和密碼的組合使用慢速雜湊函數進行雜湊處理,使得預先計算密碼雜湊變得不可行。
密碼強度計量器試圖量化密碼熵並向使用者傳達安全屬性。然而,許多密碼強度計量器使用啟發式方法,未能準確反映真實的熵值。 相比於基於模式匹配的計量器,計算字元類型和長度的計量器能提供更佳的估計。 密碼熵是衡量密碼難以被破解程度的指標,計算時會考慮密碼的長度和所用字元的變化。 字元變化包括使用大小寫字母、數字和符號。
一個強密碼通常至少包含 12-16 個字元,並結合大小寫字母、數字和特殊符號,同時避免使用字典單詞和常見模式,不包含個人資訊,並且每個帳戶都是唯一的。 密碼熵達到 60 位元以上被認為是強密碼。
密碼式身份驗證的實際安全性不僅取決於密碼熵,還取決於身份驗證協議的安全性、儲存系統的安全性以及服務供應商的安全實踐。 即使是完美生成的密碼,也可能透過網路釣魚攻擊、鍵盤側錄程式或防護不佳的密碼儲存系統遭入侵而洩露。