Мне не удалось создать подпись для владения закрытым ключом с помощью модуля шифрования Node. Как я могу сделать это со следующими открытыми и закрытыми ключами в шестнадцатеричном формате:
const crypto = require("crypto");
const ecdh = crypto.createECDH("secp256k1");
ecdh.generateKeys();
const privateKey = ecdh.getPrivateKey("hex");
const publicKey = ecdh.getPublicKey("hex");
ECDH - это алгоритм генерации секретов для криптографических алгоритмов.
Вы должны вычислить секрет, который зависит от другого открытого ключа:
const secret = ecdh.computeSecret(anotherPublicKeyInHex, 'hex');
И используйте его в шифровании/расшифровке:
crypto.createCipheriv('some-algorithm', secret, initialVector, options);
crypto.createDecipheriv('some-algorithm', secret, initialVector, options);
Если вы не знаете, что вы можете с этим сделать, не используйте это. Во-первых, вам нужно прочитать больше информации о криптографическом алгоритме, алгоритмах генерации секретов и т. д.
https://en.wikipedia.org/wiki/Public-key_cryptography
ECDH — это ключевое соглашение, а не генерация подписи. В конце концов, DH означает Диффи-Хеллмана.
Попробуйте другой пример, такой как найденный здесь для ECDSA (алгоритм цифровой подписи EC). Да, в примере отсутствует слово DSA, но это просто дерьмовый дизайн API (извините, другого слова для него нет). Конечно, вам нужно заменить данное имя кривой на "secp256k1"
; Я только что проверил это, и это работает.
Обратите внимание, что в принципе открытый и закрытый ключи идентичны по форме тем, которые вы создали, поэтому опять же, в принципе, вы можете использовать генерацию пары ключей ECDH, а затем использовать ECDSA как связанный. Это не имеет смысла как исходный код (и с редкой документацией я не могу заставить его работать), но математически это должно быть возможно.
Рад за Даниила, что им удалось набрать репутацию, но вы просили генерацию подписи...