Entropie aléatoire en bash

Entropie aléatoire en bash

Lorsque vous utilisez des nombres aléatoires en bash, la question de l'entropie aléatoire se présentera tôt ou tard. Cet article vous aidera à comprendre ce qu'est l'entropie, comment il peut être modifié et optimisé dans Bash, et comment il affectera la génération de nombres aléatoires.

Dans ce tutoriel, vous apprendrez:

  • Comment générer une entropie aléatoire en bash
  • Comment pré-série le générateur de nombres aléatoires en bash
  • Exemples démontrant une génération d'entropie aléatoire en bash
Entropie aléatoire en bash

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution Linux
Logiciel Ligne de commande bash, système basé sur Linux
Conventions # - nécessite que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - exige que les commandes Linux soient exécutées en tant qu'utilisateur régulier non privilégié

Exemple 1: aléatoire, ou pas si aléatoire?

Nous pouvons facilement générer un nombre aléatoire en bash:

$ echo $ aléatoire 13 


Cependant, alors que ce nombre semble aléatoire, ce n'est en fait pas, ou au mieux pseudo-aléatoire. En effet $ Aléatoire variable / fonction.

Pré-série le générateur de nombres aléatoires de différentes manières. Nous allons commencer par pré-série le générateur aléatoire avec la graine «1» en définissant ALÉATOIRE pour 1:

$ echo $ random 25552 $ aléos 20034 

Notez que le 16807 et appels secondaires 15089 Les résultats restent les mêmes pendant que le générateur aléatoire a été pré-série avec 1. Il change lorsqu'il est pré-série avec un.

Tandis que le $ Aléatoire La variable dans Bash produira toujours un nombre aléatoire généré par le générateur de nombres aléatoires bash, il s'agit également d'une variable qui, une fois définie, pré-grève le générateur aléatoire. Le défi est que si la graine est la même, le résultat (et la séquence!) sera également le même, comme vous pouvez le voir en étudiant l'exemple ci-dessus.

La façon dont le générateur aléatoire est initialisé dans votre système peut dépendre du système d'exploitation Linux ou UNIX dans l'utilisation, le matériel utilisé et les paramètres de configuration. Convenons immédiatement que ce n'est pas un moyen très sécurisé de générer un nombre aléatoire vrai / réel, d'où les termes pseudo-aléatoire et pseudo-alandomness. Cela dit, il peut être fait beaucoup pour le rendre (beaucoup) meilleur.

Exemple 2: notre propre générateur d'entropie aléatoire

La seule entrée qui est disponible pour le générateur aléatoire est essentiellement la graine adoptée à Aléatoire =. Alors, comment pouvons-nous trouver une graine vraiment aléatoire pour semer le générateur aléatoire et créer une véritable entropie aléatoire (entropie: la qualité du manque de prévisibilité)? L'entropie aléatoire est importante, en particulier dans le domaine de la sécurité informatique.

Pensez à cette question; Comment pouvez-vous fournir (à bash) l'entrée la plus aléatoire à utiliser comme graine pour la génération d'entropie aléatoire?

Je crois que j'ai trouvé une solution dans le code suivant:



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

Le final 9713 Le résultat est presque vraiment aléatoire.

Date +% s% n est une combinaison de % s qui est les secondes depuis 1970-01-01 00:00:00 UTC - Un nombre assez unique, mais toujours quelque chose qui pourrait potentiellement être recalculé. Et % N est des nanosecondes. Ensuite, nous tranchons l'entrée pour ne saisir que les 10 derniers chiffres.

Cela signifie que nous passons le second (dernier 0-9 chiffre) + la nanoseconde complète complète 000000000-999999999 au générateur aléatoire comme graine. Ce serait aussi bon que impossible à reconstruire, à moins que vous ne captiez la valeur générée avant de l'affecter. Presque vraiment aléatoire.

Cela signifie également que vous pouvez obtenir un nombre semi-aléatoire de chiffres X en sélectionnant simplement la partie la plus granulaire de la microseconde:

Date +% s% n | CUT -B19-19 Date +% s% n | CUT -B18-19 Date +% s% n | coupe -B17-19 

La première commande produira 1 chiffre, les 2 seconds chiffres, etc.

Cependant, plus votre couper la tranche devient (en augmentant le couper longueur), moins le nombre de pseudo-aléatoire sera, surtout une fois que vous aurez tranché la partie seconde. Vous pouvez également laisser de côté le % s, et réduire la taille de coupe pour avoir un appel système moins intensif. Bien que cela ne soit peut-être pas important pour un seul appel de $ Aléatoire, Peu importe que cela s'appelait des centaines de milliers de fois.

Conclusion

Dans cet article, nous avons vu comment générer une entropie aléatoire, d'une manière raisonnablement aléatoire. Alors qu'aucun générateur d'entropie aléatoire n'est parfait (et donc tout nombre aléatoire qui en résulte), nous nous sommes rapprochés en appelant le temps nanoseconde. Nous avons également vu comment la pré-semence de la variable d'entropie du générateur aléatoire avec une graine spécifique donnera par la suite les mêmes résultats chaque fois qu'un nombre aléatoire est généré en utilisant le $ Aléatoire variable.

Mettez à jour vos scripts avec notre initialiseur d'entropie aléatoire, ou faites-nous savoir si vous en avez découvert un meilleur dans les commentaires ci-dessous. Qui d'autre s'intéresse à une meilleure entropie?!

Apprécier!

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Masterring Bash Script Loops
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Comment configurer un serveur OpenVPN sur Ubuntu 20.04
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Fichiers de configuration Linux: 30 premiers
  • Boucles imbriquées dans les scripts bash
  • Téléchargement Linux
  • Linux peut-il obtenir des virus? Exploration de la vulnérabilité de Linux…