原文地址:https://advancedweb.hu/what-is-the-optimal-password-length/原文作者: Tamás Sallai
1. 引言
如何選擇一個密碼,最好的保護您,防止數據洩漏。
2. 密碼強度
密碼強度當然是越多越好,使用現有的密碼管理軟體,可以快速自動生成和填充任意長度的密碼。但是,密碼應該是多少位是最佳的,有沒有一個合理的下限作為經驗法則
下面是一個典型的密碼生成器界面:
注意:它的密碼長度可以設置8-100位字符
3. 數據洩露前,一個好的密碼是你所擁有的一切
但要理解什麼是安全密碼,讓我們看看另一邊發生了什麼!
當您創建帳戶時,您正在註冊的服務將以多種現有密碼加密形式之一存儲密碼。密碼直接將其放入資料庫,或者使用現有算法對其進行散列。
一些最常用的哈希算法包括 :
MD5SHA-1BcryptScryptArgon2存儲散列數據而不是密碼本身的好處是,密碼不在資料庫中。你只需要知道哪些散列數據是你的,而不必知道它具體的值是多少。當您登錄時,提供的密碼用相同的算法進行散列,如果結果與存儲的值匹配,那麼您就已經證明了您知道密碼。而在資料庫被攻破的情況下,密碼是不可恢復的。
3.1 密碼破解
密碼破解是攻擊者試圖逆轉哈希函數並從哈希恢復密碼。使用一個好的哈希算法,不可能恢復密碼,但是嘗試各種輸入以查看它們是否產生相同的結果是不可能的。如果要找到這樣的匹配,則需要從散列中恢復密碼。
選擇一個好的算法在這裡很重要。SHA-1 是為速度而設計的,速度有助於裂解過程。Bcrypt、Scrypt 和 Argon2被設計為以各種方式使裂化儘可能慢的高成本,特別是在專用硬體上,差異是巨大的。
僅考慮速度,無法破解的 SHA-1 散列密碼是這樣的:
0OVTrv62y2dLJahXjd4FVg81
。
使用正確配置的 Argon2 散列的安全密碼:
Pa$$w0Rd1992
。
正如您所看到的,選擇正確的哈希算法可以使一個弱密碼成為不可破解的密碼。
請記住,這僅取決於您要註冊的服務的實現方式。 而且,您無法知道實現在哪一部分算法上。 您可以問,但是他們甚至可能不會回應或說他們「認真對待安全性」等類似話術。
您是否相信公司會認真對待密碼的安全性,使用良好的哈希算法而不是很糟糕的算法。查看被破壞的資料庫列表,尤其是所使用的哈希。 他們中的許多人仍然使用MD5,大多數使用SHA-1,還有一些使用bcrypt。 有些甚至以純文本形式存儲密碼。
這裡存在一種偏見,因為我們只知道被攻破的資料庫使用了什麼哈希,而且使用弱算法的公司很可能也未能保護它們的基礎設施。但是看看這個列表,我敢肯定您會發現一些您不會想到的熟悉的名稱。僅僅因為一家公司看起來規模大、聲譽好,並不意味著他們會做正確的事情。
3.2 選擇密碼
作為一個用戶,下面的操作對您可能產生多大的影響?
使用純文本密碼,您什麼也做不了。如果資料庫消失了,您的密碼強度並不重要。
使用正確配置的算法,您的密碼的安全性也沒有多大關係,不考慮
12345
和
asdf
這樣的小情況。
但在這兩者之間,尤其是SHA-1,你的選擇很重要。哈希函數通常不適合密碼,但如果使用安全密碼,就可以彌補算法的不足。
這取決於配置。這些散列有不同的移動部分,影響它們的強度,但當正確配置時,它們可以阻止試圖破解。
底線:如果你使用的是強密碼,那麼你比弱密碼受到更多的攻擊保護。由於您不知道密碼存儲的安全性如何,所以您無法確定對於給定的服務什麼是足夠安全的。所以,假設最壞的情況,設置高強度的密碼。
3.3 一個密碼是不夠的
我們需要考慮是否使用密碼管理器並為每個站點生成唯一的密碼。在實際情況中,當一個站點服務被攻破,使用您的已知電子郵箱和密碼在其他站點嘗試攻擊時, 多個密碼會使您不會受到密碼重用的攻擊。 密碼重用是非常常見的問題之一,同時也是一個巨大的威脅。
為每個站點生成一個新密碼可以避免這種情況。一個資料庫被盜,黑客知道資料庫內一切內容,為什麼還要保護密碼?
原因是,當您不知道資料庫已被攻破,而繼續使用該服務時。在這種情況下,黑客可以訪問您未來在該站點上的所有活動。你可能以後再加一張信用卡,他們還是知道的。強密碼意味著他們無法登錄您的憑證,並且不能影響您未來的活動。
4. 如何用熵來度量密碼強度
密碼強度都與熵有關,熵是一種表示密碼隨機性的數值。因為我們處理的是大數,所以與其說有1,099,511,627,776(2的40次方)個不同的變量,倒不如說它有40位的熵。而密碼破解的關鍵在於密碼變體的數量,因為密碼變體越多,嘗試所有可能性所需的時間就越多。
對於由密碼管理器生成的隨機字符,熵很容易計算:log2(<不同字符數> ^ <長度>)。
長度是微不足道的,但是不同字符的數量是多少?這取決於密碼的字符類型。
例如,長度為10的密碼(包含大小寫字母的隨機混合)具有
log2(52 ^ 10)= 57
位熵。
上面的數學表達式可以簡化為使用
log2(n ^ m) = m * log2(n)
表達式來查看給定類的單個字符對總體強度的影響。這樣就得到了:
<長度> * log2(<不同字符的數量>)
,其中第二部分是每個字符的熵。上表,使用這個公式
要計算密碼的強度,請考慮其組成的字符類型,從表中獲取熵數並乘以長度。 上面的示例(長度為10的小寫字母和大寫字母)產生5.7 * 10 = 57位。 但是,如果將長度增加到14,則熵會跳到79.8位。 但是,如果將長度保持為10,但添加數字和特殊字符,則總熵將為64位。
上面的表達式提供了一種快速計算密碼熵的方法,但是有一個警告。它只適用於字符彼此獨立的情況,這隻適用於生成的密碼。
密碼
H8QavhV2gu
滿足此條件,因此具有57位的熵。
但是像
Pa$$word11
這樣更容易記住的字符,雖然長度相同,字符類更多,但是熵卻少得多。 破解者僅對字典中的單詞進行一些轉換就可以嘗試所有組合。
因此,任何基於字符類型的熵與長度相乘的計算都只對生成的密碼有效。
5. 熵的準則
密碼的熵越大,破解就越困難,但熵為多少才足夠呢?一般的看法是,~16個字符對於密碼來說應該足夠了,根據是否包含特殊字符,密碼的輸出在95 - 102位之間。但是門檻是什麼呢?80位?60位?或者即使使用102位也太低了 ?
還有一種算法在速度上類似於糟糕的密碼散列算法,但研究得更好:AES加密。
它用於加密各種政府和軍事機構中的所有秘密,因此,其強度得到了充分考慮。 而且它的速度很快,因此,如果無法破解具有特定熵的密鑰,那麼AES對於具有錯誤(但不會破損)哈希值的密碼將非常有用。
NIST(國家標準和技術協會)是一個實體,它定義了在可預見的未來長度多少是合適的。2019 - 2030年及以後的AES-128,他們的建議是128位。
另一個專門針對關鍵密碼長度的建議是至少使用112位的熵 。
對於聯邦政府來說,此時應用加密保護(例如加密或籤名數據)需要至少112位的安全強度。
要使用小寫字母和大寫字母以及數字來獲得128位的熵,需要長度為22(5.95 * 22 = 131位)的熵。 #
6. 其他的考慮
6.1 為什麼沒有特殊字符?
我傾向於不使用特殊字符,因為它們打破了單詞的邊界。這意味著選擇密碼需要單擊3次而不是2次,如果我不小心沒有將部分密碼粘貼到輸入欄位,就會產生錯誤。
只用字符和數字,雙擊總是會選擇整個密碼。
6.2 如果有一個最大長度呢?
有些網站規定了密碼的最大長度,以防止您使用22個字符。在某些情況下,它會達到極端的長度,比如需要恰好5位數字。
在這種情況下,使用最大可用長度,您可以做的事情很少。
還有一些關於該服務如何處理密碼和限制密碼長度的建議,顯然是針對他們的。NIST說 : 至少要有64個字符的長度以支持密碼短語的使用。 鼓勵用戶使用自己喜歡的任何字符(包括空格)儘可能長地存儲所記住的秘密,從而有助於記憶。
記住,該服務可以存儲密碼的方式從糟糕到超級,他們不會告訴你他們是如何做到的?較短的密碼長度給人的印象是,他們的強度會很差。
結論
強大的密碼是需要的,即使你不重用它們。強度是用熵來衡量的,你應該以128 bits 為目標。長度為22的小寫+大寫+數字密碼組合可以查過128 bits 。這種密碼將在數據洩漏時保護您。