
No vídeo a seguir:Linux HOWTO: Proteja seus dados com PGP, Parte 2, será mostrado como criar um par de chaves com gpg
. Por volta de 1:50
, o instrutor diz o seguinte:
Enquanto a chave está sendo gerada, é uma boa ideiamova o mouseum pouco para dar um pouco mais de entropia de número aleatório para a criação do par de chaves.
Isso me parece um mito, especialmente porque as ferramentas de linha de comando geralmente não deveriam ser afetadas pelo cursor. Por outro lado, não tenho ideia de como funciona o gerador de números aleatórios do Linux, seja ele compartilhado pela GUI ou independente dela. Existe alguma certeza no que ele afirma, ou este é um exemplo deprogramação de culto à carga?
Responder1
Há um pouco de verdade nisso, na verdade mais verdade do que mito, mas mesmo assim a afirmação reflete um mal-entendido fundamental sobre o que está acontecendo. Sim, mover o mouse enquanto gera uma chave com GPG pode ser uma boa ideia. Sim, mover o mouse contribui com alguma entropia que torna os números aleatórios 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 está nessa categoria, têm dois componentes:
- Umentropiafonte, que é não determinística. O objetivo da entropia é inicializar o 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 o mesmo cálculo.
- Agerador de números pseudoaleatórios, que produz números aleatórios imprevisíveis de forma determinística a partir de um estado interno em mudança.
A entropia deve vir de uma fonte externa ao computador. O usuário é uma fonte de entropia. O que o usuário faz geralmente não é aleatório, mas o timing preciso das teclas digitadas e dos movimentos do mouse é tão imprevisível que chega a ser ligeiramente aleatório – não muito aleatório, mas aos poucos 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 do kernel podem usar um conjunto diferente de fontes. Alguns computadores possuem circuitos RNG de hardware dedicados baseados em decaimento radioativo ou, menos impressionante, circuitos eletrônicos instáveis. Essas fontes dedicadas são especialmente úteis em dispositivos e servidores embarcados que podem ter um comportamento bastante previsível na primeira inicialização, sem que o usuário faça coisas estranhas.
O Linux fornece números aleatórios para programas por meio de dois dispositivos:/dev/random
e/dev/urandom
. A leitura de qualquer um dos dispositivos retorna 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 tornam nenhum deles 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 disponível e bloqueia se não houver o suficiente. Isto parece bom, exceto que o cálculo é baseado em considerações teóricas que fazem com que a quantidade de entropia disponível diminua linearmente com cada bit de saída. Assim,/dev/random
tende a bloquear muito rapidamente.
Os sistemas Linux salvam o estado interno do RNG em disco e o restauram no momento da inicialização. Portanto, a entropia é transferida de uma inicialização para a próxima. O único momento em que um sistema Linux pode não ter entropia é quando ele é instalado recentemente. Uma vez que haja entropia suficiente no sistema, a entropia não diminui; apenas o cálculo falho do Linux diminui. Para mais explicações sobre esta consideração, leia/dev/urandom
é adequado para gerar uma chave criptográfica, por um criptógrafo profissional. Veja tambémVocê pode explicar a estimativa de entropia usada em random.c.
Mover o mouse adiciona mais entropia ao sistema. Masgpg só pode ler de/dev/random
, não/dev/urandom
(uma maneira de resolver este problema é fazer /dev/random
o mesmo dispositivo 1:9 que/dev/urandom
), para que ele nunca corra o risco de receber números aleatórios não aleatórios o suficiente.Se você não mover o mouse, a tecla será tão aleatória quanto possível; mas o que pode acontecer é que o gpg pode ser bloqueadoem uma leitura de /dev/random
, aguardando que o contador de entropia do kernel aumente.
Responder2
GPG está usando o gerador de números aleatórios Linux (kernel). O gerador do kernel obtém entropia (aleatoriedade) de todos os tipos de lugares, entre eles está o tempo de interrupção, para certas interrupções. Mover o mouse (e digitar, atividade do disco, etc.) gerará interrupções.
Portanto, mover o mouse potencialmente alimenta o gerador de números aleatórios. Mas isso depende da versão exata do kernel em uso; versões mais recentes não usam (pelo menos em meus testes) interrupções de teclado ou mouse para entropia. A atividade do disco, entretanto, o faz (por exemplo, a execução sync
adicionará uma quantidade potencialmente grande de entropia, dependendo de quanto é liberado).
Resumindo: isso não é verdade nas versões atuais do Linux. Foi nos mais velhos.
No entanto, se o gerador ficar sem entropia, ele deverá simplesmente parar – então a geração de sua chave ficará suspensa até que alguma entropia seja gerada. Portanto, seria um problema que levaria para sempre, não um problema de segurança.
Você pode ver quanta entropia está disponível por cat /proc/sys/kernel/random/entropy_avail
.
Responder3
Tails possui uma geração de chaves extremamente rápida porque possui haveged
instalado:
sudo apt-get install haveged