Normalmente, a leitura de /dev/random
produz 100-500 bytes e blocos, aguardando a coleta de uma entropia.
Por que gravar informações em /dev/random
outros processos não acelera a leitura? Não deveria fornecer a entropia necessária?
Pode ser útil para desbloquear gpg
software semelhante ou sem precisar reiniciá-lo e reinserir tudo, para gerar chaves não super secretas, etc.
/dev/urandom
vez disso./dev/urandom
é tão seguro quanto/dev/random
para uso criptográfico , o comportamento de/dev/random
um design ruim.gpg --gen-key
de/dev/random
para/dev/urandom
sem reiniciar?gpg
foi/dev/random
codificado. Você pode alterar sua configuração do udev para criar/dev/random
o mesmo dispositivo/dev/urandom
, entre outras possibilidades.gpg --gen-key
, portanto, reenviar os dados solicitados interativamente (ou usar métodos mais inteligentes, como especificar mais parâmetros de linha de comando). Além disso, o tempo de CPU que gera o prime deve ser perdido (o gpg pode funcionar por um minuto, imprimir alguns+
es e solicitar dados aleatórios adicionais). E dá a sensação de "vamos voltar e seguir outra rota" em vez de "vamos pegar um martelo e forçá-lo adiante" ...Respostas:
Você pode escrever
/dev/random
porque é parte do caminho fornecer bytes aleatórios extras para/dev/random
, mas não é suficiente, também é necessário notificar o sistema de que há entropia adicional por meio de umaioctl()
chamada.Eu precisava da mesma funcionalidade para testar meu programa de configuração de cartão inteligente , pois não queria esperar que o mouse / teclado gerasse o suficiente para as várias chamadas
gpg
feitas para cada execução de teste. O que fiz foi executar o programa Python, a seguir, paralelamente aos meus testes. É claro que não deve ser usado para agpg
geração real de chaves, pois a sequência aleatória não é aleatória (as informações aleatórias geradas pelo sistema ainda serão intercaladas). Se você tiver uma fonte externa para a qual definir a sequênciarandom
, poderá conseguir alta entropia. Você pode verificar a entropia com:O programa:
(Não esqueça de interromper o programa depois que terminar.)
fonte
rngd
. Está disponível como um pacote na maioria das distribuições (todas?).random = "3420348024823049823-984230942049832423l4j2l42j"
consulte xkcd.com/221Normalmente, ele é projetado por desenvolvedores de kernel e documentado em
man 4 random
:fonte
Anthony já explicou que escrever para
/dev/random
não aumenta a contagem de entropia e mostrou como o RNDADDENTROPY ioctl (veja aleatório (4) ) pode ser usado para creditar pela entropia. Obviamente, não é realmente seguro, então aqui está uma alternativa quando um gerador de números aleatórios de hardware está disponível.As implementações a seguir recebem 512 bytes (4096 bits) de aleatoriedade
/dev/hwrng
e a encaminham para o pool de entropia (creditando 4 bits de entropia por byte, essa é uma escolha arbitrária minha). Depois disso, ele chamará o syscall select (2) para bloquear quando o conjunto de entropia estiver cheio (documentado na página de manual aleatória (4) ).Uma versão Python:
Como o iso do Arch Linux não possui o Python instalado, aqui também está uma versão do Perl:
Provavelmente é isso que o programa rngd (parte do rng-tools ) faz (não verificado), exceto pelo uso de ferramentas (Python ou Perl) que já estão disponíveis.
fonte
/dev/urandom
vez de/dev/hwrng
absolutamente não se importar com valores aleatórios inseguros .getrandom()
syscall é usado com hwrng em kernels anteriores a 4.8-rc1 que resulta em comportamento de bloqueio. Uma solução alternativa éread()
duas vezes/dev/random
, consulte github.com/Lekensteyn/archdir/commit/…