No vídeo a seguir: HOWTO Linux: Proteja seus dados com PGP, Parte 2 , você verá como criar um par de chaves gpg
. Mais ou menos 1:50
, o instrutor diz o seguinte:
Enquanto a chave está sendo gerada, é uma boa idéia mover o mouse um pouco para dar um pouco mais de entropia numérica aleatória para a criação do par de chaves.
Isso me parece um mito, especialmente porque as ferramentas de linha de comando geralmente não devem ser afetadas pelo cursor. Por outro lado, não tenho idéia de como o gerador de números aleatórios do Linux funciona, seja compartilhado pela GUI ou independente dele. Existe alguma ação no que ele afirma, ou isso é um exemplo de programação de culto à carga ?
Respostas:
Há um grão de verdade nisso, na verdade mais verdade do que mito, mas, no entanto, a afirmação reflete um mal-entendido fundamental do 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 uma entropia que torna aleatórios os números aleatórios. Não, mover o mouse não torna a chave mais segura.
Todos os bons geradores aleatórios adequados para criptografia, e os Linux estão nessa categoria, têm dois componentes:
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 bom momento das teclas e movimentos do mouse é tão imprevisível que pode ser 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. Versões e configurações diferentes do kernel podem usar um conjunto diferente de fontes. Alguns computadores possuem circuitos RNG de hardware dedicados 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 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. Isso 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 RNG interno em disco e o restauram no momento da inicialização. Portanto, a entropia é transferida de uma inicialização para a seguinte. O único momento em que um sistema Linux pode não ter entropia é quando ele é instalado recentemente. Uma vez que existe entropia suficiente no sistema, a entropia não diminui; apenas o cálculo defeituoso do Linux diminui. Para mais explicações sobre essa consideração, leia
/dev/urandom
é adequado para gerar uma chave criptográfica , por um criptógrafo profissional. Veja também. Você pode explicar a estimativa de entropia usada em random.c .Mover o mouse adiciona mais entropia ao sistema. Mas o gpg pode apenas ler
/dev/random
, não/dev/urandom
(uma maneira de resolver esse problema é criar/dev/random
o mesmo dispositivo 1: 9 que/dev/urandom
), por isso nunca corre o risco de receber números aleatórios que não sejam aleatórios o suficiente. Se você não mover o mouse, a chave é o mais aleatória possível; mas o que pode acontecer é que o gpg pode ser bloqueado em uma leitura de/dev/random
, aguardando o contador de entropia do kernel subir.fonte
add_input_randomness
nosdrivers/input/input.c
, mas eu não sei em que circunstâncias ele vai entropia realmente injetar.O GPG está usando o gerador de números aleatórios do Linux (kernel). O gerador de kernel obtém entropia (aleatoriedade) de todos os tipos de lugares, entre eles o tempo de interrupção, para certas interrupções. Mover o mouse (e digitar, atividade do disco etc.) gerará interrupções.
Assim, mover o mouse de fato potencialmente alimenta o gerador de números aleatórios. Mas se isso depende da versão exata do kernel em uso; as versões mais recentes (pelo menos nos meus testes) não usam interrupções de teclado ou mouse para entropia. A atividade do disco, no entanto, o faz (por exemplo, a execução
sync
adicionará uma quantidade potencialmente grande de entropia, dependendo da quantidade liberada).Em resumo: isso não é verdade nas versões atuais do Linux. Foi nos mais velhos.
No entanto, se o gerador ficar sem entropia, ele deverá parar - portanto, sua geração de chaves será interrompida até que alguma entropia seja gerada. Portanto, seria um problema que levaria uma eternidade, não um problema de segurança.
Você pode ver a quantidade de entropia disponível por
cat /proc/sys/kernel/random/entropy_avail
.fonte
rngd
para alimentar artificialmente o pool de entropia.haveged
é outra boa ferramenta para alimentar artificialmente o pool de entropia.O Tails possui uma geração de chaves extremamente rápida porque
haveged
instalou:fonte