我目前正在尝试使用python加密模块构建Ephemeral Diffie-Hellman算法的实现。对于我们的目的而言,对用户进行身份验证非常重要。 Alice和Bob都有一个公钥 - 私钥对和一个由证书颁发机构签名的证书,以便能够验证他们的公钥并将其链接到他们的身份。
使用经过身份验证的DH意味着将使用上述私钥对已发送的消息(请参阅图像)进行签名。
可以在此处找到使用python加密库的DH文档: https://cryptography.io/en/latest/hazmat/primitives/asymmetric/dh/
但是,我似乎无法理解所描述的交换功能实际上是做什么的。 有人能够向我解释在DH算法中将它置于何处? 最好使用下图的类比:
提前致谢!
答案 0 :(得分:2)
在他们的例子中(来自爱丽丝的POV),private_key
是橙色油漆,peer_public_key
是浅蓝色油漆。 shared_key
最后是棕色油漆。这当然意味着你需要做两次,一次是鲍勃,一次是爱丽丝。
python2中的示例代码:
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import dh
parameters = dh.generate_parameters(generator=2, key_size=512, backend=default_backend())
a_private_key = parameters.generate_private_key()
a_peer_public_key = a_private_key.public_key()
b_private_key = parameters.generate_private_key()
b_peer_public_key = b_private_key.public_key()
a_shared_key = a_private_key.exchange(b_peer_public_key)
b_shared_key = b_private_key.exchange(a_peer_public_key)
print 'a_secret: '+a_shared_key
print 'b_secret: '+b_shared_key