Em criptografia, um gerador pseudoaleatório (PRG) é um algoritmo que produz uma sequência de bits que parece aleatória, embora na verdade seja determinada por um estado interno secreto. Um PRG seguro é um PRG computacionalmente indistinguível de uma sequência de bits verdadeiramente aleatória. Isto significa que não existe um algoritmo eficiente que possa tomar como entrada uma sequência de bits produzida por um PRG seguro e distingui-la de uma sequência de bits verdadeiramente aleatórios.
PRGs seguros são usados em uma variedade de aplicações criptográficas, incluindo:
* Criptografia:Um PRG seguro pode ser usado para gerar uma chave para criptografar dados. Essa chave pode então ser usada para criptografar os dados de tal forma que seja computacionalmente inviável descriptografá-los sem a chave.
* Autenticação:Um PRG seguro pode ser usado para gerar um par desafio-resposta para autenticar usuários. O desafio é enviado ao usuário, que responde com a resposta correspondente. O verificador verifica se a resposta está correta e, se estiver, o usuário é autenticado.
* Assinaturas digitais:Um PRG seguro pode ser usado para gerar uma assinatura digital para uma mensagem. Esta assinatura pode então ser usada para verificar se a mensagem veio do remetente e se não foi adulterada.
Existem várias maneiras diferentes de construir PRGs seguros. Algumas técnicas comuns incluem:
* Usando uma função hash criptográfica:Um PRG seguro pode ser construído usando uma função hash criptográfica para hash de um valor inicial secreto. A saída da função hash é então usada como saída do PRG.
* Usando uma cifra de bloco:Um PRG seguro pode ser construído usando uma cifra de bloco para criptografar um valor inicial secreto. A saída da cifra de bloco é então usada como saída do PRG.
* Usando uma cifra de fluxo:Um PRG seguro pode ser construído usando uma cifra de fluxo para criptografar um valor inicial secreto. A saída da cifra de fluxo é então usada como saída do PRG.
A segurança de um PRG seguro depende da segurança da primitiva criptográfica subjacente (como uma função hash, cifra de bloco ou cifra de fluxo). Se a primitiva criptográfica for segura, então o PRG seguro também será seguro.