Há um grão de verdade nisso, na verdade mais verdade do que mito, mas mesmo assim a declaração reflete um mal-entendido fundamental sobre o que está acontecendo. Sim, mover o mouse enquanto gera uma chave com o GPG pode ser uma boa ideia. Sim, mover o mouse contribui com alguma entropia que faz com que números aleatórios sejam aleatórios. Não, mover o mouse não torna a chave mais segura.
Todos os bons geradores aleatórios adequados para criptografia e o Linux, nessa categoria, têm dois componentes:
- Uma fonte entropy , que não é determinística. O objetivo da entropia é fazer o bootstrap do gerador de números aleatórios com dados imprevisíveis. A fonte de entropia deve ser não-determinística: caso contrário, um adversário poderia reproduzir a mesma computação.
- Um gerador de números pseudo-aleatórios , que produz números aleatórios imprevisíveis de forma determinística a partir de um estado interno em mudança.
A entropia tem que vir de uma fonte externa ao computador. O usuário é uma fonte de entropia. O que o usuário faz não é em geral aleatório, mas o bom timing das teclas e movimentos do mouse é tão imprevisível que é um pouco aleatório - não muito aleatório, mas pouco a pouco, ele se acumula. Outras fontes potenciais de entropia incluem o tempo dos pacotes de rede e o ruído branco da câmera ou do microfone. Diferentes versões e configurações de kernel podem usar um conjunto diferente de fontes. Alguns computadores possuem circuitos dedicados de hardware RNG baseados em decaimento radioativo ou, menos impressionante, em circuitos eletrônicos instáveis. Essas fontes dedicadas são especialmente úteis em dispositivos e servidores incorporados que podem ter um comportamento bastante previsível em sua primeira inicialização, sem que um usuário faça coisas estranhas.
O Linux fornece números aleatórios para programas através de dois dispositivos: /dev/random
e /dev/urandom
. A leitura de qualquer dispositivo retorna a qualidade criptográfica. Ambos os dispositivos usam o mesmo estado RNG interno e o mesmo algoritmo para transformar o estado e produzir bytes aleatórios. Eles têm limitações peculiares que não fazem a coisa certa:
-
/dev/urandom
pode retornar dados previsíveis se o sistema ainda não tiver acumulado entropia suficiente. -
/dev/random
calcula a quantidade de entropia e blocos disponíveis, se não houver o suficiente. Isso parece bom, exceto que o cálculo é baseado em considerações teóricas que fazem a quantidade de entropia disponível diminuir linearmente com cada bit de saída. Assim/dev/random
tende a bloquear muito rapidamente.
Os sistemas Linux salvam o estado interno do RNG no disco e o restauram no momento da inicialização. Portanto, a entropia passa de uma bota para a outra. A única ocasião em que um sistema Linux pode não ter entropia é quando ele é recém-instalado. Uma vez que haja entropia suficiente no sistema, a entropia não diminui; apenas o cálculo falho do Linux diminui. Para obter mais explicações sobre essa consideração, leia /dev/urandom
é adequado para gerar uma chave criptográfica , por um criptógrafo profissional. Veja aso Você pode explicar a estimativa de entropia usada em random.c .
Mover o mouse adiciona mais entropia ao sistema. Mas gpg só pode ler a partir de /dev/random
, não /dev/urandom
(uma maneira de resolver esse problema é tornar /dev/random
o mesmo dispositivo 1: 9 como /dev/urandom
), portanto, ele nunca corre o risco de receber não números aleatórios aleatórios. Se você não mover o mouse, a chave será tão aleatória quanto possível; mas o que pode acontecer é que o gpg pode ser bloqueado em uma leitura de /dev/random
, esperando que o contador de entropia do kernel aumente.