Estou tentando apagar de maneira semi-segura um monte de discos rígidos. O seguinte está funcionando a 20-50Mb / s
dd if=/dev/zero of=/dev/sda
Mas
dd if=/dev/random of=/dev/sda
parece não funcionar. Também quando digito
dd if=/dev/random of=stdout
Ele me fornece apenas alguns bytes, independentemente do que eu passo por bs = e count =
Estou usando / dev / random errado? Que outras informações devo procurar para avançar esta solução de problemas? Existe alguma outra maneira de fazer isso com um script ou algo como
makeMyLifeEasy | dd if=stdin of=/dev/sda
Ou algo assim...
/dev/random
saber por que a leitura de apenas retorna alguns bytes, consulte superuser.com/a/712515/139307Respostas:
Ambos
/dev/random
e/dev/urandom
usam um "pool de entropia". Quando o pool acabar,/dev/random
aguarde o reabastecimento, o que requer o monitoramento do comportamento do sistema (entrada do teclado, movimento do mouse etc.), enquanto/dev/urandom
continuará fornecendo dados pseudoaleatórios./dev/random
teoricamente, é de qualidade superior, mas/dev/urandom
certamente é bom o suficiente para seus propósitos. (Mas/dev/urandom
é provável que seja mais lento do que alguns outros métodos. Um gerador mais rápido, mas de menor qualidade, provavelmente é bom o suficiente para apagar discos rígidos. Não está claro que um invasor tenha alguma vantagem em saber a sequência que será gerada ou que números aleatórios são melhores para esse fim do que uma sequência como 0, 1, 2, 3, 4, ....)Citando a
random(4)
página de manual:ATUALIZAÇÃO : A página do manual `random (4) foi atualizada desde que escrevi isso. Agora diz:
Veja também " Mitos sobre / dev / urandom ", de Thomas Hühn.
Mas
/dev/urandom
, mesmo que não bloqueie, é provável que seja muito lento se você deseja gerar grandes quantidades de dados. Faça algumas medições no seu sistema antes de tentar.EDIT: O seguinte é uma digressão em números aleatórios "verdadeiros" vs. números pseudo-aleatórios. Se tudo o que lhe interessa é uma resposta prática à pergunta, você pode parar de ler agora.
Eu pareço reivindicações (incluindo em outras respostas aqui) que
/dev/random
implementam um gerador de números aleatórios "verdadeiro", em oposição a um gerador de números pseudo-aleatórios (PRNG). Por exemplo, o artigo da Wikipedia faz tal afirmação. Eu não acredito que isso esteja correto. Há alguma discussão sobre isso aqui, que se refere a geradores de números aleatórios de hardware, mas não vejo evidências de que/dev/random
normalmente use esse dispositivo ou que computadores típicos tenham esse dispositivo. Eles diferem dos PRNGs como arand()
função C , pois não são determinísticos, pois coletam entropia de fontes que são praticamente imprevisíveis.Eu diria que existem três classes de geradores de números "aleatórios":
PRNGs determinísticos, como a
rand()
função de C , que usam um algoritmo para gerar sequências repetíveis que possuem (mais ou menos) as propriedades estatísticas de uma sequência verdadeiramente aleatória. Eles podem ser bons o suficiente para jogos (dada uma boa maneira de propagá-los) e são necessários para aplicativos que exigem repetibilidade, mas não são adequados para criptografia.Os geradores gostam
/dev/random
e/dev/urandom
coletam entropia de alguma fonte praticamente imprevisível, como a atividade de E / S (é por isso que pressionar o teclado ou mover o mouse pode/dev/random
produzir mais dados). Não está claro (para mim) se eles satisfazem a definição de um PRNG (vi definições que dizem que um PRNG é determinístico), mas também não são verdadeiros geradores de números aleatórios.Geradores de números aleatórios de hardware que são fisicamente imprevisíveis, mesmo com conhecimento completo de seu estado inicial, e que usam adicionalmente técnicas matemáticas para garantir as propriedades estatísticas corretas.
fonte
/dev/urandom
claramente é pseudo-aleatório./dev/random
difere na medida em que tenta fazer uma estimativa conservadora da entropia de sua entrada e não produz mais entropia do que pensa (na verdade). Isso é independente da presença de um dispositivo TRNG dedicado, porque a entropia verdadeira também pode ser obtida a partir de eventos independentes de qualquer tipo, como teclado ou IO da rede versus tempo./dev/random
é uma fonte de verdadeira entropia, bytes verdadeiramente aleatórios. Como tal, precisa de uma fonte de aleatoriedade. Você pode 'esgotar' a aleatoriedade lendo a mesma. Isso lhe dará toda a aleatoriedade que possui e depois bloqueia até obter mais. Você provavelmente está apenas esperando, esperando, e a máquina recebe muito pouca aleatoriedade e espera./dev/random
para criptografia verdadeiramente aleatória, aleatoriedade de alta qualidade. Como tal, é um exagero para uma substituição de unidade de disco. Escrever/dev/zero
algumas vezes é bom. Ou você pode escrever a partir de/dev/urandom
, que não bloqueia e fornece números pseudo-aleatórios quando a aleatoriedade se esgota.fonte
/dev/random
não gera "bytes verdadeiramente aleatórios". Ele gera bytes pseudo- aleatórios de alta qualidade do que gera/dev/urandom
.No Linux / dev / random, existe um arquivo especial que serve números pseudo-aleatórios de alta qualidade. Essa implementação coleta entropia de eventos originados nas interrupções do teclado, mouse, disco e sistema. (consulte este documento) Portanto, quando não há tais eventos, o pool de entropia está vazio, as leituras de / dev / random serão bloqueadas até que o ruído ambiental adicional seja coletado. Isso explica o seu problema. Para preencher o conjunto de entropia, você pode pressionar as teclas do teclado.
Por outro lado, um gerador de números verdadeiramente aleatórios usa um gerador de números aleatórios de hardware que gera números aleatórios a partir de processos físicos. Esses processos incluem fenômenos microscópicos que geram um sinal de "ruído" estatisticamente aleatório de baixo nível, como ruído térmico ou efeito fotoelétrico ou outros fenômenos físicos. Esses processos são, em teoria, completamente imprevisíveis, e as afirmações de imprevisibilidade da teoria estão sujeitas a testes experimentais.
Um gerador de números aleatórios de hardware normalmente consiste em um transdutor para converter algum aspecto dos fenômenos físicos em um sinal elétrico, um amplificador e outros circuitos eletrônicos para aumentar a amplitude das flutuações aleatórias em um nível macroscópico e algum tipo de conversor analógico para digital para converter a saída em um número digital, geralmente um dígito binário simples 0 ou 1. Ao amostrar repetidamente o sinal de variação aleatória, é obtida uma série de números aleatórios.
O gerador de números aleatórios de hardware reúne ruído ambiental de drivers de dispositivo e outras fontes em um pool de entropia. A partir desse conjunto de entropia, são criados números aleatórios. Quando lido, o dispositivo / dev / random retornará apenas bytes aleatórios dentro do número estimado de bits de ruído no pool de entropia. Isso explica o seu problema.
Algumas implementações do Hardware RNG são explicadas no documento e na informação do kernel em um dispositivo .
Uma contraparte de / dev / random é / dev / urandom (fonte aleatória "desbloqueada" / sem bloqueio) que reutiliza o pool interno para produzir mais bits pseudo-aleatórios. Isso significa que a chamada não será bloqueada, mas a saída pode conter menos entropia do que a leitura correspondente de / dev / random.
Portanto, se sua intenção não é gerar CSPRNG (gerador de número pseudo-aleatório criptograficamente seguro), você deve usar / dev / urandom.
fonte
/dev/random
realmente usar fontes como ruído térmico? Meu entendimento é que ele usa informações de status do sistema (relativamente) imprevisível, como atividade de E / S e status do processo. Eu não acho que a maioria dos sistemas Linux tenha hardware capaz de captar ruídos térmicos. Você pode citar alguma documentação sobre isso?/dev/random
gera "números verdadeiramente aleatórios".Sem responder à sua pergunta - já existem respostas completas aqui - você também pode conferir o Darik's Boot and Nuke, também conhecido como DBAN, que é um limpador de unidade de CD ao vivo.
fonte
Basta usar o
shred
comando que acompanha o coreutils. Ele usa dados aleatórios de maneira eficiente. O dd é uma ferramenta de baixo nível e provavelmente é um nível muito baixo para esta tarefa.shred
pula eficientemente partes não graváveis do dispositivo, por exemplo.fonte