3

I am considering implementing the Secure Remote Password protocol to conduct a zero-knowledge password proof between the browser and my web application. The SRP website provides an example, but it requires java to perform calculations. I am wondering whether it is possible to implement SRP using javascript without the use of Java, as I do not want to require my users to have Java installed, particularly as my audience will be a security conscious one which would potentially consider the risk of having the java plugin enabled a greater risk to their security than a zero-knowledge password proof.

Here is the link to their demo: http://srp.stanford.edu/demo/

4

3 回答 3

2

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

如果您正在寻找一种标准化的方法,答案是 NO。

WebCrypto工作组现在正在对一些加密操作进行标准化。但是,WG 已经声明他们不会提供对模块化操作所需的底层 BigInt 原语的访问,因此您不会在第一个版本中获得所需的原语。您可能会在后续版本中获得它。请参阅邮件列表中有关 BigInteger 操作的问题。

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

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


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

他们是破坏 RFC 7469 Public Key Pinning Extension for HTTP 的人。有关详细评论,请参阅对 draft-ietf-websec-key-pinning 的评论。更糟糕的是,当他们因提供覆盖和破坏安全通道而被点名时,他们将 Draft 21 中的语言更改为 Final 以使其更加模糊和隐藏。

于 2014-03-22T07:07:55.247 回答
1

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

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

我从http://code.google.com/p/srp-js/获得灵感

您可以在https://github.com/luckyrat/KeeFox/blob/master/Firefox%20addon/KeeFox/modules/SRP.js看到最终结果

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

我尝试的前几个 BigInteger 库遇到了麻烦(大多数似乎对于 SRP 所需的操作有问题),但最终选择了https://github.com/luckyrat/KeeFox/blob/master/Firefox%20addon/KeeFox/模块/biginteger.js

我刚刚重新审视了原生 BigInteger 支持,但看起来仍然没有任何选择。

从 Firefox 插件的角度来看,我想知道 js-ctypes 是否可以访问一些 Firefox 内部,这可以让我加快速度,但我看到我以前唯一使用 ctypes 破坏了与 10 个 Firefox 版本中的 2 个的兼容性自实施以来已发布,因此除非必要,否则我对使用它们持谨慎态度。

于 2015-01-26T00:23:57.083 回答
1

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

于 2014-12-31T16:58:53.990 回答