【问题标题】:Browser-Based SRP without Java没有 Java 的基于浏览器的 SRP
【发布时间】:2015-10-06 05:53:36
【问题描述】:

我正在考虑实施安全远程密码协议,以在浏览器和我的 Web 应用程序之间进行零知识密码证明。 SRP 网站提供了一个示例,但它需要 java 来执行计算。我想知道是否可以在不使用 Java 的情况下使用 javascript 来实现 SRP,因为我不想要求我的用户安装 Java,特别是因为我的观众将是一个有安全意识的人,他们可能会考虑拥有的风险与零知识密码证明相比,java 插件对其安全性造成了更大的风险。

这是他们演示的链接:http://srp.stanford.edu/demo/

【问题讨论】:

  • +1 用于使用 Thomas Wu 的安全远程密码 (SRP)。我真的喜欢那个协议。它提供相互身份验证、通道绑定,并且基于 Diffie-Hellman。您可能感兴趣的另一个是预共享密钥 (PSK)。它还提供相互身份验证和通道绑定,但它基于像 AES 这样的分组密码。它们可用的是 SSL,但很少使用:TLS_SRP 和 TLS-PSK。
  • 我会研究那个协议。不幸的是,我可能最终不会使用 SRP,因为我不想让 java 插件成为用户的必需品,因为它的安全记录很差。
  • different Session Keys in SRP6a 的另一个人正在遭受类似的痛苦。
  • JavaScript 和密码学存在各种各样的问题。选定的答案提到了一些正在进行的项目,但没有一个可以解决一些基本的信任问题,参考:nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/august/…

标签: javascript html cryptography srp-protocol


【解决方案1】:

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

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

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

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

您也许可以在 Javascript 库中找到它,但我预计它会很慢(或比本机实现慢)。


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

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

【讨论】:

  • 如果有库,答案是YES,这是可能的,但在未实现 WebCrypto 的浏览器上性能较慢。另外,即使速度慢,也比Java好。
  • Thinbus SRP 是一个纯 JS 实现,它说“使用演示 2048 位素数,现代开发人员工作站需要不到 90 毫秒的时间来计算。在四年前的 Mac 浏览器上尝试更小的 1024 位素数运行主要的 srp 工作需要 0.05 秒到 0.10 秒。"
【解决方案2】:

我在 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/modules/biginteger.js

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多