Google和Yubico刚刚宣布遵循FIDO U2F规范提供加密安全令牌。这只是另一个2FA选项,还是比诸如SecureID和TOTP之类的解决方案明显更好?

具体来说:


U2F在什么方面与U2F根本不同? OTP?
与OTP系统相比,U2F对网络钓鱼攻击的可行性有何影响?
对U2F的非交互式攻击(例如暴力破解)如何可行?
我可以安全地进行网络钓鱼吗?将单个U2F令牌与多个独立服务一起使用?
U2F如何与其他商业产品相叠加?有更好的解决方案吗?


评论

我们需要区分U2F协议和当前的U2F设备。在不损害用户代理的情况下,U2F协议可保护所有设备免受网络钓鱼。但是由于当前的U2F设备没有屏幕,因此当用户代理受到威胁时,您可能会被欺骗。它可以使您相信自己已登录到服务A,然后按了该按钮,但实际上您登录了服务B。这不能通过任何协议解决,设备需要一个屏幕。但是U2F协议并不限制设备提供此额外的安全性。 Mathieu Stephan也指出了这一点。

根据定义,@ user10008没有办法防止受到破坏的用户代理。即使您可以保护登录步骤,浏览器攻击也可以简单地静默等待,直到身份验证成功完成,然后使用经过正确身份验证的会话插入其恶意流量。由于不需要破坏身份验证,因此这不在任何身份验证系统的范围内。设备的屏幕在这里无法提供有意义的完美效果。

是的,它可以。如果有屏幕,并且我正坐在可能受感染的计算机上(例如网吧),我知道我是否可以访问我的网上银行(我永远不会从网吧访问)或某个不重要的帐户。

@ user10008,嗯。好。但是,那实际上不是一个可靠的情况。当然,不能保证特殊的设计考虑并且硬件成本会增加10倍。精明的用户根本不会故意使用受损的工作站,明智的安全态势将完全禁止它,而不是试图安全地容纳它。

尽管我仍然认为这确实很可能,但我同意您提出的费用论点。低价格标签是U2F的优势之一。作为该问题的替代解决方案,我可以考虑将智能手机(具有屏幕)用作不受信任的工作站的U2F密钥(或中继)。我认为U2F非常棒,从手动输入十进制代码到二进制有线传输的步骤非常明智。

#1 楼

我得到的答案很好,但是我想提供更多的深度,特别是系统为什么存在的原因,这应该进一步解释它的优点。

免责声明:当我现在为Google工作时,在撰写此答案时,我对该项目一无所知。此处报告的所有内容均来自公共资源。这篇文章是我自己的观点,观察和评论,并不代表Google的观点,观点或意图。
值得指出的是,我已经使用并修改了一段时间了。 ,以及从事社会工程和帐户接管工作的人,我对这里所取得的成就印象深刻。

