Si je le fais, watch cat /proc/sys/kernel/random/entropy_avail
je vois que l'entropie de mes systèmes augmente lentement au fil du temps, jusqu'à ce qu'elle atteigne la plage 180-190, point auquel elle descend à environ 120-130. Les baisses d'entropie semblent se produire toutes les vingt secondes environ. J'observe cela même quand lsof
dit qu'aucun processus n'a /dev/random
ou /dev/urandom
ouvert. Qu'est-ce qui vide l'entropie? Le noyau a-t-il également besoin d'entropie, ou peut-il retraiter le plus grand pool en un pool plus petit et de meilleure qualité?
Il s'agit d'une machine à nu, sans connexion SSL / SSH / WPA.
/dev/random
est, après tout, quelque chose qui est utilisé à des fins cryptographiques sécurisées, et la mise en œuvre ne peut pas se permettre d'être naïve. Une explication pourrait être suggérée dans le dernier point ici: en.wikipedia.org/wiki/Entropy_pool#Using_observed_events (commençant par "Maintenir un chiffrement de flux avec une clé et un vecteur d'initialisation ...") -> le pool est remplacé chaque fois que cela est suffisant les données se sont accumulées./dev/random
est à peu près faux - une fois que le pool d'entropie a été plein une fois, il/dev/urandom
est tout aussi bon que/dev/random
.Réponses:
L'entropie n'est pas seulement perdue via
/dev/{,u}random
, le noyau en prend également. Par exemple, les nouveaux processus ont des adresses randomisées (ASLR) et les paquets réseau ont besoin de numéros de séquence aléatoires. Même le module du système de fichiers peut supprimer une certaine entropie. Voir les commentaires dans drivers / char / random.c . Notez également que celaentropy_avail
fait référence au pool d'entrée , pas aux pools de sortie (essentiellement le non-blocage/dev/urandom
et le blocage/dev/random
).Si vous devez surveiller le pool d'entropie, ne l'utilisez pas
watch cat
, cela consommera l'entropie à chaque invocation decat
. Dans le passé, je voulais également regarder ce pool car GPG était très lent à générer des clés, j'ai donc écrit un programme C dans le seul but de regarder le pool d'entropie: https://git.lekensteyn.nl/c-files/tree /entropy-watcher.c .Notez qu'il peut y avoir des processus d'arrière-plan qui consomment également l'entropie. En utilisant des points de trace sur un noyau approprié, vous pouvez voir les processus qui modifient le pool d'entropie. Exemple d'utilisation qui enregistre tous les points de trace liés au sous-système aléatoire, y compris la chaîne d'appel (
-g
) sur tous les CPU (-a
) commençant à mesurer après 1 seconde pour ignorer son propre processus (-D 1000
) et y compris les horodatages (-T
):Lisez-le avec l'une de ces commandes (changez de propriétaire
perf.data
si nécessaire):La
perf script
sortie donne un aperçu intéressant et montre quand environ 8 octets (64 bits) d'entropie sont périodiquement drainés sur ma machine:Apparemment, cela se produit pour éviter le gaspillage d'entropie en transférant l'entropie du pool d'entrée aux pools de sortie:
la source
watch
) croît régulièrement puis diminue fortement. Si l'watch
entropie est consommée à chaque lecture, elle devrait en fait diminuer régulièrement.cat
devrait en théorie avoir le même drain d'entropie qui ne devrait pas être visible. Il s'avère que l'entropie est déplacée vers un autre pool lorsqu'il y a entropie "suffisante".lsof n'est pas le meilleur outil à surveiller
/dev/random
car une lecture par un processus est terminée en très peu de temps. Je ne connais pas de bonne méthode pour obtenir quel processus effectue une lecture, mais en utilisant,inotify
vous pouvez surveiller s'il y a une lecture.Ici, il existe essentiellement deux façons:
Obtenez un résumé après N secondes avec:
Afficher les événements d'accès en direct :
Aucun ne vous donnera de processus et ce dernier ne vous donnera pas de taille de lecture. Le premier vous donnera un résumé comme dans:
Si vous avez ça en marche et faites un
dd if=/dev/random of=/tmp/foo bs=1 count=3
, vous avez l'idée.De toute façon. Cela ne vous donnera pas de tiques lorsque le noyau consomme à partir du pool.
Quand il s'agit de vérifier l'état de l'entropie à l'aide
n'est pas la meilleure idée car chacun
cat
va consommer l'entropie. (Je vois maintenant qu'il est apparu une autre réponse qui mentionne également cela.) J'ai également un code C pour cela et j'ai essayé de le localiser hier. Je verrai si je peux le trouver et mettre à jour la réponse plus tard.la source
/dev/random
(je sais qu'il existe des exemples similaires sur ce site).watch cat
:use Fcntl 'SEEK_SET'; open(my $fh,"<", "/proc/sys/kernel/random/entropy_avail"); while (1) { print <$fh>; sleep(1); seek($fh,0,SEEK_SET); }