
La bibliothèque de Paranoid contient des implémentations de vérifications pour les faiblesses bien connues des artefacts cryptographiques.
Le projet Paranoid vérifie les faiblesses connues des artefacts cryptographiques tels que les clés publiques, les signatures numériques et les nombres pseudo-aléatoires en général. Cette bibliothèque contient des implémentations et des optimisations de travaux existants issus de la littérature. Ces travaux ont montré que la génération de ces artefacts était défectueuse dans certains cas. Voici quelques exemples de publications sur lesquelles la bibliothèque s'appuie.
L'objectif est d'accroître la confiance dans les cas d'usage de la cryptographie à l'intérieur et à l'extérieur de Google.
Lorsqu'on traite de chiffrement asymétrique, les artefacts cryptographiques sont généralement :
Avec Paranoid, n'importe quel artefact cryptographique peut être testé, mais sa motivation première est de détecter l'utilisation de boîtes noires matérielles ou logicielles tierces faibles. Par conséquent, Paranoid peut être utilisé même si nous ne sommes pas en mesure d'inspecter le code source (situation 3. ci-dessus).
Le projet vise à détecter les vulnérabilités connues ainsi que les inconnues. Par exemple, il tente d'identifier les vulnérabilités causées par des erreurs de programmation ou l'utilisation de générateurs de nombres aléatoires propriétaires faibles. Détecter de nouvelles vulnérabilités est bien sûr beaucoup plus difficile que de détecter celles qui sont connues. De telles détections peuvent nécessiter de grands ensembles d'artefacts ou ne trouver les artefacts faibles qu'avec une faible probabilité.
Par conséquent, nous sommes très intéressés par les retours d'expérience et par l'apprentissage de la bibliothèque cryptographique qui a généré des artefacts cryptographiques faibles (voir appel à contributions ). Le projet est en constante évolution. Après avoir pris connaissance d'implémentations faibles, le plan est de les analyser et d'ajouter des détections ciblées.
La documentation des vérifications actuellement implémentées se trouve dans docs. La documentation sera enrichie au fil du temps.
Pour apprendre à utiliser les vérifications, vous pouvez consulter le dossier examples ou les tests unitaires (fichiers *test.py). Les exemples montrent comment tester différents artefacts cryptographiques.
Clonez le dépôt :
$ git clone https://github.com/google/paranoid_crypto.git && cd paranoid_crypto
REMARQUE : Les commandes ci-dessous ont été testées sur la version stable de
Debian (bookworm). Assurez-vous d'utiliser python3.11 ou une version plus
récente.
Installez les dépendances :
$ sudo apt update && sudo apt install python3 python3-full python3-pip python3-pybind11 python3-fpylll python3-gmpy2 protobuf-compiler
Créez et activez un environnement virtuel :
$ python3 -m venv --system-site-packages ~/paranoid-venv
$ source ~/paranoid-venv/bin/activate
REMARQUE : Si vous savez ce que vous faites, vous pouvez passer directement
à l'étape suivante et utiliser l'option --break-system-packages de pip.
Installez le paquet Python paranoid_crypto :
$ python3 -m pip install .
Pour vérifier que l'installation a réussi, vous pouvez exécuter les tests unitaires. Par exemple :
$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 314.660s
OK
Alternativement, si vous souhaitez l'exécuter dans un conteneur, vous pouvez utiliser notre Dockerfile fourni, comme indiqué ci-dessous.
REMARQUE : Assurez-vous d'avoir docker installé.
Après avoir cloné le dépôt, construisez l'image docker :
$ docker build -t paranoid-img .
Créez et démarrez le conteneur :
$ docker run --name paranoid-container -it paranoid-img
paranoid-user@6191368b26b8:~$
Pour vérifier que l'installation a réussi, vous pouvez exécuter les tests unitaires. Par exemple :
paranoid-user@6191368b26b8:~$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 307.555s
OK
Comme d'autres travaux publiés, nous avons analysé les artefacts cryptographiques de Certificate Transparency (CT), qui consigne les certificats de sites web émis depuis 2013 dans le but de les rendre transparents et vérifiables. Sa base de données contient plus de 7 milliards de certificats en septembre 2022. Pour les vérifications Paranoid des clés publiques EC et des signatures ECDSA, nous n'avons jusqu'à présent trouvé aucun artefact faible dans CT. Pour les vérifications des clés publiques RSA avec des sévérités élevées ou critiques, nous avons les résultats suivants :
| TestName | CVE potentiellement liées | Sévérité | Nombre d'artefacts faibles |
|---|---|---|---|
| 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 |
Certains de ces certificats étaient déjà expirés ou révoqués. Pour ceux qui étaient encore actifs (la plupart de ceux détectés par CheckGCD), nous les avons immédiatement signalés aux autorités de certification pour qu'ils soient révoqués.
Cette bibliothèque est développée et maintenue par des membres de l'équipe de sécurité de Google, mais il ne s'agit pas d'un produit Google officiellement pris en charge. Si vous souhaitez contribuer, veuillez lire CONTRIBUTING et nous envoyer des demandes d'extraction (pull requests). Vous pouvez également signaler des bogues ou soumettre des demandes de fonctionnalités.
Si vous utilisez Paranoid dans vos recherches, vous pouvez le citer à l'aide du BibTeX suivant :
@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}
}