
La libreria di Paranoid contiene implementazioni di controlli per le debolezze note sugli artefatti crittografici.
Il progetto Paranoid verifica la presenza di vulnerabilità note negli artefatti crittografici come chiavi pubbliche, firme digitali e numeri pseudocasuali in generale. Questa libreria contiene implementazioni e ottimizzazioni di lavori esistenti trovati in letteratura. I lavori esistenti hanno dimostrato che la generazione di questi artefatti era difettosa in alcuni casi. Di seguito sono riportati alcuni esempi di pubblicazioni su cui la libreria si basa.
L'obiettivo è aumentare la fiducia nei casi d'uso della crittografia all'interno e all'esterno di Google.
Quando si ha a che fare con la crittografia asimmetrica, gli artefatti crittografici sono solitamente:
Con Paranoid è possibile testare qualsiasi artefatto crittografico, ma la sua motivazione principale è rilevare l'uso di scatole nere hardware o software di terze parti deboli. Pertanto, Paranoid può essere utilizzato anche se non siamo in grado di ispezionare il codice sorgente (situazione 3. elencata sopra).
Il progetto mira a rilevare sia vulnerabilità note che sconosciute. Ad esempio, cerca di identificare vulnerabilità causate da errori di programmazione o dall'uso di generatori di numeri casuali proprietari deboli. Rilevare nuove vulnerabilità è ovviamente molto più difficile che rilevare quelle note. Tali rilevazioni possono richiedere grandi insiemi di artefatti o trovare quelli deboli solo con una bassa probabilità.
Pertanto, siamo molto interessati a ricevere feedback e a conoscere la libreria crittografica che ha generato artefatti crittografici deboli (vedi invito a contribuire ). Il progetto è in continua evoluzione. Dopo aver appreso di implementazioni deboli, il piano è analizzarle e aggiungere rilevamenti mirati.
La documentazione per i controlli attualmente implementati si trova in docs. La documentazione sarà arricchita con più contenuti nel tempo.
Per imparare come usare i controlli, puoi guardare la cartella examples o i test unitari (file *test.py). Gli esempi dimostrano il test di diversi artefatti crittografici.
Clona il repository:
$ git clone https://github.com/google/paranoid_crypto.git && cd paranoid_crypto
NOTA: I comandi seguenti sono stati testati sulla versione stabile di Debian
(bookworm). Assicurati di utilizzare python3.11 o versioni successive.
Installa le dipendenze:
$ sudo apt update && sudo apt install python3 python3-full python3-pip python3-pybind11 python3-fpylll python3-gmpy2 protobuf-compiler
Crea e attiva un ambiente virtuale:
$ python3 -m venv --system-site-packages ~/paranoid-venv
$ source ~/paranoid-venv/bin/activate
NOTA: Se sai cosa stai facendo, puoi invece saltare al passaggio successivo
e usare l'opzione --break-system-packages di pip.
Installa il pacchetto Python paranoid_crypto:
$ python3 -m pip install .
Per verificare se l'installazione è riuscita, puoi eseguire i test unitari. Ad esempio:
$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 314.660s
OK
In alternativa, se vuoi eseguirlo in un container, puoi usare il nostro Dockerfile come mostrato di seguito.
NOTA: Assicurati di avere docker installato.
Dopo aver clonato il repository, crea l'immagine docker:
$ docker build -t paranoid-img .
Crea e avvia il container:
$ docker run --name paranoid-container -it paranoid-img
paranoid-user@6191368b26b8:~$
Per verificare se l'installazione è riuscita, puoi eseguire i test unitari. Ad esempio:
paranoid-user@6191368b26b8:~$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 307.555s
OK
Similmente ad altri lavori pubblicati, abbiamo analizzato gli artefatti crittografici di Certificate Transparency (CT), che registra i certificati dei siti web emessi dal 2013 con l'obiettivo di renderli trasparenti e verificabili. Il suo database contiene più di 7 miliardi di certificati a settembre 2022. Per i controlli Paranoid di chiavi pubbliche EC e firme ECDSA, finora non abbiamo trovato artefatti deboli in CT. Per i controlli delle chiavi pubbliche RSA con gravità alta o critica, abbiamo i seguenti risultati:
Alcuni di questi certificati erano già scaduti o revocati. Per quelli che erano ancora attivi (la maggior parte dei CheckGCD), li abbiamo immediatamente segnalati alle Certificate Authorities per la revoca.
Questa libreria è sviluppata e mantenuta da membri del Google Security Team, ma non è un prodotto Google supportato ufficialmente. Se vuoi contribuire, leggi CONTRIBUTING e inviaci pull requests. Puoi anche segnalare bug o richiedere funzionalità.
Se usi Paranoid nella tua ricerca, puoi citarlo usando il seguente 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}
}
| Nome del test | CVE potenzialmente correlate | Gravità | Numero di artefatti deboli |
|---|
| 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 |