Entendo que / dev / random é uma boa fonte de entropia, e é o que geralmente é usado - é como estou lendo no GC, pelo menos em Java, parece aceito que o daemon de coleta de lixo é executado de forma não determinística . Se isso é verdade, por que não usamos o tempo da coleta de lixo como fonte de entropia em vez da variável / dev / random?
random
garbage-collection
edthethird
fonte
fonte
Respostas:
"Não especificado" e "aleatório" são dois conceitos completamente diferentes.
O funcionamento exato de um coletor de lixo não é especificado e depende do coletor de lixo (geralmente implementado por uma VM das sortes, mas não necessariamente).
Portanto, você não tem um tempo especificado (isto é, determinístico) no qual o lixo será coletado.
No entanto, qualquer implementação dada seguirá algumas regras e há uma grande chance de que duas execuções subseqüentes do mesmo programa tenham padrões de coleta de lixo muito semelhantes.
Portanto, a entropia real fornecida por um coletor de lixo seria muito baixa (e descobrir quais partes você pode realmente usar como entropia será complicado).
Como comparação: A
HashMap
em Java não garante nenhuma ordem de recuperação para seus membros (basicamente porque garantir isso acrescentaria uma sobrecarga que não vale a pena pagar, na maioria das vezes). No entanto, para uma determinada implementação e um determinado conjunto de inserções / remoções, você pode definitivamente calcular o pedido resultante. Só porque não há garantia para um determinado pedido, não significa que o pedido seja aleatório.fonte
Primeiro, temos que ter cuidado para não cair na armadilha do raciocínio, manipulando meras palavras. Por exemplo, poderíamos perguntar, uma vez que uma NFA é um "autômato finito não determinístico", por que não a usamos para obter números aleatórios? Nesse caso, seria porque não é isso que "não determinístico" significa em uma NFA; de fato, quando simulamos um NFA, em uma determinada entrada, o comportamento da simulação é perfeitamente determinístico.
"Determinístico" é uma frase carregada. Para um programador ou cientista da computação, o comportamento não determinístico significa apenas "determinar o comportamento exato que é complicado de se pensar" e depende de muitos fatores, incluindo a entrada do programa.
No entanto, isso não significa que não seja determinístico para alguém motivado a atacar um sistema de criptografia. Às vezes, fatores e entradas ambientais podem ser identificados, e padrões repetíveis emergem do comportamento "não determinístico".
fonte