为什么需要一些新的东西
考虑一下:Google已部署两因素身份验证很久以前。这是一家非常关注安全性的公司,而他们的安全性一直是一流的。尽管他们已经在使用最好的技术,但是U2F在传统2要素之上提供的额外安全性是如此重要,以至于值得公司花费时间和金钱来设计,开发,部署和支持他们没有的替代系统。甚至自己也不卖。是的,这是他们走这条路的极具社会意识的举动,但这不仅关乎社区。 Google之所以这样做,是因为他们自己需要U2F本身提供的安全性。许多人信任他们最宝贵的信息,而有些人在危险的政治环境中甚至信任谷歌的生活。 Google需要安全性,才能实现这种信任。
归结为网络钓鱼。网络钓鱼很重要。这是非常普遍且非常有效的。对于针对硬化目标的攻击,网络钓鱼和类似攻击确实是攻击者的最佳选择,他们也知道。更重要的是:
我们的网络钓鱼防护是可笑的。我们有两个因素的身份验证,但实现很少提供防御。诸如SecurID,Google Authenticator,电子邮件,电话和SMS循环之类的常见系统-所有这些系统都无法完全抵御使用时间的网络钓鱼攻击。一次性密码仍然是密码,可以将其公开给攻击者。
这不仅是理论上的。我们已经看到这些攻击实际上是在进行的。实际上,攻击者确实捕获了发送到网络钓鱼站点的第二因素响应,并立即在真实的登录页面上播放它们。这实际上发生在现在。
所以说你是Google。您已经部署了最好的保护措施,您会发现它们还不够。你是做什么?没有其他人可以为您解决这个问题。您必须弄清楚。
解决方案很简单;采用才是真正的问题
创建无法被仿制的第二要素解决方案非常简单。您所要做的只是涉及浏览器。在U2F的情况下,设备会为每个站点创建一个公钥/私钥对,并将站点的身份刻录到该站点用来请求身份验证的“密钥句柄”中。然后,每次尝试进行身份验证之前,浏览器都会验证该站点身份。站点身份甚至可以绑定到特定的TLS公共密钥。而且由于它是一个挑战响应协议,因此也无法重播。而且,如果服务器在数据库泄露中意外泄漏了您的“密钥句柄”,它仍然不会影响您的安全性或泄露您的身份。使用此设备可有效消除网络钓鱼的可能性,这对安全敏感的组织来说意义重大。
加密货币及其应用都不是新的。两者都是很好理解和信任的。技术从来都不是难题,难题是采用。但是,谷歌是少数能够克服通常阻碍此类解决方案发展的障碍的公司之一。由于Google是最受欢迎的浏览器,因此他们可以确保默认情况下兼容。由于他们是最受欢迎的移动操作系统,因此可以确保它也能正常运行。而且由于他们运行着最受欢迎的电子邮件服务,因此他们可以确保该技术具有相关的用例。
比必要的更开放
当然,Google可以利用这一优势在竞争中获得竞争优势。市场,但他们没有。那太酷了。每个人都需要这种级别的保护,包括Yahoo和Microsoft及其竞争的电子邮件产品。很棒的是,它的设计使得即使竞争对手也可以安全地制造自己的产品。这项技术与Google无关,即使硬件完全与使用无关。
该系统在设计时就假设您不会仅将其用于Google。该协议的关键特征是令牌永远不会标识自己。实际上,规范指出,选择这种设计是为了防止创建“超级Cookie”的可能性,该超级Cookie可用于在合谋服务之间跟踪您。
因此,您可以获得单个令牌,不仅可以在Gmail上安全地使用它, ,也可以在支持U2F的任何其他服务上使用。这给了您更多理由放下一笔钱。由于Yubico用PHP,Java和Python发布了服务器软件的参考实现,因此即使在小型商店中,也可以安全地在自己的服务器上启动并运行身份验证。

评论


那么,为什么不使用SSL客户端证书呢?那也应该减轻MITM。

– phoeagon
15年3月2日在15:56

@phoeagon:已经尝试过了;常规证书使用起来很复杂,容易丢失(人们在重新安装之前忘记导出它们,攻击者可以轻松导出它们,等等),最近发现TLS使用它们的方式容易受到类似攻击。 (我完全不记得在哪里看到了。)

–user1686
15年4月19日在13:07

这是网络钓鱼的绝妙方法。我对“解决方案”感到非常恼火,这些解决方案提议浪费用户时间以检测网络钓鱼,因为它们在精神上和经济上都是很累的。

– Steve Dodier-Lazaro
15年5月13日在19:18

@grawity这是一篇出色的文章,详细介绍了客户端证书的问题:browserauth.net/tls-client-authentication

– Ajedi32
2015年9月29日14:10在

“您所要做的就是让浏览器...”这有点误导,因为此过程可以(并且)由非浏览器的用户代理执行。

–多里
16年2月1日在11:02

#2 楼

U2F能够使用使用公钥加密的加密通道来确保只有正确的服务器才能获得一次性令牌。这意味着在网络钓鱼站点上插入它意味着什么也没发生-他们无法进入您的帐户。相反,他们必须依靠XSS和本地恶意软件之类的技术攻击。

