密碼學/安全密碼
一個嚴肅的密碼系統不應該基於隱藏的演算法,而應該基於難以猜到的隱藏密碼(參見《基本設計原則》部分中的柯克霍夫法則)。如今,密碼非常重要,因為訪問網際網路上的大量入口網站,甚至你的電子郵件帳戶,都限制在那些能夠提供正確密碼的人。這通常涉及人類在選擇、記憶和使用密碼方面的參與。所有三個方面通常都是弱點:眾所周知,人類在選擇難以破解的密碼方面很糟糕,[1] 難以記住強密碼,並且在使用密碼時馬虎且過於信任。基於已知專案的密碼幾乎是不可抗拒的誘惑。同樣,我們能很好地記住簡單的(例如短的)或熟悉的(例如電話號碼)密碼,但大多數人無法可靠地記住更強的密碼;這會導致不安全性,因為需要簡單的方法來恢復密碼,甚至繞過密碼。這些方法普遍不安全。最後,人類很容易成為網路釣魚欺詐騙局、肩窺、幫助忘記密碼的朋友等的受害者。
但是,密碼必須保護訪問和訊息免受除人類攻擊者以外的攻擊。有很多基於機器的方式來攻擊密碼演算法和密碼系統,因此密碼也應該難以自動攻擊。為了防止一類重要的自動攻擊(暴力搜尋),密碼必須讓壞人難以猜測。 密碼應既長(單字元密碼很容易被猜到,很明顯)且理想情況下應該是隨機的——也就是說,沒有任何模式。足夠長的密碼將需要如此多的機器時間,以至於對於攻擊者來說是不切實際的。沒有模式的密碼不會為暴力搜尋提供任何捷徑。 這些考慮因素表明密碼應該具有一些屬性
- 長度足夠長,以防止暴力搜尋(截至 2010 年的常見建議至少為 8 個字元,如果不允許任何一類字元(例如,不允許使用小寫字母或不允許使用非字母數字字元等),則需要更長的密碼;如果密碼應該在未來保持不可破解(當計算機速度更快,暴力搜尋更有效時),則需要更長的密碼)
- 不包含姓名(寵物、朋友、親戚等)、任何字典中找不到的單詞、任何引語集中找不到的短語
- 不包含個人相關的數字或資訊(電話號碼、地址、生日)
密碼處理同時是密碼學中為數不多的已解決問題之一,*也是*最容易被誤解的問題之一。——Dan Kaminsky , "密碼被拒絕:密碼學視角"
任何將使用者密碼以明文形式儲存在某個檔案或資料庫中的 Web 伺服器,都是做錯了。[2][3][4][5][6]
出於顯而易見的原因,密碼通常不會以明文形式儲存,而是以摘要形式儲存。為了驗證使用者身份,使用者提供的密碼會被加鹽、雜湊,並與儲存的雜湊進行比較。[7]
PBKDF2 最初設計用於“從密碼生成加密金鑰”,但事實證明它很適合為安全儲存和身份驗證目的生成密碼摘要。[8][9]
2013 年,由於只有 3 種演算法可用於為安全儲存和身份驗證目的生成密碼摘要——PBKDF2、bcrypt 和 scrypt[6]——2013 年,密碼雜湊競賽 (PHC) 宣佈成立。[10][11][12][13]
密碼雜湊演算法與其他密碼雜湊演算法之間的主要區別在於,密碼雜湊演算法應該讓擁有大規模並行 GPU 和 FPGA 的攻擊者難以從儲存的密碼摘要中恢復密碼——即使密碼相對較弱。實現此目的最常見的方法是設計算法,使這種攻擊者恢復弱密碼所需的時間遠遠超過授權伺服器在獲得正確密碼後驗證密碼是否正確所需的時間。
密碼驗證實用程式 passwd 使用秘密密碼和非秘密鹽,使用 crypt (C) 庫生成密碼雜湊摘要,該庫反過來使用許多密碼雜湊演算法。
通常,單個陰影密碼檔案儲存由幾種不同的雜湊演算法生成的密碼雜湊摘要。使用的特定雜湊演算法可以透過結果雜湊文字中的唯一程式碼字首來識別,該字首遵循名為模組化密碼格式的偽標準。[14][15][16]
任何可用的 雜湊演算法 都遠遠優於簡單地將密碼儲存為明文;或儲存可快速解密以恢復原始密碼的“加密”密碼的令人羞愧的做法。[17]
不幸的是,實際上所有可用的雜湊演算法最初並不是為密碼雜湊而設計的。
雖然 SHA-2 和 SHA-3 的一些迭代對於計算檔案驗證摘要、訊息認證 程式碼或應用於長檔案的 數字簽名 已經足夠了,但當應用於短密碼時,即使迭代十幾次,它們也容易破解。實際上,截至 2013 年,所有可用的雜湊演算法要麼是
(a) 已經知道使用基於 GPU 的蠻力 密碼破解 工具相對容易破解(恢復弱密碼),或者 (b) 太新了,或者還沒有被充分研究,因此尚不清楚是否容易破解。[18]
例如,已經構建了能夠從任何 Windows XP LM 雜湊或 6 個可列印字元密碼中恢復有效密碼的系統,最長 6 分鐘即可完成。[19][20] 並且能夠從 NTLM 雜湊中恢復任何 8 個可列印字元密碼,最長 5.5 小時即可完成。[19]
例如,已經構建了能夠遍歷可能的單詞字典和常見的“駭客語”替換[20] 的系統,以便以 180 Ghashes/秒的速度恢復生成某個給定 MD5 雜湊的密碼[21],或者以 73 Mhashes/秒的速度恢復生成某個給定 DEC crypt() 摘要的密碼[22]。
一種名為“金鑰拉伸”的技術可以使金鑰搜尋攻擊的成本更高。[23]
- 華夏公益教科書 基本計算機安全/一般安全和密碼 和華夏公益教科書 計算機革命/安全/密碼 列出了一些對使用許多不同網站(每個網站都要求密碼)的人來說實用的提示。
- ↑ Burr、Dodson、Polk。“電子認證指南:美國國家標準與技術研究院建議”第 A.2.2 節“最小熵估計”:“經驗表明,相當一部分使用者會選擇非常容易猜到的密碼(“password”可能是最常見的密碼,只要允許)。 ”[1]
- ↑ http://plaintextoffenders.com/
- ↑ http://crypto.stackexchange.com/tags/passwords/info
- ↑ http://security.stackexchange.com/questions/17979/is-sending-password-to-user-email-secure
- ↑ http://security.stackexchange.com/tags/passwords/info
- ↑ a b Adam Bard。"儲存密碼的 3 種錯誤方法:以及 5 個正確的程式碼示例"。2013 年。
- ↑ "如何安全地雜湊密碼?"
- ↑ "NIST 是否真的推薦使用 PBKDF2 進行密碼雜湊?"
- ↑ "使用 PBKDF2 進行雜湊安全嗎?"
- ↑ http://crypto.stackexchange.com/questions/12795/why-do-i-need-to-add-the-original-salt-to-each-hash-iteration-of-a-password
- ↑ "提高已儲存密碼雜湊的安全級別"。引用:“一項新的密碼雜湊演算法公開競賽已經啟動,採用了之前的 AES、eSTREAM 和 SHA-3 競賽的模式。提交截止日期為 2014 年 1 月底。”
- ↑ "密碼雜湊競賽"
- ↑ "除了 bcrypt 和 scrypt,還有更現代的密碼雜湊方法嗎?"
- ↑ Simson Garfinkel、Alan Schwartz、Gene Spafford。"Practical Unix & Internet Security"。2003 年。“4.3.2.3 crypt16( )、DES 擴充套件和模組化密碼格式”部分。“模組化密碼格式 (MCF) 指定了一種可擴充套件的加密密碼格式方案。MCF 是最流行的加密密碼格式之一。”
- ↑ "模組化密碼格式:或,關於非標準的附註"。
- ↑ "二進位制模組化密碼格式"
- ↑ "純文字攻擊者"
- ↑ Dennis Fisher。"密碼學家旨在尋找新的密碼雜湊演算法"。2013 年。
- ↑ a b Paul Roberts。"更新:新的 25 GPU 怪物在幾秒鐘內吞噬密碼"。2012 年。
- ↑ a b Dan Goodin "駭客剖析:即使你的“複雜”密碼也很容易破解"。2013 年。
- ↑ Jeremi M. Gosney。"密碼破解 HPC"。2012 年。
- ↑ "John the Ripper 基準測試"。
- ↑ Arnold Reinhold。"HEKS:金鑰拉伸算法系列"。1999 年。
- 華夏公益教科書 Web 應用程式安全指南/密碼安全 列出了一些對開發需要密碼“儲存”、重置密碼等的網站和其他應用程式的人來說實用的提示。
- 華夏公益教科書 C Shell 指令碼/密碼 提到了一個“人類可讀的密碼生成器”(?)
