首页IT科技python工具库有哪些(Python工具箱系列(十九))

python工具库有哪些(Python工具箱系列(十九))

时间2025-09-19 15:59:30分类IT科技浏览5072
导读:有了非对称密钥、摘要、对称密钥等现代密码学算法与技术,是不是就能够保证通信的安全无虞呢,并不是。...

有了非对称密钥                、摘要                         、对称密钥等现代密码学算法与技术                ,是不是就能够保证通信的安全无虞呢                         ,并不是                。

密码学在互联网应用的四个目标:机密性        、完整性            、身份验证                         、防抵赖                         。到目前为止        ,我们讨论的技术中            ,其中防抵赖的目标并没有达到        。

假设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                     。随后使用公共信道将两个文件同时传出                ,接收方使用这两个文件来验证是否发生了篡改                         。

相关代码如下所示:

import base64 from Crypto.PublicKey import RSA from Crypto.Hash import SHA from Crypto.Signature import PKCS1_v1_5 as PKCS1_signature from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher def get_key(key_file): with open(key_file) as f: data = f.read() key = RSA.importKey(data) return key def rsa_public_check_sign(text, sign): publick_key = get_key(demo_public_key.pem) verifier = PKCS1_signature.new(publick_key) digest = SHA.new() digest.update(text.encode("utf8")) return verifier.verify(digest, base64.b64decode(sign)) public_key = get_key(demo_public_key.pem) with open("poetry.txt", "r", encoding=utf-8) as input_file: data = input_file.read() signfile = open("sign.txt","r") sign = signfile.read() print(rsa_public_check_sign(data,sign)) with open("poetry-modify.txt", "r", encoding=utf-8) as input_file: data = input_file.read() signfile = open("sign.txt","r") sign = signfile.read() print(rsa_public_check_sign(data,sign))

poetry.txt将验证结果为真    。而对petry.txt修改后的poetry-modify.txt的验证失败                         ,从而达到了防篡改的作用                。

声明:本站所有文章        ,如无特殊说明或标注            ,均为本站原创发布                         。任何个人或组织                         ,在未征得本站同意时            ,禁止复制    、盗用                         、采集                    、发布本站内容到任何网站、书籍等各类媒体平台        。如若本站内容侵犯了原著者的合法权益        ,可联系我们进行处理            。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
2021年看新闻赚钱的十大软件(哪些新闻可以赚钱的软件-号称“看新闻能赚钱”,真相原来如此……) java函数式编程 pdf 百度云(Java函数式编程(1):Lambda表达式(2))