Yarrow
- Pour le diplomate fidjien du même nom, voir : Robin Yarrow.
Yarrow est un générateur cryptographique de nombres pseudo-aléatoires inventé par Bruce Schneier, John Kelsey et Niels Ferguson. Son nom est tiré du nom anglais de l'achillée millefeuille (Achillea millefolium), une plante utilisée dans la divination chinoise Yi-Jing.
L'algorithme est volontairement libre de tout brevet ou contrainte commerciale. Aucune licence n'est nécessaire pour l'employer. Yarrow est inclus au sein de Mac OS X dans son /dev/random. Toutefois, son utilisation n'est plus recommandée et il a été remplacé par son successeur, Fortuna également inventé par Schneier et Ferguson. Certains des principes présents dans Yarrow sont repris dans Fortuna. Toutefois, sa résistance est moindre par rapport à ce dernier qui offre une plus grande souplesse et qui paraît cryptographiquement plus sûr de par l'utilisation de SHA-256 en lieu et place de SHA-1.
Fonctionnement
modifierYarrow dispose de deux groupes de 160 bits (pour Yarrow-160) qui collectent de l'entropie à partir de différentes sources au caractère aléatoire. Dans Yarrow, un groupe est dit "rapide" et l'autre est dit "lent". Les données provenant de l'entropie "lente" sont plus sûres mais utilisées moins souvent. En alternance avec le groupe "rapide", ces résultats sont ensuite hachés par SHA-1 pour servir de graine. La "qualité" du contenu des groupes est évaluée avec un estimateur d'entropie. Celui-ci permet de dire s'il serait facile pour un attaquant de deviner le contenu des groupes. Une fois ces données validées, elles sont hachées avec SHA-1 et servent de clé pour un algorithme de chiffrement symétrique de type 3DES. Celui-ci chiffre un simple compteur, ce qui rend l'architecture de l'algorithme assez simple et facilement implémentable. Finalement, on obtient un flux de données pseudo-aléatoires mais cryptographiquement sûr puisque même avec une immense puissance de calcul, il est impossible de faire la différence entre une suite provenant de Yarrow ou une suite parfaitement aléatoire.