
Paranoids Bibliothek enthält Implementierungen von Prüfungen auf bekannte Schwachstellen in kryptografischen Artefakten.
Das Projekt Paranoid prüft auf bekannte Schwachstellen in kryptografischen Artefakten wie öffentlichen Schlüsseln, digitalen Signaturen und allgemeinen Pseudozufallszahlen. Diese Bibliothek enthält Implementierungen und Optimierungen vorhandener Arbeiten aus der Literatur. Die vorhandenen Arbeiten zeigten, dass die Erzeugung dieser Artefakte in einigen Fällen fehlerhaft war. Im Folgenden sind einige Beispiele für Veröffentlichungen aufgeführt, auf denen die Bibliothek basiert.
Das Ziel ist es, das Vertrauen in Kryptografie-Anwendungsfälle innerhalb und außerhalb von Google zu stärken.
Beim Umgang mit asymmetrischer Verschlüsselung sind Krypto-Artefakte üblicherweise:
Mit Paranoid kann jedes kryptografische Artefakt getestet werden, aber die Hauptmotivation besteht darin, die Verwendung schwacher Drittanbieter-Hardware oder Software-Blackboxen zu erkennen. Daher kann Paranoid auch dann verwendet werden, wenn wir den Quellcode nicht einsehen können (Punkt 3 oben).
Das Projekt zielt darauf ab, bekannte sowie unbekannte Schwachstellen zu erkennen. Beispielsweise versucht es, Schwachstellen zu identifizieren, die durch Programmierfehler oder die Verwendung schwacher proprietärer Zufallszahlengeneratoren verursacht werden. Das Erkennen neuer Schwachstellen ist natürlich viel schwieriger als das Erkennen bekannter. Solche Erkennungen können große Mengen an Artefakten erfordern oder schwache Artefakte nur mit geringer Wahrscheinlichkeit finden.
Daher sind wir sehr daran interessiert, Feedback zu erhalten und mehr über die kryptografische Bibliothek zu erfahren, die schwache kryptografische Artefakte erzeugt hat (siehe Aufruf zu Beiträgen ). Das Projekt befindet sich ständig in Arbeit. Nachdem wir von schwachen Implementierungen erfahren haben, ist geplant, diese zu analysieren und Erkennungen für sie hinzuzufügen.
Die Dokumentation für die derzeit implementierten Prüfungen befindet sich unter docs. Die Dokumentation wird im Laufe der Zeit mit weiteren Inhalten gefüllt.
Um zu erfahren, wie die Prüfungen verwendet werden, können Sie sich den Ordner examples oder die Unit-Tests (*test.py-Dateien) ansehen. Die Beispiele demonstrieren das Testen verschiedener Krypto-Artefakte.
Klonen Sie das Repository:
$ git clone https://github.com/google/paranoid_crypto.git && cd paranoid_crypto
HINWEIS: Die folgenden Befehle wurden mit der stabilen Debian-Version (bookworm) getestet. Stellen Sie sicher, dass Sie python3.11 oder neuer verwenden.
Abhängigkeiten installieren:
$ sudo apt update && sudo apt install python3 python3-full python3-pip python3-pybind11 python3-fpylll python3-gmpy2 protobuf-compiler
Virtuelle Umgebung erstellen und aktivieren:
$ python3 -m venv --system-site-packages ~/paranoid-venv
$ source ~/paranoid-venv/bin/activate
HINWEIS: Wenn Sie wissen, was Sie tun, können Sie stattdessen zum nächsten Schritt springen und den Schalter --break-system-packages für pip verwenden.
Python-Paket paranoid_crypto installieren:
$ python3 -m pip install .
Um zu überprüfen, ob die Installation erfolgreich war, können Sie die Unit-Tests ausführen. Zum Beispiel:
$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 314.660s
OK
Alternativ können Sie, wenn Sie es in einem Container ausführen möchten, unser bereitgestelltes Dockerfile verwenden, wie unten gezeigt.
HINWEIS: Stellen Sie sicher, dass docker installiert ist.
Nach dem Klonen des Repositorys das Docker-Image erstellen:
$ docker build -t paranoid-img .
Container erstellen und starten:
$ docker run --name paranoid-container -it paranoid-img
paranoid-user@6191368b26b8:~$
Um zu überprüfen, ob die Installation erfolgreich war, können Sie die Unit-Tests ausführen. Zum Beispiel:
paranoid-user@6191368b26b8:~$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 307.555s
OK
Ähnlich wie andere veröffentlichte Arbeiten haben wir die Krypto-Artefakte von Certificate Transparency (CT) analysiert, das seit 2013 ausgestellte Website-Zertifikate protokolliert, mit dem Ziel, sie transparent und überprüfbar zu machen. Seine Datenbank enthält mehr als 7 Milliarden Zertifikate (Stand: September 2022). Bei den Paranoid-Prüfungen von EC-öffentlichen Schlüsseln und ECDSA-Signaturen haben wir bisher keine schwachen Artefakte im CT gefunden. Für die RSA-öffentlichen Schlüsselprüfungen mit den Schweregraden „hoch“ oder „kritisch“ haben wir die folgenden Ergebnisse:
Einige dieser Zertifikate waren bereits abgelaufen oder widerrufen. Für die noch aktiven Zertifikate (die meisten der CheckGCD-Fälle) haben wir sie umgehend den Zertifizierungsstellen gemeldet, damit sie widerrufen werden.
Diese Bibliothek wird von Mitgliedern des Google-Sicherheitsteams entwickelt und gepflegt, ist aber kein offiziell unterstütztes Google-Produkt. Wenn Sie einen Beitrag leisten möchten, lesen Sie bitte CONTRIBUTING und senden Sie uns Pull Requests. Sie können auch Fehler melden oder Funktionsanfragen einreichen.
Wenn Sie Paranoid in Ihrer Forschung verwenden, können Sie es mit dem folgenden BibTeX zitieren:
@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 | Potentially Related CVEs | Severity | Number of Weak Artifacts |
|---|
| 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 |