Bonjour,
Dans le cadre d'un travail scolaire en 1ère S, j'étudie le fonctionnement d'un volet roulant (ou d'une porte de garage, ou d'un autre système à télécommande). J'ai compris qu'il fallait coder l'information entre la télécommande et le volet roulant afin qu'une autre personne ne puisse pas ouvrir à ma place (un voleur ou autre).
J'ai lu qu'il existait deux types de code :
un code passif (toujours le même)
un code variable (rolling code) qui change régulièrement pour compliquer la tâche d'un éventuel voleur.
Je dois travailler en mathématiques sur le rolling code.
Je suis à la recherche de toutes les informations possibles sur ce fameux rolling code. Je comprends qu'il peut éventuellement s'agir d'un système protégé par brevet, mais le simple principe de fonctionnement me permettrait d'avancer à grands pas. J'ai pour objectif de simuler un algorithme de rolling code en maths (par exemple sur ma calculatrice).
Merci d'avance si vous pouvez m'aider.
Beyza C. (et son prof de maths)
Bonjour,
le principe des codes tournant (rolling code) est fondé sur un générateur pseudo aléatoire
il existe des dizaines de façon de générer du hasard (pseudo aléatoire)
ce hasard est déterministe en ce sens que la valeur suivante dépend de façon parfaitement déterminée d'une "séquence" qui semble aléatoire, mais qui ne l'est pas du tout :
chaque valeur est obtenue à partir de la précédente (ou des précédentes) par un algorithme bien précis.
de sorte que le volet roulant, à partir de la valeur initiale (graine) génère une certaine séquence S
la télécommande initialisée avec la même graine et le même algorithme, génère donc la même séquence.
chacun à tout instant est dans le même état
si on actionne la télécommande, le volet roulant a à cet instant le même code
puis tous deux passent au code suivant pour l'appui suivant
pour parer à des actions sur la télécommande sans que le volet n'ait pris cette action en compte (action loin du volet roulant par exemple, ou parasites), ce qui entrainerait une désynchronisation des deux séquences,
le volet roulant regarde si le code reçu est celui attendu ou l'un des N codes suivants.
cela c'est le principe. universellement connu et écrit partout sur le Web
des "Data sheet" (feuilles de caractéristiques) de circuits électroniques qui réalisent cette fonction sont même disponibles publiquement.
le truc c'est que la méthode est publique, mais dépend de paramètres (valeurs) secrètes et à priori différentes d'un élément à l'autre. mais les mêmes pour des éléments "appariés"
pour des raisons pratiques ces valeurs peuvent être les mêmes pour toute une "famille" et simplement secrètes.
la question "réaliser un algorithme" est assez imprécise !!
que doit faire cet algorithme ?
simuler ce qui se passe dans la télécommande : générer un code qui est affiché (émis par l'émetteur de la télécommande) ?
il s'agit donc de "juste" programmer un générateur pseudo-aléatoire
en l'absence de consignes plus précises n'importe quel générateur pseudo aléatoire.
en chercher un tout fait
parce qu'inventer soi-même un générateur pseudo aléatoire n'est pas une mince affaire mathématiquement parlant : par exemple il faudrait comprendre les groupes et la notion de générateur, le petit théorème de Fermat, théorie de la complexité, division des polynômes etc ...
ou bien s'agit-il de faire deux algorithmes l'un qui simule l'émetteur (qui fournit les codes)
et l'autre le récepteur (qui génère les mêmes codes dans le même ordre et qui si on lui donne un code "reçu" va dire : "oui c'est bon" (et se resynchroniser au besoin sur la valeur de N codes suivants) ou "c'est pas bon" et rester synchronisé sur l'émetteur quoi qu'il arrive (de raisonnable, appuyer 500 fois sur la télécommande à l'insu du volet va les désynchroniser à coup sûr)
en tout cas quoi qu'il en soit la première étape est de se documenter sur les générateurs de séquences pseudo aléatoires, d'en choisir une et de la programmer
Je vous remercie de m'avoir répondu et merci pour votre aide.
Je vais me documenter. J'ai besoin de l'algorithme du rolling code tout simplement, je vais me renseigner.
Bonne journée
Merci
Beyza C.
Merci gryd77 de m'avoir répondu.
Je connais le principe du code tournant, mais j'ai besoin de l'algorithme pour le simuler sur ma calculatrice par exemple. Mais je vais surement en inventer un avec l'aide de mon professeur
Bonne journée
Beyza C.
le principe est comme j'ai dit celui d'un générateur pseudo aléatoire
les plus courants sont ceux basés sur des registres à décalages :
ensuite il y a "un peu de sauce cryptographique" autour, spécifique au fabriqaunt
voir la spéc (Datasheet) du circuit de Microchip :
ou la note d'application de chez ATMEL :
Tout dépend de ce que ton professeur attend :
Si ça reste un exercice encore assez simple d'algorithmique, il suffit de savoir quand on a le code d'échange (aussi bien pour l'émetteur que pour le récepteur) quel sera le suivant et pour pouvoir resynchroniser les n (en général 255) qui poursuivent la suite de codes.
Ce qui fait la qualité (la sécurité) d'un dispositif particulier, c'est la difficulté, sans en avoir les caractéristiques, de savoir quel sera le code suivant. Je pense que tu peux commencer, dans un premier temps, par écrire ton algorithme sans te préoccuper de cet aspect particulier, c'est-à-dire en utilisant n'importe quelle suite numérique simple (pourquoi pas 1, 2, 3, ... la suite des entiers naturels).
C'est sur que comme je le soulignais déja, on ne sait pas ce qui est "attendu" (c'est un TPE aussi ...)
Bonjour,
Je vous remercie de m'avoir répondu vous m'avez énormément aidés merci beaucoup; je vais maintenant faire l'algorithme du moins essayer. Mon professeur de maths vous remercie aussi.
Bonne journée
Beyza C.
Bonjour,
Je travaille sur le store automotisé dans le cadre d'un travaille scolaire. Mais je dois trouver une "fonction" pseudo-aléatoire sauf que celle-ci, n'est enfait pas du tout aléatoire.
Je cherche cette fonction pour réaliser l'algorithme du "rolling code" le code change tout le temps.
La télécommande et le moteur sont synchronisés mais je n'arrive pas a réaliser cette fonction. Comment je pourrais procéder ? Car ce nombre n'est pas aléatoire et je ne peux pas me servir de la fonction rand.
ne vous remercie d'avance pour votre aide.
Bonne soirée
Beyza C.
*** message déplacé ***
Bonjour,
Ce que tu cherches n'est pas très clair.
Peux-tu en dire un peu plus?
*** message déplacé ***
Bonjour,
Merci de m'avoir répondu @sanantonio312
Dans le cadre d'un travail scolaire en 1ère S, j'étudie le fonctionnement d'un volet roulant. J'ai compris qu'il fallait coder l'information entre la télécommande et le volet roulant afin qu'une autre personne ne puisse pas ouvrir à ma place (un voleur ou autre).
J'ai lu qu'il existait deux types de code :
un code passif (toujours le même)
un code variable (rolling code) qui change régulièrement pour compliquer la tâche d'un éventuel voleur.
Je dois travailler en mathématiques sur le rolling code.
Je suis à la recherche de toutes les informations possibles sur ce fameux rolling code. J'ai pour objectif de simuler un algorithme de rolling code en maths (par exemple sur ma calculatrice).
Je compte faire 2 algorithme mais je dois créer un code qui est censé être aléatoire. Mais étant donné que la télécommande et le volet roulant (ou moteur?) doivent posséder le même code comment je pourrai créer ce code ?
Bonne soirée
Beyza C.
*** message déplacé ***
Bonjour,
Je ne suis pas spécialiste du tout, mais ce que je comprends c'est que tu as un émetteur (E) et un récepteur (R).
Tous les deux partagent un code fixe A et un code variable U.
Pour cela il suffit de disposer d'un U initial, appelons le U(0)...
... et d'une fonction F qui construise une suite U(n) par récurrence : U(n+1) = F(U(n))
Pour "corser" un peu le tout, j'imagine que la fonction F peut utiliser le code fixe A pour générer la suite des U(n).
Le reste est une affaire de synchronisation...
Si (E) émet un U(n+1) à un moment donné à partir de A et de U(n)...
... alors (R) compare simplement ce U(n+1) reçu avec celui qu'il est capable de calculer lui-même avec A et le dernier U(n) reçu lors de la dernière activation.
---
Si c'est bien ça qu'il faut faire, tu peux commencer par tester le dispositif avec une fonction F assez simple.
Et ensuite tu peux étudier comment fabriquer une fonction F mathématiquement "intelligente" au regard des objectifs de sécurité.
*** message déplacé ***
Bonsoir,
multipost : TPE: Algorithme store somfy
pour des compléments d'information il faut relancer le topic d'origine (en y répondant) et pas en créer un nouveau
ça évitera aux intervenant de réeinventer la poudre...
et au demandeur de se faire bannir.
*** message déplacé ***
Multipost scandaleux compte tenu de la qualité des réponses déjà fournies il y a trois semaines !
beyza89 tu te fous de la gueule du monde !!!!
*** message déplacé ***
Histoire d'être un peu plus constructif, et comme la question porte explicitement sur un générateur pseudo aléatoire "déterministe"
(c'est à dire qui donne la même séquence dans deux "machines" différentes lancées à des instants différents)
une recherche sur Internet avec les mots clés "générateur pseudo aléatoire" donne une documentation conséquente, à chercher là dedans des trucs simples et pas des thèses de spécialistes en cryptographie.
parmi les générateurs pseudo aléatoires les plus simples on trouve :
1) les registres à décalage à rétroaction linéaire (déja cités dans l'autre topic)
la doc que j'avais mentionnée n'est pas la plus simple, pour une intro basique mieux vaut lire juste le début de l'article de Wikipedia sur le sujet
la difficulté est ici de choisir le registre à décalage (taille et où on va mettre les "prises") pour que ça donne le plus grand nombre de codes possibles
en cherchant un peu j'ai fini par tomber sur un document qui liste les générateurs de taille maximale
le document est la doc d'un composant obsolète de chez Xilinx, mais l'aspect mathématique de la chose, dont ce tableau, est valable "éternellement")
par exemple un générateur de 31 bits avec les prises sur les bits 28 et 31 donne le maximum possible de valeurs différentes sur 31 bits
soit 231 - 1 soit quelque deux millions de valeurs pseudo aléatoires avant de "reboucler" sur sa séquence.
pour programmer un tel registre sur machine on utilise l'instruction de décalage (<< ou >> en C/Java/Jvascript/Algobox)
et les instructions de calculs binaires et (&) ou (|) et ou exclusif (^) sur Javascript/Algobox
à chercher/vérifier dans la doc pour les autres langages
2) les générateurs à congruence
une petite doc pour éviter de chercher "Générateurs Linéaires Congruentiels" :
c'est à dire qui à chaque étape calculent Xn+1 = aXn + b modulo m
(ce qui soit dit en passant est plus facile à programmer qu'un registre à décalage)
ils fournissent au plus m valeurs différentes (modulo m !!)
m doit donc être assez grand (de l'ordre de quelques millions) et de préférence un nombre premier avec b si on veut obtenir toutes ces valeurs là
attention toutefois à ne pas faire déborder les capacités arithmétiques de la machine dans le calcul de ax + b !!
tout doit rester des nombres entiers exacts.
ce n'est pas les seuls mais c'est les plus facile à programmer
moyennant le choix judicieux des coefficients a, b, m le générateur congruentiel se programme même en quelques lignes !!
*** message déplacé ***
Bonjour,
Merci de m'avoir répondu.
Alors pour le "multi post" mais c'est une autre question je pensais qu'il fallait faire une question par topic. Je suis désolé. Et merci de m'avoir aidé @LeDino ainsi que @mathafou
Je m'excuse pour le "multi post" je n'utilise vraiment pas ces sites je ne m'y connais pas vraiment.
Bonne journée
Beyza C.
*** message déplacé ***
ce n'est pas une question par topic, c'est un sujet par topic
même exo = même topic, même si questions différentes sur cet exo...
bon, il faut juste espérer la clémence d'un modérateur suite à cette interprétation erronée du "règlement" ...
les deux topics seront regroupés en un seul un de ces jours (quand le modérateur en question tombera dessus)
*** message déplacé ***
Ce n'est pas juste une "interprétation erronée".
C'est un manque total de bon sens...
La clémence oui.
Mais pas sans clarification.
La règle n'est pas là juste pour faire joli ...
---
PS: de surcroit, je ne vois pas ce qu'il y avait de si différent dans la question prétendument nouvelle posée.
Cela étant dit : le sujet est intéressant et on attend avec impatience le retour de Beyza89... avec plus de jugeote .
la question "nouvelle" c'est la précision qu'il s'intéresse ici plus particulièrement à la partie "générateur aléatoire" alors que le premier topic était plus général.
ceci dit ça avait redérivé ici sur les généralités puisque les intervenants (sanantonio312 et toi) n'avaient pas vu le premier topic !! ce qui énerve effectivement pas mal (raison des interdictions de multipost)
comme j'étais intervenu la première fois, ça a fait tilt et je l'ai recherché
attendons la suite ...
Le générateur aléatoire dont il est question ici est fortement en lien avec le contexte d'utilisation.
Ne pas établir clairement ce lien et occulter les éléments déjà exposés dans la première discussion est une faute sévère.
Ce d'autant que ta première conclusion disait ce qu'il fallait faire : commencer par un générateur simple qui fournit une boucle...
Quitte à l'améliorer ensuite.
Or beyza89 n'a même pas dit ce qu'il avait déjà imaginé de son côté.
Et je ne suis même pas certain du reste qu'il ait vraiment compris ce qu'il doit faire.
Raisons qui confirme ce qui n'avait pas besoin de l'être : ce multi post est l'illustration parfaite de la justification de la règle qui l'interdit. Gros gaspillage de temps et d'énergie. Pour tout le monde y compris l'intéressé...
Bonjour,
@LeDino je me suis éxcusé, ce qui veut dire que ca ne se reproduira plus pourquoi insister autant j'ai très bien compris ca ne reproduira plus merci de votre compréhension ensuite,
j'ai très bien compris ce que je devais faire: je vais réaliser deux algorithmes (je remercie @mathafou ça m'a beaucoup aidé) l'un qui simule l'émetteur et l'autre qui simule le récepteur. Jusque là tout va bien. Maintenant, je ne comprenais pas comment réaliser la fonction du code aléatoire qui n'est pas aléatoire mais j'ai compris également. Je vais donc programmer un "Générateurs Linéaires Congruentiels" j'ai compris également le principe. Il faut maintenant que je réalise les deux programmes en question. Je reviendrais très vite pendant les vacances également pendant les heures de TPE je travaillerai d'arrache pied.
Je vous remercie tous de votre aide merci beaucoup.
Beyza C.
Bonjour,
Pour réaliser le générateur à congruence linéaire, il sera sous forme de xn+1 = ( a * xn + b) mod c.
Ensuite j'ai lue que Park & Miller ont proposé un générateur standard convenablement testé, ils l'ont appelé standard minimal: xn+1 = 16'807 xn mod (2[sup][/sup]31- 1). Pensez vous que c'est un bon choix et que je pourrais m'en servir dans ma calculatrice ?
Puis, j'ai du mal à débuter mon algorithme dois-je commencer directement avec le générateur à congruence linéaire ou il faut que je rajoute au départ quelque chose dans mon algorithme.
Je vous remercie d'avance pour votre aide.
Bonne journée
Beyza C.
je ne vois rien contre ce générateur là tout fait de Park & Miller
comme il s'agit d'un TPE, il faudra juste justifier ce choix :
taille entre autres, compte tenu de la taille des nombres entiers dans la machine utilisée,
par exemple si la machine représente des entiers sur 32 bits, calculer des multiplications par 16807 modulo 231 - 1 risque fort de déborder !
par ailleurs ceci est juste la partie "générateur" des algorithmes !!
comme conseillé il vaut mieux avoir testé "la chair autour" avec un "générateur" plus simple, du genre de celui qui compte de 0 à 99 par exemple :
Un+1 = (Un + 1) modulo 100 !!
seulement ensuite on remplace cette partie là par le vrai.
l'algorithme de la partie "générateur" c'est juste une ligne avec ce générateur là (à congruence linéaire)
les 99,9% de l'algorithme c'est "le reste" !!
autant le tester, ce reste, avec un générateur qu'on peut "prédire de tête" ...
c'est par là qu'il faut commencer :
saisie d'un code,
test s'il est valide et resynchro au besoin
Merci de m'avoir répondu,
Avec un générateur plus simple comme vous dites, la suite des nombre "aléatoire" ne se répettera pas a partir de 100 nombre par exemple? Puis je n'ai pas très bien compris le "ensuite on remplace cette partie là pas le vrai" Qu'est ce que vous entendez par cela?
Beyza C.
dans ton algorithme complet tu as un "morceau", on pourrait appeler ça un "sous programme", qui calcule les nombres aléatoires
mais ce n'est que la partie émergée de l'iceberg, une fraction infime de l'algorithme
le vrai problème est réellement tout le reste.
et remplacer ce morceau là par un autre ne changera rien du tout au fonctionnement du programme "dans son ensemble"
juste que ce sera plus pratique à tester si le générateur aléatoire donne des nombres plus faciles à connaitre "de tête"
une fois l'algorithme entièrement testé on remplace le petit bout "simple" par "le vrai" (qui est tout aussi simple mais fournit un pataquès de valeurs impossible à deviner de tête)
parce que le "test" du générateur lui-même (LA ligne qui code le générateur !!)
soit c'est de la roupie de sansonnet (se bornant à vérifier la syntaxe en gros)
soit c'est tout une étude spécifique sur la "qualité" d'un générateur, étude déja faite par les sieurs Park & Miller, qui consiste à faire toute une batterie de test statistiques, et que tu n'as certainement pas à refaire (l'intention de).
le seul critère pour le choix d'un générateur "plus simple" est que sa période de répétition soit supérieure au paramètre de resynchro "sur les N codes suivants"
mais pour "tester" l'algorithme, mettre une valeur de N très faible (genre 5 ou 10) ne posera aucun problème si la période du générateur est de 100 !!
Un+1 = (Un + 1) modulo 100
donc ça donne a=1 b=0 c=0 m=100 maintenant faut que je trouve a b c pour pouvoir trouver une liste de nombre "aléatoire" qui fonctionne avec m=100 pour pouvoir en même temps calculé a la tête ?
Beyza C.
tu n'as pas à chercher quoi que ce soit
ce "générateur" là il est tel quel et il fournit la liste de nombres :
0, 1, 2, 3, ... 98, 99, 0, 1 etc sans fin, point barre.
il est là pour te permettre de tester facilement tout le reste de l'algo :
(saisie des codes, test si c'est la bonne valeur, re-synchro sur les valeurs suivantes si pas bon etc etc)
toutes sortes de choses qui ne dépendent absolument pas de quelle liste de valeurs "dites aléatoires" on utilise vraiment
juste que c'est beaucoup plus facile à tester un truc qui ne marche pas, quand on lui fournit des valeurs qui sont de simples nombres entiers successifs, que avec des trucs affreux du genre :
1579941363
439192786
611859563
1371973505
1226780696
512662825
...
et une fois que tout ça marchera il suffira de remplacer la seule ligne
U prend la valeur de U + 1 (faux générateur juste pour le test)
par le vrai générateur :
U prend la valeur de (16807*U)%2147483647
ou syntaxe équivalente selon le langage
(2147483647 = 231 - 1 calculé à la calculette une fois pour toutes, ou à faire calculer une fois pour toutes par le programme lui-même)
Merci beaucoup je pense avoir compris, il suffit maintenant que je test avec ma calculatrice "le faux algorithme" pour ensuite remplacer U.
Merci beaucoup
Bonne journée;
Beyza C.
Bonsoir,
J'ai réussie à programmer l'algorithme qui simule la "télécommande" en revanche, pour le "récepteur" mon professeur m'a dit qu'il ne marcher qu'une fois, pour fermer par exemple le store somfy, il ne pourra pas fonctionner; que dois-je faire a votre avis?
Merci d'avance
Beyza C.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :