RSA算法是怎样工作的
几天以前,我们通告了依据等式"c=m^e(mod N)"进行的RSA算法公共域名的发布,而今天我们将通过有关编码和译码的练习来解释公共域名的RSA算法是怎样工作的.我们将使用二虚构的人物,并且出于简化计算地目的,我们也将使用一些比这一算法中实际使用的大数字要小得多的值.
首先,艾丽斯选择任意两个必须保密的素数‘p‘和‘q‘,(例如p=17和q=11).然后她就计算N= p*q, 她将p乘以q得到一更大数字.算法的秘密在于这个数.将一个非常大数字分解成因子.是特别困难的.在我们例子中N=17*11=187.
艾丽斯必须选择另一个数‘e‘,使得e和(p-1)*(q-1)有一个1的最高公分母(他们没有除了1以外的公分母).例如e=7,与‘16*10=160‘没有除了1以外的公分母.
这两个数字‘e‘和‘N‘将构成艾丽斯的公共密钥.虽然‘e‘可能是其他任何人的公共密钥的一部分,N则应该依据初始选择因素‘p‘和‘q‘,对应于每一个人而不同.‘e‘和‘N‘的值是信息加密的基础,所以它们应该对任何想要把加密信息发送给艾丽斯的人都可用.
当艾丽斯公布出由(e,N)=(7187)构成的公共密钥的后,鲍勃就能对给的她信息进行编码.为了做到这一点,它就成了算法的一部分,鲍勃应该以数字的形式将值‘M‘编码.其中的一个好方法是使用每个字符的二进制值(ASCII),并最终将其转换为十进制.举例来说,XYZ的ASCII值为88(1011000),89(1011001)和90(1011010).从中我们得到的二进制数是1011000101001101010,其十进制为1453274.为了简化这个,我们将使用Z的值,所以M=90.
这样我们就有了将信息编码的基本要素:N=187,e=7和M=90.现在我们使用先前提到的公式"c=m^e(mod N)"=90^7(mod 187)=95.为了得出这一结果,可使用Windows科学计算器和一些简化计算的算术诀窍.这样,C就得到了编码值95(C=95).
被使用的模函数是一种单向函数,它是不能反向运行的.就算知道结果,也不可能计算出M原来的值.它的实际意义在于,如果有人想截取编码信息,就算他们知道艾丽斯的公共密钥,他们也不能解码.然而她只要知道p和q的值就能导出N.她的私人密钥可通过以下方式得到:
e*d = 1 (mod (p-1)*(q-1))
7*d = 1 (mod 160)
e*d = 1 (mod (p-1)*(q-1))
7*d = 1 (mod 160)
使用Euclides算法将计算出d=23.
一旦艾丽斯得到信息,并且有私人密钥,她就可以译出它的意思,她使用最初的公式并改变值的位置M=C^d(mod N)就能解释出信息的内容.在我们的例子(已知23=1+2+4+16)中这将是:
M = 95^23 (mod 187)
M = [95^1 (mod 187) * 95^2 (mod 187) * 95^4 (mod 187) * 95^16 (mod
187)] (mod 187) = [95 * 49 * 157 * 103 ] (mod 187) = 75276005 (mod
187) = 90 = Z 使用 ASCII; 这个信息将发送给艾丽斯.