Создайте подпись с помощью ECDH NodeJS

Мне не удалось создать подпись для владения закрытым ключом с помощью модуля шифрования Node. Как я могу сделать это со следующими открытыми и закрытыми ключами в шестнадцатеричном формате:

const crypto = require("crypto");

const ecdh = crypto.createECDH("secp256k1");
ecdh.generateKeys();
const privateKey = ecdh.getPrivateKey("hex");
const publicKey = ecdh.getPublicKey("hex");

Рад за Даниила, что им удалось набрать репутацию, но вы просили генерацию подписи...

Maarten Bodewes 06.04.2023 03:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
77
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

https://en.wikipedia.org/wiki/Key_generation

https://en.wikipedia.org/wiki/Elliptic-curve_cryptography

ECDH — это ключевое соглашение, а не генерация подписи. В конце концов, DH означает Диффи-Хеллмана.

Попробуйте другой пример, такой как найденный здесь для ECDSA (алгоритм цифровой подписи EC). Да, в примере отсутствует слово DSA, но это просто дерьмовый дизайн API (извините, другого слова для него нет). Конечно, вам нужно заменить данное имя кривой на "secp256k1"; Я только что проверил это, и это работает.

Обратите внимание, что в принципе открытый и закрытый ключи идентичны по форме тем, которые вы создали, поэтому опять же, в принципе, вы можете использовать генерацию пары ключей ECDH, а затем использовать ECDSA как связанный. Это не имеет смысла как исходный код (и с редкой документацией я не могу заставить его работать), но математически это должно быть возможно.

Другие вопросы по теме