1、通信方A和通信方B约定一个初始数g,如g=5,一个质数p,如p=23,g和p是公开的,且1< g < p
2、A生成一个随机数a,a是保密的,如a=6
3、A计算g^a%p发送给B,g^a%p=5^6%23=8
4、B生成一个随机数b,b是保密的,如b=15
5、B计算g^b%p发送给A,g^b%p=5^15%23=19
6、A接收到g^b%p后,再使用保密的a,计算(g^b%p)^a%p=19^6%23=2
7、B接收到g^a%p后,再使用保密的b,计算(g^a%p)^b%p=8^15%23=2
8、这样通信方A和B得到一个相同的密钥:2
(g^b%p)^a%p=(g^a%p)^b%p的证明:
如果a=2:
(g^b%p)^a%p=(g^b%p)^2%p=(g^b-n*p)^2%p=(g^(2*b)-2*g^b*n*p+(n*p)^2)%p=g^(2*b)%p
可以看出(g^b-n*p)^2展开后除g^(2*b)外,其它都是p的倍数,所以整个算式的结果是g^(2*b)%p
同理对(g^b-n*p)^a展开后除g^(a*b)外,其它都是p的