简单题意:
给定一个质数 $P$ 和其原根 $g$,给定 $X$ 求 $g^x \equiv X \pmod p$ 的非负整数解 $x$。
假定通讯双方名为 $\text{Alice}$ 和 $\text{Bob}$ ,协议的工作过程描述如下(其中 $\bmod$ 表示取模运算) :
协议规定一个固定的质数 $P$ ,以及模 $P$ 的一个原根 $g$ 。 $P$ 和 $g$ 的数值都是公开的,无需保密。
$\text{Alice}$ 生成一个随机数 $a$ ,并计算 $A=g^a \bmod P$, 将 $A$ 通过不安全信道发送给Bob。
$\text{Bob}$ 生成一个随机数 $b$ ,并计算 $B=g^b \bmod P$ ,将 $B$ 通过不安全信道发送给 $\text{Alice}$ 。
$\text{Bob}$ 根据收到的 $A$ 计算出 $K=A^b\bmod P$ ,而 Alice 根据收到的 $B$ 计算出$K=B^a\bmod P$。
双方得到了相同的 $K$ 即 $g^{ab} \bmod P$。 $K$ 可以用于之后通讯的加密密钥。
可见,这个过程中可能被窃听的只有 $A,B$ ,而 $a,b,K$ 是保密的。并且根据 $A,B,P,g$ 这 $4$ 个数,不能轻易计算出 $K$ ,因此 $K$ 可以作为一个安全的密钥。
当然安全是相对的,该协议的安全性取决于数值的大小,通常 $a,b,P$ 都选取数百位以上的大整数以避免被破解。然而如果 $\text{Alice}$ 和 $\text{Bob}$ 编程时偷懒,为了避免实现大数运算,选择的数值都小于 $2^{31}$ ,那么破解他们的密钥就比较容易了。
链接
题解
$\text{BSGS}$ 模版题,甚至连分类讨论都没有…
代码
|
|