BitGo 丢失密码

问题描述 投票:0回答:2

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

用户密钥: {“iv”:“IDMkr...UH4g0TBCofAcIg”,“v”:1,“iter”:10000,“ks”:256,“ts”:64,“模式”:“ccm”,“adata”:“ ","密码":"aes","盐":"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 字节的 Buffer 对象,包含所使用的 AES 密钥 用于加密

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

非常感谢任何帮助

* 附录一 *

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

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);

但是当我运行它时,它会呕吐,但有以下例外:

/用户/ekkis/开发/解密/node_modules/sjcl-all/sjcl.js:66 c="{",d="";for(b 中 a)if(a.hasOwnProperty(b))switch(b.match(/^[a-z0-9]+$/i)||p(新 sjcl.exception.invalid("json 编码:无效属性 名称")),c+=d+'"'+b+'":',d=",",typeof a[b]){case "数字":case “布尔值”:c+=a[b];break;case "字符串":c+='"'+escape(a[b])+'"';break;case “对象”:c+='"'+sjcl.codec.base64.fromBits(a[b],0)+'"';break;default:p(new sjcl.exception.bug("json 编码: 不支持的类型"))}return c+"}"},decode:function(a){a=a.replace(/\s/g,"");a.match(/^{.*}$/)||p(new sjcl.exception.invalid("json 解码:这不是 json!"));

TypeError:a.replace 不是函数 在 Object.decode (/Users/ekkis/Development/decrypt/node_modules/sjcl-all/sjcl.js:66:438) 在 Object.decrypt (/Users/ekkis/Development/decrypt/node_modules/sjcl-all/sjcl.js:65:473) 在对象。 (/Users/ekkis/Development/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
2个回答
3
投票

此加密的 JSON blob 由 SJCL 库生成 (https://www.npmjs.com/package/sjcl)。将使用 sjcl.decrypt("password", json_blob) 完成解密。但是,如果您的朋友尚未接触过 BitGo [bitgo.com 的支持],我首先推荐该路线。


0
投票

你直接传递了一个json对象。您需要做的是传递一个 JSON 字符串,例如:

let a = '{“iv”:“IDMkrTa5UH4g0TBCofAcIg”,“v”:“1”,“iter”:“10000”,“ks”:“256”,“ts”:“64”,“模式”: “ccm”,“adata”:“”,“密码”:“aes”,“盐”:“lI8kABgvhX0”,“ct”:“KfJUrLOmgbn67w2CRYBhcXtX0wdPF3D7ThCKaeZhTymin9hcMD5eLHIUAosmmvfA8npiDIHWgvdbHAk”}'

var s = sjcl.decrypt("密码",a);

© www.soinside.com 2019 - 2024. All rights reserved.