我理解FIDO2 2/WebAuthn为每个网站(域)生成一个单独的密钥对,并且只允许一个特定的密钥对用于在同一个网站(域)上进行身份验证,该网站(域)最初是通过浏览器/身份验证器生成/注册该密钥对的。此外,我知道这样做是为了防止中间人和“网络钓鱼”攻击。
该规范定义了一个API,允许web应用程序创建和使用强大的、经过验证的、作用域的、基于公钥的凭据,以便对用户进行强身份验证。公开密钥凭据由WebAuthn身份验证者根据WebAuthn依赖方的要求创建和存储,但须经用户同意。随后,公钥证书只能由该依赖方的来源获取。这个作用域是通过协调用户代理和身份验证器( https://www.w3.org/TR/webauthn-2/ )联合实施的。
但是:仅仅将RPID (依赖方ID,即域名)作为“质询”值的一部分,即挑战将有效地变成RPID || random_bytes,并要求浏览器/身份验证器在签署之前验证该挑战值内的RPID是否等于当前的网站(域),难道不就足够了吗?如果检测到不匹配,那么显然有人试图欺骗我们签署一个“外国”挑战,这意味着MITM/网络钓鱼攻击,所以认证者只需拒绝在这种情况下签署质疑。问题解决了?
上述方法的优点是,对于同一个用户,我们不需要大量单独的密钥对。请记住,大多数FIDO2设备(例如YubiKey)只能存储几个.
传统的TLS客户端身份验证也可以对所有站点使用单一密钥对(客户端证书)。
发布于 2023-03-31 17:47:11
我理解FIDO2 2/WebAuthn为每个网站(域)生成一个单独的密钥对,并且只允许一个特定的密钥对用于在同一个网站(域)上进行身份验证,该网站(域)最初是通过浏览器/身份验证器生成/注册该密钥对的。此外,我知道这样做是为了防止中间人和“网络钓鱼”攻击。
为每个站点生成一个独立的密钥对--以及站点上的每个帐户--并不是要击败MITM或网络钓鱼攻击。每个注册一个独立的密钥对对于隐私至关重要,以防止webauthn成为跨站点跟踪用户的另一种方法。
这样就可以安全地使用一个设备(加上备份!)为了你想要的网站和账户--工作,个人,&c.--而不把webauthn变成一个被动的大规模监视工具。不需要为不同的目的携带满是设备的钥匙圈。
上述方法的优点是,对于同一个用户,我们不需要大量单独的密钥对。请记住,大多数FIDO2设备(例如YubiKey)只能存储几个.
相反,设备只需要存储一个主密钥,k说。这通常使用两种方法中的一种,即凭据in (“键句柄”,在旧的U2F名称中):
在这两种情况下,密钥对都是从存储在凭据id中的种子s派生的,使用设备的主密钥。密钥对实际上并不存储在设备上;设备动态地从存储在服务器上的凭据ids派生密钥对。
当然,您可能会非常糟糕地设计一个FIDO设备,这样它就可以为它注册的每个站点存储一个密钥对。但是U2F/FIDO从一开始就被设计成没有必要进行如此糟糕的设计。
您可能正在考虑驻留密钥,也称为可发现凭据。常驻密钥确实有您提到的限制。它们还需要特殊的软件配置工具,软件兼容性差,需要PIN,并且通常会使用户体验更加糟糕--这会损害安全性。
幸运的是,驻留密钥通常不在FIDO2 2/webauthn中使用。您通常只会在考虑不周的企业部署中遇到驻留密钥,或者如果您不小心给自己制造麻烦的话。例如,您可以在OpenSSH ssh-keygen中使用驻留密钥,但是ssh-keygen -t ecdsa-sk可以很好地使非常驻FIDO密钥--不需要使用ssh驻留密钥--除非您想让自己的生活变得困难。
。
https://crypto.stackexchange.com/questions/105905
复制相似问题