Próbuję częściowo bezpiecznie skasować kilka dysków twardych. Następujące działa przy prędkości 20-50 Mb / s
dd if=/dev/zero of=/dev/sda
Ale
dd if=/dev/random of=/dev/sda
wydaje się nie działać. Również kiedy piszę
dd if=/dev/random of=stdout
Daje mi tylko kilka bajtów, niezależnie od tego, co przekazuję dla bs = i count =
Czy używam / dev / random źle? Jakich innych informacji powinienem szukać, aby przyspieszyć rozwiązywanie problemów? Czy jest jakiś inny sposób, aby to zrobić za pomocą skryptu lub czegoś podobnego
makeMyLifeEasy | dd if=stdin of=/dev/sda
Czy jakoś tak...
/dev/random
tylko zwraca kilka bajtów, zobacz superuser.com/a/712515/139307Odpowiedzi:
Zarówno
/dev/random
i/dev/urandom
użyć „entropii basen”. Kiedy pula się wyczerpie,/dev/random
czeka na jej uzupełnienie, co wymaga monitorowania zachowania systemu (wprowadzania danych z klawiatury, ruchu myszy itp.), Podczas gdy/dev/urandom
nadal będzie dostarczać pseudolosowe dane./dev/random
jest teoretycznie wyższej jakości, ale/dev/urandom
prawie na pewno jest wystarczająco dobry do twoich celów. (Ale nawet/dev/urandom
prawdopodobnie jest wolniejszy niż niektóre inne metody. Szybszy, ale niższej jakości generator jest prawdopodobnie wystarczający do kasowania dysków twardych. Nie jest jasne, czy osoba atakująca zyska jakąkolwiek przewagę, wiedząc o sekwencji, która zostanie wygenerowana, lub że liczby losowe są w tym celu lepsze niż ciąg taki jak 0, 1, 2, 3, 4, ....)Cytując
random(4)
stronę podręcznika :AKTUALIZACJA : Strona podręcznika `random (4) została zaktualizowana, odkąd to napisałem. Teraz mówi:
Zobacz także „ Mity o / dev / urandom ” Thomasa Hühna.
Ale
/dev/urandom
nawet jeśli się nie zablokuje, prawdopodobnie będzie zbyt wolny, jeśli chcesz wygenerować ogromne ilości danych. Wykonaj kilka pomiarów w swoim systemie przed wypróbowaniem.EDYCJA: Poniżej znajduje się dygresja „prawdziwych” liczb losowych w porównaniu z liczbami pseudolosowymi. Jeśli interesuje Cię tylko praktyczna odpowiedź na pytanie, możesz teraz przestać czytać.
Wydaje mi się, że twierdzę (w tym w innych odpowiedziach tutaj), że
/dev/random
implementuje „prawdziwy” generator liczb losowych, w przeciwieństwie do generatora liczb pseudolosowych (PRNG). Na przykład taki artykuł w Wikipedii zawiera takie twierdzenie. Nie wierzę, że to prawda. Jest tu trochę dyskusji na ten temat , która dotyczy sprzętowych generatorów liczb losowych, ale nie widzę dowodów, że/dev/random
zwykle używa takiego urządzenia lub że typowe komputery nawet mają takie urządzenie. Różnią się od PRNG, takich jakrand()
funkcja C, tym, że nie są deterministyczne, ponieważ zbierają entropię ze źródeł, które są praktycznie nieprzewidywalne.Powiedziałbym, że istnieją trzy klasy „losowych” generatorów liczb:
Deterministyczne PRNG, takie jak
rand()
funkcja C , które wykorzystują algorytm do generowania powtarzalnych sekwencji, które mają (mniej więcej) statystyczne właściwości prawdziwie losowej sekwencji. Mogą one być wystarczająco dobre dla gier (biorąc pod uwagę dobry sposób ich inicjowania) i są niezbędne dla aplikacji wymagających powtarzalności, ale nie nadają się do kryptografii.Generatory takie
/dev/random
i/dev/urandom
które pobierają entropię z jakiegoś praktycznie nieprzewidywalnego źródła, takiego jak aktywność we / wy (dlatego uderzenie w klawiaturę lub poruszenie myszą może spowodować/dev/random
wygenerowanie większej ilości danych). Nie jest dla mnie jasne, czy spełniają one definicję PRNG (widziałem definicje, które mówią, że PRNG jest deterministyczny), ale nie są też prawdziwymi generatorami liczb losowych.Sprzętowe generatory liczb losowych, które są fizycznie nieprzewidywalne, nawet przy pełnej wiedzy o ich stanie początkowym, i które dodatkowo wykorzystują techniki matematyczne, aby zapewnić odpowiednie właściwości statystyczne.
źródło
/dev/urandom
wyraźnie jest pseudolosowy./dev/random
różni się tym, że próbuje dokonać konserwatywnego oszacowania entropii danych wejściowych i nie generuje więcej entropii, niż jest w stanie (tak myśli). Jest to niezależne od obecności dedykowanego urządzenia TRNG, ponieważ prawdziwą entropię można również uzyskać z niezależnych zdarzeń dowolnego rodzaju, takich jak IO klawiatury lub sieci w funkcji czasu./dev/random
jest źródłem prawdziwej entropii, prawdziwie losowych bajtów. Jako taki potrzebuje źródła losowości. Możesz „wykorzystać” losowość, czytając z niej. Daje ci całą losowość, którą ma, a następnie blokuje, aż będzie więcej. Prawdopodobnie po prostu siedzisz tam i czekasz, a maszyna dostaje bardzo mało nowej losowości i tylko czeka./dev/random
dla naprawdę losowego krypto, wysokiej jakości losowości. W związku z tym jest to nadmiar w przypadku nadpisywania dysku. Pisanie/dev/zero
kilka razy jest w porządku. Lub możesz pisać z/dev/urandom
, który nie blokuje i podaje liczby pseudolosowe, gdy zabraknie prawdziwej losowości.źródło
/dev/random
nie generuje „prawdziwie losowych bajtów”. Generuje pseudolosowe bajty wyższej jakości niż/dev/urandom
robi.W Linuksie / dev / random to specjalny plik, który obsługuje wysokiej jakości pseudolosowe liczby. Ta implementacja zbiera entropię ze zdarzeń pochodzących z przerwań klawiatury, myszy, dysku i systemu. (zapoznaj się z tym dokumentem) Jeśli więc nie ma takich zdarzeń, pula entropii jest pusta, odczyty z / dev / random będą blokowane do momentu zebrania dodatkowego hałasu otoczenia. To wyjaśnia twój problem. Aby wypełnić pulę entropii, możesz naciskać klawisze na klawiaturze.
Z drugiej strony prawdziwie losowy generator liczb wykorzystuje sprzętowy generator liczb losowych, który generuje liczby losowe z procesów fizycznych. Procesy te obejmują zjawiska mikroskopowe, które generują statystycznie losowy sygnał „szumu”, taki jak szum termiczny lub efekt fotoelektryczny lub inne zjawiska fizyczne. Te procesy są teoretycznie całkowicie nieprzewidywalne, a twierdzenia teorii o nieprzewidywalności podlegają testom eksperymentalnym.
Sprzętowy generator liczb losowych zwykle składa się z przetwornika do konwersji niektórych aspektów zjawisk fizycznych na sygnał elektryczny, wzmacniacza i innych układów elektronicznych w celu zwiększenia amplitudy wahań losowych do poziomu makroskopowego oraz pewnego rodzaju przetwornika analogowo-cyfrowego w celu przekształcenia wyjścia w liczbę cyfrową, często prostą cyfrę binarną 0 lub 1. Przez wielokrotne próbkowanie losowo zmieniającego się sygnału uzyskuje się szereg liczb losowych.
Sprzętowy generator liczb losowych gromadzi hałas otoczenia ze sterowników urządzeń i innych źródeł w puli entropii. Z tej puli entropii tworzone są losowe liczby. Podczas odczytu urządzenie / dev / random zwróci losowe bajty tylko w obrębie szacunkowej liczby bitów szumu w puli entropii. To wyjaśnia twój problem.
Niektóre implementacje Hardware RNG są wyjaśnione w dokumentacji jądra i informacjach na urządzeniu .
Odpowiednikiem / dev / random jest / dev / urandom („odblokowane” / nieblokujące losowe źródło), które ponownie wykorzystuje wewnętrzną pulę do wytwarzania większej liczby pseudolosowych bitów. Oznacza to, że wywołanie nie będzie blokować, ale dane wyjściowe mogą zawierać mniej entropii niż odpowiadający odczyt z / dev / random.
Jeśli więc nie zamierzasz generować CSPRNG (kryptograficznie bezpieczny generator liczb pseudolosowych), powinieneś użyć / dev / urandom.
źródło
/dev/random
naprawdę wykorzystuje źródła takie jak hałas termiczny? Rozumiem, że wykorzystuje informacje ze (względnie) nieprzewidywalnego statusu systemu, takie jak aktywność we / wy i status procesu. Nie sądzę, że większość systemów Linux ma nawet sprzęt, który może zbierać szumy termiczne. Czy możesz przytoczyć dokumentację na ten temat?/dev/random
generuje „prawdziwie losowe liczby”.Bez odpowiedzi na twoje pytanie - są tu już pełne odpowiedzi - możesz również sprawdzić Darik's Boot i Nuke aka DBAN, który jest wycieraczką napędu na CD.
źródło
Wystarczy użyć
shred
polecenia dostarczonego z coreutils. Efektywnie wykorzystuje losowe dane. dd jest narzędziem niskiego poziomu i prawdopodobnie jest to trochę za niski poziom do tego zadania.shred
będzie na przykład skutecznie pomijać niedozwolone części urządzenia.źródło