我正在网上构建一个加密货币钱包,所有东西都存储在浏览器中(没有服务器)。
此时,我正在存储使用AES-128-CTR加密的所有私钥,我选择了这种方法,因为文件格式是标准的。
这个算法是否可以加密任何其他私钥,比如比特币(它不是十六进制)?
加密12个单词、助记符或任何其他字符串也是安全的吗?
以下是我的实现:https://github.com/elevenyellow/coinfy/blob/master/miscellaneous/experiments/aes-ctr-128.js
编辑:@ same在他的回应中说,我的实现完全不安全,这让我认为,myetherwallet.com也是一样的吗?因为我的代码只是一个重构:https://github.com/kvhnuke/etherwallet/blob/44074daeef3f98ca15410158b5a5403ac734a08a/app/scripts/myetherwallet.js#L196
Edit2:研究geth (Ethereum )客户端实现,除了参数kdf.n
(它们的值为262144
,而我的值为1024
)之外,没有任何不同:
发布于 2018-01-24 10:36:28
这根本不安全。从技术上讲,这是一个非主题的主题,因为这是一个编码问题,但这个实现包含许多基本错误。一个例子是使用不安全的随机数生成器,它完全破坏了加密的安全性。另一种是使用AES-128-CTR而不进行身份验证.不要尝试实现您自己的加密原语,它需要大量的工作,并且容易导致完全失败的模糊错误。使用现有的库,该库提供基于安全原语的构造,这些原语可以满足您的需要。这在很大程度上意味着锂钠,锂氢,tweetnacl,或类似的图书馆。
如果使用there,就会有一个编译成JS:https://github.com/jedisct1/libsodium.js的版本
这里的文档:https://download.libsodium.org/doc/
您正在寻找经过身份验证的加密函数(crypto_secretbox_easy及其助手)。
利伯钠可以加密你想要的任何东西。此外,比特币私钥只是位字符串,就像Ethereum私钥一样。它们可以像任何其他编码一样容易地用十六进制表示。
https://crypto.stackexchange.com/questions/54994
复制相似问题