Quelles sont les différences entre la fonction rand () et le périphérique RNG (générateur de nombres aléatoires)?


9

Je me demande pour le périphérique RNG (générateur de nombres aléatoires) dans les microcontrôleurs STM32F4XXXX. consultez ce manuel de référence (page 748). D'un autre côté, nous avons la fonction rand () dans la bibliothèque stdlib qui fait la même tâche. Maintenant, j'ai deux questions:

  1. Quelles sont les différences (avantage et inconvénient) entre la fonction rand () et le périphérique RNG (générateur de nombres aléatoires)?
  2. Regardez cette partie:

traits

Veuillez expliquer ces deux options (en particulier la deuxième option).

Réponses:


12

La réponse de Dave la reprend assez bien, mais pour clarifier un peu plus la deuxième option:

un véritable générateur de nombres aléatoires matériel utilise une source d'entropie physique. Une telle source d'entropie pourrait être le rayonnement cosmique, le bruit électrique, l'effet d'avanlanche d'une diode polarisée en inverse (ou transistor BJT), un circuit chua, etc. Plus la source d'entropie est moins déterministe, meilleure est la qualité de la sortie aléatoire. Une source d'entropie idéale serait d'utiliser un effet de physique quantique, ou quelque chose qui ne peut pas être modélisé avec des équations déterministes.

Un autre facteur important avec les générateurs de nombres aléatoires est que la source d'entropie ne peut générer qu'une quantité limitée d'entropie par unité de temps. Un bon exemple est le circuit chua: bien qu'il soit assez aléatoire, il a une très faible vitesse et ne peut pas être utilisé pour une application réelle.

Dans de nombreux processeurs / microcontrôleurs avec RNG intégrés, la dérive d'horloge de 2 à 4 horloges délibérément incorrectement synchronisées est utilisée. Ensuite, ils utilisent des filtres analogiques et numériques pour randomiser encore plus le motif et décaler le résultat dans un registre. La réalisation d'un tel filtrage nécessite quelques cycles, ce qui explique le nombre minimal de cycles requis sur une horloge donnée avant que la nouvelle valeur ne soit disponible.

La dérive de l'horloge n'est pas tout à fait un effet quantique, elle pourrait donc être modélisée, mais elle est suffisamment aléatoire, car elle dépend de nombreux paramètres, tels que la température, le processus du silicium, la fréquence de fonctionnement, le bruit électrique, les radiations de fond, etc. .

Dans les applications où le RNG matériel n'a pas un débit suffisant (comme dans les applications cryptographiques très exigeantes), il est assez courant d'utiliser le RNG matériel comme germe pour un générateur de nombres pseudo aléatoires comme la fonction rand () dans le sdtlib. Cependant, une telle application fournit généralement une meilleure implémentation de rand () qui est spécifiquement conçu pour fonctionner à partir d'une graine qui peut être rejetée très souvent avec de vraies valeurs aléatoires. Dans les processeurs Intel plus récents avec des RNG matériels intégrés, la partie de l'algorithme pseudo-aléatoire est directement intégrée dans le silicium, elle est donc effectuée par le matériel, ce qui donne un débit aléatoire très élevé.

Si vous vous souciez de la méthode rand () elle-même, ce n'est qu'une expression méthématique qui est conçue pour générer une quantité d'entropie suffisamment importante. Assez grand étant dépendant de l'application: pour les générations de clés cryptographiques, le caractère aléatoire doit être de meilleure qualité que le caractère aléatoire requis pour un simple mélange aléatoire dans votre lecteur de musique préféré. Il est évident que plus la qualité de la sortie aléatoire est élevée, plus le coût de calcul du nombre aléatoire est élevé.

Les opérations impliquées dans un nombre aléatoire sont assez similaires à celles impliquées dans le calcul du hachage MD5 d'un fichier: elles essaient d'utiliser une sorte d'effet d'avalanche de bits de sorte qu'un seul changement de bit dans une valeur de départ modifie l'ensemble du modèle de génération. En remarque, je ne recommande PAS d'utiliser MD5 comme générateur de nombres pseudo-aléatoires; ce n'était qu'un exemple. Ce serait à la fois inefficace et pas si aléatoire, mais le point est là: si vous alimentez le même fichier à un algorithme de hachage MD5, vous obtiendrez toujours la même sortie déterministe, à peu près de la même manière que vous obtiendrez toujours la même sortie de la fonction rand () si vous entrez la même graine, sauf si votre implémentation dépend de certains éléments arbitraires tels que l'heure actuelle.


