Entiendo que / dev / random es una buena fuente de entropía, y es lo que se usa generalmente: es justo cuando estoy leyendo sobre GC, al menos en Java, parece aceptado que el demonio de recolección de basura se ejecuta de manera no determinista . Si esto es cierto, ¿por qué no usamos el tiempo de recolección de basura como fuente de entropía en lugar de la variable / dev / random?
random
garbage-collection
edthethird
fuente
fuente
Respuestas:
"No especificado" y "aleatorio" son dos conceptos completamente diferentes.
El funcionamiento exacto de un recolector de basura no se especifica y depende del recolector de basura (generalmente implementado por una máquina virtual, pero no necesariamente).
Por lo tanto, no tiene un tiempo especificado (es decir, determinista) en el que se recolectará la basura.
Sin embargo, cualquier implementación dada seguirá algunas reglas y existe una alta probabilidad de que dos ejecuciones posteriores del mismo programa tengan patrones de recolección de basura muy similares.
Por lo tanto, la entropía real proporcionada por un recolector de basura sería muy baja (y descubrir qué partes puede usar realmente como entropía será complicado).
Como comparación: A
HashMap
en Java no garantiza ningún orden de recuperación para sus miembros (básicamente porque garantiza que agregaría una sobrecarga que no vale la pena pagar, la mayoría de las veces). Sin embargo, para una implementación dada y un conjunto dado de inserciones / eliminaciones, definitivamente puede calcular el orden resultante. El hecho de que no haya garantía para un pedido dado, no significa que el pedido sea aleatorio.fuente
En primer lugar, debemos tener cuidado de no caer en la trampa del razonamiento mediante la manipulación de simples palabras. Por ejemplo, podríamos preguntar, dado que un NFA es un "autómata finito no determinista", ¿por qué no lo usamos para obtener números aleatorios? En ese caso, sería porque eso no es lo que significa "no determinista" en una NFA; de hecho, cuando simulamos un NFA, en una entrada dada, el comportamiento de la simulación es perfectamente determinista.
"Determinista" es una frase cargada. Para un programador de computadoras o un científico de la computación, el comportamiento no determinista solo significa "determinar el comportamiento exacto es complicado de pensar", y depende de demasiados factores, incluida la entrada del programa.
Sin embargo, eso no significa que no sea determinista para alguien motivado para atacar un sistema criptográfico. A veces, los factores e insumos ambientales pueden precisarse, y los patrones repetibles surgen del comportamiento "no determinista".
fuente