Mensaje de syslog en el arranque: lectura urandom no inicializada

Mensaje de syslog en el arranque: lectura urandom no inicializada

La CPU esAMD GX-412TC SOC:

GX-412TC GE412TIYJ44JB 4 6W 2MB 1.0GHz/ 1.4GHz N/A/D DDR-1333 0-90°C

que no tiene rdrand:

grep rdrand /proc/cpuinfo
# nothing

Veo los siguientes mensajes syslogdespués del inicio de mi máquina:

kernel: random: dd: uninitialized urandom read (512 bytes read)
kernel: random: cryptsetup: uninitialized urandom read (32 bytes read)

¿Qué significan exactamente estos mensajes y qué puedo hacer al respecto?

¿Significa ddque cryptsetupintento leer /dev/urandompero no hay suficiente entropía?

Estoy usando havegedun demonio, pero se inicia tarde en el proceso de inicio, después de que aparece este mensaje.

Aquí está la secuencia de inicio de mi script de arranque:

/etc/rcS.d/S01hostname.sh
/etc/rcS.d/S01mountkernfs.sh
/etc/rcS.d/S02mountdevsubfs.sh
/etc/rcS.d/S03checkroot.sh
/etc/rcS.d/S04checkfs.sh
/etc/rcS.d/S05mountall.sh
/etc/rcS.d/S06bootmisc.sh
/etc/rcS.d/S06procps
/etc/rcS.d/S06urandom
/etc/rcS.d/S07crypto-swap
/etc/rc2.d/S01haveged
/etc/rc2.d/S01networking
/etc/rc2.d/S04rsyslog
/etc/rc2.d/S05cron
/etc/rc2.d/S05ssh

los mensajes en syslog provienen de estos dos scripts:

/etc/rcS.d/S06urandom  -> dd
/etc/rcS.d/S07crypto-swap -> cryptsetup

¿Se debe havegedempezar antes urandom?

Estoy usando Debian 10.

Además, debo agregar que esta máquina es una placa básica, sin teclado. La única interfaz es una consola serie. Creo que esto tiene un efecto en la entropía disponible y es la razón por la que lo instalé havegeden primer lugar. Sin haveged, el sshddemonio no se iniciaría hasta dentro de varios minutos, porque no tiene suficiente entropía.

Respuesta1

Su diagnóstico es correcto: se intentó una lectura en un grupo de entropía vacío. Esto es "hambre de entropía en el tiempo de arranque".

Puede aprovechar systemd-boot si tiene un sistema EFI,ignora la advertencia(estás usando una criptografía predecible, pero enmayoríacasos de uso que siguen siendo mejores que no utilizar ninguna criptografía), o intentar acreditar la entropía de fuentes alternativas:si está disponible- agregando esto a la línea de comando del kernel

rng_core.default_quality=X

(comience en X=1000 y baje desde allí).

Existen otras técnicas para recolectar entropía; un SOC puede tener algunos pines disponibles y hay módulos de controladores de hardware que permiten recolectar entropía de ellos. Entonces es sólo cuestión de conectar alguna configuración adecuada de transistor y resistencia (o en algunos casos, un micrófono electreto) para captar algo de ruido térmico.

Alternativamente, los núcleos de la serie 5.4+ tienen una recolección de entropía más eficiente, lo que podría ser suficiente.

Respuesta2

Para que haveged funcione, tiene que ser compatible con su kernel; hay un problema porque haveged no hace nada en las versiones del kernel >=5.x, consulte¿Haged sigue siendo útil/relevante? #57en GitHub.

El responsable del mantenimiento tuvo la amabilidad de reintroducir la funcionalidad, pero esos parches tendrán que publicarse y luego incorporarse a las distintas distribuciones primero... la versión anterior no se iniciará en absoluto o en realidad no hará nada, incluso si es ejecutándose (verifique con strace), ya que el grupo de entropía del kernel ya no parece faltar, pero crng init todavía lleva tiempo por alguna razón.

También debe ejecutarse desde el principio, por lo que si está usando initramfs, también debe comenzar a ejecutar haveged en initramfs, algún tiempo antes de usar el dispositivo aleatorio. En un sistema de inicio tradicional, haveged debería ejecutarse tan pronto como /proc /sys /devesté disponible.

No estoy seguro de cuánto tiempo tarda exactamente Haveged en enviar entropía al núcleo... primero tiene que recolectar aleatoriedad por sí solo y también realiza algunas pruebas de calidad al respecto. En mi última prueba (con Haveged parcheado) hubo como medio segundo de retraso entre el inicio de Haveged y el informe del kernel random: crng init done.

Además de haveged, también puedes considerar guardar/restaurar una semilla aleatoria y, si tienes red, un poco de tráfico podría ayudar al kernel a recolectar algo de entropía también.

información relacionada