56 votes

Pourrait vraiment un nombre aléatoire sera généré à l'aide de pings de pseudo-aléatoirement sélectionné des adresses IP?

La question posée est venu à propos, au cours d'une 2ème Année de Comp Sciences de la conférence tout en discutant de l'impossibilité de générer des nombres dans un déterministe de calcul de l'appareil.

C'était la seule suggestion qui ne dépend pas de la non-produits et matériels de la classe.

Par la suite personne ne mettrait leur réputation sur la ligne d'argumenter définitivement pour ou contre elle.

Quelqu'un soin de prendre position pour ou contre. Si oui, quelle est la mention d'une possible mise en œuvre?

83voto

Steve Jessop Points 166970

Je vais mettre mon rep sur la ligne (au moins 2 points par downvote).

Pas de.

Un malveillant machine sur votre réseau peut utiliser ARP spoofing (ou un certain nombre d'autres techniques) pour intercepter vos pings et de répondre à certaines périodes. Ils seraient alors non seulement de savoir ce que vos nombres aléatoires, de leur contrôle.

Bien sûr, il ya toujours la question de savoir comment déterministe de votre réseau local, il pourrait ne pas être aussi facile que de tout ce qui dans la pratique. Mais puisque vous n'obtenez pas de prestations de ping aléatoire IPs sur l'internet, vous pourriez tout aussi bien attirer l'entropie de trafic ethernet.

Le dessin de l'entropie à partir de périphériques connectés à votre machine est un bien étudié principe, et les avantages et les inconvénients de divers types d'appareils et les méthodes de mesure peuvent être par exemple des volées de la mise en place de /dev/random.

[Edit: à titre de principe général, lorsque l'on travaille dans les fondamentaux de la sécurité (et de la pratique, de besoins pour des quantités importantes de vraiment aléatoire de données sont liées à la sécurité), vous DEVEZ supposer qu'un fantastiquement bien dotés en ressources, attaquant déterminé de faire tout en leur pouvoir pour briser votre système.

Pour la pratique de la sécurité, vous pouvez supposer que personne ne veut de votre clé PGP que mal, et se contenter d'un compromis de sécurité par rapport à son coût. Mais lorsque inventer des algorithmes et des techniques, vous avez besoin de leur donner la plus forte des garanties de sécurité qu'ils pouvaient faire face. Puisque je ne peux croire que quelqu'un, quelque part, peut-être quelqu'un d'autre clé privée assez mal faire construire ce morceau de kit pour vaincre votre proposition, je ne peux pas l'accepter comme une avance sur les meilleures pratiques actuelles. Autant que je sache, /dev/random, qui suit d'assez près les meilleures pratiques pour la génération aléatoires de données sur un bon PC à la maison]

[Un autre edit: il a suggéré dans les commentaires que (1) il est vrai de tous les TRNG que le processus physique pourrait être influencée, et (2) que les problèmes de sécurité ne s'appliquent pas ici de toute façon.

La réponse à (1), c'est qu'il est possible de faire sur tout réaliste matériel pour faire tellement mieux que de ping des temps de réponse, et de recueillir plus d'entropie plus vite, que cette proposition est une non-solution. Dans CS termes, évidemment, vous ne pouvez pas générer des nombres aléatoires sur une machine déterministe, qui est ce qui a provoqué la question. Mais ensuite, dans CS termes d'une machine avec une entrée externe flux est non-déterministe, par définition, donc, si nous parlons de ping alors nous ne parlons pas des machines déterministes. Il est donc logique de regarder le réel d'entrées que de véritables machines, et les considérer comme des sources de l'aléatoire. Quel que soit votre machine, raw pings ne sont pas en haut de la liste des sources disponibles, de sorte qu'ils peuvent être exclue avant de se soucier de bonne les meilleurs sont. En supposant qu'un réseau n'est pas subverti est un beaucoup plus grand (et inutile) de l'hypothèse que de supposer que votre propre matériel n'est pas corrompu.

La réponse à (2) est philosophique. Si vous n'avez pas l'esprit de vos nombres aléatoires ayant la propriété qu'ils peuvent être choisis à sa guise, au lieu de par hasard, alors cette proposition est OK. Mais ce n'est pas ce que je peux comprendre par le terme "aléatoire". Juste parce que quelque chose est en contradiction ne signifie pas qu'il est nécessairement aléatoire.

Enfin, pour aborder les détails de mise en œuvre de la proposition demandée: en supposant que vous acceptez les temps de ping comme aléatoire, vous ne pouvez toujours pas utiliser la transformée de ping fois que RNG de sortie. Vous ne connaissez pas leur distribution de probabilité, et certainement ils ne sont pas distribués de manière uniforme (ce qui est normalement ce que les gens veulent à partir d'un générateur de nombres aléatoires).

Donc, vous devez décider combien de bits d'entropie par ping vous êtes enclins à compter sur. L'entropie est précisément définie propriété mathématique d'une variable aléatoire qui peut raisonnablement être considérée comme une mesure de la façon "aléatoire", il est fait. Dans la pratique, vous trouverez une borne inférieure que vous êtes heureux avec. Puis de hachage d'un certain nombre d'entrées, et de les convertir dans un certain nombre de bits de sortie inférieure ou égale au total s'appuie sur l'entropie des entrées. "Total" n'est pas nécessairement en somme: si les entrées sont statistiquement indépendants, alors il est la somme, mais il est peu probable d'être le cas pour les de ping, de sorte qu'une partie de votre entropie estimation pour tenir compte de la corrélation. Le sophistiqué grande soeur de cette opération hachage est appelée "entropie collectionneur", et toutes les bonnes Systèmes d'exploitation ont un.

Si vous utilisez les données d'amorçage de PRNG, cependant, et le PRNG pouvez utiliser arbitrairement grand de semences d'entrée, alors vous n'avez pas de hachage, car il le fera pour vous. Vous avez encore de l'estimation de l'entropie si vous voulez savoir comment "aléatoire" votre valeur de départ, vous pouvez utiliser le meilleur PRNG dans le monde, mais son entropie est toujours limitée par l'entropie de la graine.]

22voto

Hamish Downer Points 4086

Réponse courte

À l'aide de ping les données de synchronisation par lui-même ne serait pas vraiment au hasard, mais il peut être utilisé comme une source d' entropie qui peut ensuite être utilisé pour produire réellement des données aléatoires.

Version longue

Comment aléatoire sont des temps de ping?

Par lui-même, synchronisation des données de gestion de réseau (ping) ne serait pas distribuée de manière uniforme. (Et l'idée de la sélection aléatoire des hôtes n'est pas pratique - beaucoup ne seront pas répondre à tous, et les différences entre les hôtes peuvent être énormes, avec des lacunes entre les plages de temps de réponse de penser à une connexion par satellite).

Cependant, alors que le calendrier ne sera pas bien distribué, il y aura un certain niveau de l'aléatoire dans les données. Ou pour le dire d'une autre façon, un niveau d' information de l'entropie est présent. C'est une bonne idée de nourrir la synchronisation des données dans un générateur de nombre aléatoire pour les semences. Alors, quel est le niveau de l'entropie est présent?

Pour la synchronisation réseau de données de dire autour de 50ms, mesurée au plus proche multiple de 0,1 ms, avec un étalement des valeurs de 2ms, vous avez environ 20 valeurs. En arrondissant à la prise électrique la plus proche de 2 (16 = 2^4) vous avez 4 bits d'entropie par le timing de la valeur. Si c'est pour tout type d'application sécurisée (telles que la génération de clés cryptographiques), alors je voudrais être conservateur et dire que c'était seulement 2 ou 3 bits d'entropie par la lecture. (Notez que j'ai fait une estimation très approximative ici, et ignoré la possibilité d'une attaque).

Comment générer aléatoires de données

Pour de vrais nombres aléatoires, vous avez besoin d'envoyer les données en quelque chose de conçu sur le modèle de /dev/random qui permettra de recueillir l'entropie, de la distribuer à l'intérieur d'un magasin de données (à l'aide d'une sorte de fonction de hachage, généralement un sécuritaire). Dans le même temps, l'estimation de l'entropie augmente. Donc, pour une 128 bits AES key, 64 ping timings serait nécessaire avant que le pool d'entropie avait assez d'entropie.

Pour être plus robuste, vous pouvez alors ajouter les données de synchronisation à partir du clavier et de l'usage de la souris, disque dur, les temps de réponse, la carte mère de données de capteurs (par exemple la température) etc. Il augmente le taux d'entropie de la collection, et rend difficile pour un attaquant de surveiller toutes les sources d'entropie. Et en effet, c'est ce qui est fait avec les systèmes modernes. La liste complète de MS Windows sources d'entropie est répertorié dans le deuxième commentaire de ce post.

Plus de lecture

Pour la discussion de l' (sécurité informatique) les attaques sur les générateurs de nombres aléatoires, et la conception d'un point de vue cryptographique sécurisé générateur de nombres aléatoires, vous pourriez faire pire que de lire le mille-feuille de papier par Bruce Schneier et John Kelsey. (Mille-feuille est utilisée par les systèmes BSD et Mac OS X systèmes).

13voto

dbr Points 66401

Pas de.

Débranchez le câble réseau (ou /etc/init.d/networking stop) et de l'entropie de coeur tombe à zéro.

Effectuer un Déni De Service (ddos) sur la machine c'est le ping et vous obtenez également des résultats prévisibles (la table de ping-valeur de délai d'expiration)

10voto

DGentry Points 10759

Je suppose que vous pourriez. Un couple de choses à regarder dehors pour:

  • Même si la commande ping aléatoire des adresses IP, les premiers houblon (de vous à la première véritable L3 routeur dans le réseau du FAI) sera la même pour chaque paquet. Cela met une borne inférieure sur le temps de voyage tour, même si vous exécutez la commande ping quelque chose dans un centre de données dans le premier Point de Présence. Donc, vous devez être prudent au sujet de normaliser le moment, il y a une borne inférieure sur le trajet aller-retour.
  • Vous pouvez également être prudent sur la mise en forme de trafic dans le réseau. Typique d'un seau percé mise en œuvre dans un routeur communiqués de N octets de chaque M microsecondes, ce qui perturbe votre emploi du temps en intervalles de temps plutôt que d'une gamme continue de fois. Donc, vous pourriez avoir besoin de jeter les bits de poids faibles de votre timestamp.

Cependant, je ne serais pas d'accord avec l'idée qu'il n'y a pas de bonnes sources d'entropie dans le matériel de base. De nombreux x86 chipsets pour les quelques dernières années ont inclus des générateurs de nombres aléatoires. Ceux que je suis familier avec l'utilisation relativement sensible à la Can de mesure de la température à deux endroits différents sur le die, et soustraire. Les bits de poids faibles de cette différence de température peut être affichée (via le Chi-carré de l'analyse) à être fortement aléatoire. L'augmentation de la charge de traitement sur le système de la température globale augmente, mais l'écart entre les deux zones de la matrice reste pas corrélées et imprévisible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X