应该可以掩盖您将同一设备用于多种服务的事实,因此控制站点A和站点B的人看不到您使用了同一设备双方。应该是安全的。

这似乎是目前可用的最佳选择,主要是因为正在进行的标准化过程以及对其的广泛支持和发展势头。

根据FIDO规范




在向在线服务注册期间,用户的客户端设备会创建一个新的密钥对。它保留私钥,并在在线服务中注册公钥。客户端设备通过签署挑战来证明拥有服务私钥,从而完成身份验证。客户端的私钥只有在用户在设备上本地解锁后才能使用。本地解锁是通过用户友好且安全的操作来完成的,例如,滑动手指,输入PIN,对着麦克风讲话,插入辅助设备或按下按钮。


#3 楼

我尚未完全探索规范。但是:


U2F与OTP有什么根本的区别?
U2F不使用OTP。它实际上是关于站点身份验证以及将拥有私钥作为因素的。
与OTP系统相比,U2F对网络钓鱼攻击的可行性有何影响?
有时间限制的OTP系统在防止网络钓鱼(窃取凭据)方面非常出色,因为它们很难被窃取。 U2F的确旨在抵抗MiTM攻击。
针对U2F的非交互式攻击(例如蛮力等)如何可行?
蛮力攻击并不是真正的解决之道。您可能想从服务器或客户端上窃取密钥。它如何处理恶意软件等是关键。实现将非常重要。
我可以安全地使用具有多个独立服务的单个U2F令牌吗?
确定-这就是为什么公钥/私钥比共享机密更好的原因。

U2F如何与其他商业产品相提并论?有更好的解决方案吗?
我只能和我们的产品(无论是商业版本还是开源版本)进行交流。主要区别在于,我们将目标站点的ssl证书的哈希存储在身份验证服务器中,并提供由身份验证服务器的私钥加密的OTP。在用户获得OTP之前,软件令牌会通过用户的连接获取目标站点的证书,对其进行哈希处理并进行比较。如果它们匹配,则会显示OTP,然后将其复制到剪贴板,然后将浏览器启动到URL。如果没有,则给出错误。

因此,无需更改服务器或浏览器。密钥存储在与Web服务器不同的服务器上。 OTP是该过程的一部分(尽管可以将其删除/隐藏)。它是开源的。另一方面,U2F确实有发展动力,尽管它是“按需付费”财团。 U2F在某些“安全”硬件产品上可用。我们可以在它们上实现(例如,加密USB驱动器)。 YMMV。

有关WiKID相互身份验证的更多信息,请访问:https://www.wikidsystems.com/learn-more/technology/mutual_authentication以及此处的操作方法:http://www.howtoforge .com / prevent_phishing_with_mutual_authentication。



评论


非常感谢您公开与商业产品的关系。它确实有助于提供相关性和上下文。

– schroeder♦
2014-10-22 14:46

我希望你不要讽刺。有时甚至发布开源软件也不容易。 “考虑源头”很重要。每个人都有某种偏见。我会说,我认为没有针对此领域的许多解决方案。对于北美地区的银行业而言,主要对卖方而言,这不是一个很好的市场-买家相对较少。

–现在
2014-10-23 15:14



没有!完全赞赏!我们让人们先丢东西,这会带来麻烦。互联网确实需要开发Sarcasm字体。

– schroeder♦
14-10-23在15:17

不仅如此,您的回答确实对我有所帮助,并使我能够与公司中的人们谈论U2F。

– schroeder♦
14-10-23在15:19

根据OP的答案,OP非常着重于网络钓鱼,我认为您的(2)(目前似乎说U2F在限时OTP系统上没有添加任何东西)需要修改。正如OP所说,“攻击者实际上会捕获发送到网络钓鱼站点的第二因素响应,并立即在真实的登录页面上播放它们。”举例来说,(最近)请参见seancassidy.me/lostpass.html,其中也提到了TOTP(Google身份验证器)代码。

