Paranoid 项目检查加密工件(如公钥、数字签名和通用伪随机数)中存在的已知弱点。本库包含对文献中现有工作的实现和优化。这些现有工作表明,在某些情况下,这些工件的生成存在缺陷。以下是该库所依据的部分出版物示例。
目标是提升 Google 内外部对密码学用例的信任度。
在处理非对称加密时,加密工件通常有以下几种来源:
借助 Paranoid,可以测试任何加密工件,但其主要动机是检测是否存在使用了弱的第三方硬件或软件黑盒。因此,即使我们无法检查源代码(上文列出的情况 3),也可以使用 Paranoid。
该项目旨在检测已知和未知的漏洞。例如,它试图识别由编程错误或使用弱的专有随机数生成器导致的漏洞。当然,检测新漏洞比检测已知漏洞困难得多。此类检测可能需要大量工件集,或者只能以较低概率发现弱工件。
因此,我们非常希望收到反馈,并了解是哪个密码学库生成了弱的加密工件(参见征集贡献)。该项目仍在持续开发中。在了解到弱的实现后,我们计划进行分析并添加针对它们的检测。
当前已实现检查项的文档位于 docs。文档内容将随时间不断丰富。
要了解如何使用这些检查项,可以查看 examples 文件夹或单元测试(*test.py 文件)。这些示例演示了如何测试不同的加密工件。
克隆仓库:
$ git clone https://github.com/google/paranoid_crypto.git && cd paranoid_crypto
注意:以下命令已在 Debian 稳定版(bookworm)上测试。请确保你使用的是 python3.11 或更高版本。
安装依赖:
$ sudo apt update && sudo apt install python3 python3-full python3-pip python3-pybind11 python3-fpylll python3-gmpy2 protobuf-compiler
创建并激活虚拟环境:
$ python3 -m venv --system-site-packages ~/paranoid-venv
$ source ~/paranoid-venv/bin/activate
注意:如果你清楚自己在做什么,也可以跳过下一步,直接为 pip 使用 --break-system-packages 开关。
安装 paranoid_crypto Python 包:
$ python3 -m pip install .
要检查安装是否成功,可以运行单元测试。例如:
$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 314.660s
OK
如果你希望在容器中运行它,也可以使用我们提供的 Dockerfile,如下所示。
注意:请确保已安装 docker。
克隆仓库后,构建 docker 镜像:
$ docker build -t paranoid-img .
创建并启动容器:
$ docker run --name paranoid-container -it paranoid-img
paranoid-user@6191368b26b8:~$
要检查安装是否成功,可以运行单元测试。例如:
paranoid-user@6191368b26b8:~$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 307.555s
OK
与其他已发表的工作类似,我们一直在分析来自 Certificate Transparency (CT) 的加密工件。CT 自 2013 年起记录已颁发的网站证书,目的是使其透明且可验证。截至 2022 年 9 月,其数据库包含超过 70 亿份证书。对于 Paranoid 对 EC 公钥和 ECDSA 签名的检查,迄今为止我们未在 CT 中发现任何弱工件。对于严重性为高危或严重的 RSA 公钥检查,我们得到以下结果:
其中一些证书已经过期或被吊销。对于仍然有效的证书(大多数是 CheckGCD 检查发现的),我们立即报告给证书颁发机构(CA)以进行吊销。
本库由 Google 安全团队成员开发和维护,但这不是 Google 官方支持的产品。如果你想贡献代码,请阅读 CONTRIBUTING 并向我们发送拉取请求。你也可以报告 bug 或提交功能请求。
如果你在研究中使用 Paranoid,可以使用以下 BibTeX 引用它:
@software{Barbosa_Bleichenbacher_Paranoid_Crypto_2022,
author = {Barbosa, Pedro and Bleichenbacher, Daniel},
license = {Apache-2.0},
month = {8},
title = {{Paranoid Crypto}},
url = {https://github.com/google/paranoid_crypto},
year = {2022}
}
| 测试名称 | 潜在相关 CVE | 严重性 | 弱工件数量 |
|---|
| CheckOpensslDenylist | CVE-2008-0166 | SEVERITY_CRITICAL | 3989 |
| CheckROCA | CVE-2017-15361 | SEVERITY_HIGH | 2875 |
| CheckGCD | - | SEVERITY_CRITICAL | 1860 |
| CheckFermat | CVE-2022-26320 | SEVERITY_CRITICAL | 36 |
| CheckContinuedFractions | - | SEVERITY_CRITICAL | 16 |
| CheckBitPatterns | - | SEVERITY_CRITICAL | 6 |
| CheckPermutedBitPatterns | - | SEVERITY_CRITICAL | 6 |
| CheckKeypairDenylist | CVE-2021-41117 | SEVERITY_CRITICAL | 4 |
| CheckPollardpm1 | - | SEVERITY_CRITICAL | 1 |