Javascript 无Java的基于浏览器的SRP

Javascript 无Java的基于浏览器的SRP,javascript,html,cryptography,srp-protocol,Javascript,Html,Cryptography,Srp Protocol,我正在考虑实施安全远程密码协议,以便在浏览器和web应用程序之间进行零知识密码验证。SRP网站提供了一个示例,但它需要java来执行计算。我想知道是否可以在不使用Java的情况下使用javascript实现SRP,因为我不想要求我的用户安装Java,特别是当我的听众将是一个安全意识的人,这将潜在地考虑到java插件使其安全性比零知识密码证明更大的风险。p> 以下是他们演示的链接: 我想知道是否可以在不使用Java的情况下使用javascript实现SRP 如果你正在寻找一种标准化的方法,答案是否

我正在考虑实施安全远程密码协议,以便在浏览器和web应用程序之间进行零知识密码验证。SRP网站提供了一个示例,但它需要java来执行计算。我想知道是否可以在不使用Java的情况下使用javascript实现SRP,因为我不想要求我的用户安装Java,特别是当我的听众将是一个安全意识的人,这将潜在地考虑到java插件使其安全性比零知识密码证明更大的风险。p> 以下是他们演示的链接:

我想知道是否可以在不使用Java的情况下使用javascript实现SRP

如果你正在寻找一种标准化的方法,答案是否定的

政府正在对一些加密操作进行标准化。然而,工作组已经声明,他们将不提供对模块化操作所需的基本BigInt原语的访问,因此在第一个版本中您将没有所需的原语。您可以在后续版本中获得它。从他们的邮件列表中查看

更新:也不会将Diffie Hellman作为标准的一部分提供。Chrome团队甚至不会提供Diffie Hellman作为扩展。他们声称Diffie Hellman也没有用例或需求。从他们的邮件列表中查看

您可能可以在Javascript库中找到它,但我认为它会很慢(或者比本机实现慢)


相关的,请记住,拒绝您使用BigInts和Diffie Hellman的人就是在浏览器安全模型中宣布“拦截是有效用例”的人


他们就是破坏RFC 7469的人。有关详细的评论,请参阅。更糟糕的是,当他们被要求提供覆盖和破坏安全通道时,他们将草案21中的语言改为Final,使其更加模糊和隐藏。

有一个纯javascript客户端库,它对java服务器(编辑或PHP服务器)执行SRP。如果您在web中没有使用java或PHP,那么将服务器逻辑移植到web应用程序应该是相当直接的,因为它只使用标准SHA256哈希和BigInteger math,这将在其他语言中可用。

我在KeeFox中使用SRP客户机。它是一个Firefox插件,因此在向后兼容性、跨浏览器支持等方面的问题较少。不过,我认为稍微修改一下的版本在大多数现代浏览器中都可以工作

它很慢,但仍然足够快,可以偶尔使用(每个Firefox会话最多一次)

我从中获得灵感

您可以在以下位置看到最终结果:

出于我的目的,我已经优化了往返,但您必须评估自己的用例,以确定我的具体实现是否安全

我试过的前两个BigInteger库(大多数在SRP所需的操作方面似乎都有问题),但最终还是解决了

我刚刚对本机BigInteger支持进行了一次全新的研究,但看起来仍然没有任何选择


从firefox插件的角度来看,我想知道js ctypes是否可以让我访问一些Firefox内部组件,从而让我的速度加快一点,但我以前唯一一次使用ctypes破坏了与自实施以来发布的10个Firefox版本中的2个版本的兼容性,因此除非必要,否则我会小心使用它们。

可能感兴趣:+1用于使用Thomas Wu的安全远程密码(SRP)。我真的很喜欢这个礼节。它提供相互认证、通道绑定,并基于Diffie-Hellman。另一个您可能感兴趣的是预共享密钥(PSK)。它还提供相互身份验证和通道绑定,但它基于AES之类的分组密码。它们可用的是SSL,但很少使用:TLS_SRP和TLS-PSK。我将研究该协议。不幸的是,我最终可能不会使用SRP,因为我不想让java插件成为用户的需求,因为它的安全记录很差。另一位同事也在遭受类似的痛苦。JavaScript和加密技术存在各种各样的问题。选择的答案提到了一些正在进行的项目,但没有一个能够解决一些基本的信任问题,参考:如果有库,答案是肯定的,这是可能的,但在没有实现WebCrypto的浏览器上性能较慢。此外,即使速度很慢,它也比Java好。Thinbus SRP是一个纯JS实现,它说“使用演示2048位素数,现代开发人员工作站只需不到90毫秒的时间就可以完成计算。在四年前的mac上尝试较小的1024位素数,浏览器运行主要SRP工作需要0.05到0.10秒。”