什么是数字签名?
数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。
这里的数字签名,不是简单的把纸质的签名改为电子签名,我们需要知道的是,数字签名包含两点:一是保证信息传输的完整性,防止其在途中被篡改;二是保证发送者的身份认证,防止其抵赖。在学习数字签名之前,我们先介绍几个概念:
Hash(哈希)函数
Hash函数,音译为哈希函数,又叫散列函数或杂凑函数。它可以将任意长度的消息M映射为固定长度的摘要H(M),也叫散列值,哈希值或杂凑值。哈希函数有三大特点:
1. M1不等于M2,则H(M1)不等于H(M2);
2.单向性,即已知H和H(M),反推出M在计算上是不可行的;
3.无碰撞性,即对于M1和H(M1),找到M2使H(M2)=H(M1)在计算上不可行(弱碰撞性);任意两个M1,M2(不相等),使得H(M1)=H(M2)在计算上不可行(强碰撞性)。
所谓计算上不可行,是由计算复杂度理论来说的,即对于该运算不存在一个多项式时间算法,计算不可行是哈希函数的安全性基础。
公钥(私钥)
公钥与私钥是通过某种密码学算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分,通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。
数字签名算法
接下来,我们再来看数字签名的过程:由发送者把要签名的信息作哈希运算,得到一段别人无法伪造的并且长度固定的数据摘要。发送者用自己的私钥把数据摘要加密成数字签名,并将其与信息一起发送给接收者。接收者收到信息和数字签名后,对信息作Hash运算得到报文的数据摘要,用公钥把数字签名解密为数据摘要。比较这两份数据摘要,如果相同则签名有效,否则签名无效,这样就可以确定信息的真实来源。
多重数字签名算法
多重签名技术(multisi