【问题标题】:Using HyperLedger Fabric certificates for signing a message使用 HyperLedger Fabric 证书签署消息
【发布时间】:2020-12-30 22:54:51
【问题描述】:

我们已经使用 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, fs.F_OK, (err) => {
  if (err) {
    console.log("readfile error : ", 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,2}/g).map(byte => parseInt(byte, 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 模块可以成功验证 privateKey,但使用 publicKey 失败。

【问题讨论】:

  • 你用什么来生成密钥对?
  • 使用 caClient.register(enrollmentID:username, affiliation:userOrg.toLowercase(), Type:user, attrs:[{name:"role", value:attr, ecert:true}]},管理员用户对象);方法调用公钥和私钥已生成并存储在 crypto_material 文件夹中。

标签: certificate hyperledger-fabric


【解决方案1】:

我假设您在使用 register 注册身份后执行了 enroll

实际上,您尝试做的事情会有多个问题。

  1. Fabric CA 使用 NIST 批准的曲线(例如 secp256r1、secp384r1)而不是比特币使用的 secp256k1 生成 EC 密钥
  2. Fabric CA 从相应的公钥生成私钥和 X509 证书
  3. 私钥和 X509 证书也以 PEM 编码的 blob 形式返回。

您可以使用许多库来使用 PEM 编码的私钥和 X509 证书进行签名/验证。 jsrsasign 相当简单。

您还可以使用 Fabric Node SDK 提供的一些模块,具体取决于您正在做什么。

【讨论】:

  • OK Gari Singh,我会尝试以上建议。我们已经使用 HLF 设置了区块链网络,我希望 HLF N/W 之外的机器将使用 HLF 私钥加密的消息发送到 HLF N/W。为了实现这一点,我们尝试使用 HLF 私钥加密在 HLF N/W 之外的机器中生成的消息,并将其发送到 HLF N/W,在那里可以使用 HLF 公钥验证其真实性和完整性。消息将通过充当 HLF 客户端的中间网关应用程序发送到 HLF N/W。
  • 您要加密还是签名?
  • 在两台不同的 PC 上加密和解密,我正在寻找基于 Node.js 的模块
猜你喜欢
  • 1970-01-01
  • 2011-06-01
  • 2022-10-17
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多