亚历克斯·维特

发布于:19/04/2018
分享!
By 发布于:19/04/2018

JavaScript 类 SecureRandom() 其中有一个错误并且不能生成真正安全的密钥。

它与加密货币有何关系?

有许多基于浏览器的加密货币产品 仍在使用 流行 SecureRandom() JS 类。JavaScript 在创建基于浏览器的产品方面非常流行,但对于加密目的来说并不是一个好东西。主要问题是 JS 不是一种类型安全的语言。

类型安全 是一个复杂的话题,对于“类型安全”语言到底是什么,目前还没有一个统一的定义,但几乎根据任何定义,JavaScript 都不是类型安全的。这意味着 JS 不会真正阻止或防止加密中不允许的类型错误。

结论是,浏览器内由 JS 工具生成的所有加密钱包都具有(有些仍然具有!)足够可预测的密钥,可以通过暴力攻击破解。是的,这些密钥具有适当的长度(从加密角度而言),但由于 JavaScript 类中的错误,其熵小于 48 位。

情深 技术说明.

现在做什么?

事实上,这没什么可做的。就像所有好的加密货币漏洞一样,这个漏洞并不新鲜——以下是 Greg Maxwell 对此的近况 三年前 (51:00 开始):

如果您符合以下情况,则会出现此问题:

  • 使用旧的加密货币地址
  • 它们是用 JavaScript 生成的, ,在网络浏览器中

可能受到影响:

  • 2013 年之前的 BitAddress;
  • 2014年之前的bitcoinjs;
  • 当前 使用 Github 的过时 repos 的软件。

该怎么办:

  • 将您的资金从这些地址中转移出去
  • 不要再使用它们

这会降低密钥被破解的风险,但总的来说,这些信息应该会让你不再认为现代加密密钥需要很长时间才能被破解。事实证明,它可能在一周内就被破解。

 

一些有趣的事实:

JavaScript 最初被称为 LiveScript。它不是由 Sun Microsystems 开发的(因为 爪哇岛),也没有充分的理由将 LiveScript 重命名为 JavaScript。这导致人们混淆,认为 JavaScript 在某种程度上与 Java 有关,但 JavaScript 是一种不同的语言,它与 Lisp 或 Scheme 等函数式语言的共同点多于与 Java 的共同点。

JavaScript 是一种实际的高级解释型编程语言,而不是脚本,因为 -脚本 后缀表明。