密码学-04-离散对数问题与Diffie-Hellman密钥交换
在现代密码学中,许多算法都利用了数学上的难题。离散对数问题与大数分解问题这两个数学难题是非对称密码学的两块基石。本文着重介绍离散对数问题,以及它在 Diffie-Hellman 密钥交换协议当中的应用。
离散对数问题
在实数中对数
定义:给定群
设元素
注意这里
,代表定义在 上的群运算对元素 作用 次。
离散对数问题在一些群上很容易计算,例如在整数加法群上,求解离散对数相当于做整数除法。但是在一些特殊的群上,求解离散对数相当困难。
密码学中离散对数问题常用的群是基于质数
如果对群论和
不熟悉,可以参考我之前写的两篇文章:
1. 密码学-02-群论基础
2. 密码学-03-整数模 n 乘法群
快速幂模运算
幂模运算有一种快速计算方法,叫做逐次平方法(Exponentiation by squaring 或者 binary exponentiation),或者直接叫做快速幂模运算。
计算
将指数
做二进制展开,其中每个 要么是 0 要么是 1:
使用逐次平方求出做模
的 的幂次表。
可以看到,在计算的时候,是用之前计算出的 求平方,再对 取模,参与计算的数始终不会大于 ,这大大简化了计算。这一步的算法复杂度是 。 最终计算下列乘积得到
因为可以能为 0 或 1,上面这个乘积实际上是所有 为 1 的哪些 的乘积。这一步的算法复杂度也是 。
使用逐次平方法平方法可以使幂模运算的时间复杂度达到
基于离散对数的非对称密码系统,利用了如下性质:给定
Diffie-Hellman 密钥交换
离散对数问题一个典型的应用就是 Diffie-Hellman 密钥交换协议(Diffie-Hellman Key Exchange),简称 DHKE。使用这个协议,通信双方可以在完全没有对方任何预先信息的条件下,通过不安全信道创建起一个密钥。这个密钥只有通信双方知道,其他人无法获得,可以在后续的通信中作为对称密钥来加密通信内容。
下面我们来看看基于
第一步:Alice 告诉 Bob,她选取的群
第二步:Alice 选取一个整数
第三步:Bob 收到
下图详细展示了 DHKE 的协议流程。
从非对称密码系统的角度理解,
攻击者想要得到密钥
已知
离散对数当前的破解记录是由法国的数学家团队于 2019 年 12 月 2 日发布的,该团队破解了在
参考文献:
[1] Discrete logarithm: https://en.wikipedia.org/wiki/Discrete_logarithm
[2] Discrete logarithm records: https://en.wikipedia.org/wiki/Discrete_logarithm_records
[3] Diffie–Hellman key exchange: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
[4] 数论概论(原书第4版),约瑟夫H.西尔弗曼,第 16 章: https://book.douban.com/subject/26863822/