Journal OneRNG: générateur de nombres aléatoires open hardware/source

Posté par (page perso) . Licence CC by-sa
19
15
juil.
2016

Hello,

Je rencontre actuellement des problèmes de disponibilités de nombres aléatoires sur ma machine d'auto-hébergement:
depuis que j'ai mis en place DNSSEC avec bind9 en mode "inline-signing", mon entropie disponible chute souvent1 et je pense que c'est la cause de certains soucis d'instabilités de mon serveur (bon, là, il a environ 700 entropies disponibles, mais dès que je fais une mise à jour dynamique DNS, il descend à 0 pendant quelques minutes).

Comme je suis en train de développer un script python pour Let's Encrypt avec vérification DNS, je fais fréquemment des mises à jour dynamiques DNS et du coup tant que je ne développe pas ça va, mais dès que bind met à jour les signatures DNSSEC c'est galère. Mon projet est donc un peu bloqué tant que mon serveur DNS reste instable.

Je me suis donc dit qu'il fallait chercher un moyen pour régler ce problème d'entropie.
Comme cette machine ne semble pas avoir de matériel de génération d'entropie, la première solution avait été d'utiliser [haveged](http://linux.die.net/man/8/haveged).
Cet outil permet d'accroître l'entropie disponible par défaut sous Linux en utilisant plus de sources disponibles.
Cette solution m'a permis de mettre plus rapidement en place DNSSEC (la première génération des signatures était vraiment très lente sinon).

Pour l'instant, cette solution pourrait suffire, mais comme je souhaite mettre en place Let's Encrypt avec mise à jour des entrées DNS automatique, mon entropie pourra chuter souvent et mon serveur DNS ne répond plus pendant quelques minutes après la mise à jour dynamique (je ne suis pas sûr que ce soie lié à l'entropie disponible, mais c'est ce qui me semble le plus crédible pour l'instant).

J'ai donc cherché sur le web si un matériel USB existait pour créer des nombres aléatoires (ma machine est un ordinateur portable, l'USB est le plus simple à utilser). Et là j'ai découvert le projet OneRNG.

Le but de ce projet est de fournir un périphérique bon marché (40$) capable de générer des nombres aléatoires avec un design Open Hardware et des logiciels Open Source (voire les informations techniques).

Le périphérique peut utiliser deux sources d'entropies (voire les fondements théoriques):
* l'activité des ondes radio alentours
* une "avalanche diode" qui génère des 0 et des 1 à une fréquence plus élevée que celle utilisée pour lire ces nombres

Le périphérique correspondrait exactement à mes besoins, le projet nous donne les moyens de vérifier si le matériel correspond bien à ce qui a été prévu et le firmware est signé à l'intérieur de la puce. Le matériel est isolé par une petite cage de Faradet afin d'éviter que l'envirronnement perturbe le générateur et que le bruit généré ne soit pas utilisable par quelqu'un de l'extérieur. Par contre, il est clairement dit que les données transférées par l'USB ne sont pas protégées.

Manque de chance, cher lecteur qui découvre en même temps que moi ce projet, le format USB de type A de leur matériel est en rupture de stock et un voyage en Chine devra être fait avant que le matériel soit à nouveau disponible (prévu en août, le voyage permettra la vérification de l'installation du firmware apparemment). L'autre format, insérable sur les pins USB d'une tour / d'un serveur est par contre disponible.

Soyons donc patients et attendons le mois d'août pour Let's Encrypt (j'ai déjà dû renouvelé mon certificat pour 2 ans, ça pourra donc attendra donc 1 mois) et vos autres projets nécessitant beaucoup d'entropie :)

  • # .

    Posté par . Évalué à 2.

    Tu peux également acheter ce genre de truc :

    http://www.partsdata.fr/cables-usb-und-accessoires/cable-usb/adaptateurs-usb-mecaniques/k-001/usb-adapter-a-maennlich-auf-4-stifte

    Ou alors tu peux tout simplement le fabriquer en sacrifiant une vieille rallonge usb par exemple.

    • [^] # Re: .

      Posté par (page perso) . Évalué à 2.

      Oui, mais je suis assez maladroit et je n'ai jamais appris à faire des soudures, alors je préfère ne pas tenter ce genre d'expérience :)

  • # NeuG

    Posté par (page perso) . Évalué à 10.

    Dans le même genre, il y a NeuG, un RNG pour microprocesseur STM32F103. Il est développé par Niibe Yutaka, un des développeurs de GnuPG qui est aussi à l’origine du token Gnuk, une implémentation de la carte OpenPGP.

    Il peut être obtenu auprès de la FSF.

    • [^] # Re: NeuG

      Posté par (page perso) . Évalué à 5.

      Super, merci, je pourrais prendre un peu plus de recule à OneRNG.

      C'est très intéressant que la FSF vende aussi un générateur d'aléatoire.
      En plus, il n'y a pas besoin de logiciels spéciales pour Linux, on peut voir l'interface directement avec /dev/ttyACM0.
      Donc, si j'ai bien compris, il faudra juste utiliser rng-tools pour prendre en compte cette nouvelle source d'entropie.

      Je trouve la page de présentation beaucoup plus simple et claire.

      Le magasin en ligne de la FSF est déjà sous HTTPS avec Let's Encrypt (alors que pour OneRNG, c'est que la validation de payement qui se fait par un site "Norton Secured").

      Enfin, les deux projets sont très intéressant et sont complémentaires puisqu'ils utilisent des sources d'entropies différentes :)

  • # La ChaosKey

    Posté par (page perso) . Évalué à 6.

    Keith Packard et Bdale Garbee, grandes figures du logiciels libres, ont développés et commercialisent la ChaosKey une clé USB générateur de nombre aléatoire.

    http://www.phoronix.com/scan.php?page=news_item&px=ChaosKey-1.0-2016

    http://altusmetrum.org/ChaosKey/

    Le pilote est disponible dans le noyau Linux depuis la version 4.1.

    • [^] # Re: La ChaosKey

      Posté par (page perso) . Évalué à 3.

      Super, ils espèrent produire 1000 pièces pour le mois d'août 2016.

      Si j'ai bien compris leur documentation, leur source est aussi une paire de transitors :

      • 20V noise source
        • AP3015A boost regulator
        • back-to-back 3904 transistor noise

      Par contre, je ne sais pas quelle est la différence avec la source correspondante de la OneRNG.

      Il faut que je regarde la vidéo de la Debconf 16 chez moi pour comprendre.

      Merci !

  • # L’entropie est à consommer avec modération

    Posté par (page perso) . Évalué à 8.

    mon entropie disponible chute souvent¹

    Un appel de note sans la note correspondante, c’est triste…

    dès que je fais une mise à jour dynamique DNS, il descend à 0 pendant quelques minutes)

    En général, c’est révélateur d’un programme qui fait un mauvais usage du générateur de nombres aléatoires, notamment en puisant directement tous les nombres dont il a besoin dans le pool d’entropie, au lieu de prendre seulement quelques octets et de les utiliser pour initialiser son propre CSPRNG (qu’il peut ensuite faire tourner à sa guise sans plus rien demander au système).

    Par ailleurs, si le programme tape par défaut dans /dev/random (c’est le cas de dnssec-signzone il me semble), il ne faut pas hésiter à lui dire d’aller voir du côté de /dev/urandom.

    • [^] # Re: L’entropie est à consommer avec modération

      Posté par (page perso) . Évalué à 3.

      mon entropie disponible chute souvent¹

      Un appel de note sans la note correspondante, c’est triste…

      Ah oui, j'ai oublié de l'enlever. La note a été transformée en paragraphe dans le texte (celui à propos de mon dev actuel).

      Par ailleurs, si le programme tape par défaut dans /dev/random (c’est le cas de dnssec-signzone il me semble), il ne faut pas hésiter à lui dire d’aller voir du côté de /dev/urandom.

      Je peux confirmer que lorsque je fais un lsof /dev/random, je vois named constamment (de temps en temps un autre logiciel, mais ce n'est que quelques instants).

      random-device The source of entropy to be used by the server. Entropy is primarily needed for DNSSEC
      operations, such as TKEY transactions and dynamic update of signed zones. This options speci-
      fies the device (or file) from which to read entropy. If this is a file, operations requiring entropy
      will fail when the file has been exhausted. If not specified, the default value is /dev/random (or
      equivalent) when present, and none otherwise. The random-device option takes effect during the
      initial configuration load at server startup time and is ignored on subsequent reloads.
      (documentation de Bind 9.9)

      Merci, je n'avais même pas pensé que ça pouvait être configurable dans bind et le lien pour /dev/urandom est très intéressant !

    • [^] # Re: L’entropie est à consommer avec modération

      Posté par . Évalué à 1.

      son propre CSPRNG

      C'est peut être le P (pour Pseudo) qui gène pour une application critique…

  • # Entropie disponible

    Posté par . Évalué à 3. Dernière modification le 15/07/16 à 17:13.

    Vite fait histoire de mourir dormir moins con, c'est quoi ce concept d'entropie disponible ? L'entropie se mesure ? Un truc qui se répète a une entropie pourrie alors qu'un vrai random générator en aura une plus grosse ?

    Merci !

    • [^] # Re: Entropie disponible

      Posté par (page perso) . Évalué à 6.

      L'entropie c'est pas le pays en Afrique qu'on a fait une chanson pour les aider dans les années 80 avec tous les chanteurs français dans la télé de l'époque?

      Je suis déjà dehors ----> []

    • [^] # Commentaire supprimé

      Posté par . Évalué à 9. Dernière modification le 15/07/16 à 18:35.

      Ce commentaire a été supprimé par l'équipe de modération.

      • [^] # Re: Entropie disponible

        Posté par (page perso) . Évalué à 7.

        A Mathematical Theory of Communication—Shannon, l'auteur est assez peu connu mais c'est une bonne introduction ;

        Ah ah ah Claude Shannon peu connu ! Tu m'as pris au dépourvu.

      • [^] # Re: Entropie disponible

        Posté par (page perso) . Évalué à 2. Dernière modification le 18/07/16 à 16:38.

        A Mathematical Theory of Communication—Shannon, l'auteur est assez peu connu mais c'est une bonne introduction ;

        C'est l'article qui jette les fondements de la théorie mathématique de la communication, donc ta présentation arrive à faire pas mal de blagues en une seule phrase. :) Ceci dit c'est souvent une bonne idée de lire ce genre d'articles, ils sont souvent beaucoup plus simples et compréhensibles que ce à quoi on pourrait s'attendre quand on a pris l'habitude des articles de recherche. :)

    • [^] # Re: Entropie disponible

      Posté par . Évalué à 2.

      https://www.youtube.com/watch?v=9rIy0xY99a0 c'est assez fun mais en anglais, et ça parle du lien randomness - entropy.

    • [^] # Re: Entropie disponible

      Posté par (page perso) . Évalué à 1.

      L'entropie disponible est une estimation de la disponibilité des nombres aléatoires.

      Le commentaire au dessus a un lien sur un bon article qui explique ça avec la différence entre /dev/random et /dev/urandom.

  • # sources

    Posté par . Évalué à 2.

    Le périphérique peut utiliser deux sources d'entropies (voire les fondements théoriques): * l'activité des ondes radio alentours

    C'est ce qu'utilise random.org. Je me suis toujours demandé si au fin fond d'un datacenter c'était une source fiable et abondante ? Vu le débit proposé par random.org, c'est une source peu abondante (1500b/s je crois).

    Est-ce que cumuler des sources pas très fiables car proprio ou avec un débit faible peut garantir une source fiable ?

    • [^] # Re: sources

      Posté par (page perso) . Évalué à 2. Dernière modification le 18/07/16 à 22:20.

      C'est ce qu'utilise random.org. Je me suis toujours demandé si au fin fond d'un datacenter c'était une source fiable et abondante ?

      Mmmh, c'est une bonne question. Pour mon besoin, ça va très bien car ce serait pour une machine dans mon appartement et comme il y a pas mal de réseaux sans fil dans l'immeuble et les immeubles voisins, ça devrait bien marcher.

      Cependant, OneRNG permet de configurer quelles sources utiliser (soit une, soit l'autre, soit les deux).
      Donc, si on ne fait pas confiance à l'environnement radio du data center, on peut utiliser uniquement l'« avalanche diode ».

  • # Source = Web

    Posté par . Évalué à 4.

    J'arrive après la bataille, mais ne te serait il pas possible de générer tes nombre aléatoire suivant diverses source web, genre plusieurs fil tweeter très actif + youtube + la tribune ;) + etc.

    La liste de tes sources serait la clée de ta non prévisibilité/espionnage.

    • [^] # Re: Source = Web

      Posté par (page perso) . Évalué à 1.

      C'est quand meme tres predictible un flux xml

      • [^] # Re: Source = Web

        Posté par . Évalué à 2.

        Oui je suis bien d'accord, mais le truc serait de mélanger plusieurs source pour obtenir une seul série de chiffre. Si tu prend le flux de vidéo ajouté sur Youtube tu as de quoi faire. C'est la multiplicité et le nombre de source qui fera que ton générateur soit fiable.
        Non ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.