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

本文探讨了身份认证协议在不同环境下的安全性,包括口令协议防直接攻击、一次性口令协议升级、challenge-response协议对抗伪造。重点介绍了哈希函数、盐值应用和防护策略,以及如何通过慢速哈希和内存硬性函数提升抗破解能力。

原文教材 与 参考资料:

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

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

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

18.0 引言

本章主要描述了身份认证协议,注意这里仅仅是描述参与者之间(客户端与服务器之间)如何进行身份的认证问题,暂时还不涉及密钥协商问题,为什么?因为任何的业务首先要做到的就是身份认证,只有确认了身份(单方面确认或者双方面确认)之后,才有协商会话密钥,更新会话密钥等一系列的其他操作,本节内容仅仅上是分析与描述身份证明与登录协议。

首先给出本章作为核心描述的三个问题,本章围绕这三个问题展开,并给出了相应的解决方案,我们以一张绘图来描述本章的框架结构:

                        

 关于身份协议的主要问题一共有三类:

1. 证明者与验证者 在物理上是十分接近的,敌手不具有窃听信道的功能,敌手只能以某种直接的方式假冒证明者,这种场景下,敌手的攻击行为被称为直接攻击。解决方案:口令协议 。

2. 证明者和验证者是通过无线信道进行认证的,敌手此时具备窃听信道的能力,此时使用使用简单的口令协议已经不在安全。解决方案:一次性口令协议。

3. 敌手可以构造虚假的验证者和证明者进行交互,从而获取证明者的信息,进一步伪装证明者身份与真正的验证者交互。解决方案:challenge-response.

需要注意的几点:

              1. 验证密钥是可以公开的,公开验证密钥不会对系统造成破坏。

               2.有状态的协议往往能够提供更高登记的安全与更低的开销,但是不容易使用,由于有状态的协议要求验证者和证明者需要某种程度上的同步。

  &

### 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`。 ---
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值