Adicionando “entropia numérica aleatória” para chaves GPG?

10

No seguinte vídeo: Linux HOWTO: Proteja seus dados com o PGP, Parte 2 , você verá como criar um par de chaves com gpg . Por volta de 1:50 , o instrutor diz o seguinte:

While the key is being generated, it is a good idea to move your mouse around a little bit to give it a bit more random number entropy for the creation of the keypair.

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 ideia de como o gerador de números aleatórios do Linux funciona, seja ele compartilhado pela GUI ou independente dele. Existe algum estoque no que ele alega, ou isso é um exemplo de programação de cultos de carga

    
por IQAndreas 13.06.2014 / 04:45

3 respostas

8

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.

    
por 13.06.2014 / 05:19
3

O GPG está usando o gerador de números aleatórios Linux (kernel). O gerador de 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 de disco, etc.) gerará interrupções.

Então, mover o mouse realmente alimenta o gerador de números aleatórios. Mas se isso depende da versão exata do kernel em uso; versões mais recentes não usam (pelo menos no meu teste) interrupções de teclado ou mouse para entropia. A atividade do disco, no entanto, (por exemplo, executar 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 deve simplesmente parar - assim, sua geração de chaves será interrompida até que alguma entropia seja gerada. Então, seria um problema para sempre, não um problema de segurança.

Você pode ver quanta entropia está disponível em cat /proc/sys/kernel/random/entropy_avail .

    
por 13.06.2014 / 04:59
0

O Tails tem uma geração de chaves extremamente rápida porque tem haveged instalado:

sudo apt-get install haveged
    
por 15.12.2016 / 12:05