聊聊密碼、密鑰和熟悉度偏差
隨著密碼(無密碼身份驗證)的采用,誤解比比皆是。人們似乎普遍認為萬能鑰匙可能比密碼更方便但安全性更低。現(xiàn)實情況是,它們更安全、更方便——可能是網(wǎng)絡安全領域的首創(chuàng)。
我們大多數(shù)人沒有意識到無密碼身份驗證比密碼更安全,這是情有可原的。回想一下我接觸到的前幾個用例——電話操作系統(tǒng) (OS) 和銀行應用程序——其中隱含著強調(diào)便利性而不是安全性。
直到最近,我使用過的服務幾乎都沒有體現(xiàn)出其在更高安全性方面的優(yōu)勢。許多服務迫使客戶定期使用密碼重新進行身份驗證,以允許使用生物識別技術繼續(xù)登錄。這完全沒有抓住重點。
一種模糊的感覺是,萬能鑰匙的便利性比其安全性更重要,這是一回事。另一種印象是他們實際上不太安全。
Auth0最近進行的 LinkedIn 民意調(diào)查在一定程度上迫使我寫了這篇文章。
圖片
令人震驚的是,額外的安全優(yōu)勢在調(diào)查中僅排名第三。我的同事杰夫·克魯姆(Jeff Crume)在此處和此處錄制了兩個關于該主題的精彩視頻。
我采取了稍微不同的策略。在消除對新事物的擔憂之前,我打算先翻轉(zhuǎn)一下這個問題。
為什么我們過度(甚至盲目)相信安全現(xiàn)狀?
許多 IT 領導者和工程師都記得云采用的早期階段,當時謹慎的高管對大型云提供商的安全性和彈性承擔了更多的舉證責任,而不是對位于漏水的門衛(wèi)衣柜中的自己的服務器機柜承擔的舉證責任。
我最喜歡的做法是強調(diào)現(xiàn)有的事情自然是好的。
認知心理學和行為經(jīng)濟學領域在這里對一些相關的相互關聯(lián)和重疊的現(xiàn)象進行研究。這些領域的教父丹尼爾·卡尼曼(Daniel Kahneman)和阿莫斯·特沃斯基(Amos Tversky)提出了可用性啟發(fā)法,即最容易回憶的事物被錯誤地判斷為最真實的事物。
這種啟發(fā)式的一個密切衍生的副產(chǎn)品是熟悉度啟發(fā)式。與數(shù)量較多但非名人的男性名字相比,受試者看到的女性名字較少但更出名。女性名人名字的熟悉使他們相信她們在牌組中出現(xiàn)的頻率更高。
但最符合我們考慮的現(xiàn)象是羅伯特·扎洪克的單純曝光效應。他的作品既令人著迷又令人恐懼,提供了強有力的證據(jù),表明喜歡/不喜歡才是真正推動我們做出決定的因素,而認知在大多數(shù)時候扮演著令人驚訝的次要角色。反過來,這種效應可以通過重復暴露于刺激來消除。
更陰險的是,扎瓊克證明,低水平、不太明顯的刺激可以引起我們的注意,并讓我們在不知不覺中通過熟悉感喜歡某些東西。最近研究該譜系的學者似乎支持這樣一種說法,即通常很少有認知參與形成依戀或厭惡,熟悉和重復是形成依戀或厭惡的最大因素。
鑒于此,很容易看出是什么推動了經(jīng)常說的謊言變成事實的動力。這種傾向可能會導致我們錯誤地相信司空見慣的事物,以此作為我們對小說的懷疑的錯誤推論。
納西姆·塔勒布(Nassim Taleb)在他對林迪效應的討論中正確地指出,嘗試過的、經(jīng)過測試的和長期存在的東西通常都是有充分理由的,但這不應該讓我們忽視它們的弱點。
由于所有這些因素,即使服務傳達了其增強的安全優(yōu)勢,人們也可能不愿意使用密鑰。為此,讓我們比較密碼和密鑰的工作原理,并檢查哪些更安全。
密碼的工作原理
首先,讓我們快速了解一下密碼創(chuàng)建、存儲和身份驗證。
當用戶創(chuàng)建帳戶并定義密碼時,密碼將通過 sha256 等哈希算法輸入。這允許使用散列值來驗證密碼,而服務提供商無需存儲密碼或知道密碼是什么。
為了說明這一點,我們以密碼“MySecurePassword123”和“MysecurePassword123”為例(區(qū)別在于后者中“secure”的 s 是小寫的)。
看看它們的哈希值有多么不同:
- 我的安全密碼123 -> 1a5b06de7c27f493f0b246de9ab71dc35fc2171c38dc4c2b54f37e065a85e6f5
- MysecurePassword123 -> d3f05a7223df23f4295a7e3be9a6f64c1f9bf5b90068b8e4a1b5e0e0440bb594
讓我們繼續(xù)使用“MySecurePassword123”示例。為了確保具有相同密碼的兩個用戶不會得到相同的哈希值,首先會生成一串隨機字符并將其附加到開頭。這稱為“加鹽”。此隨機加鹽字符串將添加到用戶定義的密碼的開頭。
讓我們逐步完成該過程:
- 原始密碼:MySecurePassword123
- 生成鹽:\x8e\xd7T\xe7\xd6\x84\xbb\x18\x1a\xed4sBp\x06
- 與密碼結(jié)合:
\x8e\xd7T\xe7\xd6\x84\xbb\x18\x1a\xed4sBp\x06MySecurePassword123
(或 \x8e\xd7T\xe7\xd6\x84\xbb\x18\x1a\xed4sBp\x06 + MySecurePassword123)
- 哈希組合鹽+密碼:
35f3b09d68e4c0059d06d2b259c21dd67c5b33a520ff2b1980ad5dcafc764de1
最終的哈希組合以及注冊時生成的鹽值是最終存儲的內(nèi)容:
- 鹽:\x8e\xd7T\xe7\xd6\x84\xbb\x18\x1a\xed4sBp\x06
- 哈希組合鹽+密碼:
35f3b09d68e4c0059d06d2b259c21dd67c5b33a520ff2b1980ad5dcafc764de1
對于每次身份驗證,都會檢索保存的鹽字符串,將其添加到用戶輸入的密碼的開頭,通過相同的哈希算法進行輸入,并根據(jù)目錄中存儲的哈希值進行檢查。
這意味著輸入“MySecurePassword123”作為密碼的用戶每次都會將存儲的鹽值添加到開頭,并且始終以相同的散列組合值結(jié)束。
主要缺點是用戶每次仍然需要通過互聯(lián)網(wǎng)傳輸密碼。不僅如此,它們還可以通過暴力、撞庫 或字典攻擊等方式被黑客攻擊或破解。
現(xiàn)在,讓我們將其與密鑰進行比較。
密鑰如何工作
先說最重要的信息,密鑰身份驗證基于名為 Fast Identity Online 2 (FIDO2) 的協(xié)議。其主要的安全優(yōu)勢在于,它無需通過發(fā)送密碼來通過互聯(lián)網(wǎng)傳輸憑證。此外,由于它使用私鑰和公鑰,因此幾乎沒有任何東西可以破解或破解,正如我們將看到的。
讓我們看一下用戶通過創(chuàng)建密鑰然后使用它進行身份驗證來向 Google 注冊其設備進行生物識別身份驗證的典型流程。
圖片
- 用戶在支持 FIDO 的設備操作系統(tǒng)中注冊指紋、面部或 PIN,以供稍后在本地身份驗證期間使用。該生物識別或 PIN 憑證數(shù)據(jù)的哈希值存儲在設備上安全的分區(qū)硬件組件中,稱為安全元件或可信執(zhí)行環(huán)境。
- 作為創(chuàng)建 Google 登錄密鑰的一部分,支持 FIDO 的設備會生成一個私鑰和公鑰對,其概念與 HTTPS 通信中使用的密鑰對相似。公鑰被發(fā)送到正在注冊密鑰的服務。私鑰與生物識別憑據(jù)哈希保存在同一安全硬件警戒線中。
- 下次 Google 收到來自該用戶名的登錄請求時,它會向啟用 FIDO 的設備發(fā)送質(zhì)詢。
- 支持 FIDO 的設備通過掃描用戶的面部或指紋來在本地對用戶進行身份驗證。
- 如果生物識別匹配,啟用 FIDO 的設備會發(fā)送使用在步驟 2 中向 Google 注冊時創(chuàng)建的私鑰生成的數(shù)字簽名。如果簽名與公鑰進行驗證,則 Google 可以驗證此質(zhì)詢響應,因為只有該私鑰的持有者密鑰可以生成該簽名。
FIDO 結(jié)合使用了長期運行的生物識別分析和加密范式來保護網(wǎng)絡通信,以實現(xiàn)更高的安全性和便利性。通過互聯(lián)網(wǎng)傳輸?shù)乃袃?nèi)容都是公鑰、質(zhì)詢和數(shù)字簽名——確認設備和服務器之間身份驗證的加密技術。