題 如何安全地生成令人難忘的密碼? [關閉]


TL; DR: 考慮到“令人難忘的”密碼是總密碼空間的一個子集這一事實,令人難忘的密碼生成器有多安全?與隨機密碼相比,難忘密碼的熵有多大?

每當我需要新的密碼時,我都會使用一些工具來生成這些密碼,這些密碼更令人難忘,但我一直想知道這實際上有多安全。

使用 xkcd隨機數發生器 可能很糟糕, cat /dev/random 可能相當不錯,但生成令人難忘的密碼似乎有點棘手。

每當程序生成一個令人難忘的密碼時,它只使用可用的總密碼空間的子集,並且我不清楚這個空間有多大。當然,在這種情況下,長密碼應該有所幫助,但如果程序的“難忘”部分太可預測,那麼最終密碼不是很好。

我知道的一些工具:

  • pwgen的  - 似乎沒問題,但密碼不太令人難忘
  • Mac密碼助手  - 生成令人難忘的密碼,但我不清楚這是如何工作的。

更新: 感謝您對理論密碼熵和可記憶性的深刻理解,但我也在尋找生成這些密碼的實用方面。

如何在實踐中選擇這樣的密碼,具體來說:pwgen或Mac密碼助手(MPA)的熵是多少?例如:如果MPA有一個非常小的單詞數據庫並可預測地生成密碼怎麼辦?也許這對我來說有點迂腐,但我很好奇是否有人可以對此有所了解。

更新II: 雖然這個問題在密碼生成方面收到了大量答案,但沒有人會質疑這些問題的安全性。問題仍然存在,等待答案。


4
2017-08-31 09:08


起源


等待, getRandomNumber 不好? - ta.speot.is
不幸的是,大多數網站都有長度限制來阻止這項技術,但比“密碼”更好的是“密碼”,例如“oldmotherhubbard”或“ahottimeintheoldtowntonight”。這些是更多要輸入的字符,但它們更自然地從手指流動並且更容易記住。 - Daniel R Hicks


答案:


忘記編寫密碼的任何“聰明方案”。 黑客知道所有的伎倆 (leetspeak,通過分析被盜密碼列表,連接單詞,添加數字等)。 擴展信息 安全現在第366集“密碼破解更新:'聰明'的死亡” (或閱讀它 抄本)。

我建議你使用一個好的密碼生成器 LastPass的 (也在Security Now第256集中進行了詳細討論)為您生成隨機密碼。人類隨意都很糟糕(或者 生成它 要么 檢測它

如果你真的想要令人難忘的密碼,你可能想要使用 密碼乾草堆技術 作為難以記住隨機組合的替代方案。在這裡,您將重複的字符串(123 123 123)附加到包含最大熵(D0g!)的短字符串。

無論你選擇哪種方法, 使您的密碼至少12個字符。所有 現在可以在13個小時內破解8個字符的密碼在自己動手的機器上花費12000美元(主要用於GPU)


2
2017-09-20 07:55



謝謝,這是我一直在尋找的東西。你的答案似乎是“你不能”。 - Tim


 令人難忘的密碼生成器有多安全?

我很容易對此提出個人和定性意見,我認為最好尋求一些定量答案,以某種方式客觀地衡量安全程度。

看到 維基百科

考慮到書面英語的熵小於每字符1.1位,[2]   密碼短語可能相對較弱。 NIST估計23日   字符密碼短語“IamtheCapitanofthePina4”包含45   位的實力。這裡使用的等式是:[3]

4位(第1個字符)   + 14位(字符2-8)+ 18位(字符9-20)+ 3位(字符21-23)+ 6位(大寫,小寫和   字母數字)= 45位

使用此指南,實現80位   NIST推薦用於高安全性(非軍事)的力量,a   假設一個組合,密碼長度需要58個字符   包括大寫和字母數字。還有辯論的餘地   關於這個等式的適用性,取決於數量   分配的熵比特數。例如,中的字符   五個字母的單詞每個包含2.3位熵,這意味著   只需要一個35個字符的密碼來實現80位   強度。[4]

...

密碼與密碼不同。密碼通常為6到10個字符。   這些密碼可能適用於各種應用程序(如果頻繁的話)   如果使用適當的政策選擇,則更改,如果未找到   字典,如果足夠隨機,和/或系統阻止   在線猜測等)如:

  • 登錄到計算機系統
  • 在交互式設置中協商密鑰(例如使用   密碼驗證密鑰協議)
  • 啟用智能卡或PIN   ATM卡(例如密碼數據(希望)不能的地方)   提取)

