wireguard使用了ECDH协商算法及noise安全框架故研究了相关知识,针对wireguard握手、数据传输通过源码进行研究。
ECDHE密钥协商算法
DH
数学性质 |
已知数据 |
独有数据 |
---|---|---|
离散对数及离散对数的幂运算有交换律 | 指数P、原根a | 各自有自己的离散对数 |
数学公式:离散对数
如果对于一个整数b和质数p的一个原根a,可以找到一个唯一的指数i,使得:
其中 成立,那么指数i称为b的以a为基数的模p的离散对数。
离散对数难题是指:当已知一个大质数p和它的一个原根a,如果给定一个b,要计算i的值是相当困难的
a为A的私钥 b为B的私钥 a或b为静态
公开 A与B
A:A = G ^ a ( mod P ) B:B = G ^ b ( mod P )
A: B ^ a ( mod P ) = k B: A ^ b ( mod P ) = k
DHE
随机生成临时的私钥a与b
ECDHE
利用了 ECC 椭圆曲线特性,可以用更少的计算量计算出公钥,以及最终的会话密钥
数学公式 |
已知数据 |
独有数据 |
---|---|---|
椭圆曲线及椭圆曲线上满足乘法交换和结合律 | 椭圆曲线、椭圆曲线上一基点G | 各自有自己的随机数私钥 |
A: 私钥 d1 公钥 Q1 = d1xG