数字签名(Digital Signature)是一种用于验证数据完整性、身份认证和防止数据篡改的技术。它使用非对称加密算法和消息摘要算法来生成和验证签名。
一、数字签名的步骤
发送方:
计算哈希值:发送方使用Hash算法对要发送的数据进行哈希计算,得到消息摘要。此步骤目的有两个:一是防止数据被篡改,二是减小原始数据长度。
创建签名:发送方使用私钥对消息摘要进行加密,生成签名值。注意私钥是对摘要进行加密,不是对原始数据加密,摘要数据量小,采用非对称加密效率高。
发送数据:发送方将原始数据、Hash算法、签名值一起发送给接收方。三者缺一不可,接收方需要用到这三者来验证签名,确保发送发身份的真实性和数据的完整性。
接收方:
解密数据:使用发送方的公钥对签名值进行解密,得到Hash1。解密成功,则能验证发送发身份的真实性,但此时不能验证数据是否被篡改。
计算哈希值:使用发送发的Hash算法对原始数据进行哈希计算,得到Hash2。此步骤中采用的Hash算法必须与发送方使用的Hash算法一致。
比较数值:比较Hash1和Hash2,一致表示数据未篡改。到此为止,接收方既校验了发送方身份的真实性,又校验了数据的完整性,整个验证签名过程完毕。
二、数字签名特点
数据完整性:数字签名可以验证数据是否被篡改,如果数据被篡改,签名验证将失败。
身份认证:数字签名可以验证数据的发送方身份,因为签名是使用私钥进行加密的,只有对应的公钥才能解密验证。
抗否认性:数字签名可以防止发送方否认发送过数据,因为签名是唯一的,只有发送方的私钥可以生成对应的签名。
三、数字签名和MAC算法的区别
相同点:
接收方均能验证发送方身份的真实性。
接收方均能验证数据的完整性。
均有密钥参与运算。
均有哈希算法参与运算。
不同点:
MAC算法能保证通讯过程中数据的机密性,对原始数据采用对称密钥加密传输;而数字签名中原始数据明文传输,不具备机密性。
MAC算法的密钥是对称密钥,通讯双方事先约定好的;而数字签名使用的是非对称密钥,发送方保存私钥,公钥公之于众。
MAC算法验证发送方身份真实性是通过双方约定的对称密钥来实现的,能用约定的密钥成功加解密,就互认了对方的身份;而数字签名是通过私钥加密,公钥解密来实现的。