如何解决使用 HyperLedger Fabric 证书对消息进行签名
我们使用 Hyperledger Fabric 的 API 在 Hyperledger Fabric 中生成了公钥和私钥,这些密钥存储在 crypto_material 文件夹中。
现在,我们想在一台机器上使用私钥对消息进行签名,并在第二台机器上使用相应的公钥验证其有效性。为了完成这个任务,我们编写了如下代码。
var crypto = require("crypto");
var secp256k1 = require("secp256k1");
var fs = require("fs");
var sha256 = require('sha256')
let pub_key_file = "./keyfiles/4d4a0d669d507ff05c73c9e1ca40fb5f909f9806df138a82767a739e9de31240-pub"
fs.access(pub_key_file,fs.F_OK,(err) => {
if (err) {
console.log("readfile error : ",err);
return;
}
})
var public_key = fs.readFileSync(pub_key_file);
// Reading private key from file system.
let priv_key_file = "./keyfiles/4d4a0d669d507ff05c73c9e1ca40fb5f909f9806df138a82767a739e9de31240-priv"
fs.access(priv_key_file,err);
return;
}
})
var private_key = fs.readFileSync(priv_key_file);
var privKey = new Uint8Array(sha256(private_Key).match(/.{1,2}/g).map(byte => parseInt(byte,16)));
var pubKey = new Uint8Array(sha256(public_Key).match(/.{1,16)));
console.log(pubKey instanceof Uint8Array) //returning true here
console.log("value : ",secp256k1.privateKeyVerify(privKey)); //returning true here
console.log("value : ",secp256k1.publicKeyVerify(pubKey)); // Getting error like expected public key to be an Uint8Array with length [33,65] hyperledger fabric
为什么 secp256k1 模块可以成功验证私钥,但验证公钥失败。
解决方法
我假设您在使用注册注册身份后执行了注册。
实际上,您尝试执行的操作会遇到多个问题。
- Fabric CA 使用 NIST 批准的曲线(例如 secp256r1、secp384r1)而不是比特币使用的 secp256k1 生成 EC 密钥
- Fabric CA 根据相应的公钥生成私钥和 X509 证书
- 私钥和 X509 证书也作为 PEM 编码的 blob 返回。
您可以使用许多库来使用 PEM 编码的私钥和 X509 证书进行签名/验证。 jsrsasign 相当简单。
您也可以使用 Fabric Node SDK 提供的一些模块,具体取决于您在做什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。