Losowa entropia w Bash

Losowa entropia w Bash

Podczas korzystania z liczb losowych w Bash kwestia losowej entropii prędzej czy później pojawi się. Ten artykuł pomoże ci zrozumieć, czym jest entropia, jak można ją zmodyfikować i zoptymalizować w BASH.

W tym samouczku się nauczysz:

  • Jak generować losową entropię w Bash
  • Jak wstępnie nasilił generator liczb losowych w Bash
  • Przykłady wykazujące losowe wytwarzanie entropii w Bash
Losowa entropia w Bash

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Niezależny od rozkładu Linuksa
Oprogramowanie Wiersz poleceń Bash, system oparty na Linuksie
Konwencje # - Wymaga wykonywania Linux -Commands z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$-Wymaga wykonania Linux-commands jako zwykłego niepewnego użytkownika

Przykład 1: losowy lub nie tak losowy?

Możemy łatwo wygenerować losową liczbę w Bash:

$ echo $ losowe 13 


Jednak chociaż ta liczba wygląda losowo, w rzeczywistości nie jest to lub w najlepszym razie Pseudo-lodowate. Wynika to z faktu, że komputer może sama w sobie nigdy nie być naprawdę losowa, a generator liczb losowych w BASH jest wstępnie nasiczony wartości, co określa wszystkie kolejne wezwania $ Losowe zmienna/funkcja.

Wstępnie nasilimy generator liczb losowych na kilka różnych sposobów. Zaczniemy od wstępnego nasilenia losowego generatora za pomocą nasion „1” przez ustawienie LOSOWY Do 1:

$ echo $ losowe 25552 $ losowe = 1 $ echo $ losowe 16807 $ losowe = 1 $ echo $ losowe 16807 $ $ $ losowe 15089 $ losowe = 1 $ $ $ losowe 16807 $ $ losowe 15089 $ losowe = a $ echo $ losowe 20034 

Zauważ, że 16807 i wtórne połączenie 15089 wyniki pozostają takie same, podczas gdy losowy generator był wstępnie nasionym 1. Zmienia się po wstępnie nasionym A.

Podczas gdy $ Losowe Zmienna w bash zawsze daje liczbę losową generowaną przez generator liczby losowej BASH, jest to również zmienna, która po ustawieniu wstępnie nasila się generator losowy. Wyzwanie polega na tym, że jeśli ziarno jest takie samo, wynik (i sekwencja!) będzie również takie same, jak widać po badaniu powyższego przykładu.

Sposób, w jaki generator losowy jest inicjowany w twoim systemie, może zależeć od systemu operacyjnego Linux lub UNIX w użyciu, używanym sprzęcie i konfiguracji. Natychmiast się zgadzamy, że nie jest to bardzo bezpieczny sposób generowania prawdziwej/prawdziwej liczby losowej Pseudo-lodowate I pseudo-randomość. To powiedziawszy, można zrobić wiele, aby to (dużo) lepiej.

Przykład 2: Nasz własny losowy generator entropii

Jedynym wejściem, które jest dostępne dla generatora losowego, jest zasadniczo nasiona przekazane Losowe =. Jak więc możemy wymyślić naprawdę losowe ziarno, aby wysiewać losowy generator i stworzyć prawdziwą losową entropię (entropia: jakość braku przewidywalności)? Losowa entropia jest ważna, szczególnie w dziedzinie bezpieczeństwa komputerowego.

Pomyśl o tym pytaniu; Jak możesz zapewnić (w celu uderzenia) najbardziej losowego wejścia do użycia jako ziarno do losowego wytwarzania entropii?

Uważam, że znalazłem rozwiązanie w następującym kodzie:



$ data +%s%n 1593785871313595555 # | -------- | < Selected part indicated $ date +%s%N | cut -b10-19 4418322030 $ date +%s%N | cut -b10-19 4914627208 $ date +%s%N | cut -b10-19 5282934388 $ date +%s%N | cut -b10-19 5635463163 $ date +%s%N | cut -b10-19 5967700148 $ date +%s%N | cut -b10-19 6322917009 $ RANDOM=$(date +%s%N | cut -b10-19) $ echo $RANDOM 16349 $ RANDOM=$(date +%s%N | cut -b10-19) $ echo $RANDOM 9713 

Finał 9713 Wynik jest prawie naprawdę przypadkowy.

data +%s%n to połączenie %S czyli kilka sekund 1970-01-01 00:00:00 UTC - dość unikalna liczba, ale wciąż coś, co potencjalnie można by ponownie obliczyć. I %N to nanosekund. Następnie pokroimy wejście, aby chwycić tylko ostatnie 10 cyfr.

Oznacza to, że przechodzimy drugi (ostatni 0-9 cyfra) + pełny dokładny nanosekund 000000000-999999999 do losowego generatora jako ziarna. Byłoby to tak dobre, jak niemożliwe do odtworzenia, chyba że uchwycisz wartość wygenerowaną przed jej przypisaniem. Prawie naprawdę przypadkowe.

Oznacza to również, że możesz uzyskać pół-losową liczbę cyfr x, po prostu wybierając najbardziej ziarnistą część mikrosekund:

Data +%s%n | CUT -B19-19 Data +%s%n | CUT -B18-19 Data +%s%n | CUT -B17-19 

Pierwsze polecenie wytworzy 1 cyfrę, drugie 2 cyfry itp.

Jednak im dłużej cięcie pokrój staje się (poprzez zwiększenie cięcie długość), tym mniej pseudo-lodowato. Możesz również pominąć %S, i zmniejsz rozmiar cięcia, aby mieć mniej intensywne połączenie systemowe. Podczas gdy nie może to mieć znaczenia dla pojedynczego wezwania $ Losowe, miałoby znaczenie, gdyby nazywał się setki tysięcy razy.

Wniosek

W tym artykule widzieliśmy, jak wygenerować losową entropię, w dość losowy sposób. Podczas gdy żaden losowy generator entropii nie jest idealny (a zatem żadna losowa liczba wynikająca z niego), zbliżyliśmy się, dzwoniąc na nanosekundowe czas. Widzieliśmy również, w jaki sposób wstępne nasilenie losowej zmiennej entropii generatora z określonym ziarnem przyniesie następnie te same wyniki za każdym razem, gdy liczba losowa jest generowana za pomocą $ Losowe zmienny.

Zaktualizuj swoje skrypty za pomocą naszego losowego inicjatora entropii lub daj nam znać, jeśli odkryłeś lepszy w komentarzach poniżej. Kto jeszcze jest zainteresowany lepszą entropią?!

Cieszyć się!

Powiązane samouczki Linux:

  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Mastering Bash Script Loops
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Jak skonfigurować serwer OpenVPN na Ubuntu 20.04
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Linux Pliki konfiguracyjne: Top 30 Najważniejsze
  • Zagnieżdżone pętle w skryptach Bash
  • Pobierz Linux
  • Czy Linux może uzyskać wirusy? Badanie podatności Linuksa…