Fontes de Entropy para Linux

9

Digamos que eu queira um gigabyte ou mais de dados aleatórios de / dev / random, adequados para um bloco único (assim / dev / urandom está fora.) Como semear meu / dev / random com entropia suficiente para faça isso? Eu estou procurando comandos e programas específicos para isso. Eu não quero comprar nada. Estou usando o Arch Linux, se isso faz diferença.

    
por PyRulez 16.06.2015 / 02:31

7 respostas

4

Dois programas que podem aumentar o pool de entropia sem exigir hardware extra são rng-tools e haveged . rng-tools usa RNGs disponíveis em CPUs e chipsets modernos, haveged usa aleatoriedade de CPU moderna (comportamento de cache etc.). Ambos estão disponíveis no Arch, e o Wiki do Arch tem uma página interessante discutindo-os. Eu não tentei usá-los para gerar um gigabyte de dados, mas deve ser possível em um período de tempo razoável.

Você exclui explicitamente a compra de qualquer coisa, mas apenas por completo, há um artigo interessante no LWN sobre entropia com o NeuG , que inclui a discussão de haveged e várias outras abordagens. Você pode comprar uma placa STM8S capaz de rodar o NeuG por menos de US $ 10, ou um FST-01 por US $ 35.

    
por 16.06.2015 / 06:48
4

Infelizmente, / dev / random também não é adequado para uso em um bloco único, pelo menos não o tipo de bloco único (com garantias de segurança prováveis) que a maioria das pessoas imagina quando pensa ou implementa uma vez almofadas. A maioria das informações abaixo é resumida no artigo (muito longo) no link

O problema é que / dev / random não é verdadeiramente aleatório; ele usa um CSPRNG para gerar sua saída. De fato, o / dev / random usa exatamente o mesmo CSPRNG que o / dev / urandom. A única diferença é que / dev / blocos aleatórios se sua estimativa interna de entropia é insuficiente.

A palavra "estimativa" na sentença anterior é fundamental. A maioria das pessoas pensa que essa estimativa é sempre precisa e perfeita, mas na realidade não é exata. No instante em que a estimativa está errada, você perde todas as garantias de segurança prováveis do one-time pad, e tudo o que resta é a segurança computacional - não melhor do que se você tivesse usado / dev / urandom!

Obter a estimativa de entropia um pouco errada não torna seu bloco de uso único um pouco inseguro. A garantia de segurança comprovada de um bloco único é tudo ou nada.

A premissa desta questão é que os problemas com / dev / random podem ser "corrigidos" adicionando mais entropia. Infelizmente, essa premissa está errada. Uma fonte maliciosa de entropia é muito pior do que nenhuma entropia, porque as fontes de entropia geralmente têm acesso a dados internos e podem exportar esses dados secretamente usando a saída RNG - consulte para uma discussão completa (muito tempo para resumir aqui). Em particular, uma fonte de entropia de hardware (como recomendado por várias outras respostas) é uma escolha muito ruim do ponto de vista de segurança, já que o hardware está em posição privilegiada para fazer coisas maliciosas e é essencialmente inadmissível.

    
por 16.06.2015 / 12:23
3

Parece que um componente de hardware é a melhor ideia. Existem alguns geradores HW IC lá fora, mas você tem que confiar neles como eles vêm.

Duas soluções provavelmente boas são para induzir componentes para criar ruído; duas soluções principais parecem ser o viés da temperatura e o ruído do avanche criado com um diodo (veja link )

Como os componentes como giroscópio e acelerômetro se tornaram mais sensíveis, fazê-los trabalhar com a mais alta sensibilidade e usar seu valor LSB também pode ser uma boa solução, mas ninguém da AFAIK o auditou.

É engraçado, pois há muito papel em NOT do RNG, mas não uma implementação de HW aberta e verificada

    
por 16.06.2015 / 09:05
2

Você pode usar pycsprng.py . Criptograficamente seguro? Não tenho certeza, mas gostaria de uma revisão por pares.

python pycsprng.py | pv | dd of=data.file bs=1024 count=1000

O canal para pv é opcional e apenas ajudará você a saber quanto dados foram transferidos.

Você pode descobrir que tamanhos maiores de blocos (bs) aumentam a performance. Você terá que ajustar a contagem para não gerar um arquivo muito grande se aumentar o tamanho do bloco.

    
por 16.06.2015 / 07:04
0

O que você obtém de um canal de microfone analógico quando não conecta um microfone geralmente é apenas estático. Pipe que através de bzip2, por exemplo, para clareamento, misture com outra fonte de aleatoriedade (urandom ou outro microfone), talvez canalize o resultado através de openssl para uma boa medida e o que você obter deve ser bem aleatório .

No entanto, seria difícil provar quaisquer propriedades de segurança rígidas e rápidas sobre a aleatoriedade do resultado.

    
por 16.06.2015 / 15:20
0

Se você estiver usando o kernel linux 2.6.9 ou mais recente no processador amd64 / x86_64, ambiente virtual ou físico, você pode tentar ncomputers.org/pandom um verdadeiro gerador de números aleatórios, que oferece entropia de 8 KiB / s de 64 ubits / 64 bits através de /dev/random

    
por 14.02.2017 / 22:11
0

Para gerar 100 MB de dados aleatórios gerados por hardware, você pode:

  • Grave 20 minutos de áudio (96khz 16bit mono) com o microfone embutido do seu computador (disponível em um laptop). Você obterá um arquivo WAV de ~ 220 MB.

  • Descarte os bits não úteis e embaralhe os bits dos dados binários (muitas maneiras de fazer isso) com alguma matemática

  • Exportar os bits embaralhados como um arquivo binário de ~ 100 MB

Aqui está um artigo sobre isso: Uma tentativa de gerar entropia verdadeira e dados aleatórios com áudio (e o microfone embutido do seu computador) .

    
por 02.10.2018 / 12:04