实验六:RSA数字签名算法
一、实验目的
理解、掌握RAS数字签名算法的基本过程。
二、实验内容
- 熟悉MPIR大整数运算库函数的调用。
- 熟悉MD5散列的调用。
- 利用MPIR大整数运算库函数,实现RSA数字算法。要求:1)RSA模数为2048bit;2)能对任意文件进行签名、验证(调用MD5散列函数求文件的散列值,再对散列值进行签名)。
三、RSA数字签名算法基本原理
RSA具体实现步骤
第一步,随机选择两个不相等的质数p和q。
第二步,计算p和q的乘积n。
第三步,计算n的欧拉函数φ(n)。
第四步,随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。
第五步,计算e对于φ(n)的模反元素d。
第六步,将n和e封装成公钥,n和d封装成私钥。
*现实中为了计算快捷,e一般取65537,
加密
me ≡ c (mod n) 信息m加密成C
解密
cd ≡ m (mod n)
因为已经有了RSA加密算法,所以RSA签名算法很简单,只需要将RSA加密算法的公钥私钥互换即可。即私钥加密,公钥解密。
由于需要任意长度的文件进行加密,所以先用MD5对文件进行hash,得到非常短的,且定长的一段32位的16进制字符串(128位2进制数字),然后用RSA签名即可。
四、实验过程
(上次的实验四RSA加密算法用mpir库的时候忘了把打印设置为16进制数,打印的是10进制数,非常不直观,这次把d全部改成了x)
关键代码:
和实验四几乎一模一样,只是把加解密的秘钥互换
五、实验结果
本文所有代码及资源稍后给出。