#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.
На самом деле у вас возникнет множество проблем с тем, что вы пытаетесь сделать.
- Центр сертификации Fabric генерирует ключи EC, используя кривые, одобренные NIST (например, secp256r1, secp384r1), а не secp256k1, используемые биткойнами
- Центр сертификации Fabric создает закрытый ключ и сертификат X509 из соответствующего открытого ключа
- Закрытый ключ и сертификат 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 модули на основе