En informatique , l'entropie est la quantité aléatoire collectée par un système d'exploitation ou une application pour être utilisée en cryptographie ou pour d'autres utilisations nécessitant des données aléatoires. Cette quantité aléatoire est souvent collectée à partir de sources matérielles (variation du bruit du ventilateur ou du disque dur), qu'elles soient préexistantes comme les mouvements de la souris ou des générateurs d'aléatoire spécialement fournis. Un manque d'entropie peut avoir un impact négatif sur les performances et la sécurité.
Noyau Linux
Le noyau Linux génère de l'entropie à partir des timings du clavier , des mouvements de la souris et des timings de l'électronique de disque dur intégrée (IDE) et met les données de caractères aléatoires à la disposition d'autres processus du système d'exploitation via les fichiers spéciaux /dev/random et /dev/urandom. Cette capacité a été introduite dans la version 1.3.30 de Linux.
Il existe quelques correctifs du noyau Linux permettant d'utiliser davantage de sources d'entropie. Le projet audio_entropyd, qui est inclus dans certains systèmes d'exploitation tels que Fedora , permet d'utiliser des données audio comme source d'entropie. Sont également disponibles video_entropyd, qui calcule des données aléatoires à partir d'une source vidéo et entropybroker, qui inclut ces trois éléments et peut être utilisé pour distribuer les données d'entropie à des systèmes qui ne sont pas capables d'exécuter l'un d'entre eux (par exemple des machines virtuelles ). De plus, on peut utiliser l'algorithme HAVEGE via haveged pour regrouper l'entropie. Dans certains systèmes, les interruptions réseau peuvent également être utilisées comme source d'entropie.
Noyau OpenBSD
OpenBSD a intégré la cryptographie comme l'un de ses principaux objectifs et a toujours travaillé à augmenter son entropie pour le chiffrement mais aussi pour randomiser de nombreuses parties du système d'exploitation, y compris diverses opérations internes de son noyau. Vers 2011, deux des périphériques aléatoires ont été abandonnés et liés à une source unique car ils pouvaient produire des centaines de mégaoctets par seconde de données aléatoires de haute qualité sur un système moyen. Cela a rendu impossible l'épuisement des données aléatoires par les programmes de l'espace utilisateur sur OpenBSD une fois que suffisamment d'entropie a été initialement collectée.
Noyau Hurd
Un pilote porté à partir du noyau Linux a été rendu disponible pour le noyau Hurd .
Solaris
/dev/random et /dev/urandom sont disponibles sous forme de packages ou de correctifs Sun pour Solaris depuis Solaris 2.6, et sont une fonctionnalité standard depuis Solaris 9. Depuis Solaris 10, les administrateurs peuvent supprimer les sources d'entropie existantes ou en définir de nouvelles via le cadre cryptographique au niveau du noyau.
Un module de noyau tiers implémentant /dev/random est également disponible pour les versions remontant à Solaris 2.4.
OS/2
Il existe un logiciel pour OS/2 qui permet aux processus logiciels de récupérer des données aléatoires.
Fenêtres
Les versions de Microsoft Windows plus récentes que Windows 95 utilisent CryptoAPI pour collecter l'entropie d'une manière similaire à /dev/random du noyau Linux.
CryptoAPI de Windows utilise la clé de registre binaire HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\RNG\Seed pour stocker une valeur amorcée à partir de toutes ses sources d'entropie.
Comme CryptoAPI est un logiciel à code source fermé , certaines applications logicielles libres et open source fonctionnant sur la plateforme Windows utilisent d'autres mesures pour obtenir un caractère aléatoire. Par exemple, GnuPG, à partir de la version 1.06, utilise diverses sources telles que le nombre d'octets libres en mémoire qui, combiné à une graine aléatoire, génère le caractère aléatoire souhaité dont il a besoin.
Les programmeurs utilisant CAPI peuvent obtenir l'entropie en appelant CryptGenRandom () de CAPI, après l'avoir correctement initialisé.
CryptoAPI est obsolète à partir de Windows Vista et versions ultérieures. La nouvelle API s'appelle Cryptography API: Next Generation (CNG). Le CNG de Windows utilise la clé de registre binaire HKEY_LOCAL_MACHINE\SYSTEM\RNG\Seed pour stocker une valeur initialisée.
Les versions plus récentes de Windows peuvent utiliser diverses sources d'entropie :
- TPM si disponible et activé sur la carte mère
- Entropie de l'interface UEFI (si démarré à partir de l'UEFI)
- Instruction CPU RDRAND si disponible
- Horloge système matérielle ( RTC )
- Contenu de la table ACPI OEM0
- Horaires d'interruption
- Timings du clavier et mouvements de la souris
Systèmes embarqués
Les systèmes embarqués ont du mal à collecter suffisamment d'entropie car ce sont souvent des appareils très simples avec des temps de démarrage courts, et les opérations de génération de clés qui nécessitent une entropie suffisante sont souvent l'une des premières choses qu'un système peut faire. Les sources d'entropie courantes peuvent ne pas exister sur ces appareils, ou n'auront pas été actives assez longtemps pendant le démarrage pour garantir l'existence d'une entropie suffisante. Les appareils embarqués manquent souvent de lecteurs de disques rotatifs, de périphériques d'interface humaine et même de ventilateurs, et l'interface réseau, le cas échéant, n'aura pas été active assez longtemps pour fournir beaucoup d'entropie. Faute d'un accès facile à l'entropie, certains appareils peuvent utiliser des clés codées en dur pour amorcer des générateurs aléatoires, ou amorcer des générateurs aléatoires à partir d'identifiants uniques facilement devinables tels que l'adresse MAC de l'appareil. Une étude simple a démontré l'utilisation généralisée de clés faibles en trouvant de nombreux systèmes embarqués tels que des routeurs utilisant les mêmes clés. On pensait que le nombre de clés faibles trouvées aurait été bien plus élevé si des identifiants uniques à usage unique simples et souvent déterminables par l'attaquant n'avaient pas été incorporés dans l'entropie de certains de ces systèmes.
Systèmes (dé)centralisés
Un véritable générateur de nombres aléatoires (TRNG) peut être un service (dé)centralisé. Un exemple de système centralisé où un nombre aléatoire peut être acquis est le service de balises aléatoires du National Institute of Standards and Technology . La plateforme Cardano utilise les participants de son protocole décentralisé de preuve d'enjeu pour générer des nombres aléatoires.
Autres systèmes
Il existe certains logiciels qui permettent d'utiliser un processus de l'espace utilisateur pour collecter des caractères aléatoires, exactement ce que fait /dev/random, comme EGD, l'Entropy Gathering Daemon.
Entropie d'origine matérielle
Les processeurs et le matériel modernes disposent souvent de générateurs intégrés qui peuvent fournir une entropie de haute qualité et à grande vitesse aux systèmes d'exploitation. Sur les systèmes basés sur le noyau Linux , on peut lire l'entropie générée à partir d'un tel périphérique via /dev/hw_random. Cependant, /dev/hw_random peut parfois être lent ;
Certaines entreprises fabriquent des dispositifs de génération d'entropie, et certaines d'entre elles sont livrées avec des pilotes pour Linux.
Sur un système Linux, on peut installer le paquet rng-tools qui prend en charge les générateurs de nombres aléatoires réels (TRNG) présents dans les processeurs prenant en charge l' instruction RDRAND , les modules de plateforme sécurisée et dans certains chipsets Intel , AMD ou VIA , augmentant efficacement l'entropie collectée dans /dev/random et améliorant potentiellement le potentiel cryptographique. Ceci est particulièrement utile sur les systèmes sans tête qui n'ont pas d'autres sources d'entropie.
Implications pratiques
Les administrateurs système , en particulier ceux qui supervisent les serveurs Internet, doivent s'assurer que les processus du serveur ne s'arrêteront pas en raison d'un épuisement de l'entropie. L'entropie sur les serveurs utilisant le noyau Linux, ou tout autre processus du noyau ou de l'espace utilisateur qui génère de l'entropie à partir de la console et du sous-système de stockage, est souvent loin d'être idéale en raison de l'absence de souris et de clavier. Les serveurs doivent donc générer leur entropie à partir d'un ensemble limité de ressources telles que les timings IDE.
La taille du pool d'entropie sous Linux est visible via le fichier /proc/sys/kernel/random/entropy_avail et doit généralement être d'au moins 2000 bits (sur un maximum de 4096). L'entropie change fréquemment.
Les administrateurs responsables de systèmes ayant une entropie faible ou nulle ne doivent pas tenter d'utiliser /dev/urandom comme substitut à /dev/random car cela peut entraîner un cryptage de qualité inférieure des connexions SSL/TLS.
Certains systèmes logiciels modifient souvent leurs clés Diffie-Hellman , ce qui peut dans certains cas aider un serveur à continuer à fonctionner normalement même avec un goulot d'étranglement d'entropie.
Sur les serveurs à faible entropie, un processus peut sembler bloqué lorsqu'il attend que des caractères aléatoires apparaissent dans /dev/random (sur les systèmes basés sur Linux). Par exemple, il existait un problème connu dans Debian qui provoquait le blocage d'exim4 dans certains cas à cause de cela.
Sécurité
Les sources d'entropie peuvent être utilisées pour les attaques de synchronisation du clavier.
L'entropie peut affecter la cryptographie (TLS/SSL) d'un serveur : si un serveur ne parvient pas à utiliser une source aléatoire appropriée, les clés générées par le serveur ne seront pas sécurisées. Dans certains cas, un pirate informatique (un attaquant malveillant) peut deviner quelques bits d'entropie à partir de la sortie d'un générateur de nombres pseudo-aléatoires (PRNG), et cela se produit lorsque l'entropie introduite dans le PRNG n'est pas suffisante.
Sources potentielles
Les sources d'entropie les plus couramment utilisées sont la souris, le clavier et les timings IDE, mais il existe d'autres sources potentielles. Par exemple, on pourrait collecter l'entropie à partir du microphone de l'ordinateur ou en construisant un capteur pour mesurer la turbulence de l'air à l'intérieur d'un lecteur de disque .
Pour les dérivés Unix/BSD, il existe une solution basée sur USB qui utilise un processeur ARM Cortex pour filtrer/sécuriser le flux binaire généré par deux sources de générateur d'entropie dans le système.
Cloudflare utilise un flux d'images provenant d'un rack de 80 lampes à lave comme source supplémentaire d'entropie.