En primer lugar, para responder a su pregunta directamente: Esto no se puede hacer. A propósito no está permitido.
De hecho, puede escribir en / dev / random y mezclará su entrada en el grupo aleatorio, lo que podría mejorar la calidad de la salida. Pero no actualizará el entropy_count y desbloqueará / dev / random para leer, porque sería cheating . De lo contrario, podrías hacer algo como esto:
cat /dev/urandom > /dev/random # Sup dawg, I heard you like random pools...
Excepto que puedes. Tipo de.
Hay un ioctl llamado RNDADDENTROPY
disponible en / dev / random que actualiza el grupo de entropía y luego incrementa el entropy_count en consecuencia. La idea es permitirle leer un RNG de hardware en el espacio de usuario y volcarlo en el grupo del kernel sin escribir su propio controlador. Hábil. Y mientras que cualquier persona puede volcar su entropía en / dev / random (no puede lastimar ), solo la raíz puede usar RNDADDENTROPY
.
Y sí, hay una herramienta por ahí que te permite hacerlo con relativa facilidad; se llama rngd
. Su propósito principal es leer un RNG como /dev/hwrandom
o la instrucción RDRAND
de su procesador, y re-sembrar constantemente su grupo de entropía a medida que disminuye. Pero se necesita un nombre de archivo arbitrario para la entrada, así que sí, incluso puedes hacer esto:
rngd -r /dev/urandom
Lo que, con toda honestidad, no es totalmente diferente a hacer esto:
ln -sf /dev/urandom /dev/random
Pero como dije originalmente, no significa que pueda usar esta herramienta para hacer que el kernel use su archivo como fuente de entropía. Ese bit, Al menos, no está permitido. Puede usarlo como una fuente adicional de entropía combinada con todas las demás, pero no como la única fuente de entropía.
Si está convencido de que su archivo es de aleatoriedad de primer grado, simplemente use eso. No tiene que tener que inyectarlo a través del sistema de estimación de entropía del kernel. Si, en cambio, tiene un mecanismo para generar TRNG, entonces, por supuesto, descargue allí con el resto de las fuentes de entropía; rngd
lo hace bastante simple.
No me molestaré en informarle sobre el absurdo absoluto de evitar religiosamente / dev / urandom en servidores reales, como claramente ha escuchado esa conferencia varias veces y ha decidido no escuchar.
Pero para todos los demás, la diferencia entre / dev / random y / dev / urandom solo importa inmediatamente en el inicio en dispositivos sin fuentes razonables de aleatoriedad (como algunos dispositivos integrados), donde las condiciones de inicio son repetibles con precisión, y donde El grupo aleatorio no se guarda entre las botas. En todos los demás casos, cualquier ataque teórico contra / dev / urandom requeriría técnicas y tecnología que literalmente no existen, y se espera que nunca existan, nunca.
En la redacción de su pregunta, parece que tiene la impresión de que / dev / random produce el resultado de un TRNG, mientras que / dev / urandom usa un PRNG. Esto no es exacto. La única diferencia en la salida es que random
se "bloqueará" si genera bytes más rápido que si observa eventos aleatorios, mientras que urandom
no lo hará. De lo contrario, ambos ejecutan exactamente el mismo código en sus grupos respectivos. Tampoco emite directamente los bits en bruto desde un TRNG. Ambos utilizan eventos aleatorios para volver a generar un PRNG constantemente.