Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 Re : Cryptographie » La cryptographie moderne est trop ! » 16-08-2020 16:50:40

Bonjour,
  Désolé de vous avoir déranger, mais je viens de trouver mon erreur. Elle venait en fait dans le calcul de dA qui est l'inverse de eA. Le modulo utilise pour le calcul n’était pas le bon.
  Tout fonctionne correctement maintenant

  Encore Merci

#2 Re : Cryptographie » La cryptographie moderne est trop ! » 07-08-2020 14:39:39

Bonjour,
  J'ai trouve mon erreur sur mon pb precedent, c’était une mauvaise implémentation dans le calcul du "square root". Tout fonctionne normalement maintenant.
  Par contre j'ai implémenté su "Massey Omura" sur la courbe elliptique "secp128r1" et je voudrais comprendre pourquoi je n'ai pas la condition (eA*dA)%P = 1 sur la courbe elliptique. En fait cette condition est verifiee avec le produit algebrique, mais pas sur le produit scalaire.

  Soit:
     Soit la courbe elliptique "secp128r1" ayant comme modulo P:
     P = 340282366762482138434845932244680310783

     Soit eA = Prime Number (tel que le pgcd(eA, P) = 1)
     j'ai : eA = 222729849860841252646895880209163383018

     Je calcule: dA = eA-1(modulo P)
     j'obtiens: dA = 25499995906950683222942502412533395996
     On a bien la vérification: (eA*dA)%P = 1 (multiplication algébrique)  (1)

     Maintenant j'encode le caractère M ("113") sur la courbe au point initial G, donc je fais la multiplication scalaire Pm:
     (scalaire_mult retourne un point egal a k*point calcule en utilisant l'algorithme "double" et "point_add")

     Soit M= 113 (message ascii a envoyer)
     Pm = scalar_mult(M, curve.G)     (avec curve.G = [29408993404948928992877151431649155974, 275621562871047521857442314737465260675])
     j'obtiens donc: Pm = [11304, 47308684804953685417912176806684238791] qui est bien un point de la courbe.
     
     Je calcule eA.M (produit scalaire):
     eAM = scalar_mult(eA, Pm)
     eAM = [329789671570620376869107999552285827632, 18576016706169931541565139651176012108]

     d'apres (1) et Massey-Omura je devrais aussi avoir:  Pm =  scalar_mult(dA, eAM)  (puisque dA = (eA-1)%P)
     Je m'attendais a retrouver Pm, or je n'ai pas cela, j'obtiens:
     Pm = [86073600083364677830412384662030830277, 75033663402156624835667966858367557632]
   
     Est-ce a dire que Pm = (dA*eA*Pm)%P n'est pas vérifié avec un produit scalaire ?

#3 Re : Cryptographie » La cryptographie moderne est trop ! » 18-07-2020 23:47:59

Rossignol, j'ai une question sur les courbes elliptiques.
Je me trouve confronte a un problème de compréhension qui m’échappe.
J'ai réussi a implémenter un encodage Koblitz sur courbe elliptique, tout fonctionne bien, MAIS uniquement avec certaines courbes comme la "secp128r1" et la "secp128r2".
Avec les autres toujours de type "weierstrass" comme la "secp256k1" mon programme loupe sur l'encodage des caractères sur la courbe et je n'arrive pas a trouver un point correspondant.
Est-ce que quelqu'un peut m'expliquer pourquoi ?

  Merci de votre aide

#4 Re : Cryptographie » La cryptographie moderne est trop ! » 30-06-2020 20:20:58

Je vois ce que tu veux dire. Je vais essayer, merci pour ton explication.

A+

#5 Re : Cryptographie » Masque jetable » 30-06-2020 20:18:02

Bonsoir Rossignol,

  C'est bien possible, mais en un peu plus complique.

A+

#6 Re : Cryptographie » Masque jetable » 30-06-2020 13:46:36

Merci Yoshi,
  Mais on peut facilement rendre alberti en code Polialphabetique avec plusieurs roues et a ce moment la je ne vois pas comment le casser facilement.
Un exemple:
ZoC去'了   タ国ᐫLノy   同û㒵%有3   学ÅИ中t㒾   í些ツ们#分   好4^セ大以   下»Dトクb   作'年理áü   时㐇╣Ѭ─㐇   㐈㐀lM㓂ᙈ   ᐂÃ以y也得   &ᕩ{于┼e   主么么┼¿

#7 Re : Cryptographie » Masque jetable » 30-06-2020 13:17:04

Bonjour,
  Désolé d'intervenir dans votre conversation, mais que dites vous des roues d'Alberti (comme machine enigma) ou chaque lettre est encryptée par une autre avec un décalage de la roue d'encryptage. Il peut avoir plusieures roues d'encodages aussi avec Alberti, et je pense que seule la Force brute peut le casser, non ?

#8 Re : Cryptographie » La cryptographie moderne est trop ! » 28-06-2020 16:46:29

Bonjour Rossignol,
  Je reviens tj sur Massey-Omura, car je bute tj sur le décodage de mon point sur la courbe.
  Voila j'utilise la courbe elliptique suivante: y2(modP)=(x3+ax+b)(modP) avec les parametres suivants: (a=-1, b=188, P=751, N=727 et G[x,y]=[161,1])
  J'utilise les paramètres suivants:
   eA(clef privee de A) = 134,
   eB(clef privee de B) = 68,
   dA(clef Public de A) = 241,
   dB(celf public de B) = 497

avec 1< eA < P-1 et d’après massey-omura dA = eA**-1(moduloP), soit dA= euclide_etendu(eA, P) ...

  Soit le message M a envoyer de A vers B, character ascii "A"(65), son point correspondant sur la courbe elliptique est: [65001,703]
  Si A veut envoyer M a B, il envoie d'abord eA.M (eA.M étant le produit scalaire de eA et M sur la courbe) a B, ensuite B lui renvoie eB.eA.M 
  Et pour finir A renvoie dA.eB.eA.M a B
  B peut enfin décoder le message dA.eB.eA.M (sachant que dA.eA ≡ 1 (modN))

  Je trouve les points suivants:
  eA.M = [465,181]
  eB.eA.M= [599,380]
  dA.eB.eA.M=[246,698]


   # Encode d'un point sur la courbe
        P = curve.P
        zz = int((P+1)/2)
        ww = int((P+1)/4)        
        D = 100
        for J in range(1,D-1):
            X = (D*int(car) + J)
            Y2 = self.curve_result(curve, X)
            if Y2 == pow(Y2,zz,P):
                Y = pow(Y2,ww,P)
                Pm = [X, Y]
                if self.is_on_Curve(curve, Pm):
                    print('--> Point %s is on curve'%Pm)
                    break
        eXM = self.scalar_mult(curve, Key, Pm)
 

 
  dA.eB.eA.M=[246,698]
  eBm1 = inverse(eB,P)
  Pour retrouver le point [65001,703] cela devrait être M = scalar_mult(curve, ebm1, [246,698]) si je ne me trompe pas.

  En partant du point [246,698] je n'arrive pas a retrouver mon point d’origine [65001,703].

  Je ne comprends pas ou est mon erreur, si on peut me mettre sur la voie et m'eclairer.

  Merci d'avance

#9 Re : Cryptographie » La cryptographie moderne est trop ! » 22-06-2020 09:06:01

Merci Rossignol,

  Effectivement mon erreur était que je considérais sur le calcul de x le modulo P. C'est vrai ce n'est pas bijectif, voila donc pourquoi je ne trouvais plus mon message.

  Encore Merci

A+

#10 Re : Cryptographie » Décryptage d'un message » 22-06-2020 00:36:14

Merci Rossignol,
   Tu m'as permis de trouver un bug dans mon code. En fait je test un encryptage perso et je ne savais pas comment le tester.
   Je recommence, peux tu cette fois déchiffrer cela:

Z有 ᘷ'ИAÇu㒸Ä 而大x S得g以 コノè自但┬ 我2{╗前\本ᕓ( Q'其M以ᙈ而æト ∑5 作都 㐃cᐑ0`è Ж那为 后起┌^w

Langue: Francais

Merci d'avance

#11 Re : Cryptographie » Décryptage d'un message » 21-06-2020 18:34:34

Super. Puis-je te demander comment tu as fais pour trouver aussi vite ?

#12 Re : Cryptographie » La cryptographie moderne est trop ! » 21-06-2020 14:58:56

Bonjour,
  Je me suis mis récemment a la cryptographie sur les courbes elliptiques et j'ai un problème de compréhension et d’exécution concernant l'encodage et surtout le décodage d'un caractère sur une courbe elliptique de type Weierstrass de la forme y2(modP)=(x3+ax+b)(modP).
  J'utilise l’échange de clefs par la méthode Massey-Omura sur une courbe elliptique avec (a=-1, b=188, P=751, N=727 et G[x,y]=[161,1]
  En fait j'ai trouve la façon d'encoder un caractère ASCII sur la courbe ou j'obtiens bien un point appartenant a celle-ci, mais je n'arrive pas a retrouver le caractère ASCII a partir de ce même point.
  Est-ce que quelqu'un peut m'aider a comprendre et aussi savoir si je suis bien au bon endroit pour poser ma question ?

Voila mon code Python pour encoder un caractère sur une courbe elliptique:
        dm: caractère ascii a encoder
        curve: courbe elliptique de reference

       
        P = curve.P
        zz = int((P+1)/2)
        ww = int((P+1)/4)        
        D = 100

        for J in range(1,D-1):
            if enc: # Encode
                X = (int(dm) + J)%P
                Y2 = self.curve_result(curve, X)
                if Y2 == pow(Y2,zz,P):
                    Y = pow(Y2,ww,P)
                    point = [X, Y]
                    if self.is_on_Curve(curve, point):
                        print('--> Point %s is on curve'%point)
                        return(point)
 

  J'ai essayé plusieurs manières pour retrouver la valeur ascii a partir du point, mais sans résultat et de plus je n'arrive pas a trouver de documentation sur le sujet.
  Est-ce que quelqu'un peut me renseigner ?

  Merci a vous tous

#13 Re : Cryptographie » Décryptage d'un message » 21-06-2020 12:15:27

Bonjour Rossignol,

  J'ai été impressionné par la facilité de decryptage, et j'aurais bien voulu savoir s'il est possible de décrypter le message suivant:

,'à}0¥ Ꮝ¥2ス¥于 ÿ~¥ 㒴à 㒴~2¥ ¥ス分 㒴ò 0㒿0¥ ス} í¥ 2¥ 㒴à 于¥因à于ú¥ Ꮝàスì

Langue: Francais

Merci d'avance

Pied de page des forums