一、背景与发展历程
随着计算机技术的发展,信息的传递逐渐由线下纸质变成了网络媒介,但因为网络环境复杂,网络信息在使用过程中会出现一些问题:
1、因为信息在网络上特定的传递方式,导致他人很容易截获传递中的信息,极有可能出现信息被串改。
2、如果信息的发送发和接收方发生了分歧,发送方不承认曾经发送过的消息。
3、接收方无法确认消息是否由指定的发送方发送。
在这几类问题共同作用下数字签名技术得到了发展,就相当于人类纸质时代用手动签名代表确认本次文件,数字时代则由数字签名来代替。
二、解决的问题
数字签名主要解决以下问题:
- 数据完整性:确保数据在传输过程中未被篡改。
- 认证:确认发送方的身份,确保发送方是可信任的。
- 不可否认性:一旦签名,发送方不能否认曾经签署过这个信息
四、技术原理
- 发送方使用私钥对数据的摘要进行加密,生成数字签名。
- 发送方将原始数据和数字签名一起发送给接收方。
- 接收方使用发送方的公钥对数字签名进行解密,获得数据的摘要。
- 接收方使用相同的哈希函数计算原始数据的摘要。
- 接收方比较两个摘要,如果一致,则验证成功,否则验证失败。
五、技术实现
主流的数字签名算法包括:
- RSA:基于大数因子分解问题,适用于加密和数字签名。
- DSA(数字签名算法):基于离散对数问题,仅适用于数字签名。
- ECDSA(椭圆曲线数字签名算法):基于椭圆曲线密码学,具有更短的密钥长度和更高的安全性。
六、技术实践
-
电子邮件签名:电子邮件客户端(如Outlook)支持S/MIME标准,允许用户使用数字签名对邮件进行签名,确保邮件的完整性和发件人身份。
-
代码签名:软件开发者为其发布的软件应用数字签名,以确保应用的完整性和开发者的身份。例如,微软的Authenticode技术允许开发者为Windows应用程序添加数字签名。
-
网络安全协议:HTTPS协议使用SSL/TLS证书对网站进行加密,同时也包含了数字签名技术,确保网站的安全性和完整性。
-
文档签名:Adobe Acrobat等PDF阅读器允许用户对PDF文档进行数字签名,确保文档的完整性和签署者的身份。
-
区块链技术:区块链技术的核心之一是对交易进行数字签名,以确保交易的完整性、认证和不可否认性。例如,比特币使用ECDSA算法进行交易签名。
-
数字证书:数字证书是由权威的证书颁发机构(CA)签发的,用于证明实体的身份和公钥。数字证书中包含了实体的公钥和一些其他信息,这些信息都是通过CA的私钥进行数字签名的,用户可以使用CA的公钥进行验证。
总结:
私钥就像我们纸质签名中的笔迹,用私钥进行摘要加密的过程就相当于手写签名。总之就一句话:只要签名对的上代表这个消息就是我发的。
注意! 单单的数字签名没有解决信息传递过程中的”信息盗取“问题。