轨道
/
Python
Python
/
练习
/
Diffie-Hellman
Diffie-Hellman

Diffie-Hellman

简单

说明

Diffie-Hellman 密钥交换。

Alice 和 Bob 使用 Diffie-Hellman 密钥交换来共享秘密。 他们从质数开始,选取私钥,生成并交换公钥,然后生成共享的密钥。

步骤 0

测试程序会提供质数 p 和 g。

步骤 1

Alice 选取一个私钥 a,它大于 1 且小于 p。 Bob 同样选取一个私钥 b。

步骤 2

Alice 计算出公钥 A。

A = gᵃ mod p

Bob 使用相同的 p 和 g,同样根据他的私钥 b 计算出公钥 B。

步骤 3

Alice 和 Bob 交换公钥。 Alice 计算出密钥 s。

s = Bᵃ mod p

Bob 计算出

s = Aᵇ mod p

两次计算得到的结果相同! 现在 Alice 和 Bob 共享密钥 s。

这里该用 random 还是 secrets?

从 Python 3.6 开始,有两个不同的模块可以用来生成“随机”数:

名为random的模块是伪随机的,也就是说它不会生成真正的随机性,而是遵循某种模拟随机性的算法。 由于这些“随机数”是通过一个已知算法生成的,它们并不是真正随机的。因此,random 模块不适合用于密码学,也不应该使用,正是因为它只是伪随机的。

名为secrets的模块可以生成密码学安全的“随机”数,提供密码学所需的更高安全性。 严格来说,它们仍然是伪随机的,但它们能保证所生成的数字绝对不可预测。

由于这只是一个练习,使用random模块是没问题的,但要注意,如果真的用于密码学,那会非常不安全。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Python Exercism

准备好开始 Diffie-Hellman 了吗?

注册 Exercism,借助 17 个概念146 个练习 和真人导师指导,学习并掌握 Python,全部免费。