True random generator

True random generator - C++ - Programmation

Marsh Posté le 17-07-2017 à 11:27:44    

Hello  :bounce:  
 
Je suis en train d'essayer de programmer un simple petit programme de poker en C++,
Jusque la sa marche pas mal, mais je réalise que j'ai toujours les mêmes cartes en main au départ,
J'avais oublier que la fonction rand % retournait toujours la même suite de chiffre aléatoire.
 
Du coup j'ai regardé mes cours de DUT, on avait vu qu'il était possible d'aller chercher des chiffres aléatoires en les importants de programmes spécifiques.
Ou alors qu'on pouvait également les sélectionner par des phénomènes physique (comme le placement de la souris à l'heure actuel va retourner un chiffre)
 
J'avais pas trop écouter ces passages et on a pas vraiment fait de travaux pratique.
 
Quelqu'un aurait des sources à me partager, sur une méthode pour avoir un VRAI chiffre aléatoire,  
 
Cordialement

Reply

Marsh Posté le 17-07-2017 à 11:27:44   

Reply

Marsh Posté le 17-07-2017 à 11:37:45    

Ouais bon ok je suis une quiche je m'escuse !
j'avais pas vu le srand(time(NULL));
 
 
Parcontre, si c'est possible ce que je demandais de faire, je suis toujours preneur, sa ne serait que du bonus !


Message édité par Dolb66 le 17-07-2017 à 11:38:17
Reply

Marsh Posté le 17-07-2017 à 11:47:25    

Quelqu'un a posé une question similaire récemment en python
 
voila la réponse qui lui a été donné
http://forum.hardware.fr/hfr/Progr [...] 6084_1.htm
 
si tu veux plus de détails tu peux aller du côté de
https://fr.wikipedia.org/wiki/G%C3% [...] %A9atoires
 
De ton côté tu as recours a la fonction time pour obtenir un nombre servant de base à ta "suite".


Message édité par The_Kid le 17-07-2017 à 11:48:49
Reply

Marsh Posté le 17-07-2017 à 11:47:57    

Les générateurs aléatoires se basent toujours sur "quelque chose", la notion de vrai aléatoire n'existe pas vraiment.  
Si tu veux juste un générateur "pas prévisible et qui ne renvoie pas de séquences répétitives" il y a cependant plein de librairies et thèses de recherche qui portent sur le sujet pour tous les langages, sache juste que tu t'attaques à un gros morceau d'informatique théorique.  
 
un srand() correctement initialisé suffit très largement pour n'importe quel jeu basique.
C++11 a aussi introduit #include <random> et ce qui va avec.
Cadeau : https://channel9.msdn.com/Events/Go [...] ed-Harmful


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 17-07-2017 à 13:23:36    

Merci beaucoup pour vos réponses,
The_Kid, tes formules m'ont rappelé une façon de faire qu'on m'avait enseigné.  
1. Je recupère le random,  
2. Je le met au carré
3. Je récupère la valeur au centre de mon resultat (exemple : 2555,  2|55|5) ce qui me donne 55.
 
Je ne sais plus du tout de qui venait cette méthode,
 
Et oui TotalRecall, mon srand() pour le cas actuel m'est utile, c'etait surtout pour voir toutes les autres possibilités :)
 
Merci :)

Reply

Marsh Posté le 17-07-2017 à 14:09:43    

Je ne vois pas l'intérêt du machin des carrés si le but est de lutter contre une suite récurrente ?


Message édité par TotalRecall le 17-07-2017 à 14:09:52

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 17-07-2017 à 14:19:24    

C'est une méthode de random connue:
 
https://en.wikipedia.org/wiki/Middle-square_method
 
Mais utilise le package random ou srand ca sera suffisant et déja largement bien supporté.

Reply

Marsh Posté le 17-07-2017 à 14:25:34    

Ah là je vois, mais j'ai l'impression qu'entre l'article wikipedia et ce qu'a dit Dolb66 il y a un tout petit peu qui a disparu, un peu comme si ça n'avait rien à voir en fait [:gratgrat]...


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 17-07-2017 à 14:37:26    

Bah si quand même sinon il aurait pas compris de quoi je parlais x), C'est juste que mon exemple est pourris :x C'est pas possible d'avoir une suite récurrente regarde je reprend mon 2555 :  
A) 2|55|5 -> 1er retourner = 55
B) 55² = 3025 donc 3|02| 5 -> 2eme retourner = 02
 
Mais dans mes souvenirs quand on a un zero qui apparait y a quelque chose de différent à faire car le prochain carré sera ridiculement petit.
 
Désolé si je me suis mal exprimé Total :)

Reply

Marsh Posté le 17-07-2017 à 14:45:47    

Dans tous les cas c'est une méthode peu fiable, donc pourquoi tu t'emmerdes avec?
 
Tu as srand(time(NULL)) qui suffit dans de nombreux cas, et <random> avec en plus un exemple dans la vidéo la haut si tu as besoin d'un random vraiment précis, alors pourquoi réinventer la roue...

Reply

Marsh Posté le 17-07-2017 à 14:45:47   

