有一个高级的解决方案就是所谓的代码签名。文档接收者不仅可以验证文档的完整性,还可以根据他对证书颁发者和证书所有者的信任来决定是否接受该文档。浏览器在下载和运行插件和Java 小程序时使用此模式。 例如,我们从服务器下载软件。如果软件被黑客修改了,那么我们下载的软件就不是原版软件了。对于银行客户,可能存在账户被盗的风险。通过哈希运算,可以通过哈希运算得到下载软件的哈希值,然后将该哈希值与软件发布者发布的哈希值进行比较,判断软件是否被篡改
1。 认证协议,有一种认证协议叫“挑战认证模式”:需要认证的一方向被认证方发送一个随机字符串(“挑战”),认证方发送的随机字符串与自己的哈希值 验证密码,然后返回给验证者,验证者将接收到的哈希值与哈希运算的结果进行比较,并在自己端匹配对方的验证密码。 (“验证”)。 如果它们相同,则统计上可以认为另一方具有密码,即经过了身份验证。
2。 数字签名、哈希算法是现代密码系统的重要组成部分。 由于非对称算法运算速度慢,单向哈希函数在数字签名协议中扮演着重要的角色。 在这个签名协议中,双方必须事先协商好双方支持的哈希函数和签名算法
3。文件校验,常见的校验算法有奇偶校验和CRC校验。 这两种验证可以在一定程度上检测和纠正数据传输中的通道错误,但不能防止恶意数据的破坏也不能抵抗数据的篡改。
签名者首先计算数据文件的哈希值,然后使用非对称算法对极短的哈希值进行数字签名. 对方验证签名时,首先计算数据文件的哈希值,然后使用非对称算法验证数字签名。 哈希值的数字签名在统计上等同于文件本身的数字签名。 首先,数据文件本身可以与其哈希值分开存储,或者可以在没有数据文件本身的情况下进行签名验证。 其次,在某些情况下,签名密钥可能与解密密钥相同,即如果对数据文件进行签名,则操作与非对称解密操作相同,这是非常危险的。 破坏者可能会向您发送一个文件,并试图诱骗您将其解密为需要您签名的文件。 因此,在对任何数据文件进行数字签名时,只对其哈希值进行签名是安全的。