《A Graduate Course in Applied Cryptography》Chapter 18 Protocols for identification and login(2)

本文探讨了一次性密码(如HOTP和TOTP)以及挑战响应机制如何增强密码系统的安全性,抵御窃听和主动攻击。HOTP基于PRF实现,而TOTP引入时间戳以定期更新密码。S/key系统提供了一种强安全认证方案,其安全性取决于哈希函数的多次迭代安全性。此外,文章还介绍了如何通过MAC码和签名算法抵抗积极敌手的中间人攻击,确保验证密钥的安全性。

原文教材 与 参考资料:

        Boneh Dan , Shoup Victor . A Graduate Course in Applied Cryptography[J].

        该书项目地址(可以免费获取):http://toc.cryptobook.us/

        博客为对该书的学习笔记,并非原创知识,帮助理解,整理思路。
 

18.5 One time passwords: security against eavesdropping

        上节描述的基于口令的方案不能抵抗一个窃听敌手,因为双方保存口令或者说秘密值是固定的,如果说敌手具备窃听能力,那么敌手窃听到sk = vk 的任意值,那么敌手就可以仿冒该用户登录。为了抵抗窃听敌手,一种朴素的思想就是,每次传送不一样的验证信息,那么即使敌手能够获取其中的部分信息,也无法威胁到整个系统的安全。

新的挑战者-敌手模型如下图所示:敌手具备获取真实验证者和真实证明者交互的信息的能力。

                 

 具备窃听能力的敌手攻击游戏描述如下:

### Python 3.7 中 cryptography 库的弃用问题及导入错误解决方案 在使用 Python 3.7 时,若涉及 `cryptography` 库的导入或使用其模块如 `cryptography.x509`,可能会遇到弃用警告或导入错误。这些问题通常源于 `cryptography` 的版本与 Python 3.7 的兼容性问题,或者模块的内部 API 发生了变更。 例如,若尝试导入 `cryptography.x509` 模块时出现错误: ```python ImportError: cannot import name 'x509' ``` 这可能是由于旧版本的 `cryptography` 与 Python 3.7 不兼容,或者调用方式不正确。在较新版本中,某些模块的导入路径或方法已被重构或弃用。例如,`x509` 相关功能的使用方式可能已发生变化,建议使用方式为: ```python from cryptography import x509 ``` 而非: ```python import cryptography.x509 as x509 ``` 此外,若系统中存在多个版本的 `cryptography`,也可能导致导入错误。可以通过以下命令确保安装的是兼容 Python 3.7 的最新版本: ```bash pip install --upgrade cryptography ``` 若安装过程中提示依赖冲突,例如某些库依赖旧版本的 `cryptography`,则可考虑使用虚拟环境(如 `venv`)隔离依赖[^1]。 ### 示例代码:正确导入 x509 模块 ```python from cryptography import x509 from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import ec from cryptography.x509.oid import NameOID import datetime # 创建一个基本的 X.509 证书 one_day = datetime.timedelta(1, 0, 0) private_key = ec.generate_private_key(ec.SECP384R1()) public_key = private_key.public_key() builder = x509.CertificateBuilder() builder = builder.subject_name(x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, u"test") ])) builder = builder.issuer_name(x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, u"test") ])) builder = builder.not_valid_before(datetime.datetime.today() - one_day) builder = builder.not_valid_after(datetime.datetime.today() + one_day) builder = builder.serial_number(x509.random_serial_number()) builder = builder.public_key(public_key) builder = builder.add_extension( x509.BasicConstraints(ca=True, path_length=None), critical=True, ) certificate = builder.sign( private_key=private_key, algorithm=hashes.SHA256() ) print(certificate) ``` ### 注意事项 - 在 Python 3.7 中使用 `cryptography` 时,应关注其官方文档中关于 API 变更的说明,尤其是涉及 `x509`、`hazmat` 等模块的重构。 - 若遇到弃用警告(DeprecationWarning),建议查阅 `cryptography` 的迁移指南或变更日志,以获取替代方案。 - 使用虚拟环境可有效避免系统级依赖冲突,推荐在开发和部署时使用 `venv` 或 `virtualenv`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值