完整性说的是在传送、存放信息或数据时,确保它们未被篡改或改后也可立即知道。这种方法是一种数据摘要过程,先用哈希函数计算数据哈希值,后把数据及其哈希值一起发给对方。对方收到数据后,重新用哈希函数计算数据哈希值并与收到的哈希值比对,进而判断数据是否被篡改。
由于哈希值在传输中可能被截取修改,需要对哈希值进行保护。一般通过数字签名的方式保护哈希值,接收方验证收到的数据的数字签名,如果数据原文被修改,则签名验证就不会通过。
在应用中,通常用PKCS#7的签名数据结构组装数据和签名值。例如,发送签名邮件时,就用PKCS#7的签名数据结构封装消息。
发送签名邮件时,签名时所需的信息只能通过发件人提供。签名时,借助捕获电子邮件并签名邮件来用此信息。该签名产生实际的数字签名。之后,此签名把附件加到电子邮件中,并同邮件一起发送。
因该操作需源自发件人的仅有信息(私钥),因此数字签名有身份验证与数据完整性功能。这个仅有信息可以证明邮件仅可源自该发件人。
当收件人查看通过数字签名的电子邮件时,系统会验证数字签名,且会在邮件中检查索引邮件所含的数字签名。还会检查索引原始邮件,然后进行签名验证,若签名验证通过,则表明邮件就是来自声称的那个发件人;如果签名验证不通过,则把邮件标识为无效。
同时借助数字签名和签名验证可验证邮件发件人的身份,并确定己签名的邮件中数据的完整性。