【问题标题】:Is it unsafe to store private keys on JavaScript strings?将私钥存储在 JavaScript 字符串上是否不安全?
【发布时间】:2017-04-13 19:43:32
【问题描述】:

加密应用程序在处理私钥时需要格外小心。例如,他们通常会尽可能长时间地将加密的内容留在磁盘上。需要时,他们解密密钥,执行所需操作,然后将其从内存中完全擦除(通过清理缓冲区)。

在 JavaScript 上,缓冲区也可以用于私钥,但字符串通常更方便。将私钥存储在字符串上可能不是一个好主意,因为您不能主动从内存中擦除字符串,您必须等待垃圾回收。此外,只需一次内存泄漏,您的私钥就不会被收集;然后是字符串实习。

我是否过于谨慎,并且足够谨慎,使用字符串存储私钥是安全的,还是我是对的,总体而言这是一个糟糕的主意?

【问题讨论】:

  • 这里的上下文是什么?你的 JavaScript 代码在哪里运行?节点?
  • @Pointy 我们正在设计一个用于签署加密货币交易的库(使用 ECDSA)。它可以在 Node.js、网站、Electron 应用程序上使用,它并不是真正的单一上下文。我们正在决定使用字符串而不是缓冲区作为私钥参数是否是个好主意。

标签: javascript node.js garbage-collection cryptography v8


【解决方案1】:

在node.js部分,更安全。

在浏览器 javascript 中,这是非常不安全的。用户可以通过 Chrome 或 Firefox 的控制台轻松地在浏览器 javascript 中记录变量的内容。

【讨论】:

  • 关于浏览器案例:这里到底是什么问题?私钥应该是特定于用户的。如果用户可以访问自己的密钥,我认为没有理由更改它。你能给出一些不是这种情况的场景吗?第三方或攻击者如何利用它?
  • @skiilaa 像这样将私钥保存在内存中真的安全吗?没有任何正在运行的应用程序能够窥探该内存吗?
  • @MaiaVictor 是的,但是如果您将其存储在文件中,应用程序将能够打开该文件等。
  • @ArtjomB。我认为他的意思是 Twitter API 密钥之类的东西。
  • @skiilaa 好的,但这将是一个秘密密钥,而不是公共-私人密钥对中的私人密钥。
猜你喜欢
  • 2012-08-05
  • 2019-08-15
  • 2020-10-18
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
相关资源
最近更新 更多