–ShreevatsaR
16 Jan 21'在0:39



#4 楼

我刚刚阅读了一些规范,因为我想知道设备是否存储了实际的(私有)密钥。我可以尝试回答一些问题。

OTP只是一次性令牌,而U2F基于公钥加密;更具体地说,Yubico Fido U2F密钥似乎使用了椭圆曲线密码。

U2F应该有助于防止网络钓鱼攻击,因为您必须通过手动干预(即按按钮)来确认交易。窃取密钥将需要窃取设备本身,这可能比OTP针更难,具体取决于人们将其存储在何处。当然,这两种方法仍然在一定程度上容易受到MitM攻击;如果攻击者能够以某种方式在您与服务之间进入,干扰正在进行的会话,那么您将无能为力。流量应该经过加密,端点验证,并且没有人可以完全访问您的计算机;显而易见的东西。

我想破解U2F密钥的可行性取决于特定硬件密钥上已实现的公共密钥算法的强度。 Yubico键似乎在P-256 NIST椭圆曲线上使用ECDSA。判断一下自己的位数(以及曲线的来源)是否足够安全和​​可靠...

FIDO的概述文档中提到“廉价的U2F设备”,它们不存储实际的私钥但是将它们加密(包装)存储在“密钥句柄”中,该标识符是将私钥和公钥链接在一起并发送到远程服务的标识符。
因此,如果我对它的理解正确,那么远程服务会同时获取公共密钥(按原样)和私有密钥(在密钥句柄中加密),因此,安全性实际上取决于硬件设备上使用的算法的安全性。远程站点具有您的私钥!从某种意义上讲,这是将用户的会话加密后存储在cookie中的相反过程–此处,远程站点保留密钥,私钥部分被加密,并且理论上只能由硬件设备解密。有趣的是,这种Yubico设备本身就是这样的设备,即密钥会离开设备而不是包含在设备中。

我了解经济和易于使用的动机–存储了很多在这类设备中,芯片上的密钥对会更昂贵-但我不确定我是否喜欢这种方法。

因此,请回到您有关将令牌与多个独立服务一起使用的问题:由于密钥对保存在服务本身上,因此该设备可以生成任意数量的对。登录时,设备将解开私钥并检查签名。该消息包含源,因此密钥应仅适用于该特定服务。

出于高度安全的目的,最好使用以某种方式存储(或生成)私钥的设备根本无法检索它们,也永远不会离开设备。我对这些设备的电子方面一无所知,但我假设,假设设备使用的芯片与现代智能卡使用的芯片相同,那么这将需要相当复杂的攻击者窃取然后破解物理硬件来获取密钥。 ,sims和其他形式的硬件加密。

来源:


概述:“ 7。允许廉价的U2F设备”
实现注意事项: “ U2F令牌可能不存储私钥材料,而是可能导出包装的私钥作为密钥句柄的一部分。”
还要检查FIDO“原始消息格式”文档。


评论


出于经济原因,提及私钥的+1未存储在Yubikey上。您是否知道任何与FIDO兼容的设备都存储私钥而不是密钥句柄?

–摩根·库尔贝(Morgan Courbet)
17/12/27在13:54

我不明白为什么这很经济。私钥不是在兆字节以下吗?大多数人会不会在少于两个的站点中使用它?存储并不昂贵...

–斯蒂芬
19年1月31日,下午2:24

您可以在典型的Yubikey上安装的持久存储量仍然非常有限,这会使设备更加复杂。由于设备本身没有存储空间,因此实际上可以为您提供终生的服务,而不必突然在似乎随机的时间拒绝注册新的密钥对。每个服务的密钥对的生成所使用的每个设备上都有一个唯一的私钥。无法检索该密钥,因此即使对密钥进行了明显的物理折衷,也很难弄清要生成的下一个密钥。

