随着密码(无密码身份验证)的采用,误解比比皆是。人们似乎普遍认为万能钥匙可能比密码更方便但安全性更低。现实情况是,它们更安全、更方便——可能是网络安全领域的首创。
我们大多数人没有意识到无密码身份验证比密码更安全,这是情有可原的。回想一下我接触到的前几个用例——电话操作系统 (OS) 和银行应用程序——其中隐含着强调便利性而不是安全性。
直到最近,我使用过的服务几乎都没有体现出其在更高安全性方面的优势。许多服务迫使客户定期使用密码重新进行身份验证,以允许使用生物识别技术继续登录。这完全没有抓住重点。
一种模糊的感觉是,万能钥匙的便利性比其安全性更重要,这是一回事。另一种印象是他们实际上不太安全。
Auth0最近进行的 LinkedIn 民意调查在一定程度上迫使我写了这篇文章。
图片
令人震惊的是,额外的安全优势在调查中仅排名第三。我的同事杰夫·克鲁姆(Jeff Crume)在此处和此处录制了两个关于该主题的精彩视频。
我采取了稍微不同的策略。在消除对新事物的担忧之前,我打算先翻转一下这个问题。
为什么我们过度(甚至盲目)相信安全现状?
许多 IT 领导者和工程师都记得云采用的早期阶段,当时谨慎的高管对大型云提供商的安全性和弹性承担了更多的举证责任,而不是对位于漏水的门卫衣柜中的自己的服务器机柜承担的举证责任。
我最喜欢的做法是强调现有的事情自然是好的。
认知心理学和行为经济学领域在这里对一些相关的相互关联和重叠的现象进行研究。这些领域的教父丹尼尔·卡尼曼(Daniel Kahneman)和阿莫斯·特沃斯基(Amos Tversky)提出了可用性启发法,即最容易回忆的事物被错误地判断为最真实的事物。
这种启发式的一个密切衍生的副产品是熟悉度启发式。与数量较多但非名人的男性名字相比,受试者看到的女性名字较少但更出名。女性名人名字的熟悉使他们相信她们在牌组中出现的频率更高。
但最符合我们考虑的现象是罗伯特·扎洪克的单纯曝光效应。他的作品既令人着迷又令人恐惧,提供了强有力的证据,表明喜欢/不喜欢才是真正推动我们做出决定的因素,而认知在大多数时候扮演着令人惊讶的次要角色。反过来,这种效应可以通过重复暴露于刺激来消除。
更阴险的是,扎琼克证明,低水平、不太明显的刺激可以引起我们的注意,并让我们在不知不觉中通过熟悉感喜欢某些东西。最近研究该谱系的学者似乎支持这样一种说法,即通常很少有认知参与形成依恋或厌恶,熟悉和重复是形成依恋或厌恶的最大因素。
鉴于此,很容易看出是什么推动了经常说的谎言变成事实的动力。这种倾向可能会导致我们错误地相信司空见惯的事物,以此作为我们对小说的怀疑的错误推论。
纳西姆·塔勒布(Nassim Taleb)在他对林迪效应的讨论中正确地指出,尝试过的、经过测试的和长期存在的东西通常都是有充分理由的,但这不应该让我们忽视它们的弱点。
由于所有这些因素,即使服务传达了其增强的安全优势,人们也可能不愿意使用密钥。为此,让我们比较密码和密钥的工作原理,并检查哪些更安全。
密码的工作原理
首先,让我们快速了解一下密码创建、存储和身份验证。
当用户创建帐户并定义密码时,密码将通过 sha256 等哈希算法输入。这允许使用散列值来验证密码,而服务提供商无需存储密码或知道密码是什么。
为了说明这一点,我们以密码“MySecurePassword123”和“MysecurePassword123”为例(区别在于后者中“secure”的 s 是小写的)。
看看它们的哈希值有多么不同:
- 我的安全密码123 -> 1a5b06de7c27f493f0b246de9ab71dc35fc2171c38dc4c2b54f37e065a85e6f5
- MysecurePassword123 -> d3f05a7223df23f4295a7e3be9a6f64c1f9bf5b90068b8e4a1b5e0e0440bb594
让我们继续使用“MySecurePassword123”示例。为了确保具有相同密码的两个用户不会得到相同的哈希值,首先会生成一串随机字符并将其附加到开头。这称为“加盐”。此随机加盐字符串将添加到用户定义的密码的开头。
让我们逐步完成该过程:
- 原始密码:MySecurePassword123
- 生成盐:\x8e\xd7T\xe7\xd6\x84\xbb\x18\x1a\xed4sBp\x06
- 与密码结合:
\x8e\xd7T\xe7\xd6\x84\xbb\x18\x1a\xed4sBp\x06MySecurePassword123
(或 \x8e\xd7T\xe7\xd6\x84\xbb\x18\x1a\xed4sBp\x06 + MySecurePassword123)
- 哈希组合盐+密码:
35f3b09d68e4c0059d06d2b259c21dd67c5b33a520ff2b1980ad5dcafc764de1
最终的哈希组合以及注册时生成的盐值是最终存储的内容:
- 盐:\x8e\xd7T\xe7\xd6\x84\xbb\x18\x1a\xed4sBp\x06
- 哈希组合盐+密码:
35f3b09d68e4c0059d06d2b259c21dd67c5b33a520ff2b1980ad5dcafc764de1
对于每次身份验证,都会检索保存的盐字符串,将其添加到用户输入的密码的开头,通过相同的哈希算法进行输入,并根据目录中存储的哈希值进行检查。
这意味着输入“MySecurePassword123”作为密码的用户每次都会将存储的盐值添加到开头,并且始终以相同的散列组合值结束。
主要缺点是用户每次仍然需要通过互联网传输密码。不仅如此,它们还可以通过暴力、撞库 或字典攻击等方式被黑客攻击或破解。
现在,让我们将其与密钥进行比较。
密钥如何工作
先说最重要的信息,密钥身份验证基于名为 Fast Identity Online 2 (FIDO2) 的协议。其主要的安全优势在于,它无需通过发送密码来通过互联网传输凭证。此外,由于它使用私钥和公钥,因此几乎没有任何东西可以破解或破解,正如我们将看到的。
让我们看一下用户通过创建密钥然后使用它进行身份验证来向 Google 注册其设备进行生物识别身份验证的典型流程。
图片
- 用户在支持 FIDO 的设备操作系统中注册指纹、面部或 PIN,以供稍后在本地身份验证期间使用。该生物识别或 PIN 凭证数据的哈希值存储在设备上安全的分区硬件组件中,称为安全元件或可信执行环境。
- 作为创建 Google 登录密钥的一部分,支持 FIDO 的设备会生成一个私钥和公钥对,其概念与 HTTPS 通信中使用的密钥对相似。公钥被发送到正在注册密钥的服务。私钥与生物识别凭据哈希保存在同一安全硬件警戒线中。
- 下次 Google 收到来自该用户名的登录请求时,它会向启用 FIDO 的设备发送质询。
- 支持 FIDO 的设备通过扫描用户的面部或指纹来在本地对用户进行身份验证。
- 如果生物识别匹配,启用 FIDO 的设备会发送使用在步骤 2 中向 Google 注册时创建的私钥生成的数字签名。如果签名与公钥进行验证,则 Google 可以验证此质询响应,因为只有该私钥的持有者密钥可以生成该签名。
FIDO 结合使用了长期运行的生物识别分析和加密范式来保护网络通信,以实现更高的安全性和便利性。通过互联网传输的所有内容都是公钥、质询和数字签名——确认设备和服务器之间身份验证的加密技术。