Puedes escribir a /dev/random
porque es parte de la forma de proporcionar bytes aleatorios adicionales a /dev/random
, pero no es suficiente, también debe notificar al sistema que hay entropía adicional a través de un ioctl()
llamar.
Necesitaba la misma funcionalidad para probar el programa de configuración de mi tarjeta inteligente, ya que no quería esperar a que mi mouse/teclado generara suficiente para varias llamadas a gpg
que se realizaron para cada ejecución de prueba. Lo que hice fue ejecutar el programa Python, que sigue, en paralelo a mis pruebas. Por supuesto, no debería ser usado para nada real gpg
generación de claves, ya que la cadena aleatoria no es aleatoria en absoluto (la información aleatoria generada por el sistema aún se intercalará). Si tiene una fuente externa para configurar la cadena para random
, entonces debería poder tener una alta entropía. Puedes comprobar la entropía con:
cat /proc/sys/kernel/random/entropy_avail
El programa:
#!/usr/bin/env python
# For testing purposes only
# DO NOT USE THIS, THIS DOES NOT PROVIDE ENTROPY TO /dev/random, JUST BYTES
import fcntl
import time
import struct
RNDADDENTROPY=0x40085203
while True:
random = "3420348024823049823-984230942049832423l4j2l42j"
t = struct.pack("ii32s", 8, 32, random)
with open("/dev/random", mode='wb') as fp:
# as fp has a method fileno(), you can pass it to ioctl
res = fcntl.ioctl(fp, RNDADDENTROPY, t)
time.sleep(0.001)
(No olvide cerrar el programa una vez que haya terminado).
Por lo general, está diseñado por desarrolladores del kernel y documentado en man 4 random
:
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.