– TwoD
19年4月6日在23:36

#5 楼

U2F令牌使用公钥密码术实现质询响应算法。它提供了两个功能:注册新来源和计算对挑战的响应。

因此,它不实现一次性密码(OTP)生成。

注册新密码Origin

(起源字符串标识远程系统,例如远程服务器的主机名。)

注册新起源时,令牌将起源字符串作为输入,返回


新生成的公钥(KA),
证明书(即证明公钥和使用证明私钥在KA上的签名),
使用新创建的私钥的密钥句柄(H)和
签名(在原点,KA和H上)

。证明密钥对在同一供应商生产的一组设备之间共享,并且通常由著名的CA签名。密钥句柄是标识KA的字符串。所有这些项目都被发送到原点。

签署挑战

在签署挑战(即生成响应)时,令牌将获取原始字符串,挑战数据(包含会话)


如果输入的原点与原点不匹配,则返回错误。
如果输入的是原点,则返回错误。未知,则返回错误。
否则,将对质询数据和内部事务计数器的值进行签名计算(使用密钥句柄引用的私钥),并将其与计数器一起返回值。

可能的令牌实现




有效的U2F令牌实现具有可能较大的可写关联数组,其中密钥句柄映射到私钥和来源信息。该数组一定不能离开该标记,因此应加以保护以防止将其读出。

U2F规范不允许将私钥重用于不同的来源。因此,还需要一个大数组。

或者,也可以使用没有任何读写存储器的U2F令牌实现:令牌将令牌对称地加密,而不是将私钥和源存储在令牌内带有内部钥匙(K0)。然后将结果作为键句柄返回。在理智的硬件设计中,K0不能离开令牌。换句话说,私钥和原始字符串是从外部存储的,它们被分配到原始位置,因为它们被用作密钥句柄-这很好,只要不能破坏加密即可。

基本上,大多数可用的U2F令牌都实现了第二种方法,因此生产起来相对便宜(在亚马逊上起价约为5欧元:搜索“ FIDO U2F”)。 Yubikey U2F就是这种实现方式的一个例子。

攻击

在通常情况下,强行攻击是不可行的。一种这样的攻击是当您知道公钥时尝试强行使用特定于源的私钥。


假设正在使用便宜的U2F令牌,则也可以尝试强行使用当您知道特定于原点的键句柄时,选择内部键(K0)。仅当令牌供应商犯了设计错误时,这才可行。例如,当供应商使用相同的内部密钥运送每个令牌并且密钥以某种方式泄漏时。
或者,如果内部密钥K0为:每个令牌都不同,但是K0最终无法重新初始化-用户,由卖方保留并与另一方(自愿或非自愿)共享-然后,该方可以毫不费力地强制使用一个密钥句柄(该密钥句柄来自该卖方产生的令牌)。
另一种风险将是是在令牌内部使用的弱对称加密算法实现,因此,可以使暴力破解密钥句柄H中的加密数据变得更加容易。

由于U2F令牌验证了来源并将特定于会话的数据用作挑战,因此某些网络钓鱼和中间人被击败。

#6 楼

我认为,令牌用户无法通过按令牌上的按钮来查看他/她实际上同意的行为是非常糟糕的。否则,在不受信任的公共PC上具有受感染OS的用户可以不经意地将恶意程序放到自己的银行帐户中,而无需登录Facebook。

但是,U2F协议包含有关当前操作(URI)的信息,AppID和可选的TLS通道ID)。我认为,在开始使用这些设备之前,请先等待带有小液晶屏的U2F令牌的出现,该小屏幕将显示这些信息(至少是AppID),然后在发现事实并非如此的情况下允许采取不同意见如您所愿。

评论


好点子。没有屏幕,交易和恶意软件的安全性就很少。

–domenukk
2015年11月16日15:46

Trezor有一个屏幕并支持U2F,并要求用户确认登录。

–乔纳森·克罗斯(Jonathan Cross)
17-10-31在22:26