Zufällige Entropie in Bash

Zufällige Entropie in Bash

Bei der Verwendung von Zufallszahlen in Bash wird die Frage der zufälligen Entropie früher oder später auftauchen. Dieser Artikel hilft Ihnen, zu verstehen, was Entropie ist, wie er in Bash geändert und optimiert werden kann und wie sich dies auf die Zufallszahlenerzeugung auswirkt.

In diesem Tutorial lernen Sie:

  • So generieren Sie zufällige Entropie in Bash
  • So haben Sie den Zufallszahlengenerator in Bash vorbereitet
  • Beispiele, die eine zufällige Entropieerzeugung in Bash zeigen
Zufällige Entropie in Bash

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Linux-Verteilungsunabhängige
Software BASH -Befehlszeile, Linux -basiertes System
Konventionen # - Erfordert, dass Linux -Commands mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden sudo Befehl
$-erfordert, dass Linux-Commands als regulärer nicht privilegierter Benutzer ausgeführt werden

Beispiel 1: zufällig oder nicht so zufällig?

Wir können leicht eine Zufallszahl in Bash erstellen:

$ echo $ random 13 


Obwohl diese Zahl zufällig aussieht, ist sie tatsächlich nicht oder bestenfalls Pseudo-Random. Dies liegt daran $ Zufällig Variable/Funktion.

Lassen Sie uns den Zufallszahlengenerator auf verschiedene Arten vorbereiten. Wir beginnen, indem wir den Zufallsgenerator mit Samen '1' vor dem Setzen vorbereiten WILLKÜRLICH Zu 1:

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

Notiere dass der 16807 und sekundärer Anstieg 15089 Die Ergebnisse bleiben gleich, während der Zufallsgenerator mit vorbereiteten 1. Es ändert sich, wenn es vor dem Samen mit A.

Während der $ Zufällig Variable in Bash liefert immer eine Zufallszahl, die vom Bash-Zufallszahlengenerator generiert wird. Es handelt sich auch um eine Variable, die beim Einstellen den Zufallsgenerator vorbereitet. Die Herausforderung besteht darin, dass das Ergebnis (und die Sequenz der Samen gleich ist!) wird auch das gleiche sein, wie Sie das obige Beispiel untersuchen können.

Wie der Zufallsgenerator in Ihrem System initialisiert wird. Lassen Sie uns sofort zu, dass es keine sehr sichere Möglichkeit ist, eine echte/reale Zufallszahl zu generieren, daher die Begriffe Pseudo-Random Und Pseudo-Randomness. Trotzdem kann viel getan werden, um es (viel) besser zu machen.

Beispiel 2: unser eigener zufälliger Entropiegenerator

Der einzige Eingang, der dem Zufallsgenerator zur Verfügung steht Zufällig =. Wie können wir also einen wirklich zufälligen Samen finden, um den zufälligen Generator zu säen und eine echte zufällige Entropie zu erzeugen (Entropie: Die Qualität des Mangels an Vorhersehbarkeit)? Zufällige Entropie ist wichtig, insbesondere im Bereich der Computersicherheit.

Denken Sie über diese Frage nach; Wie können Sie die zufällige Eingabe als Samen für die zufällige Entropieerzeugung anbieten (um zu verprügeln)?

Ich glaube, ich habe eine Lösung im folgenden Code gefunden:



$ Datum +%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 

Das endgültige 9713 Ergebnis ist fast wirklich zufällig.

Datum +%s%n ist eine Kombination von %S Welches sind die Sekunden seitdem 1970-01-01 00:00:00 UTC - Eine einzigartige Zahl, aber immer noch etwas, das möglicherweise neu berechnet werden könnte. Und %N ist Nanosekunden. Dann schneiden wir die Eingabe, um nur die letzten 10 Ziffern zu schnappen.

Dies bedeutet, dass wir am zweiten (letztes 0-9 Ziffer) + die vollständige Nanosekunde 000000000-999999999 zum zufälligen Generator als Samen. Dies wäre so gut wie unmöglich zu rekonstruieren, es sei denn, Sie erfassen den Wert, der vor dem Zuweisen erzeugt wird. Fast wirklich zufällig.

Dies bedeutet auch, dass Sie eine semi-random-Anzahl von x-Ziffern erhalten können, indem Sie einfach den körnigsten Teil der Mikrosekunde auswählen:

Datum +%S%N | Cut -b19-19 Datum +%s%n | Cut -b18-19 Datum +%s%n | Schnitt -b17-19 

Der erste Befehl erzeugt 1 Ziffer, die zweiten 2 Ziffern usw.

Je länger Ihre schneiden Slice wird (durch Erhöhen der Erhöhung der schneiden Länge), desto weniger Pseudo-Random ist die Zahl, insbesondere wenn Sie in den Sekundenteil in Scheiben schneiden. Sie könnten auch die vom %S, und reduzieren Sie die Schnittgröße, um einen weniger intensiven Systemanruf zu erhalten. Während es für einen einzigen Anruf von möglicherweise keine Rolle spielt $ Zufällig, Es würde eine Rolle spielen, wenn es Hunderttausende Male genannt würde.

Abschluss

In diesem Artikel haben wir gesehen, wie man zufällig zufällige Entropie generiert. Während kein zufälliger Entropiegenerator perfekt ist (und daher eine zufällige Zahl, die daraus resultiert), kamen wir in die Nanosekundenzeit in die Nähe der Zeit. Wir haben auch festgestellt $ Zufällig Variable.

Aktualisieren Sie Ihre Skripte mit unserem zufälligen Entropie -Initializer oder teilen Sie uns mit, ob Sie in den Kommentaren unten eine bessere entdeckt haben. Wer sonst ist an einer besseren Entropie interessiert?!

Genießen!

Verwandte Linux -Tutorials:

  • Dinge zu installieren auf Ubuntu 20.04
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Mastering -Bash -Skriptschleifen beherrschen
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • So richten Sie einen OpenVPN -Server auf Ubuntu 20 ein.04
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • Linux -Konfigurationsdateien: Top 30 am wichtigsten
  • Verschachtelte Schleifen in Bash -Skripten
  • Linux -Download
  • Kann Linux Viren bekommen?? Erforschung der Verwundbarkeit von Linux…