Wyjaśnij w zwykłym języku angielskim o dostępnej Entropii


28

Jeśli uruchomię to polecenie w Ubuntu

sudo cat /proc/sys/kernel/random/entropy_avail

zwraca liczbę wskazującą, ile „entropii” jest dostępne dla jądra, ale to wszystko, co wiem. W jakiej jednostce mierzona jest ta entropia? Do czego jest to używane? Powiedziano mi, że to „złe”, jeśli ta liczba jest „niska”. Jak niska jest „niska” i jakie „złe” rzeczy się zdarzą, jeśli tak będzie? Jaki jest dobry zasięg? Jak to się określa?

Odpowiedzi:


22

Twój system zbiera „prawdziwe” liczby losowe, obserwując różne zdarzenia: aktywność sieci, sprzętowy generator liczb losowych (jeśli jest dostępny; na przykład procesory VIA zazwyczaj mają „prawdziwy” generator liczb losowych) i tak dalej. Podaje je do puli entropii jądra, która jest używana przez / dev / random. Aplikacje wymagające ekstremalnego bezpieczeństwa zwykle używają / dev / random jako źródła entropii lub innymi słowy jako źródła losowości.

Jeśli w / dev / random zabraknie dostępnej entropii, nie jest w stanie podać więcej losowości, a aplikacja czeka na losowość, dopóki nie będzie dostępnych więcej losowych rzeczy. Przykładem, który widziałem podczas mojej kariery jest to, że demon Cyrus IMAP chciał użyć / dev / random do losowości, a jego sesje POP chciały generować losowe ciągi w połączeniach APOP z / dev / random. W ruchliwym środowisku było więcej prób logowania niż ruchu w celu nakarmienia / dev / random -> wszystko utknęło w martwym punkcie. W takim przypadku zainstalowałem narzędzia rng i aktywowałem posiadany przez niego rngd - który odszukał pół losowe liczby z / dev / urandom do / dev / random na wypadek, gdyby zabrakło „prawdziwej” entropii.


19

Jeśli potrzebujesz prostszego przeglądu podstawowego problemu: Niektóre aplikacje (takie jak szyfrowanie) wymagają liczb losowych. Możesz generować liczby losowe za pomocą algorytmu - ale chociaż wydają się losowe w pewnym sensie, są całkowicie przewidywalne w innym. Na przykład, jeśli dam ci cyfry 58209749445923078164062862089986280348253421170679, wyglądają dość losowo. Ale jeśli zdasz sobie sprawę, że tak naprawdę są cyframi PI, będziesz wiedział, że następny będzie 8.

W przypadku niektórych aplikacji jest to w porządku, ale w przypadku innych aplikacji (szczególnie związanych z bezpieczeństwem) ludzie chcą prawdziwej nieprzewidywalnej losowości - która nie może być wygenerowana przez algorytm (tj. Program), ponieważ jest to z definicji przewidywalne. Jest to problem polegający na tym, że twój komputer jest w zasadzie programem, więc w jaki sposób można uzyskać prawdziwe liczby losowe? Odpowiedzią jest pomiar autentycznie losowych zdarzeń ze świata zewnętrznego - na przykład luk między naciśnięciami klawiszy i użycie ich do wprowadzenia prawdziwej losowości do generowanego w inny sposób przewidywalnego generatora liczb losowych. „Pula entropii” może być uważana za magazyn losowości, który jest tworzony przez naciśnięcia klawiszy (lub cokolwiek, co jest używane) i wyczerpany przez generowanie liczb losowych.


2
Ładne wyjaśnienie ...
pradipta,

Ale PI jest irracjonalny i obejmowałby każdą sekwencję, w tym powyższą sekwencję, po której następuje 9 (zamiast 8).
Ajay Brahmakshatriya

9

Entropia jest terminem technicznym określającym „Losowość”. Komputery tak naprawdę nie generują entropii, ale gromadzą ją, patrząc na takie rzeczy, jak zmiany prędkości obrotowej dysku twardego (zjawisko fizyczne, które jest bardzo trudne do przewidzenia z powodu tarcia itp.) Gdy komputer chce wygenerować pseudolosowe dane, będzie zaszczep matematyczną formułę z prawdziwą entropią, którą znalazła poprzez pomiar kliknięć myszką, odmian spinów dysku twardego itp. Z grubsza rzecz biorąc, entropy_availjest to miara dostępnych obecnie bitów do odczytu/dev/random

Komputer potrzebuje czasu na odczytanie entropii ze swojego środowiska, chyba że ma fajny sprzęt, taki jak głośna dioda czy coś takiego.

Jeśli masz 4096 bitów entropii i kot /dev/random, możesz spodziewać się, że będziesz w stanie odczytać 512 bajtów entropii (4096 bitów) przed zablokowaniem pliku, gdy będzie on oczekiwał na więcej entropii.

Na przykład, jeśli „ cat /dev/random”, entropia skurczy się do zera. Na początku otrzymasz 512 bajtów losowych śmieci, ale zatrzyma się i stopniowo zobaczysz kolejne losowe dane.

/dev/randomJednak ludzie nie powinni tak działać . Zwykle programiści czytają niewielką ilość danych, na przykład 128 bitów, i używają ich do inicjowania pewnego rodzaju algorytmu PRNG. Grzecznie jest nie czytać więcej entropii /dev/randomniż trzeba, ponieważ trwa to tak długo i jest uważane za cenne. Tak więc, jeśli opróżnisz go przez niedbałe catpodbicie pliku jak wyżej, spowoduje to, że inne aplikacje będą musiały czytać od /dev/randomdo bloku. W jednym z działających systemów zauważyliśmy, że wiele funkcji kryptograficznych przestało działać. Odkryliśmy, że zadanie crona wywoływało skrypt Pythona, który ciągle się inicjowałramdom.random()na każdym biegu, który biegł co kilka sekund. Aby to naprawić, przepisaliśmy skrypt Pythona, tak aby działał jako demon, który został zainicjowany tylko raz, a zadanie cron odczytuje dane przez XMLRPC, aby nie kontynuowało czytania /dev/randompo uruchomieniu.


1
„Aby to naprawić, przepisaliśmy skrypt Pythona, aby działał jako demon, który został zainicjowany tylko raz, a zadanie cron odczytuje dane za pomocą XMLRPC, aby nie odczytywał danych z / dev / random podczas uruchamiania.” --- Z wyjątkiem cytowanej przeze mnie części, która jest trudna do oceny, ponieważ nie jest jasne, czy twój skrypt naprawdę potrzebował losowości, czy nie, twoja odpowiedź jest bardzo jasna i wyraźna.
Craig Hicks

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.