离散对数问题

离散对数公钥加密算法是目前最为热门的公钥加密算法 ,其安全性要远远高于基于大数分解的RSA算法。

离散对数问题可以描述为:给定一个质数p,和有限域Zp上的一个本原元a,对Zp上整数b,寻找唯一的整数c,使得a^c≡b(mod p)。一般的,如果仔细选择p,则认为该问题是难解的,且目前还没有找到计算离散对数问题的多项式时间算法。为了抵抗已知的攻击,p至少应该是150位的十进制整数,且p-1至少有一个大的素数因子。

下面是一个使用离散对数的例子:

Alice和Bob首先商议好p的值,本例假设为p=2579,则本原元为a=2。

假设Alice要发送消息x=1299给Bob,则

1)Bob选择随机数r=765作为自己的私钥,计算q=2^r mod p=2^756 mod 2579=949,作为公钥给Alice;

2)Alice选择随机数k=853,计算y=2^k mod p=2^853 mod 2579=435,作为公钥给Bob;

3)Alice计算密文e=x*q%k mod p=1299*949^853 mod 2579=2396,并传递给Bob;

4)Bob接收到密文后,计算x=e*(y^r)^(-1) mod p=2396*(435^765)^(-1) mod 2579=1299,从而得到原文。

你可能感兴趣的:(密码学研究)