7

La principale différence est que la rand()fonction de bibliothèque est un générateur de nombres pseudo- aléatoires - étant donné une valeur de départ (graine) particulière, elle produira toujours la même séquence de nombres.

D'un autre côté, le périphérique RNG est un véritable générateur de nombres aléatoires, et il produira des séquences de nombres non répétables.


Merci. et ces deux options ..?
Roh

2
Que signifie "et ces deux options ..?" signifier? Est-ce une question?
John U

2

Les deux sujets que vous décrivez peuvent être décrits assez facilement:

  • 1: Vous ne pouvez pas générer de nombres aléatoires plus rapidement qu'une fois tous les 40 cycles d'horloge, ce qui donne 48 MHz / 40 = ~ 1 M d'échantillon / s
  • 2: Le matériel contient un moniteur qui vérifiera chaque numéro généré pour un comportement étrange. Par exemple, si vous utilisiez la température comme source et disposiez d'un environnement de température très stable, il pourrait arriver que le RNG génère à nouveau les mêmes séquences de nombres (comme le ferait un générateur de nombres pseudo-aléatoires si vous commencez avec la même valeur de départ) . Le composant surveillerait cela et vous fournirait un signal si le RNG fonctionne comme prévu. Au cas où vous auriez besoin que vos numéros soient "vraiment" aléatoires, vous voudrez peut-être surveiller cet indicateur pour voir s'ils le sont vraiment. Comment exactement cela est fait et comment le RNG fonctionne réellement est probablement donné dans le texte restant.

1

Supposons que l'on conçoive une roulette mécanique à roulette qui alimente un moteur pendant un certain temps, attend que la roue et la balle se reposent et observe dans quelle poche se trouve la balle. Normalement, après chaque rotation, la balle et la roue vont se retrouver dans un endroit légèrement différent, et de petites variations dans l'emplacement de la balle après un tour peuvent faire une énorme différence dans l'endroit où elle se retrouve au tour suivant. Ainsi, même si le moteur est toujours alimenté pendant la même durée, la poche où une balle atterrit sur un tour sera indépendante de l'endroit où elle a atterri avant le tour.

Supposons maintenant, cependant, que quelques-uns des chiffres présentent ou développent de légères dépressions et que les roulements du moteur développent des points plats. Ensuite, certains tours seraient aléatoires, mais après un tour qui entraîne l'atterrissage de la balle dans une dépression et le roulement à un endroit plat, le tour suivant pourrait très bien être biaisé pour avoir le même résultat que le dernier tour où cela s'est produit. Si la plupart des tours ne touchent pas simultanément le divot et le plat, leur existence n'affectera probablement pas trop les choses. D'un autre côté, si un combo divot / plat se trouve juste à droite pour qu'une balle y atterrisse raisonnablement de manière cohérente pendant une seconde, et que celle-ci soit placée de manière à renvoyer la balle au premier, alors un se retrouver avec certains comportements extrêmement asymétriques.

Si, après avoir atterri sur 4 et 23, la rotation suivante est un 4, cela n'indique pas nécessairement un problème. Un 4 devrait apparaître environ 1/38 du temps dans cette situation. En outre, l'acquisition de données aléatoires doit simplement capturer le numéro de poche, car rien d'utile n'est connu sur la fréquence à laquelle la balle doit se poser dans différentes parties de la poche. Néanmoins, il peut être utile pour tout ce qui enregistre les chiffres «d'observer» également où la balle s'arrête dans la poche et de détecter tout motif inhabituel. La distribution des emplacements pourrait être biaisée vers l'avant ou l'arrière sans indiquer de problème, mais s'il y a un pic étroit dans la distribution, cela pourrait être préoccupant.

Si les lectures consécutives d'un générateur aléatoire sont statistiquement indépendantes , la compensation du biais n'est pas difficile (bien que le temps requis ne soit pas déterministe). Si, cependant, un générateur tombe dans un état où les lectures ne sont pas indépendantes (par exemple l'état cyclique de la roue ci-dessus), la compensation devient fondamentalement impossible - d'où la nécessité pour un RNG matériel d'inclure des circuits pour détecter de tels comportements.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.