thomwiggers/kemtls-experiment
GitHub: thomwiggers/kemtls-experiment
在Rustls中实验性实现KEMTLS协议,探索无需握手签名的后量子TLS通信方案。
Stars: 35 | Forks: 18
# 无握手签名的后量子 TLS
本代码库配套于以下文献:
* Peter Schwabe, Douglas Stebila 和 Thom Wiggers。**More efficient KEMTLS with pre-distributed public keys.** ESORICS 2021。
* Peter Schwabe, Douglas Stebila 和 Thom Wiggers。**Post-quantum TLS without handshake signatures.** ACM CCS 2020。
* Peter Schwabe, Douglas Stebila 和 Thom Wiggers。**More efficient KEMTLS with pre-distributed public keys.** IACR Cryptology ePrint Archive, Report 2021/779。更新的在线版本。2022 年 3 月。
* Peter Schwabe, Douglas Stebila 和 Thom Wiggers。**Post-quantum TLS without handshake signatures.** IACR Cryptology ePrint Archive, Report 2020/534。更新的在线版本。2022 年 3 月。
* Fabio Campos, Jorge Chavez-Saab, Jesús-Javier Chi-Domínguez, Michael Meyer, Krijn Reijnders, Francisco Rodríguez-Henríquez, Peter Schwabe, Thom Wiggers。**Optimizations and Practicality of High-Security CSIDH.** IACR Cryptology ePrint Archive, Report 2023/793。2023 年 10 月。
* Thom Wiggers。**Post-Quantum TLS**。博士论文,2024 年 1 月。
```
@inproceedings{CCS:SchSteWig20,
author = {Schwabe, Peter and Stebila, Douglas and Wiggers, Thom},
title = {Post-Quantum {TLS} Without Handshake Signatures},
year = {2020},
isbn = {9781450370899},
publisher = {Association for Computing Machinery},
address = {New York, {NY}, {USA}},
url = {https://thomwiggers.nl/publication/kemtls/},
doi = {10.1145/3372297.3423350},
booktitle = {Proceedings of the 2020 {ACM} {SIGSAC} Conference on Computer and Communications Security},
pages = {1461–1480},
numpages = {20},
keywords = {transport layer security, key-encapsulation mechanism, {NIST PQC}, post-quantum cryptography},
location = {Virtual Event, {USA}},
series = {{CCS '20}}
}
@misc{EPRINT:SchSteWig20,
author = {Peter Schwabe and Douglas Stebila and Thom Wiggers},
title = {Post-quantum {TLS} without handshake signatures},
year = 2022,
month = mar,
note = {full online version},
url = {https://ia.cr/2020/534},
}
@inproceedings{ESORICS:SchSteWig21,
title = {More efficient post-quantum {KEMTLS} with pre-distributed public keys},
author = {Peter Schwabe and Douglas Stebila and Thom Wiggers},
year = 2021,
month = sep,
url = {https://thomwiggers.nl/publication/kemtlspdk/},
editor = {Bertino, Elisa and Shulman, Haya and Waidner, Michael},
booktitle = {Computer Security -- ESORICS 2021},
series = {Lecture Notes in Computer Science},
publisher = {Springer International Publishing},
address = {Cham},
pages = {3--22},
isbn = {978-3-030-88418-5},
doi = {10.1007/978-3-030-88418-5_1},
}
@misc{EPRINT:SchSteWig21,
author = {Peter Schwabe and Douglas Stebila and Thom Wiggers},
title = {More efficient post-quantum {KEMTLS} with pre-distributed public keys},
howpublished = {Cryptology ePrint Archive, Paper 2021/779},
year = {2022},
month = mar,
note = {full online version},
url = {https://eprint.iacr.org/2021/779}
}
@misc{EPRINT:CCCMRRSW23,
author = {Fabio Campos and Jorge Chavez-Saab and Jesús-Javier Chi-Domínguez and Michael Meyer and Krijn Reijnders and Francisco Rodríguez-Henríquez and Peter Schwabe and Thom Wiggers},
title = {Optimizations and Practicality of High-Security {CSIDH}},
howpublished = {Cryptology ePrint Archive, Paper 2023/793},
year = {2023},
url = {https://eprint.iacr.org/2023/793}
}
@phdthesis{RU:Wiggers24,
title = {Post-Quantum {TLS}},
author = {Thom Wiggers},
date = {2024-01-09},
school = {Radboud University},
address = {Nijmegen, The Netherlands},
url = {https://thomwiggers.nl/publication/thesis/}
}
```
## 本代码库概述
以下均为 [git 子模块](https://git-scm.com/book/en/v2/Git-Tools-Submodules)。
如果你打算 fork 本代码库,还需要 fork 相关的子模块,并更新你的 `.gitmodules`。
另请参阅下方的说明。
### 主要文件夹
* ``rustls``:经过修改的 Rustls TLS 协议栈,用于实现 KEMTLS 以及“常规” TLS 1.3 的后量子版本。
* ``measuring``:用于对上述内容进行测量的脚本。
* ``ring``:经过修改的 Ring 版本,允许支持比 TLS 实例通常预期更长的 DER 编码字符串。
* ``webpki``:经过修改的 WebPKI 版本,以便在证书中使用 PQ 和 KEM 公钥。
* ``mk-cert``:用于为 pqtls 和 KEMTLS 创建后量子 PKI 的实用脚本。
### 辅助代码库
* [``oqs-rs``][]:``liboqs`` 的 Rust 封装。包含方案的额外实现(尤其是 AVX2 实现)。
* ``mk-cert/xmss-rs``:XMSS 参考代码的 Rust 封装,包含我们的自定义参数集(``src/settings.rs``)以及用于密钥生成和签名的工具。
## 使用本代码库
* **请务必使用 __所有__ 子模块进行克隆**。子模块内部还包含子模块,因此请使用 ``--recurse-submodules`` 进行克隆。
* 如果你打算 fork 本代码库,还需要 fork 相关的子模块,并更新你的 `.gitmodules`。
* Dockerfile 作为一个示例,说明了如何编译所有内容以及如何创建测试设置。
它被 ``./measuring/script/create-experimental-setup.sh`` 脚本所使用,该脚本是其使用方式的一个示例。
* `mk-certs` 文件夹包含一个 Python 脚本 `encoder.py`,可用于创建所需的 PKI。
RSA 证书和 X25519 证书可在子文件夹中找到。
这些证书假设服务器主机名为 ``servername``,因此请将其放入你的 `/etc/hosts` 中。
或者,使用文件中的环境变量对其进行覆盖(这也是你设置使用何种算法的方式)。
* 可以直接使用 ``rustls`` 进行实验;请使用 ``rustls-mio`` 子文件夹,
并运行 ``cargo run --example tlsserver -- --help`` 或 ``cargo run --example tlsclient -- --help``。
* 测量设置在 `measuring/` 文件夹中处理。请参阅 `./run_experiment.sh` 脚本。
* 结果处理由 `./scripts/process.py` 文件夹完成。它需要一个由 `./scripts/experiment.py` 生成的 `data` 文件夹。
* 下载归档结果可以通过 ``measuring/archived-results/`` 中的脚本来完成。
标签:Rust, 传输层安全协议, 可视化界面, 后量子密码学, 安全协议实验, 密码学, 密钥封装机制, 手动系统调用, 网络流量审计, 请求拦截, 逆向工具