密码学 Python:Diffie-Hellman 密钥交换实现

Cryptography Python: Diffie-Hellman key exchange implementation

我目前正在尝试使用 python 密码模块构建 Ephemeral Diffie-Hellman 算法的实现。对我们的目的而言,对用户进行身份验证很重要。 Alice 和 Bob 都有一个 public-私钥对和一个由证书颁发机构签名的证书,以便能够验证他们的 public 密钥和 link 到他们的身份。

使用经过身份验证的 DH 意味着发送的消息(见图)将使用上述私钥进行签名。

有关使用 python 加密库的 DH 的文档可在此处找到: https://cryptography.io/en/latest/hazmat/primitives/asymmetric/dh/

但是,我似乎无法理解所描述的交换函数的实际作用。 有谁能向我解释将它放在 DH 算法中的什么位置? 最好使用下图的类比:

提前致谢!

在他们的示例中(来自 Alice 的 POV),private_key 是橙色涂料,peer_public_key 是浅蓝色涂料。 shared_key 是最后的棕色油漆。这当然意味着你需要做两次,一次给 Bob,一次给 Alice。

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