python工具库有哪些(Python工具箱系列(十九))
有了非对称密钥 、摘要 、对称密钥等现代密码学算法与技术 ,是不是就能够保证通信的安全无虞呢 ,并不是 。
密码学在互联网应用的四个目标:机密性 、完整性 、身份验证 、防抵赖 。到目前为止 ,我们讨论的技术中 ,其中防抵赖的目标并没有达到 。
假设A 、B 、C三个人共享一个对称加密算法密钥 ,现在A和B互相通信 ,A和B一直认为是双方在发送消息 。由于C也有同样的密钥 ,它可以拦截A发往B的消息 ,然后篡改消息并用同样的密钥加密后发送给B, B能够正确解密 ,但是该消息其实已经被篡改 。
同样的场景 ,A 、B 、C三个人共享一个对称加密算法密钥 ,A向B发送了一条消息 ,但是A可以抵赖说这条消息并不是他发送的,理由就是C也有同样的密钥 ,这条加密消息可能是C发送给B的 ,B无法向第三方证明是A给他发送了消息 。
在公开密钥算法中,如果算法用于加密解密 ,也同样不能防止抵赖 ,以RSA加密算法举例 ,由于RSA的公钥是完全公开的 ,RSA私钥拥有者虽然能够解密 ,但是并不能确认是哪个客户端发送的消息 ,同理任何人都可以抵赖 。
抵赖出现的根本原因就在于通信双方无法确认对方的身份 ,也就是不能进行身份验证 ,那么在密码学中有没有对应的解决方案呢?可以使用数字签名技术防抵赖 。
在现实世界中 ,有哪些行为或者约定可以防止人抵赖呢?最明显的就是合同 ,合同一般需要人签字或者按指纹 ,考虑签字可以模仿伪造 ,这里重点用指纹签署的合同来解释 。合同一旦由指纹签署了,就可以被复印多份 。有了合同 ,合同签署人就无法否认合同的合法性 ,原因就在于法律规定,指纹具备唯一性 ,每个人的指纹是不同的 ,或者说指纹就代表了一个人 。
回到密码学中 ,如果一个消息也含有特殊的指纹 ,是否就可以实现防抵赖呢 。事实正是如此 ,在RSA密钥对中 ,私钥只有密钥对的生成者持有 ,如果不考虑密钥泄露的问题 ,私钥拥有者使用密钥(注意不是加密操作)签署一条消息 ,然后发送给任意的接收方 ,接收方只要拥有私钥对应的公钥 ,就能成功反解签署消息 ,由于只有私钥持有者才能“签署 ”消息,不能抵赖说这条签署消息不是他发送的 ,这就是数字签名技术的基本原理。
以下代码显示了签名的过程:
运行后 ,将对poetry.txt进行签名,生成签名文件sign.txt 。随后使用公共信道将两个文件同时传出 ,接收方使用这两个文件来验证是否发生了篡改 。
相关代码如下所示:
poetry.txt将验证结果为真。而对petry.txt修改后的poetry-modify.txt的验证失败 ,从而达到了防篡改的作用 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!