Diffie-Hellman 密钥交换。
Alice 和 Bob 使用 Diffie-Hellman 密钥交换来共享秘密。 他们从质数开始,选取私钥,生成并交换公钥,然后生成共享的密钥。
测试程序会提供质数 p 和 g。
Alice 选取一个私钥 a,它大于 1 且小于 p。 Bob 同样选取一个私钥 b。
Alice 计算出公钥 A。
A = gᵃ mod p
Bob 使用相同的 p 和 g,同样根据他的私钥 b 计算出公钥 B。
Alice 和 Bob 交换公钥。 Alice 计算出密钥 s。
s = Bᵃ mod p
Bob 计算出
s = Aᵇ mod p
两次计算得到的结果相同! 现在 Alice 和 Bob 共享密钥 s。
从 Python 3.6 开始,有两个不同的模块可以用来生成“随机”数:
名为random的模块是伪随机的,也就是说它不会生成真正的随机性,而是遵循某种模拟随机性的算法。
由于这些“随机数”是通过一个已知算法生成的,它们并不是真正随机的。因此,random 模块不适合用于密码学,也不应该使用,正是因为它只是伪随机的。
名为secrets的模块可以生成密码学安全的“随机”数,提供密码学所需的更高安全性。
严格来说,它们仍然是伪随机的,但它们能保证所生成的数字绝对不可预测。
由于这只是一个练习,使用random模块是没问题的,但要注意,如果真的用于密码学,那会非常不安全。