Skip to content

MASTG-BEST-0001: Use APIs Seguras de Geração de Números Aleatórios

Utilize um gerador de números pseudoaleatórios criptograficamente seguro, conforme fornecido pela plataforma ou linguagem de programação que você está usando.

Java/Kotlin

Use java.security.SecureRandom, que está em conformidade com os testes estatísticos de geradores de números aleatórios especificados em FIPS 140-2, Security Requirements for Cryptographic Modules, seção 4.9.1 e atende aos requisitos de força criptográfica descritos em RFC 4086: Randomness Requirements for Security. Ele produz saída não determinística e automaticamente se inicializa (seeding) durante a inicialização do objeto usando entropia do sistema, portanto, a semeadura manual geralmente é desnecessária e pode enfraquecer a aleatoriedade se não for feita corretamente.

O construtor padrão (sem argumentos) do SecureRandom é recomendado, pois utiliza a semente fornecida pelo sistema com comprimento apropriado para garantir alta entropia. Fornecer uma semente (embutida em código ou de outra forma) ao construtor é desencorajado na documentação do Android, pois corre o risco de criar saída determinística e comprometer a segurança.

Embora a documentação afirme que a semente fornecida normalmente complementa a semente existente, esse comportamento pode diferir se um provedor de segurança antigo for usado. Para evitar essas armadilhas, certifique-se de que seu aplicativo tenha como destino uma versão moderna do Android com um provedor atualizado ou configure explicitamente um provedor seguro, como AndroidOpenSSL (ou Conscrypt em versões mais recentes).

Outras Linguagens

Consulte a documentação da biblioteca padrão ou do framework para encontrar a API que expõe o gerador de números pseudoaleatórios criptograficamente seguro do sistema operacional. Essa geralmente é a abordagem mais segura, desde que não haja vulnerabilidades conhecidas na geração de números aleatórios dessa biblioteca. Por exemplo, consulte o problema do Flutter/Dart como um lembrete de que alguns frameworks podem ter fraquezas conhecidas em suas implementações de PRNG.

Tests

MASTG-TEST-0204: Uso Inseguro de API de Aleatoriedade MASTG-TEST-0205: Uso de Fontes Não Aleatórias