连同消息 一起,发送出去
接收方收到复合的消息之后,把签名提取出来
用发送方的公钥对签名解密得到
接收方计算所收到消息 的摘要
如果 ,则消息确实是发送方产生的
2.3 RSA算法
RSA公钥密码体制是1977年由R.L.Rivest,A.Shamir和L.Adleman三人在文章《实现数字签名和公钥密码体制的一种方法》同提出的,是最具代表性的公钥密码体制。RSA算法是建立在大数分解和素数检测的理论基础上的,两个大素数相乘在计算机上是容易实现的,但将该乘积分解的计算量却相当大,大到甚至不能实现。文献综述
RSA算法的实现原理:
随机选择两个不同的素数 和 ,它们的宽度是密钥宽度的二分之一;
计算出 和 的乘积 ,即 ;
在2和 之间随机选择一个数 , 必须和 互素,整数 用作加密密钥,其中 ;
从公式 中求出解密密钥 ;
得公钥 ,私钥 ;
公开公钥,保密私钥;
RSA算法的安全性就在于只根据 和 ,在不知道 和 的情况下,要计算出 是不可能的。
若RSA算法用于数据加密:
加密算法为 ,其中 表示明文, 表示密文, 表示加密变换;
解密算法为 ,其中 表示解密变换。
若RSA算法用于数字签名:
签名算法为 ,其中 表示被签名的信息, 表示签名后的信息, 表示签名变换;
验证算法为 ,其中 表示验证变换。
要知道并不是每一个公钥密码体制都可以按上述方式来设计数据加密和数字签名方案。只有满足 的,才能用来设计数据加密方案。只有满足 的才能用来设计数字签名方案。而RSA算法两个条件都能满足,因此它既能用于数据加密,也能用于数字签名。
2.4 MD5算法
由于RSA算法的速度较慢,如果被签名消息的长度很大的话,那么就会导致计算签名的时间很长,同时RSA算法采用的模幂计算会出现同构性从而使签名容易被伪造,显然,这些都是不被希望的。MD5算法是一种消息摘要算法,它将任意长度的消息压缩成128位的消息摘要,同时它也可以确保消息的完整性,因为MD5算法具有很好的单向性、抗碰撞性和安全性,对于不同的消息将生成不同的摘要,而且算法的执行速度很快。因此,如果对消息先利用MD5算法生成消息摘要,然后对消息摘要进行签名而不是消息本身,那么就可以有效弥补RSA算法的缺陷。
MD5算法的实现原理:
MD5算法以任意长度的消息作为输入,产生一个128位消息摘要作为输出。具体的算法步骤如下:
步骤1:附加填充比特,对消息进行填充,使消息的长度(比特数)与448模512同余,即恰好为一个比512位的倍数仅小64位的数。填充的规则为,在信息的后面填充一个1和无数个0,直到满足上述的条件时才停止用0对信息的填充。源.自/优尔·论\文'网·www.youerw.com/
步骤2:附加消息的长度,将用64位表示的初始消息(填充前)的长度(比特数)附加在步骤1的结果后。