【这是我的观点,不代表行业观点】
我完全同意存储在你的主设备上的一些秘密数据模糊了“你知道的东西”和“你拥有的东西”之间的界限。我认为,它落在哪一边取决于数据是什么、身份验证协议如何工作的细节,以及你从什么角度看待它。
从技术上讲,yubikeys、智能卡,甚至OTP fobs也是存储在软件中的一段秘密数据,尽管这种方式即使对于具有物理访问权限的攻击者来说也很难提取。我会争辩说,你证明拥有的东西不是设备,而是秘密数据。对于硬件令牌,这些是相同的,但人们会将相同的想法应用于手机和其他类型的秘密,我不确定这是思考它的正确方法。
“知道”与“拥有”的定义
它是什么类型的秘密,以及您的设备如何存储和访问它,提供了一个可滑动的安全等级 ( plain text file --> yubikey)。“知道”和“拥有”之间的界限就在那里。我认为,你在哪里画这条线,很大程度上取决于你采取谁的观点。一些例子:
- 最终用户的观点:您可能在“来自我的记忆”与“存储在设备上”之间划清界限。
- 系统管理员的观点:您可能会在是否可以要求退回设备并确信用户不再拥有该秘密方面划清界限。
- Authentication Server 的观点:在大多数情况下,服务器无法判断秘密是来自安全设备,还是来自用户输入的密码。所以从它的角度来看,相关的区别是它是否是共享秘密客户端和服务器都知道,或者它是否是某种公钥,您需要在不泄露实际秘密的情况下证明其拥有。实际的试金石是“知道”往往容易受到记录和重放攻击,而“有”往往不会。
在某些情况下,每个人都同意:用户在文本框中输入的密码显然是“知道”,而带有 RSA 密钥对的智能卡显然是“拥有”。但是,无论您如何定义“知道”与“拥有”,我认为总会存在上述观点之一认为“知道”而另一种观点认为“拥有”的极端情况。
思想实验
假设系统管理员为您生成一个新的随机密码,将其加密存储在 yubikey 上,这样密钥将根据请求释放加密密码,并且只有您的 VPN 客户端拥有解密密钥并实际使用明文密码(不知道这是否是现实的,但是,嘿,这是一个思想实验)。这是知道还是拥有?从最终用户的角度来看,这当然是一个拥有......他们无法在没有 fob 的情况下进入他们的帐户。从管理员的角度来看,它(大部分)是有的,因为除非用户不遗余力地破解 fob 和 VPN 客户端,否则用户无法学习密码,因此您可以要求 fob 取回并将其提供给另一个员工。但从服务器的角度来看,它肯定是知道的,因为它看到的都是明文密码,
服务器视角
作为应用程序开发人员,对我来说重要的理论区别是:
使用“您知道的东西”(即密码),您可以通过网络将秘密本身发送到服务器。使用“您拥有的东西”(通常是加密密钥或种子),您永远不会发送秘密本身,而是一次性价值或挑战响应,以证明您拥有秘密。
考虑一个嗅探您的网络流量的中间人。他们可以窃取您的用户名/密码。使用 OTP / yubikey / 等,秘密数据是加密密钥或 RNG 种子。他们可以嗅探他们想要的所有消息,他们永远无法恢复“你拥有的东西”的秘密。
我认为,如果检索第二个因素需要攻击者访问您的设备(物理访问或 rootkit)或您的另一个帐户,那么它符合我对“您拥有的东西”的定义。
抗克隆
一旦攻击者已经可以访问设备,对克隆的抵抗显然是一个好处,但(对我来说)没有必要满足定义。毕竟,要进行克隆,攻击者已经需要“拥有”设备。那时能够使用设备冒充您与能够克隆设备冒充您之间的区别在理论上是没有意义的,因为无论哪种方式,他们已经有能力冒充您。