Схема шифрования Диффи-Хеллмана в питоне - PullRequest
0 голосов
/ 25 сентября 2018

Я сгенерировал основные пары ключей паб / приват из мнемоники 24 слов для Алисы.

master_private_key='9f74f4534cbdf01a1f925e20108d86045bd96849af9c94534a10ef2a26ff133b',
master_public_key="0308de0952b00ebc83a41830794534ae912b86d3718832a36ce98c256ab5bfdc4e"

mnemonic='flash city relief spirit federal own metal history great hello toy volcano same subway loan bleak rapid swamp pigeon secret pyramid spoon famous blouse',

Аналогичным образом я повторил тот же процесс, чтобы сгенерировать ключи для Боба.Теперь я хочу сгенерировать ключи Диффи-Хеллмана из личного ключа Алисы и открытого ключа Боба.Все реализации Diffie-Hellman в python генерируют свою собственную пару открытый / закрытый ключ.

Из документации python secp256k1 :

ecdh(scalar) -> bytes
compute an EC Diffie-Hellman secret in constant time. The instance
public_key is used as the public point, and the scalar specified must be
composed of 32 bytes. It outputs 32 bytes representing the ECDH secret
computed. If the scalar is invalid, an Exception is raised.

ПРИМЕЧАНИЕ: ecdh можно использовать только в том случае, если библиотека secp256k1 C скомпилирована с его поддержкой.Если поддержки нет, при ее вызове будет сгенерировано исключение.

Я просто не знаю, как скомпилировать эту библиотеку с помощью libsecp256k1.Я думаю, что версия Diffie-Hellman ECC здесь больше подходит.

Это ошибка, которую я получаю:

from sawtooth_signing.secp256k1 import Secp256k1PublicKey
bob_pub='033036dd96b7bef82556fe09eef42bef5e66545317c92a5deca99275f616729fef'
 public_key = Secp256k1PublicKey.from_hex(bob_pub)

 public_key.secp256k1_public_key.ecdh(alice_private_key)
 ----------------------
  Exception                                 Traceback (most recent call last)
 <ipython-input-4-5175cf593934> in <module>()
----> 1 public_key.secp256k1_public_key.ecdh("dsds")

~/SawtoothClient/SawtoothClient/lib/python3.6/site-packages/secp256k1-0.13.2-py3.6-linux-x86_64.egg/secp256k1/__init__.py in ecdh(self, scalar)
 305         assert self.public_key, "No public key defined"
306         if not HAS_ECDH:
--> 307             raise Exception("secp256k1_ecdh not enabled")
308         if not isinstance(scalar, bytes) or len(scalar) != 32:
309             raise TypeError('scalar must be composed of 32 bytes')

Исключение: secp256k1_ecdh не включен

Я пыталсяinstall https://github.com/bitcoin-core/secp256k1, следовал инструкциям и был установлен с выводом:

Libraries have been installed in:
/usr/local/lib

Теперь, когда я снова попытался установить secp256k1 с python 3.6, как упомянуто на их странице git:

INCLUDE_DIR=include/ LIB_DIR=/usr/local/lib pip install --no-binary secp256k1,

Я получаю эту ошибку:

ERROR: You must give at least one requirement to install (see "pip help install")

1 Ответ

0 голосов
/ 26 сентября 2018

Я сделал это с помощью другой библиотеки совпадений.

import coincurve   
alice_priv = "29307c4354b7d9d311d2cec4878c0de56c93a921d300273c19577e9004de3c9f"

alice_pub = "02f3c25355c29f64ea8e9b4e11b583ac0a7d0d8235f156cffec2b73e5756aab206"

bob_pub = "03a1db8e8b047e1350958a55e0a853151d0e1f685fa5cf3772e01bccc5aa5cb2eb"

bob_priv = "4138d1b6dde34f81c38cef2630429e85847dd5b70508e37f53c844f66f19f983"

alice_coin_priv =  coincurve.PrivateKey.from_hex(alice_priv)

bob_coin_priv = coincurve.PrivateKey.from_hex(bob_priv)

binascii.hexlify(alice_coin_priv.ecdh(bob_coin_priv.public_key.public_key))

Общий секретный код в шестнадцатеричном формате

b'92959cb394b71a05d440e0e2973bc9d0e7182eb86bb94d3a260ce8353c7a0317'

Проверка работает

bob_coin_priv.ecdh(alice_coin_priv.public_key.public_key)==  alice_coin_priv.ecdh(bob_coin_priv.public_key.public_key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...