但密碼通常不能安全地用作密鑰   暴露的獨立安全系統(例如,加密系統)   數據以使攻擊者能夠進行脫機密碼猜測。[引用   密碼短語通常更強,而且明顯更好   在這些情況下的選擇。首先,他們通常是(並且應該是)   更長的20到30個字符或更多是典型的 - 製作一些種類   蠻力攻擊完全不切實際。第二,如果選好,   它們不會出現在任何短語或引用字典中,所以這樣   字典攻擊幾乎是不可能的。第三,他們可以   結構化比密碼更容易記憶而不是   寫下來,減少硬拷貝被盜的風險。[需要引證]。   但是,如果密碼短語沒有得到適當的保護   驗證者和明文密碼被揭示其使用是否定的   比其他密碼更好。出於這個原因,建議   密碼短語不能在不同或獨特的網站上重複使用   服務。

此教區的傑夫阿特伍德也已出版 他對這個問題的看法最後總結

密碼短語顯然比傳統的“安全”密碼更有用。他們也很可能更安全。即使是天真的最壞情況下的密碼,例如“這是我的密碼”也不是那麼可以破解,至少與他們的單詞等價物相比,例如“密碼”。

對用戶來說更容易,對黑客來說更難:這是完全沒問題的。我在我使用的所有系統上都採用了密碼短語。


更新:

由於有幾個人引用XKCD,XKCD明確提供了圖像嵌入的URL ...

XKCD


9
2017-08-31 09:23



密碼短語顯然比傳統的“安全”密碼更有用。我同意這一點。 - Sam Liao
我不同意簡單地用菊花鏈接單詞的邏輯 存在於字典中 將使您的密碼更好...假設您的詞典中有10 ^ 6個單詞,並且鏈4在一起:產生可能的(10 ^ 6)^ 4個組合,或10 ^ 24個組合。現在,取一個12個字符的密碼(假設有效字符是這些數字的所有字母,數字和符號,允許26 + 26 + 10 + 10 = 72個字符可供選擇),我們有72 ^ 12~ = 2 x 10 ^ 22組合,或比將4個英文單詞鏈接在一起少約50倍。從安全角度來看,他們是 等於! - Breakthrough
此外,如果您將密碼長度增加到14-15個字符,則需要多個數量級 更好 而不是菊花鏈在一起 - 而且這忽略了我甚至沒有包括你可以用來製作密碼的所有可能的ASCII字符這一事實(在那裡 最小 10多個),這將進一步增加我之前評論中的組合數量。 - Breakthrough


有兩種方法可以破解密碼 - 暴力破解和字典攻擊(還有第三種 - 那就是抓住哈希密碼並解決這個問題,但現在讓我們忽略它)。長度通常會使暴力攻擊變得更加困難,儘管專用的硬件破解程序或基於GPU的破解程序會顯著加快速度。

字典攻擊依賴於使用單詞的人。然而,2個單詞會使其變得更難(因為他們必須迭代2個單詞組合,以及3個單詞......替換也增加了你需要經歷的可能性)。

我個人使用長多字密碼,每個網站都有修改和不同的替換。我還經常記住密碼作為電話號碼,使用8位數字,並成對記住它們,然後將它們轉換回來。人們記得電話號碼,很容易隱藏起來。配對有一個 個人規則集 它變得更容易。

我注意到大多數大密碼黑客都發生在服務器端,擁有安全密碼對那裡沒有幫助 - 擁有一個站點唯一的密碼會。


2
2017-08-31 09:19



當然,還有一個 xkcd漫畫 也用於密碼短語。還有一個 使用此方法的工作生成器實現。 - Bob


真的有必要嗎? 所有 密碼難忘嗎?我建議最多只有兩個不同的令人難忘的長密碼短語:一個用於主密鑰到一些跨平台密碼保持工具,一個用於主要電子郵件帳戶,現在作為另一個主密鑰,大多數服務發送詳細信息和恢復信件。

只記下兩個密碼短語,你可以使用一些冗長的密碼短語,保證他們幾乎不可能暴力破解,並且由於目標網站允許的真正隨機化,其餘的密碼將會很強大。


1
2017-08-31 10:35



這聽起來像是一個很好的密碼策略,但我的問題更多的是旨在首先生成這些密碼。 - Tim
@Tim,有了這個政策,你可以負擔得起幾個令人難忘的密碼,通過長度獲得力量,而不用擔心你會忘記它們。 - Oleg V. Volkov
我會擔心系統之間的傳輸或密碼,但我喜歡這個想法。 - TafT


我個人認為你應該運用自己的邏輯創建令人難忘的密碼。假設您可以將兩個單詞加上數字加在一起。然後根據你所知道的事情或者如果滿足某些條件,你可以做出相應的變化。

附:如果它讓你難忘,那並不意味著它很容易破解。


0
2017-08-31 09:37





我做了一個名為的免費工具 Pafwert 它將隨機性與多種技術相結合,製作出易於記憶的強大密碼。並非它生成的每個密碼都是超強的,但大多數都是,這是激發你的創造力的好方法。

以下是它生成的一些密碼的一些示例以及選擇它們的原因:

www.cold-as-ice.gov(使用熟悉的模式,俚語) TittyCupcakes3(使用令人反感的詞語讓它更難忘) 5barde * barde5(使用重複) 很多蜥蜴肉...... 2(頭韻) D:\另一個\ 48 \ hours.txt(熟悉的模式,熟悉的電影名稱) 八個志願者狀態=(押韻)

總的來說,它使用了大約150種模式,每種模式都有很多種。你甚至可以自己調整模式,有一種相當強大的模式語言語法。


0
2017-08-31 23:18



謝謝,這看起來像一個有用的工具,但我有一些困難信任沒有源的預編譯密碼生成器;) - Tim


