非对称加密的逆应用——数字签名
数字签名实际是非对称加密算法的另一项主要应用领域,数字签名本身并没有引入任何新的技术,但它比加解密应用的更加普遍。加解密解决了信息的保密性问题,因为只有有**的用户才能解密密文;而数字签名解决了信息来源真实性的问题,即这个信息是谁发出的,从发出到接收的过程中有没有被篡改过。用信息安全的专业术语,就是信息来源的不可否认性和信息的完整性。数字签名和我们熟悉的对纸质文件签名的作用相似,这也就是它的名称由来。
前面讲过,非对称加解密中是用信息接收者的公钥加密,私钥解密;而数字签名则是用信息发送者(签名者)的私钥加密,公钥解密(不要忘了,在非对称加解密的世界里,每个人都有一对属于自己的公私钥),所以它实际是非对称加解密过程的逆运算。
为了更好地结合数字签名的使用流程说明问题,这里也不能免俗的杜撰一个如下虚拟场景:IT好青年小明向他的女神小丽写了封电子情书,出于表白真心并炫耀技术的目的,小明要在情书上附加一个数字签名。首先,小明计算出情书的数字摘要值,然后用他的私钥加密这个摘要值,得到了一个加密结果,而这个加密结果,就是数字签名。最后,小明把情书和数字签名装在一起,@给了小丽。作为一个女神,小丽每天收到骚扰短信、微信、电话不计其数,本来这种邮件根本入不了她的法眼。可邮箱系统刚好提示这封邮件带了个数字签名,同样作为业内人士的她,“呵呵”一声,做了如下处理:首先对于邮件中的数字签名,用小明的公钥解密,解密成功了。“嗯,邮件确实是他发的”,小丽沉吟到。然后她又对情书做了数字摘要运算,将得到的摘要值和上一步解密得到的值进行了对比,“哦,两个值一样,那说明我现在看到的内容就是他当初写的,一个标点符号都没改过。好啊,这下看你怎么抵赖,小小年纪竟然学会给老师写情书了!”小丽一边愤恨着,一边拨通了教导主任的电话……。
在上面的过程中,小明做的是数字签名,而小丽做的就是对签名的验证。整个过程有两个重点:**一是用验证签名时用发送者的公钥解密,根据非对称加解密算法原理,如果解密成功,说明这个签名确实是用发送者的私钥加密的,而私钥只有发送者自己掌握,所以发送者不能否认其签名行为。这一点保证了信息的不可否认性;第二点是用计算出的摘要值和解密后的摘要值进行对比,根据数字摘要的原理,如果两者一致说明消息在传输过程中没有被篡改,否则被篡改。这一点保证了信息的完整性。**上一篇说过对摘要而不是原文加密,是因为非对称加解密速度很慢。其实还有一个原因就是如果直接用私钥对原文加密,存在选择密文攻击的可能。所以对摘要还不是原文加密,可以有效杜绝这种安全风险。
由此可见,数字签名的逻辑过程并不复杂。软件工程师能够也应该掌握它。数字签名应用的范围比较广泛,凡是需要保证重要数据来源不可否认以及数据完整性的场合,都可以使用数字签名。熟悉其逻辑过程和原理,对开发应用是很有帮助的。
有些开发工程师会把电子签章、电子签名和数字签名搞混,其实它们是有区别的。电子签章、电子签名属于应用层面,它是软件系统或软件功能的名称,包括实现签章、签名行为电子化的一系列技术和系统的总称。而数字签名是信息安全学科名词,专指这项保护信息来源安全性的技术。简单来讲,前两者是软件,后者是科学。我们国家为什么制定的是《电子签名法》而不是《数字签名法》,就是因为法律要做到技术无关性,不能偏向某种特定技术。当然,电子签章、电子签名一般都会用到数字签名,这就是它们的联系。