generación de claves RSA: gpg vs openssh

7

Cuando genero la clave RSA para ssh (tanto del servidor como del cliente):

dpkg-reconfigure openssh-server
ssh-keygen

la generación de claves se completa instantáneamente. Sin embargo, cuando genero una clave RSA para gpg, la generación de claves toma varios minutos y tengo que generar entropía escribiendo en el teclado o leyendo / escribiendo en el disco:

gpg --key-gen

Me pregunto qué es lo que marca esta diferencia, y si la calidad de las claves generadas es la misma (para el mismo tamaño de clave) . ¿Alguien tiene algo que decir al respecto?

como una nota al margen:

Recuerdo vagamente, hubo una vulnerabilidad de Debian OpenSSH que afectó la generación del generador de números aleatorios. IIRC, la entropía de la clave provino de dos fuentes:

1) using uninitialized memory
2) using the Process ID (PID)

Este error se debió al comentar (1), dejando el PID como la única fuente de entropía. En consecuencia, el espacio de claves posibles fue de solo 2 ^ 16.

¿Abre openssh realmente solo estas dos fuentes de entropía? No /dev/random ?

    
pregunta Michael Boies 19.03.2015 - 12:41
fuente

1 respuesta

3

La diferencia proviene del bloqueo / no bloqueo de la comunicación aleatoria utilizada (por ejemplo, / dev / random y / dev / urandom) de las páginas de manual de ubuntu 14.04 ( man random ):

NAME:      random, urandom - kernel random number source devices

SYNOPSIS : #include <linux/random.h>
           int ioctl(fd, RNDrequest, param);

DESCRIPTION :
 The  character  special files /dev/random and /dev/urandom 
 (present since Linux 1.3.30) provide an interface to the kernel's random number    
 generator. 
 File /dev/random has major device number 1 and minor device number 8. 
 File /dev/urandom has major device number 1 and minor device number 9.

 The random number generator gathers environmental noise from device drivers and  
 other sources into an entropy pool.  The generator also keeps  an  estimate
 of the number of bits of noise in the entropy pool.  From this entropy pool random 
 numbers are created.

 When  read,  the  /dev/random device will only return random bytes within the 
 estimated number of bits of noise in the entropy pool.  /dev/random should be
 suitable for uses that need very high quality randomness such as one-time pad or 
 key generation.  When the entropy pool is empty,  reads  from  /dev/random
 will block until additional environmental noise is gathered.

 A  read  from  the  /dev/urandom  device will not block waiting for more entropy.  
 As a result, if there is not sufficient entropy in the entropy pool, the
 returned values are theoretically vulnerable to a cryptographic attack on the  
 algorithms used by the driver.  Knowledge of how to do this is not  available
 in  the  current  unclassified  literature,  but it is theoretically possible that 
 such an attack may exist.  If this is a concern in your application, use 
 /dev/random instead.

 Writing to /dev/random or /dev/urandom will update the entropy pool with the data 
 written, but this will not result in a higher entropy count.  This  means
 that it will impact the contents read from both files, but it will not make reads   
 from /dev/random faster.

Usage :
 If  you  are  unsure  about  whether you should use /dev/random or /dev/urandom,  
 then probably you want to use the latter.  As a general rule, /dev/urandom
 should be used for everything except long-lived GPG/SSL/SSH keys.

Esto significa que openssh usará el archivo especial / dev / urandom, y gpg --key-gen usa el / dev / random. el GPG se bloqueará cuando la entropía se "drene" hasta que se agregue suficiente entropía, lo que resultará en el uso de la entropía probada, urandom repite su grupo de entropía todo el tiempo. Eso significa que no se queda sin entropía como lo hace / dev / random. y lo hace para tener un nivel de entropía 'real' conocido para los números aleatorios. y no confiar en la entropía de / dev / urandom.

    
respondido por el LvB 19.03.2015 - 13:31
fuente

Lea otras preguntas en las etiquetas