對於組織而言,密碼策略既是好主意也是壞主意。任何生成密碼的系統都會產生比真正隨機生成的密碼更小的集合。為了幫助像XKCD故事系統這樣的事情能夠很好地工作,因為他們避免了有關用戶的個人物品,這些物品可能是已知的或被發現的。

作為一個例子,建議用戶使用他們的名字,用田鼠代替數字(a = 1,b = 2等)將產生一些看起來隨機的普通人,但很容易打破。加入另一個詞,如職稱,部門或母親的婚前姓名將增加到abstration,但你仍然基本上有一些事情,應該採取一個disctionary攻擊。現在你已經增加了字典攻擊時間,從(西方?)文化中的專有名詞+帶有元音字母的專有名詞增加了字典攻擊時間。

ThomasSoftwareEngineer成為Th4m1sS4ftw1r22g3n22r
看起來隨機但不是隨機的軟件程序。當然不是那些知道用戶的人是名為Thomas的軟件工程師。

如果你在上面添加一些人們可以合併的商店,那麼一些令人難忘但又模糊不清的東西可能是:  - 童年記憶   - 秘密粉碎   - 復仇女神   - 第一輛車   - 車牌號碼   - 他們喜歡的書中的敘事 這可能會創建一些更長的東西,對於更長的密碼幾乎總是更好。 托馬斯 有一個 阿斯特拉 作為他的第一輛車,他把它開進了一輛車  在一個 。  

ThomasAstrafordriver
再說那隻是4個字典單詞,但它開始令人難忘。我可以通過包括我買車的那一年或我打破它來增加熵。
ThomasAstra2005fordriver2006
我可以通過選擇一些用作空間的符號來進一步提高熵,_和 - 眾所周知,但它們總比沒有好,可以選擇允許的任何東西。
托馬斯#雅特#2005#的##驅動2006年
現在這是令人難忘的,有很高的熵,應該花一點時間來猜測。與所有好的密碼一樣,我需要一些時間來學習快速輸入密碼,但如果您可以輕鬆輸入密碼,那麼它可能不是一個好密碼。

現在我不建議你在任何瀏覽器中使用或輸入你真正關心的密碼,這樣你可能想要使用類似的密碼,而不是實際的密碼......   https://www.grc.com/haystack.htm 上面的網站提供了一個很好的看到密碼的搜索空間的大小。它不會測量強度,但它會讓您知道長度很重要,因為使用大寫字母,數字和符號:

