我的一位朋友丢失了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/Development/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/Development/decrypt/node_modules/sjcl-all/sjcl.js:66:438) at 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) 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。但它对我来说很好看!任何帮助非常感谢
答案 0 :(得分:3)
此加密的JSON blob由SJCL库(https://www.npmjs.com/package/sjcl)生成。解密将使用sjcl.decrypt(“password”,json_blob)完成。但是,如果您的朋友尚未与BitGo [bitgo.com的支持]保持联系,我建议先行。