数字签名

数字签名(Digital Signature)是一种用于验证数据完整性、身份认证和防止数据篡改的技术。它使用非对称加密算法和消息摘要算法来生成和验证签名。

一、数字签名的步骤

发送方:

  1. 计算哈希值:发送方使用Hash算法对要发送的数据进行哈希计算,得到消息摘要。此步骤目的有两个:一是防止数据被篡改,二是减小原始数据长度。

  2. 创建签名:发送方使用私钥对消息摘要进行加密,生成签名值。注意私钥是对摘要进行加密,不是对原始数据加密,摘要数据量小,采用非对称加密效率高。

  3. 发送数据:发送方将原始数据、Hash算法、签名值一起发送给接收方。三者缺一不可,接收方需要用到这三者来验证签名,确保发送发身份的真实性和数据的完整性。

接收方:

  1. 解密数据:使用发送方的公钥对签名值进行解密,得到Hash1。解密成功,则能验证发送发身份的真实性,但此时不能验证数据是否被篡改。

  2. 计算哈希值:使用发送发的Hash算法对原始数据进行哈希计算,得到Hash2。此步骤中采用的Hash算法必须与发送方使用的Hash算法一致。

  3. 比较数值:比较Hash1和Hash2,一致表示数据未篡改。到此为止,接收方既校验了发送方身份的真实性,又校验了数据的完整性,整个验证签名过程完毕。

二、数字签名特点

  1. 数据完整性:数字签名可以验证数据是否被篡改,如果数据被篡改,签名验证将失败。

  2. 身份认证:数字签名可以验证数据的发送方身份,因为签名是使用私钥进行加密的,只有对应的公钥才能解密验证。

  3. 抗否认性:数字签名可以防止发送方否认发送过数据,因为签名是唯一的,只有发送方的私钥可以生成对应的签名。

三、数字签名和MAC算法的区别

相同点:

  1. 接收方均能验证发送方身份的真实性。

  2. 接收方均能验证数据的完整性。

  3. 均有密钥参与运算。

  4. 均有哈希算法参与运算。

不同点:

  1. MAC算法能保证通讯过程中数据的机密性,对原始数据采用对称密钥加密传输;而数字签名中原始数据明文传输,不具备机密性。

  2. MAC算法的密钥是对称密钥,通讯双方事先约定好的;而数字签名使用的是非对称密钥,发送方保存私钥,公钥公之于众。

  3. MAC算法验证发送方身份真实性是通过双方约定的对称密钥来实现的,能用约定的密钥成功加解密,就互认了对方的身份;而数字签名是通过私钥加密,公钥解密来实现的。