
A biblioteca do Paranoid contém implementações de verificações para fraquezas bem conhecidas em artefatos criptográficos.
O projeto Paranoid verifica fraquezas conhecidas em artefatos criptográficos, como chaves públicas, assinaturas digitais e números pseudoaleatórios em geral. Esta biblioteca contém implementações e otimizações de trabalhos existentes encontrados na literatura. Os trabalhos existentes mostraram que a geração desses artefatos era falha em alguns casos. A seguir estão alguns exemplos de publicações nas quais a biblioteca se baseia.
O objetivo é aumentar a confiança nos casos de uso de criptografia dentro e fora do Google.
Ao lidar com criptografia assimétrica, os artefatos criptográficos geralmente são:
Com o Paranoid, qualquer artefato criptográfico pode ser testado, mas sua principal motivação é detectar o uso de caixas-pretas fracas de hardware ou software de terceiros. Portanto, o Paranoid pode ser usado mesmo que não consigamos inspecionar o código-fonte (situação 3. listada acima).
O projeto visa detectar vulnerabilidades conhecidas e desconhecidas. Por exemplo, tenta identificar vulnerabilidades causadas por erros de programação ou pelo uso de geradores de números aleatórios proprietários fracos. Detectar novas vulnerabilidades é, obviamente, muito mais difícil do que detectar as conhecidas. Tais detecções podem exigir grandes conjuntos de artefatos ou encontrar artefatos fracos apenas com baixa probabilidade.
Portanto, temos muito interesse em receber feedback e aprender sobre a biblioteca criptográfica que gerou artefatos criptográficos fracos (veja o chamado para contribuições ). O projeto está constantemente em andamento. Após aprender sobre implementações fracas, o plano é analisá-las e adicionar detecções direcionadas a elas.
A documentação para as verificações atualmente implementadas está localizada em docs. A documentação será preenchida com mais conteúdo ao longo do tempo.
Para aprender a usar as verificações, você pode consultar a pasta exemplos ou os testes unitários (arquivos *test.py). Os exemplos demonstram como testar diferentes artefatos criptográficos.
Clone o repositório:
$ git clone https://github.com/google/paranoid_crypto.git && cd paranoid_crypto
NOTA: Os comandos abaixo foram testados na versão estável do Debian
(bookworm). Certifique-se de estar usando python3.11 ou mais recente.
Instale as dependências:
$ sudo apt update && sudo apt install python3 python3-full python3-pip python3-pybind11 python3-fpylll python3-gmpy2 protobuf-compiler
Crie e ative um ambiente virtual:
$ python3 -m venv --system-site-packages ~/paranoid-venv
$ source ~/paranoid-venv/bin/activate
NOTA: Se você sabe o que está fazendo, pode em vez disso pular para a
próxima etapa e usar a opção --break-system-packages do pip.
Instale o pacote python paranoid_crypto:
$ python3 -m pip install .
Para verificar se a instalação foi bem-sucedida, você pode executar os testes unitários. Por exemplo:
$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 314.660s
OK
Alternativamente, se você quiser executá-lo em um contêiner, pode usar o Dockerfile que fornecemos, como mostrado abaixo.
NOTA: Certifique-se de ter o docker instalado.
Após clonar o repositório, crie a imagem docker:
$ docker build -t paranoid-img .
Crie e inicie o contêiner:
$ docker run --name paranoid-container -it paranoid-img
paranoid-user@6191368b26b8:~$
Para verificar se a instalação foi bem-sucedida, você pode executar os testes unitários. Por exemplo:
paranoid-user@6191368b26b8:~$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 307.555s
OK
Semelhante a outros trabalhos publicados, temos analisado os artefatos criptográficos do Certificate Transparency (CT), que registra certificados de sites emitidos desde 2013 com o objetivo de torná-los transparentes e verificáveis. Seu banco de dados contém mais de 7 bilhões de certificados em setembro de 2022. Para as verificações do Paranoid de chaves públicas EC e assinaturas ECDSA, até agora não encontramos nenhum artefato fraco no CT. Para as verificações de chaves públicas RSA com gravidades alta ou crítica, temos os seguintes resultados:
Alguns desses certificados já estavam expirados ou revogados. Para aqueles que ainda estavam ativos (a maioria dos casos de CheckGCD), nós os reportamos imediatamente às Autoridades de Certificação para que fossem revogados.
Esta biblioteca é desenvolvida e mantida por membros do Google Security Team, mas este não é um produto oficialmente suportado pelo Google. Se você quiser contribuir, leia CONTRIBUTING e envie-nos pull requests. Você também pode reportar bugs ou solicitar novos recursos.
Se você usar o Paranoid em sua pesquisa, pode citá-lo usando o seguinte 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 do Teste | CVEs Potencialmente Relacionadas | Gravidade | Número de Artefatos Fracos |
|---|
| 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 |