from bitcoin import *
a = 10
b = 20
a1,a2 = privkey_to_pubkey(a)
b1,b2 = privkey_to_pubkey(b)
a3,a4 = b1*a, b2*a
b3,b4 = a1*b, a2*b
if a3 == b3:
print(True)
爱丽丝有她的私钥,她的公钥,她有Bob的公钥和来自Bob的消息。
但坏人也有Bob的公钥和Bob的消息。
魔术在哪里发生,他们如何从这里获得通信?
这也不起作用:
"assets": [
"./assets",
{
"glob": "thefile.min.js",
"input": "../node_modules/thepackage/dist/",
"output": "./assets/js/"
}
]
答案 0 :(得分:2)
看起来您正在使用https://github.com/vbuterin/pybitcointools。
我认为你要做的是Diffie Hellman key agreement,这与ECDSA不同。
你的第二个例子中似乎有正确的想法,但elliptic curve point multiplication并不像你正在做的那样简单。
您正在使用的库确实具有multiply(pubkey, privkey)
功能,可以执行您想要的操作:
import bitcoin
# Simple private keys for demonstration
alice_private = 10
alice_public = bitcoin.privkey_to_pubkey(alice_private)
bob_private = 20
bob_public = bitcoin.privkey_to_pubkey(bob_private)
# Exchange public keys
alice_shared_secret = bitcoin.multiply(bob_public, alice_private)
bob_shared_secret = bitcoin.multiply(alice_public, bob_private)
if alice_shared_secret == bob_shared_secret:
print("shared secrets match")
共享密钥是曲线上的点,即(x,y)坐标对(此库中的元组)。您通常会使用X坐标并对其进行散列以获得对称加密的密钥。