密碼搜索空間大小
ThomasSoftwareEngineer 5.76 x 10 ^ 37
Th4m1sS4ftw1r22g3n22r 4.44 x 10 ^ 37
ThomasAstrafordriver 2.13 x 10 ^ 34
ThomasAstra2005fordriver2006 1.56 x 10 ^ 50
Thomas#Astra#2005#for#driver#2006 1.86 x 10 ^ 65

我聽到的其他建議是你拿用戶密碼並通過一個本地的,安全的,功能強大的服務器運行它們,並使用密碼破解工具進行字典和暴力攻擊。如果您可以在一周內破解密碼,那麼其他人也可以。當你破解它時,密碼過期並要求用戶製作一個新的密碼,可能會給他們點擊。

- 請回答這個問題或“比真正的隨機安全多少”--- 我把它作為評論,但它更適合作為答案的補充。從上面的例子開始:

將這些多字密碼與真正的隨機字符密碼進行比較的安全性取決於您希望如何處理字典單詞。如果我們使用熵計算,如下所述: [http://blog.shay.co/password-entropy][1]

H = Llog2N其中L是密碼的長度,N是字母表的大小

我們可以用兩種方式做事。如果我們選擇將每個字典單詞視為字母表中的一個符號,那麼ThomasSoftwareEngineer只有L = 3但N是什麼?谷歌和OED說英語有大約20萬字,所以我們得到:    H = 3 * log [base2] * 200,000 = 52.83 這與9-alpha-numeric char密碼類似。 如果你允許用數字代替一些元音,你的字母大小加倍到大約400,000,所以它變成了     H = 3 * log [base2] * 400,000 = 55.83 XKCD漫畫使用4個字典單詞而不是3個,這些單詞從52.8的熵中獲取3個單詞(無數字)到:     H = 4 * log [base2] * 200,000 = 70.44 70.4與12個字符的字母數字密碼大約相同的熵(H = 12 * log [base2] * 62 = 71.45)所以問題是你能記住12個隨機數字和字母以及你能記住4個非相關的英文單詞?顯然,更長的密碼(更多的單詞)總是會更好,你應該避免使用簡短的單詞(因為4 * 3個字母的單詞只有12個字母字符,這是68.4的熵)。

所以這裡是每種密碼風格的熵:     數字密碼(N = 10)     熵(H)長度(L)字母尺寸(N)     9.965784285 3 10     13.28771238 4 10     16.60964047 5 10

Case Insensitive Alphabetic Passwords (N = 24)
13.7548875  3   24
18.33985    4   24
22.9248125  5   24

Case Sensitive Alphabetic Passwords (N = 52)
17.10131915 3   52
22.80175887 4   52
28.50219859 5   52

Case Sensitive Alpha-Numeric Passwords (N = 62) 
17.86258893 3   62
23.81678524 4   62
29.77098155 5   62

Case Sensitive Alpha-Numeric Passwords with symbols on a QWERTY keyboard (N = 94)   
19.66376656 3   94
26.21835541 4   94
32.77294426 5   94

Passwords formed using a random selection of 200,000 words from the English Language (N=200000)     
52.82892142 3   200000
70.4385619  4   200000
88.04820237 5   200000

As above but assuming you know 20,000 words (N=20,000)
42.86313714 3   20000
57.15084952 4   20000
71.4385619  5   20000

注意:20,000個單詞是受過良好教育的英語用戶會知道的估計數字,所以它可能是一個更好的選擇,可以猜測人們會選擇什麼。它仍然顯示3個常用字使得密碼比QWERTY鍵盤中的5-char完全隨機密碼更好。


0
2017-12-21 11:59



謝謝。雖然您列出的搜索空間大小對於真正的隨機密碼是正確的,但最後這些是字典單詞,而且熵要少得多。我的問題是:少了多少? - Tim
我想這取決於你想如何處理字典單詞。如果我們使用熵計算,如下所述: blog.shay.co/password-entropy  “H = Llog2N,其中L是密碼的長度,N是字母表的大小”我們可以用兩種方式做事。如果我們選擇將每個字典單詞視為字母表中的一個符號,那麼ThomasSoftwareEngineer只有L = 3但N是什麼?谷歌和OED說英語中大約有200,000個單詞,所以我們得到H = 3 * log [base2] * 200,000 = 52.83這與9-alpha-numeric char密碼類似。 - TafT
如果你允許用數字代替一些元音,你的字母大小加倍到大約400,000,所以它變成了 H=3*log[base2]*200,000=55.83 - TafT