首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么零知识证明在实践中不被用于认证?

为什么零知识证明在实践中不被用于认证?
EN

Cryptography用户
提问于 2015-04-30 00:09:01
回答 5查看 17.3K关注 0票数 35

我在维基百科上读到,零知识证明在实践中不被用于认证。相反,(我认为)服务器被委托以明文形式查看密码,然后它应该添加一个salt和hash。但是在一个分裂的时刻,服务器知道这个秘密。我为什么要这样含蓄地信任服务器呢?它可能会被盗用并以明文形式记录我的密码。我可以用同样的密码来做其他敏感的事情。零知识证明不是必要的吗?为什么它们不被使用?或者他们被利用了?

更新,另一种选择:永远不要重复使用您的密码,而只使用在客户端上运行的程序从主密码和网站名生成不同的密码。这似乎简单得多,因为您从未透露主密码。这样的话,你就不需要那么信任网站了。

这就澄清了我先前的问题。

EN

回答 5

Cryptography用户

发布于 2015-06-30 22:57:07

回答标题中的问题(而不是讨论提议的替代方案,我不太明白),密码协议"SRP“的零知识证明是快速而有效的。

SRP似乎没有得到应有的广泛宣传。在实现了它之后,作为使用它的倡导者,我真的不明白为什么每个人都不总是使用它。我所看到的一些驳回它的理由是:

  • 一种信念,认为服务器要么完全‘好’,要么完全‘坏’,并且使用HTTPS确保您总是与‘好’服务器交谈,这些服务器可以使用明文密码进行信任。现实生活不像电影,它更复杂。心血崩溃表明,本来值得信任的站点可能泄漏内存位,因此第三方可以观察到通过HTTPS发送的明文密码。更常见的情况是,自定义网站代码中的错误处理很差,它会将明文密码打印到日志文件中,入侵者只能看到服务器上的文件系统。大型系统流日志到中心位置。这使得由于处理错误而暴露纯文本密码的可能性更大。
  • 一种信念,即客户端要么完全安全,要么完全受损,这样攻击者就什么也看不见,否则就可以记录正在输入的内容。如果攻击者能够记录正在输入的内容,他们可以直接窃取密码;SRP只保护线路上的拦截,而TLS保护线路。实际上,即使使用配置良好的HTTPS,拦截也比人们意识到的要常规得多。大型雇主通常会通过解密扫描HTTPS来保护自己不被员工窃取智慧财产。即使他们这样做只是为了保护自己的数字产权,这也增加了漏洞泄露明文密码或盗用密码的风险。大型笔记本电脑供应商安装类似于超级鱼的设备。解密客户HTTPS流量,在页面上销售“智能广告”。他们可能并不都是坏人,但这增加了漏洞泄露密码的风险,或者是流氓员工盗取密码的风险。也有证书被泄露的例子,这意味着加密的通信可以被窥探。所有这一切都意味着攻击者可能经常无法直接记录用户在键盘上输入的内容;但即使在使用HTTPS时,也可以查看通过网络传递的任何内容。SRP可以防止任何这样的拦截,因为它是零知识密码验证。
  • 认为SRP是HTTPS的替代品。SRP不(开箱即用)验证服务器(注册时),因此您可能是在与假服务器交谈。因此,在SRP和HTTPS的“任何一种或比较”中(假设上面没有详细说明的问题),HTTPS通常被认为是优越的。这是一个错误的二分法,因为在现实世界中,HTTPS有许多缺点,可以通过使用SRP而不是HTTPS来解决。在HTTPS上执行SRP会为您提供服务器验证,从而增强SRP。所以人们应该同时使用这两种方法。
  • 很多人关注双因素认证作为对纯文本密码的增强。那些发现密码风险很高的公司倾向于使用第二个因素(比如手机短信)。该网站可能仍然泄露密码,用户可能在多个网站上使用,其中许多不使用第二个因素。如果网站升级到使用SRP和第二个因素,他们将充分保护他们的用户。

当涉及到实施SRP时,有几种抑制因素:

  • 历史上缺乏一个纯粹的JavaScript示例。早期权威的演示使用了Java。最近,在心血崩溃之后,SRP又复活了,现在有了一些可靠的开源JavaScript库和演示。
  • 一次额外的往返登录。使用明文,您可以在一个帖子中发送用户名和密码。使用SRP,您首先发送用户名以获得salt (和一个挑战),然后生成密码证明以发送到服务器。大多数web安全框架假设所有内容都是在一次往返中发送的。这可以通过第一次往返的AJAX调用并将密码证明作为密码来解决。现在有更多的网站将用户名和密码分割成两个页面,以实现“社交登录”。根据您在第一页给出的电子邮件,他们提供了一个密码页面,目标是正确的社交登录服务器。这两种页面模式非常适合SRP,最终用户也越来越熟悉它。

话虽如此,但每个站点现在都不使用SRP,这是没有充分理由的。因此,您对明文密码仍在使用感到惊讶是正确的。

更新:我仍然遇到来自密码专家的关于SRP的相当激进的回击,他们正在争论TLS是否足够。我相信他们只被高安全的机构雇用,(理论上)他们永远不会犯上面列出的错误。事实上,他们运用他们的理论知识,击落一个实用的附加防御策略,无论是TLS和SRP都是令我惊讶的。出于理论上的原因,我没有成为SRP的粉丝。我成为了一个粉丝,因为我刚刚升级了网上银行系统,但没有通过完美配置的TLS进行渗透测试,而外部测试人员设法获得了最有效的实时密码。正如我祖父告诉我的“理论上,理论和实践都是一样的。但在实践中却并非如此。“客运航空公司使用冗余来维持人们的生存。安全从业人员应深入使用防御,而不是作为安全的理论模型。

票数 30
EN

Cryptography用户

发布于 2015-04-30 00:37:59

有客户(前)。使用零知识证明对服务器进行身份验证,只有当服务器事先知道客户端的公钥,并且客户端永远保留相同的私钥时,才有意义。因此,您可以让客户端在注册您的帐户时生成一个键盘,并且服务器会记录您的公钥以及您的登录信息。然后你可以用一个零知识证明来登录。太棒了。我认为SSH支持这种身份验证。有些第二因素身份验证方法也是这样工作的,但实际上它比它更麻烦;如果:

  1. 用户清除他们的浏览器缓存?
  2. 用户试图从另一台计算机登录?
  3. 他们的私钥又发生了一些不好的事。

在所有这些情况下,用户将无法登录,并必须恢复他们的帐户。会很烦人的。

我想,您可以让用户键入他们的密码,并且在客户端使用这个密码来重新生成私钥。这样,它仍然是基于密码的,您不能丢失私钥,并且可以使用零知识证明来进行实际的数据交换。脑海中出现的反论点是,使用密码作为种子并不会增加密码的强度,因为攻击者仍然只需猜测密码,但每次登录时都必须执行一个完整的RSA密钥根,这在移动设备上可能需要几分钟。大多数人会发现这令人愤怒。

关于让服务器以明文查看您的密码的问题:是的。这是真的。我不知道该怎么跟你说。这就是为什么硬核安全专家会告诉你对每个网站使用不同的密码,并使用密码管理器来跟踪所有这些密码。

票数 6
EN

Cryptography用户

发布于 2018-05-02 08:27:11

实际上,有一些SaaS平台使用零知识证明进行身份验证,因此最终用户可以向身份验证服务证明他们知道一个秘密,而不向验证方泄露该秘密。没有与安全相关的信息存储在服务提供商服务器或客户端服务器上,这意味着黑客没有什么可窃取的。

M采用多因素零知识认证协议,M背后的思想是每个注册客户端都有一个大的密码秘密。然后,他们用零知识证明向服务器证明他们拥有这个秘密。这就消除了在服务器上存储任何与客户端机密相关的信息的要求。

你可以阅读https://www.miracl.com/miracl-labs/m-pin-a-multi-factor-zero-knowledge-authentication-protocol的迈克斯科特博士的完整密码论文

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/25338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档