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

4

我目前正在尝试使用Python加密模块构建Ephemeral Diffie-Hellman算法的实现。对于我们的目的来说,用户的身份验证非常重要。Alice和Bob都有一个公私钥对和由证书颁发机构签名的证书,以便验证他们的公钥并将其与其身份关联起来。

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

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

然而,我似乎无法理解所描述的交换函数实际上是做什么的。 有人能否向我解释一下如何在DH算法中使用它? 最好使用以下图像的比喻:

DH-algorithm

提前致谢!

1个回答

3
在他们的例子中(从Alice的角度来看),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

1
就目前这个例子而言,需要指出parameters是通用参数。话虽如此,如果要在两个不同的文件中运行此代码,则当前代码将生成不同的公共参数集。您必须使用dh.DHParameterNumbers创建通用参数,并使用parameters.parameter_numbers()获取生成的数字。这些数字可以在无需加密的情况下通过网络发送。 - Loïc Faure-Lacroix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接