Por razões melhor descritas como filosóficas, gostaria de saber o seguinte. Suponha que eu vou ler de /dev/random (ou /dev/urandom) no tempo X. Em um cenário eu apenas faço isso, mas em outro, com /dev/random no estado idêntico, eu empurro algum número de bytes em /dev/urandom logo antes do tempo X. As saídas são as mesmas? Ignore o caso em que, por uma grande e estranha coincidência, os bytes específicos que escrevo deixam o estado de /dev/random no mesmo estado em que estavam antes.
Outra maneira de perguntar: escrever em /dev/random altera imediatamente (exceto coincidência improvável) o estado de /dev/random, ou existe algum tipo de buffer (de entrada ou saída) que significa que /dev/random será afetado por minhas gravações, mas apenas em um futuro potencialmente distante?
Nota: não estou usando o ioctl para reivindicar entropia extra disponível quando escrevo.
Quero enfatizar que esta não é uma questão "importante", e eu groco completamente que, pelo que sei, algum hardware de aleatoriedade quântica pode mudar de estado porque alguém em todo o mundo bocejou ou não bocejou, muito menos se eu bocejo ou não. não faça uma escrita. Esta questão é estritamente sobre se o ato de escrever em /dev/random faz uma mudança imediata de estado no software, ou se /dev/random armazenou em buffer o que você vai obter em seguida (ou armazena em buffer o que você escreve nele até ele decide reenviar algo) e, portanto, o efeito das gravações é atrasado.
Uma vez que esta pergunta está claramente fora da parede, deixe-me explicar por que estou perguntando. Eu corro um jogo onde as saídas de /dev/random são usadas para decidir os resultados do jogo. Durante o jogo, as pessoas estão falando sobre o mumble e eu pego uma cópia em tempo real desse fluxo de áudio, faço o hash e coloco em /dev/random. O que estou tentando decidir é se posso afirmar, com precisão, mas absurdamente, "Se você não tivesse dito isso, você não teria lançado aquele 1", ou se eu deveria apenas fazer a afirmação mais fraca "o que você disse vai voltar para assombrar suas jogadas de dados algum dia."
Também é interessante saber se "afeta agora" provavelmente será uma propriedade permanente de /dev/random ou é apenas um acaso da implementação atual.
Obrigado!
(Supondo que a documentação em drivers/char/random.c esteja correta), qualquer coisa que você escrever é diretamente misturada no pool de entropia e a saída aleatória é um hash desse pool. Portanto, a mudança deve ser imediata.
No entanto, ler /dev/random pode bloquear (quando a entropia está vazia) e escrever (usando poll) também pode bloquear (quando a entropia está cheia), e escrever em /dev/random pode ser muito lento em geral. Portanto, há algumas considerações de desempenho com essa ideia.
Se você quiser que dados aleatórios dependam dos murmúrios de seus usuários, você pode pular /dev/random completamente e simplesmente rolar tudo através de sua própria função SHA. Isso lhe daria controle total sobre o estado também. Assim, você pode dar a cada usuário sua própria instância de hash para que seus números aleatórios sejam inteiramente baseados em suas próprias vozes. Não dependendo da aleatoriedade do sistema e também não dependendo do que outras pessoas dizem. O que também pode permitir que eles trapaceiem se aprenderem sua implementação de função de hash e enviarem padrões de áudio preparados. ;-)
Mas tirando isso, toda a ideia é bastante esotérica. Os dados aleatórios são imprevisíveis, assim como os resultados de hash; a menos que você não queira que seja aleatório, não há muito sentido em fazer tudo isso apenas lendo
/dev/_u_random
e nunca escrever nada de volta nele.