Использование сертификатов HyperLedger Fabric для подписи сообщения

#certificate #hyperledger-fabric

#сертификат #hyperledger-ткань

Вопрос:

Мы сгенерировали открытые и закрытые ключи в Hyperledger Fabric, используя его API, которые хранятся в папке 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.

Комментарии:

1. Что вы используете для генерации пары ключей?

2. Использование caClient.register(enrollmentID:имя пользователя, принадлежность:userOrg.toLowerCase(), Тип:user, attrs:[{имя: «роль», значение: attr, ecert:true}]}, adminUserObj); открытые и закрытые ключи вызова метода были сгенерированы и сохранены в папке crypto_material.

Ответ №1:

Я предполагаю, что вы выполнили регистрацию после регистрации удостоверения с помощью register.

На самом деле у вас возникнет множество проблем с тем, что вы пытаетесь сделать.

  1. Центр сертификации Fabric генерирует ключи EC, используя кривые, одобренные NIST (например, secp256r1, secp384r1), а не secp256k1, используемые биткойнами
  2. Центр сертификации Fabric создает закрытый ключ и сертификат X509 из соответствующего открытого ключа
  3. Закрытый ключ и сертификат X509 также возвращаются в виде больших двоичных объектов в кодировке PEM.

Существует множество библиотек, которые вы можете использовать для подписи / проверки с использованием закрытых ключей в кодировке PEM и сертификатов X509. jsrsasign довольно прост.

Вы также можете использовать некоторые модули, предоставляемые SDK узла Fabric, в зависимости от того, что вы делаете.

Комментарии:

1. Хорошо, Гари Сингх, я попробую приведенные выше предложения. Мы настроили сеть блокчейна с использованием HLF, и я хочу, чтобы машина за пределами HLF N / W отправляла сообщение, зашифрованное с использованием закрытого ключа HLF, в HLF N / W. Для достижения этой цели мы пытаемся зашифровать сообщение, сгенерированное на компьютере за пределами HLF N / W, используя закрытый ключ HLF, и отправить его в HLF N / W, где его можно проверить на подлинность и целостность, используя открытый ключ HLF. Сообщение будет отправлено в HLF N / W через промежуточное приложение шлюза, которое действует как клиент HLF.

2. Вы хотите зашифровать или подписать?

3. шифрование и дешифрование на двух разных компьютерах, и я ищу Node.js модули на основе