Сгенерировать ключ publi c в браузере, если у меня есть только закрытый ключ - PullRequest
0 голосов
/ 04 апреля 2020

Я генерирую новые Ethereum адреса, используя кривую scep256k1. Из-за ограничений хранилища и оборудования я могу хранить только закрытый ключ. Я ищу способы генерирования ключа publi c для асимметричного шифрования c (НЕ адреса Ethereum publi c) в браузере.

Насколько я понимаю, ключ publi c может быть получен из закрытого ключа scep256k1, но я не уверен, как это сделать в браузере или возможно ли это даже в существующих библиотеках, но я догадываюсь, что это так. В настоящее время я пытаюсь узнать, возможно ли это с Web3 js, SJCL или Crypto JS, но я открыт для других вариантов.

Чтобы дать представление о потоке здесь. Шаг 3 - это то, что я сейчас пытаюсь сделать:

  1. Сгенерируйте пару ключей scep256k1 с помощью openSSL
  2. Загрузите закрытый ключ на аппаратное устройство и передайте его пользователю
  3. Пользователь в веб-интерфейсе: используйте закрытый ключ с аппаратного обеспечения, чтобы получить доступ к его общему ключу c, и восстановите адрес Ethereum.

Любые указатели в правильном направлении приветствуются!

1 Ответ

0 голосов
/ 04 апреля 2020

Да, это тривиально.

Вам просто нужно использовать байтовый массив закрытого ключа (который фактически является 256-bit скаляром) и умножить его на secp256k1 точку генератора кривых g, которая сама является точкой на кривой, которая генерирует циклическую группу c. Адреса

ETH независимо получены из базового ключа secp256k1 publi c, который сам по себе является точкой Кривая.

Вызов метода, который вам нужен - это скалярное умножение кривой.

Генератор:

Gx = 
0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798

Gy = 
0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8

Просто добавьте эту точку к себе n раз, где n - это заказ закрытого ключа. т.е. g*k, где k - закрытый ключ, и вуаля, вы получили ключ publi c.

...