【问题标题】:BitGo lost passwordBitGo 密码丢失
【发布时间】:2017-11-20 16:04:32
【问题描述】:

我的一个朋友丢失了她的 BitGo 帐户密码。她的“钥匙卡”包含她的私钥,格式为(出于安全原因已编辑实际信息):

用户密钥: {"iv":"IDMkr...UH4g0TBCofAcIg","v":1,"iter":10000,"ks":256,"ts":64,"mode":"ccm","adata":" ","cipher":"aes","salt":"lI8k...vhX0","ct":"Kf...LOmgbn67w2CRYBhcXtX 0wdPF3D7ThCKaeZhTymin9hcMD5eL...AosmmvfA8npiDIHWgvdbHAk"}

很明显,“ct”(密文)是使用 AES 256 CCM 加密的。我找到了一个模块 (https://github.com/spark/node-aes-ccm),它可以帮助我解密私钥 ("ct"),但该模块的文档不是很有帮助:

decrypt(key, iv, ciphertext, aad, auth_tag)

key, iv, plaintext, aad, and auth_tag are all Buffer objects. decrypt will return an object like the following:

{
  plaintext: Buffer,
  auth_ok: Boolean
}

所以除了参数是缓冲区之外,没有对它们的描述......但是,似乎除了密钥之外我已经拥有了我需要的一切。阅读相关模块上的文档 (https://github.com/xorbit/node-aes-gcm):

key 是一个 16、24 或 32 字节的缓冲区对象,包含使用的 AES 密钥 用于加密

我认为这是用于加密私钥的密钥,但我从哪里得到它以及它与丢失的密码有何关系?

非常感谢任何帮助

* 附录 I *

我的朋友想出了密码,所以按照下面 Ben 的建议,我想尝试一下。代码很简单:

var sjcl = require('sjcl-all');

var s = sjcl.decrypt("ThePassword", {
    "iv":"IDMkrTa5UH4g0TBCofAcIg",
    "v":"1",
    "iter":"10000",
    "ks":"256",
    "ts":"64",
    "mode":"ccm",
    "adata":"",
    "cipher":"aes",
    "salt":"lI8kABgvhX0",
    "ct":"KfJUrLOmgbn67w2CRYBhcXtX0wdPF3D7ThCKaeZhTymin9hcMD5eLHIUAosmmvfA8npiDIHWgvdbHAk"
    }
);
console.log(s);

但是当我运行它时,它会吐出以下异常:

/Users/ekkis/D​​evelopment/decrypt/node_modules/sjcl-all/sjcl.js:66 c="{",d="";for(b in a)if(a.hasOwnProperty(b))switch(b.match(/^[a-z0-9]+$/i)||p(新 sjcl.exception.invalid("json 编码:无效属性 name")),c+=d+'"'+b+'":',d=",",typeof a[b]){case "number":case "布尔":c+=a[b];break;case "string":c+='"'+escape(a[b])+'"';break;case "object":c+='"'+sjcl.codec.base64.fromBits(a[b],0)+'"';break;default:p(new sjcl.exception.bug("json encode: unsupported type"))}return c+"}"},decode:function(a){a=a.replace(/\s/g,"");a.match(/^{.*}$/)||p(new sjcl.exception.invalid("json decode: 这不是 json!"));

TypeError: a.replace 不是函数 在 Object.decode (/Users/ekkis/D​​evelopment/decrypt/node_modules/sjcl-all/sjcl.js:66:438) 在 Object.decrypt (/Users/ekkis/D​​evelopment/decrypt/node_modules/sjcl-all/sjcl.js:65:473) 在对象。 (/Users/ekkis/D​​evelopment/decrypt/buff.js:3:14) 在 Module._compile (module.js:571:32) 在 Object.Module._extensions..js (module.js:580:10) 在 Module.load (module.js:488:32) 在 tryModuleLoad (module.js:447:12) 在 Function.Module._load (module.js:439:3) 在 Module.runMain (module.js:605:10) 运行时 (bootstrap_node.js:425:7)

所以它抱怨 json 不是 json。但对我来说看起来不错!非常感谢任何帮助

【问题讨论】:

  • 如果没有秘密密码就可以轻松解码,那么系统的整个安全性将不存在。据推测,您丢失密钥正是确保它安全的原因。

标签: node.js cryptography aes bitcoin


【解决方案1】:

这个加密的 JSON blob 由 SJCL 库 (https://www.npmjs.com/package/sjcl) 生成。将使用 sjcl.decrypt("password", json_blob) 进行解密。但是,如果您的朋友还没有接触过 BitGo [support at bitgo.com],我建议您先使用这条路线。

【讨论】:

  • 本,谢谢您的回复。她一直与技术支持保持联系,但由于她的钱包“旧”(无论这意味着什么),她无法使用密码恢复系统。因此,他们已经摆脱了这个问题,并将她推荐给了一些需要 20% 来暴力破解密码的戴夫家伙。所以与其付钱给他,我想我会寻求一些指导并尝试自己做。感谢您对解密调用的引用。我会尝试一下并报告成功。我遇到过其他人有同样的困境
  • 我的朋友迫不及待地想弄清楚这一点,所以她付钱给 Dave 以恢复密码。他发现这是她认为的密码。所以这是一次非常昂贵的经历
  • 我在帖子中添加了附录,请参见上文
猜你喜欢
  • 2021-10-20
  • 2016-01-03
  • 2020-12-20
  • 2013-05-30
  • 2021-08-31
  • 2020-12-18
  • 1970-01-01
  • 2013-07-06
  • 2012-06-05
相关资源
最近更新 更多