Kitty evilL'inconvénient de vivre dans un appartement en plein Paris, c'est que l'espace manque rapidement. Moi, perso, tant que j'ai de la place pour brancher des machines à plus savoir quoi en faire, tout va bien, mais mademoiselle c'est une autre histoire. En fait, elle aimerait bien qu'on ai un chat à la maison. Vous savez ces trucs pleins de poils, au demeurant mignon et sympa mais, bon, je dois normalement pouvoir remplir ces fonctions. Sauf, peut être, pour le coté "laisse tes poils partout et surtout sous le lit". La dessus, je dois admettre que j'ai du mal.

Bref, je digresse.

Donc mademoiselle voudrait un chat, et elle a trouvé un parfait argument lorsque je lui ai parlé de mon projet d'acquérir une eKey. Selon ses dires, si l'objectif de l'objet est de générer du chaos, il serait tout autant efficace de disposer d'un de ces petits diables poilu et de le laisser toute la journée dans l'appartement.

Alors c'est quoi une eKey ? En fait, dans tout système Linux (et Unix souvent) existe un puit d'entropie nommé /dev/random. Le noyau collecte des bits un peu partout sur le système, dans les drivers des périphériques surtout, là ou l'activité est supposée difficile à deviner, et remplit le puit avec ces bits. Dés que l'on utilise un tant soit peu de crypto, OpenSSL, OpenSSH, etc..., on pioche dans ce puit. La problème est qu'il est pas bien grand notre puit, puisque sa taille se limite à 4KB. C'est d'ailleurs à cause de cette taille réduite que les systèmes disposent de deux périphériques: /dev/random et /dev/urandom. La différence entre les deux ? Ils fournissent les mêmes bits aléatoires collectés par le système mais, lorsque le puit est vide, /dev/random va bloquer jusqu'à ce qu'il se remplisse alors que /dev/urandom va bricoler pour renvoyer d'autres bits, moins aléatoires, mais sans bloquer le programme appelant.

Tout l'intérêt de l'eKey est donc de fournir une source externe d'entropie afin de s'assurer que ce puit n'est jamais vide, et que l'on peut donc utiliser /dev/random uniquement sans avoir à craindre de ralentir ses programmes. C'est particulièrement indispensables sur des serveurs réalisant un grand nombre de connexions SSL !

Revenons donc à notre Chaton Chaotique

Ma chère et tendre me propose donc d'utiliser l'incroyable capacité de ces petites bêtes à générer du chaos dans mon serveur (celui qui héberge ce site) plutôt que d'enrichir le britannique en important sa technologie. Elle n'a pourtant aucune famille du coté Napoléonien, mais je dois admette qu'elle marque un point.

Le pire, c'est que techniquement, c'est jouable. Une vieille webcam recyclée en caméra de surveillance du salon, un chaton qui passe sa journée à sauter du canapé à la table de cuisine, à fourrer ses pattes sur mes vinyles et à bouffer mes RJ45 ! En backend, un petit programme pour convertir les données reçues en bits à injecter dans /dev/random. Et en plus ça pourrait être rigolo à faire !

Bref, me voilà coincé. Mon argument principal de refus se retrouve confronté à la curiosité technique... Que faire ? Trouver une parade technologique sur laquelle ronger mon frein en attendant que l'espace vital du doux foyer conjugal soit compatible avec ledit prédateur de pelotes de laines.

cat /proc/sys/kernel/random/entropy_avail

Alors que je lisait un billet des plus intéressant sur planet.debian.org, j'ai réalisé que le niveau d'entropie disponible sous Linux était exporté dans /proc. C'est fou la quantité de choses que l'on trouve dans ce pseudo système de fichiers ! Curieux de voir si mon modeste système, qui n'est en fin de compte utilisé que pour des sites persos et des services à quelques personnes du domaines linuxwall.info, nécessitait réellement une source externe d'entropie, je me suis donc fendu d'un minuscule script bash et de quelques lignes de gnuplot.

Ca donne ça :

#! /bin/sh
while [ 1 ]
do
   DATE=`date +%s`
   ENTLVL=`cat /proc/sys/kernel/random/entropy_avail`
   echo "$DATE:$ENTLVL" >> entlvl.log
   sleep 1
done

Qui remplit gentillement un fichier entlvl.log avec des lignes du type :

julien@zerhuel:/$ tail entlvl.log
1260265664:177
1260265665:183
1260265666:191
1260265668:265
1260265669:265
1260265670:305
1260265672:322
1260265673:175
1260265675:199
1260265676:220

(le premier champ, c'est du temps Unix, le deuxième, c'est des octets).

Et que l'on va ensuite utiliser pour génerer des graphiques gnuplot avec le script suivant :

set title "Entropy level on zerhuel.linuxwal.info"
set xlabel "time"
set ylabel "bits"
set yrange [0:4200]

set terminal png
set output "/data/www/pki/entropy_level.png"

set xdata time
set timefmt "%s"
set format x "%d/%m/%y:%Hh%M"
set xtics nomirror rotate
set datafile separator ":"
plot '/data/julien/code/scripts/entropylevel/entlvl.log' using 1:2 with dots

Verdict ?

Tout cela a tourné sur ma machine pendant deux mois, en marquant une valeur toutes les secondes. La courbe en date de ce matin donne :

entropy level

Plus précisement, si on regarde une période de deux heures pendant laquelle je travaillais intensément sur la machine (HTTPS + 2*SSH), ca donne ça :

entropy level 2h

Ces deux graphs montrent bien qu'on est loin du niveau de famine nécessitant une source externe d'entropie. Ca se confirme à l'usage, je n'ai jamais ressenti de lenteur dans l'établissement de connexios (sauf quand je joue avec --limit et iptables, mais c'est autre chose :p ).

On peut également calculer les moyennes pour vérifier le niveau d'entropie. Si ça vous amuse de jouer en bash, ça se fait facilement de la façon suivante:

Changez juste le nom du fichier 'entlvl.log' deux fois dans la ligne suivante:

julien@zerhuel:/$ sum=0;for i in `cat entlvl.log |cut -d : -f2`;do sum=$(($sum+$i));done;echo $sum / `wc -l entlvl.log|awk {'print $1'}`|bc -l

Sur deux mois, j'ai 3106.80. Donc plutôt un puit d'entropie bien remplit.

En période de boulot (sur deux heures), j'ai 2336.70. Donc c'est plutôt bien plein également.

En gros, et pour finir

Ca veut dire deux choses, ces petites mesures (outre le fait que j'ai encore passé du temps à geeker sur un truc qui potentiellement ne sert à rien).

  1. Sur votre serveur perso, même avec une utilisation intensive, la collecte d'entropie mise en place par le noyau est suffisante. Maintenant ca peut varier selon la machine. Un collègue me parlait des mini-pc à base de mémoire flash sur lesquels l'ouverture de session SSH peut prendre assez de temps pour se repasser l'intégrale d'Annie Cordy.
  2. Sweetie, I'm afraid the chaotic kitty will not be needed anytime soon... :p

Ouf !