离散对数加密算法
<p>离散对数公钥加密算法是目前最为热门的公钥加密算法 ,其安全性要远远高于基于大数分解的RSA算法。</p>
<p>离散对数问题可以描述为:给定一个质数p,和有限域Zp上的一个本原元a,对Zp上整数b,寻找唯一的整数c,使得<code>a^c≡b(mod p)</code>。一般的,如果仔细选择p,则认为该问题是难解的,且目前还没有找到计算离散对数问题的多项式时间算法。为了抵抗已知的攻击,p至少应该是150位的十进制整数,且p-1至少有一个大的素数因子。</p>
<p>下面是一个使用离散对数的例子:</p>
<p>Alice和Bob首先商议好p的值,本例假设为p=2579,则本原元为a=2。</p>
<p>假设Alice要发送消息x=1299给Bob,则</p>
<p>1)Bob选择随机数r=765作为自己的私钥,计算<code>q=2^r mod p=2^756 mod 2579=949</code>,作为公钥给Alice;</p>
<p>2)Alice选择随机数k=853,计算<code>y=2^k mod p=2^853 mod 2579=435</code>,作为公钥给Bob;</p>
<p>3)Alice计算密文<code>e=x*q%k mod p=1299*949^853 mod 2579=2396</code>,并传递给Bob;</p>
<p>4)Bob接收到密文后,计算<code>x=e*(y^r)^(-1) mod p=2396*(435^765)^(-1) mod 2579=1299</code>,从而得到原文。</p>