【发布时间】:2019-03-01 12:08:31
【问题描述】:
我已经根据 Alice 的 24 字助记符生成了主 pub/priv 密钥对。
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',
同样,我重复了相同的过程来为 Bob 生成密钥。现在我想从 Alice 的私钥和 Bob 的公钥生成 Diffie-Hellman 密钥。 python 中 Diffie-Hellman 的所有实现都会生成自己的公钥/私钥对。
来自secp256k1 python documentation:
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 未启用
我尝试安装https://github.com/bitcoin-core/secp256k1,按照说明安装并输出:
Libraries have been installed in:
/usr/local/lib
现在,当我尝试再次使用 python 3.6 安装 secp256k1 时,正如他们的 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")
【问题讨论】:
-
我可能错了,但我很确定 Diffie-Hellman 不会接受任何形式的输入。
-
Elliptic-curve Diffie-Hellman (ECDH) 是一种匿名密钥协商协议,它允许双方(各自拥有一个椭圆曲线公钥-私钥对)通过不安全的通道建立共享秘密。 [1][2][3]这个共享的秘密可以直接用作密钥,或者派生另一个密钥。然后,该密钥或派生密钥可用于使用对称密钥密码加密后续通信。它是使用椭圆曲线密码术的 Diffie-Hellman 协议的变体。
-
嗯,有什么问题吗?是“如何编译 secp256k1”?
-
我只需要一个库,它可以帮助我根据我从 24 字助记符生成的密钥生成 dh 密钥,我发现的唯一库是 secp256k1,它是 libsecp256k1 上的 python 包装器,但没有关于如何使用 libsecp256k1 编译 python 包装器的文档,以便 dh 真正起作用。
-
好吧,要求图书馆推荐是题外话。如果您需要帮助使 secp256k1 正常工作,您应该解释什么不工作。
标签: python encryption-asymmetric