Есть ли способ получить базовую точку (P), используемую для ECDH в криптографическом модуле node.js? - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь установить протокол Eiffiptic Curve Diffie-Hellman (ECDH) между двумя одноранговыми узлами, один из которых работает в приложении Node.js, а другой - в приложении на Си.

Для этого я решил установить начальные параметры (кривую и базовую точку) на стороне Node.js, а затем передать их в приложение C (в основном абстрагирование процесса согласования).

*Модуль 1004 * Node.js Crypto используется, но он не предоставляет средства для получения базовой точки, генерируемой при вызове метода ECDG.generateKeys() (основано на предположении, поскольку документация не очень понятна в этом разделе).

Базовая точка уже определена в спецификации?

Любые мысли по этому поводу были бы действительно полезны!

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Криптография ECC действительно быстра по сравнению с другими асимметричными примитивами, такими как RSA и стандартный DH.Однако генерация параметров домена для кривой очень медленная;думаю, что часы даже для небольших размеров.Поэтому обычно параметры кривой выбираются из набора известных именованных кривых.Большинство известных кривых находятся на веб-сайте безопасных кривых проф. Даниэля Бернштейна и Тани Ланге.

Обычно кривая, используемая в протоколе, всегда является специфическим типом, напримеркривые над F (p) называются простыми кривыми.Затем выбирается один набор параметров домена, например, стандартизированные кривые NIST.И, наконец, набор параметров домена устанавливается.Обычно это выполняется по имени (например, просто NIST P-256) или по идентификатору (например, 1.2.840.10045.3.1.7 или {iso (1) member-body (2) us (840) ansi-x962 (10045) кривых (3) prime (1) prime256v1 (7)} полностью).

Для Node.JS вы выбрали параметры (включая кривую и базовую точку) перед тем, как сгенерировать пару ключей для этих параметров.:

const alice = crypto.createECDH('secp521r1');
const aliceKey = alice.generateKeys();

первый из них уже устанавливает все параметры домена 6/7.Генерация ключа затем просто генерирует случайное секретное значение s для личного ключа.После умножения на базовую точку G вы получите общую точку W, которая завершает набор параметров для выполнения криптографии на основе EC.

0 голосов
/ 13 июня 2018

Итак, я провел еще несколько исследований по этой теме и обнаружил, что в соответствии со спецификацией NIST каждая кривая уже имеет определенную базовую точку в качестве одного из предопределенных параметров.Я полагаю, что реализация Node.js Crypto соответствует этой спецификации, так что не нужно вообще беспокоиться о передаче этого параметра.

...