
La librería de Paranoid contiene implementaciones de comprobaciones de debilidades conocidas en artefactos criptográficos.
El proyecto Paranoid comprueba debilidades conocidas en artefactos criptográficos, como claves públicas, firmas digitales y números pseudoaleatorios en general. Esta biblioteca contiene implementaciones y optimizaciones de trabajos existentes en la literatura. Dichos trabajos demostraron que la generación de estos artefactos era defectuosa en algunos casos. Los siguientes son algunos ejemplos de publicaciones en las que se basa la biblioteca.
El objetivo es aumentar la confianza en los casos de uso de criptografía dentro y fuera de Google.
Cuando se trabaja con cifrado asimétrico, los artefactos criptográficos suelen ser:
Con Paranoid se puede probar cualquier artefacto criptográfico, pero su motivación principal es detectar el uso de cajas negras de hardware o software de terceros débiles. Por lo tanto, Paranoid puede usarse incluso si no podemos inspeccionar el código fuente (situación 3. enumerada anteriormente).
El proyecto pretende detectar vulnerabilidades conocidas y desconocidas. Por ejemplo, intenta identificar vulnerabilidades causadas por errores de programación o por el uso de generadores de números aleatorios propietarios débiles. Detectar nuevas vulnerabilidades es, por supuesto, mucho más difícil que detectar las conocidas. Tales detecciones pueden requerir grandes conjuntos de artefactos o encontrar los débiles solo con una probabilidad baja.
Por lo tanto, nos interesa mucho recibir comentarios y conocer la biblioteca criptográfica que generó los artefactos criptográficos débiles (consulte la convocatoria de contribuciones ). El proyecto está en constante evolución. Después de conocer las implementaciones débiles, el plan es analizarlas y añadir detecciones dirigidas a ellas.
La documentación de las comprobaciones actualmente implementadas se encuentra en docs. La documentación se completará con más contenido con el tiempo.
Para aprender a usar las comprobaciones, puedes consultar la carpeta examples o las pruebas unitarias (archivos *test.py). Los ejemplos demuestran cómo probar diferentes artefactos criptográficos.
Clona el repositorio:
$ git clone https://github.com/google/paranoid_crypto.git && cd paranoid_crypto
NOTA: Los comandos siguientes se han probado en la versión estable de Debian
(bookworm). Asegúrate de usar python3.11 o una versión posterior.
Instala las dependencias:
$ sudo apt update && sudo apt install python3 python3-full python3-pip python3-pybind11 python3-fpylll python3-gmpy2 protobuf-compiler
Crea y activa un entorno virtual:
$ python3 -m venv --system-site-packages ~/paranoid-venv
$ source ~/paranoid-venv/bin/activate
NOTA: Si sabes lo que estás haciendo, puedes pasar directamente al siguiente
paso y usar la opción --break-system-packages de pip.
Instala el paquete de Python paranoid_crypto:
$ python3 -m pip install .
Para comprobar si la instalación se realizó correctamente, puedes ejecutar las pruebas unitarias. Por ejemplo:
$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 314.660s
OK
Alternativamente, si quieres ejecutarlo en un contenedor, puedes usar nuestro Dockerfile como se muestra a continuación.
NOTA: Asegúrate de tener docker instalado.
Después de clonar el repositorio, crea la imagen de docker:
$ docker build -t paranoid-img .
Crea e inicia el contenedor:
$ docker run --name paranoid-container -it paranoid-img
paranoid-user@6191368b26b8:~$
Para comprobar si la instalación se realizó correctamente, puedes ejecutar las pruebas unitarias. Por ejemplo:
paranoid-user@6191368b26b8:~$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 307.555s
OK
Al igual que en otros trabajos publicados, hemos estado analizando los artefactos criptográficos de Certificate Transparency (CT), que registra los certificados de sitios web emitidos desde 2013 con el objetivo de hacerlos transparentes y verificables. Su base de datos contiene más de 7 mil millones de certificados a septiembre de 2022. Para las comprobaciones de Paranoid de claves públicas EC y firmas ECDSA, hasta ahora no hemos encontrado ningún artefacto débil en CT. Para las comprobaciones de claves públicas RSA con severidades alta o crítica, tenemos los siguientes resultados:
Algunos de estos certificados ya estaban caducados o revocados. En el caso de los que aún estaban activos (la mayoría de los de CheckGCD), los notificamos inmediatamente a las autoridades de certificación para que fueran revocados.
Esta biblioteca es desarrollada y mantenida por miembros del equipo de seguridad de Google, pero no es un producto de Google con soporte oficial. Si quieres contribuir, lee CONTRIBUTING y envíanos pull requests. También puedes reportar errores o solicitar nuevas funciones.
Si usas Paranoid en tu investigación, puedes citarlo con el siguiente 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 | 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 |