Reply

Marsh Posté le 17-07-2017 à 15:01:49    

Relis moi au dessus :)  
J'utilise seulement mon srand la donc ne t'enerve pas :( , j'avais dit " sa ne serait que du bonus !". Je m'informais au passage un petit peu, sa fait longtemps que j'avais pas vu sa ;)
Merci en tout cas,  
 
Bye

Reply

Marsh Posté le 17-07-2017 à 15:12:30    

Personne ne s'énerve la (et j'avais bien lu au dessus) :D
 
Mais c'est un secteur pas peu/évident ou il faut souvent un background important en math...
 
Bref de toute facon comme dit ca se passe ici:
https://en.wikipedia.org/wiki/List_ [...] _PRNG_APIs

Reply

Marsh Posté le 17-07-2017 à 15:27:13    

Dans le même genre en utilisant des décallages de bit tu as les registres à décallages gauches
 
https://fr.wikipedia.org/wiki/Regis [...] %C3%A9aire
 
le gif de la page explique bien je trouve.
 
C'est souvent utilsié en crypto en rendant le truc plus complexe, en composant plusieurs ensembles par exemples

Reply

Marsh Posté le 17-07-2017 à 18:26:54    

Parlant de crypto... Dans ce domaine hautement sensible il vaut mieux utiliser des bibliothèques qui ont fait leur preuves (pour les générateurs de nombres aléatoires et de manière plus générale toute histoire de crypto/authentification/...) plutôt que de bricoler soit-même, une petite erreur peut faire chuter un super cryptage AES au même niveau qu'un XOR 0x42 niveau sécurité... :o Par contre pour un jeu c'est complètement autre chose bien sûr.
(Je voulais juste le dire. :o )

Reply

Marsh Posté le 17-07-2017 à 21:53:02    

DE toute façon, sur un ordi, si on ne fait qu'utiliser un algo, on aura que du pseudo random, pour le true random, il faut une source physique.
C'est d'ailleurs pour cela entre autres que les bécanes modernes (hors OEM) ont un module TPM.
A priori, il y a moyen d'y accéder par programme: https://github.com/Microsoft/TSS.MSR
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 18-07-2017 à 09:20:37    

Le one time pad ou xor est je cite wikipédia  "théoriquement impossible à casser"
 
Si tu possèdes une suite de nombre aléatoires et si tu as confiance dans la méthode dans laquelle tu les as obtenus (pas de répétition dans la clé et algorithme robuste).
Tu possèdes un algo de chiffrement sur, le problème de nos jours vient dans l'échanges du masque et le chiffrement de très gros volume de données qui permettent de deviner la méthode pour générer ta suite de nombre.
De plus ton algorithme est à disposition de tout le monde si il doit être implémenté par les navigateurs etc...
 
Si tu t'envois un message en utilisant le xor, si ils ignorent le message d'origine et la clé, aucun moyen de déchiffrer. Ils ont aucun moyens de tester ton algo et de voir la sortie.
 
https://fr.wikipedia.org/wiki/Masque_jetable

Reply

Marsh Posté le 18-07-2017 à 12:49:54    

Je parlais pas de OTP mais de XOR avec une constante bien sûr. :o  

Citation :

De plus ton algorithme est à disposition de tout le monde si il doit être implémenté par les navigateurs etc...

Et ça c'est une très bone chose! La sécurité par l'obscurité ne marche pas! https://fr.wikipedia.org/wiki/S%C3% [...] urit%C3%A9   https://fr.wikipedia.org/wiki/Principe_de_Kerckhoffs
 
edit:

Citation :

Tu possèdes un algo de chiffrement sur, le problème de nos jours vient dans l'échanges du masque et le chiffrement de très gros volume de données qui permettent de deviner la méthode pour générer ta suite de nombre.

J'ai pas compris... Il existe des générateurs de nombres aléatoires qui utilisent des données genre utilisation clavier/souris/réseau et autre et des algorithmes complexes (je suppose qu'on doit y retrouver des fonctions de hashage cryptographiquement sûr), dans ce cas il est (généralement) impossible de deviner la méthode / retrouver les données aléatoires. Et pour les échanges de masque / clé on peut utiliser la crypto asymmétrique, voir TLS. Après certes il y a parfois des problèmes / attaques possibles, justement c'est une matière très complexe.


Message édité par rat de combat le 18-07-2017 à 12:53:57
Reply

Marsh Posté le 18-07-2017 à 16:29:27    

Comme c'est l'été et que tout le monde est à la plage, une bonne lecture de plage sur le sujet est le volume 2 du TAOCP (The Art Of Computer Programming) de Knuth  :pt1cable:  
 
c'est bon, c'est bon je sors...  
 
 
https://en.wikipedia.org/wiki/The_A [...] rogramming

Reply

Marsh Posté le 18-07-2017 à 18:37:16    

Bonne lecture certainement, mais ça ne doit pas être très digeste. J'ai jamais eu en main un de ses bouquins, je suppose qu'il faut être étudiant en informatique ou maths pour comprendre non? :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed