我在维基百科上读到,零知识证明在实践中不被用于认证。相反,(我认为)服务器被委托以明文形式查看密码,然后它应该添加一个salt和hash。但是在一个分裂的时刻,服务器知道这个秘密。我为什么要这样含蓄地信任服务器呢?它可能会被盗用并以明文形式记录我的密码。我可以用同样的密码来做其他敏感的事情。零知识证明不是必要的吗?为什么它们不被使用?或者他们被利用了?
更新,另一种选择:永远不要重复使用您的密码,而只使用在客户端上运行的程序从主密码和网站名生成不同的密码。这似乎简单得多,因为您从未透露主密码。这样的话,你就不需要那么信任网站了。
这就澄清了我先前的问题。
发布于 2015-06-30 22:57:07
回答标题中的问题(而不是讨论提议的替代方案,我不太明白),密码协议"SRP“的零知识证明是快速而有效的。
SRP似乎没有得到应有的广泛宣传。在实现了它之后,作为使用它的倡导者,我真的不明白为什么每个人都不总是使用它。我所看到的一些驳回它的理由是:
当涉及到实施SRP时,有几种抑制因素:
话虽如此,但每个站点现在都不使用SRP,这是没有充分理由的。因此,您对明文密码仍在使用感到惊讶是正确的。
更新:我仍然遇到来自密码专家的关于SRP的相当激进的回击,他们正在争论TLS是否足够。我相信他们只被高安全的机构雇用,(理论上)他们永远不会犯上面列出的错误。事实上,他们运用他们的理论知识,击落一个实用的附加防御策略,无论是TLS和SRP都是令我惊讶的。出于理论上的原因,我没有成为SRP的粉丝。我成为了一个粉丝,因为我刚刚升级了网上银行系统,但没有通过完美配置的TLS进行渗透测试,而外部测试人员设法获得了最有效的实时密码。正如我祖父告诉我的“理论上,理论和实践都是一样的。但在实践中却并非如此。“客运航空公司使用冗余来维持人们的生存。安全从业人员应深入使用防御,而不是作为安全的理论模型。
发布于 2015-04-30 00:37:59
有客户(前)。使用零知识证明对服务器进行身份验证,只有当服务器事先知道客户端的公钥,并且客户端永远保留相同的私钥时,才有意义。因此,您可以让客户端在注册您的帐户时生成一个键盘,并且服务器会记录您的公钥以及您的登录信息。然后你可以用一个零知识证明来登录。太棒了。我认为SSH支持这种身份验证。有些第二因素身份验证方法也是这样工作的,但实际上它比它更麻烦;如果:
在所有这些情况下,用户将无法登录,并必须恢复他们的帐户。会很烦人的。
我想,您可以让用户键入他们的密码,并且在客户端使用这个密码来重新生成私钥。这样,它仍然是基于密码的,您不能丢失私钥,并且可以使用零知识证明来进行实际的数据交换。脑海中出现的反论点是,使用密码作为种子并不会增加密码的强度,因为攻击者仍然只需猜测密码,但每次登录时都必须执行一个完整的RSA密钥根,这在移动设备上可能需要几分钟。大多数人会发现这令人愤怒。
关于让服务器以明文查看您的密码的问题:是的。这是真的。我不知道该怎么跟你说。这就是为什么硬核安全专家会告诉你对每个网站使用不同的密码,并使用密码管理器来跟踪所有这些密码。
发布于 2018-05-02 08:27:11
实际上,有一些SaaS平台使用零知识证明进行身份验证,因此最终用户可以向身份验证服务证明他们知道一个秘密,而不向验证方泄露该秘密。没有与安全相关的信息存储在服务提供商服务器或客户端服务器上,这意味着黑客没有什么可窃取的。
M采用多因素零知识认证协议,M背后的思想是每个注册客户端都有一个大的密码秘密。然后,他们用零知识证明向服务器证明他们拥有这个秘密。这就消除了在服务器上存储任何与客户端机密相关的信息的要求。
你可以阅读https://www.miracl.com/miracl-labs/m-pin-a-multi-factor-zero-knowledge-authentication-protocol的迈克斯科特博士的完整密码论文
https://crypto.stackexchange.com/questions/25338
复制相似问题