15.6.3 数字签名

数字签名与公有密钥加密相关,但是与公有密钥和私有密钥的作用相反。一个发送者可以用密钥加密和签名一个消息。当人们接收消息的时候,接收者可以用发送者的公有密钥对它解密。因为发送者是唯一可以访问密钥的人,接收者可以确认消息由谁发送以及它有没有被修改。

数字签名可能确实很有意义。它们允许接收者确认消息没有被篡改,发送者也很难否认消息的内容,或者否认发送过该消息。

值得注意的是,尽管消息被加密了,但拥有公有密钥的任何人都可以阅读它。尽管使用了相同的技术和密钥,但是在这里,加密的目的是为了防止篡改和否认,而不是防止别人阅读消息。

对于大量消息来说,由于公有密钥的速度比较慢,就出现了另一种称为哈希函数的算法。通常,它可以用于提高效率。哈希函数为给定的消息计算出一个消息摘要或者哈希值。算法产生什么值并不重要。重要的是其输出是唯一的,也就是说,每次使用一个特定的输入时候,输出是一样的,该输出较小,因此算法较快。

最常见的哈希函数是MD5和SHA。

哈希函数可以为特定消息产生相匹配的消息摘要。如果有一个消息和一个消息摘要,只要确认摘要没有被篡改,就可以确认该消息没有被篡改。最后,创建一个数字签名最常用的方法是用一个快速哈希函数为整个消息创建一个消息摘要,然后使用速度较慢的公有密钥加密算法对简短的消息摘要进行加密。现在,签名可以通过任何常规的、可能不安全的方式发送。

当接收到一个签名消息的时候,我们可检查它。用发送者的公有密钥解密签名。使用与发送者同样方法产生该消息的一个哈希值。如果解密的哈希值匹配生产的哈希值,就可以确认消息来自发送者而且没有被篡改。