BitGo丢失密码

时间:2017-11-20 16:04:32

标签: node.js cryptography aes bitcoin

我的一位朋友丢失了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是包含所使用的AES密钥的16,24或32字节Buffer对象   加密

我认为这是加密私钥的关键,但我会在哪里得到它以及它与丢失的密码有什么关系?

任何帮助非常感谢

*附录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)如(a.hasOwnProperty(b))的开关(b.match(/ ^ [A-Z0-9] + $ / I)|| P(新   sjcl.exception.invalid(“json encode:invalid property   name“)),c + = d +'”'+ b +'“:',d =”,“,typeof a [b]){case”number“:case   “布尔”:C + = A [B];打破;案件   “字符串”:C + = ' “ '+逸出(一个[B])+'”';打破;案件   “对象”:C + = ' “ '+ sjcl.codec.base64.fromBits(一个并[b],0)+'”';断裂;默认:P(新   sjcl.exception.bug(“json encode:unsupported type”))}}返回   C + “}”},解码:函数(){A = a.replace(/ \ S / G “”); a.match(/^{.*}$/)|| P(新   sjcl.exception.invalid(“json decode:这不是json!”));

     

TypeError:a.replace不是函数       at Object.decode(/Users/ekkis/D​​evelopment/decrypt/node_modules/sjcl-all/sjcl.js:66:438)       at 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)       at 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。但它对我来说很好看!任何帮助非常感谢

1 个答案:

答案 0 :(得分:3)

此加密的JSON blob由SJCL库(https://www.npmjs.com/package/sjcl)生成。解密将使用sjcl.decrypt(“password”,json_blob)完成。但是,如果您的朋友尚未与BitGo [bitgo.com的支持]保持联系,我建议先行。