
Библиотека Paranoid содержит реализации проверок на известные уязвимости криптографических артефактов.
Проект Paranoid проверяет криптографические артефакты, такие как открытые ключи, цифровые подписи и псевдослучайные числа общего назначения, на наличие известных слабостей. Эта библиотека содержит реализации и оптимизации существующих работ из литературы. Эти работы показали, что генерация таких артефактов в некоторых случаях была ошибочной. Ниже приведены некоторые примеры публикаций, на которых основана библиотека.
Цель — повысить уверенность в использовании криптографии внутри и вне Google.
При работе с асимметричным шифрованием криптографические артефакты обычно:
С помощью Paranoid можно протестировать любой криптографический артефакт, но основная мотивация — обнаружение использования слабых сторонних аппаратных или программных «чёрных ящиков». Поэтому Paranoid можно использовать, даже если у нас нет возможности просмотреть исходный код (ситуация 3, перечисленная выше).
Проект нацелен на обнаружение как известных, так и неизвестных уязвимостей. Например, он пытается выявить уязвимости, вызванные ошибками программирования или использованием слабых проприетарных генераторов случайных чисел. Обнаружение новых уязвимостей, разумеется, гораздо сложнее, чем известных. Такие обнаружения могут требовать больших наборов артефактов или находить слабые лишь с низкой вероятностью.
Поэтому мы очень заинтересованы в получении обратной связи и информации о криптографических библиотеках, которые создали слабые криптографические артефакты (см. приглашение к участию). Проект постоянно находится в разработке. После получения информации о слабых реализациях мы планируем проанализировать их и добавить соответствующие детекторы.
Документация по текущим реализованным проверкам находится в 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
ПРИМЕЧАНИЕ: Если вы понимаете, что делаете, вы можете вместо этого пропустить следующий шаг и использовать параметр --break-system-packages для pip.
Установите python-пакет paranoid_crypto:
$ 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), который регистрирует выданные сертификаты веб-сайтов с 2013 года с целью сделать их прозрачными и проверяемыми. Его база данных содержит более 7 миллиардов сертификатов по состоянию на сентябрь 2022 года. Для проверок Paranoid открытых ключей EC и подписей ECDSA мы пока не нашли слабых артефактов в CT. Для проверок открытых ключей RSA с уровнями серьёзности high (высокий) или critical (критический) мы получили следующие результаты:
Некоторые из этих сертификатов уже были просрочены или отозваны. О тех, которые всё ещё были активны (большинство из них относятся к CheckGCD), мы немедленно сообщили удостоверяющим центрам для отзыва.
Эта библиотека разрабатывается и поддерживается участниками команды Google Security Team, но это не официально поддерживаемый продукт Google. Если вы хотите внести вклад, пожалуйста, прочитайте CONTRIBUTING и отправляйте нам pull request'ы. Вы также можете сообщать об ошибках или оставлять запросы на новые функции.
Если вы используете 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}
}
| TestName | Потенциально связанные 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 |