Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

cryptographie RSA Maple



  1. #1
    vanouchskaya

    cryptographie RSA Maple


    ------

    Bonjour,
    je dois rendre un TP Maple lundi sur la cryptographie.. j'ai trouvé quelques algo et tutos trés utiles mais j'ai un soucis dans le tout dernier exo (je mettrai mon code à la fin)

    alors en gros il faut décrire un protocole concret d'échanges RSA entre Alice et Bob
    alors Alice veut transmettre un message M à Bod, pour cela elle le transforme en chiffre (c'est ce que fait ma procédure "texteàchiffre")
    Bob choisit au hasard deux entiers premiers p et q (ma procédure gene_prem me fait ceci) puis on calcule n=pq et phi=(p-1)(q-1)
    ensuite Bob choisit un entier premier avec phi au hasard (fonction gene_prem2)
    on calcule à l'aide de igcdex l'inverse de e modulo phi que j'ai apelé d1
    puis on crypte le message d'Alice en faisant C=M^e mod n
    (j'ai utilisé un algo d'exponentiation rapide que j'ai trouvé dans un tuto parce que ça donne un chiffre trop gros pour Maple)
    et normalement Bod peut décrypter le message en faisant C^d1 mod n (j'ai appelé le résultat de cette opération m) .. et normalement m doit être égal au message initial d'Alice M .. mon problème est la, ce n'est pas le cas !
    j'ai testé toutes mes fonctions independemment les unes des autres, ça marche, je vois vraiment pas où est le soucis

    donc je vous mets mon code


    > restart:
    > Alphabet:=abcdefghijklmnopqrst uvwxyz:
    > nb_lettres:=length(Alphabet):
    > for var to nb_lettres do
    > lettre[var]:=substring(Alphabet,var..var) :
    > od:
    > lettre[0]:=` `:
    > for var from 0 to nb_lettres do
    > num_lettre[lettre[var]]:=var:
    > od:

    > texteachiffre := proc(expression)
    > local var,resul,element:
    > global nb_lettres:
    > resul := 0:
    > for var to length(expression) do
    > element:=num_lettre[substring(expression,var..var)]:
    > resul := resul+element*(nb_lettres+1)^v ar:
    > od:
    > end:
    > M:=texteachiffre(`bonjour bob`);

    > gene_Prem := proc()
    > local test::integer:
    > test := rand(10^6..10^7)();
    > if(isprime(test))
    > then
    > return test
    > else
    > return(nextprime(test))
    > fi:
    > end:
    >
    > P:=gene_Prem();
    > Q:=gene_Prem();
    >
    > N:=P*Q;
    > PHI:=(P-1)(Q-1);

    > gene_Prem2 := proc(n::integer)
    > local tmp::integer,test::boolean:
    > test := false:
    > while (test=false) do
    > tmp:=rand(10^6..10^7)():
    > test := is(igcd(tmp,n)=1):
    > od:
    > return tmp:
    > end:
    >
    > E:=gene_Prem2(PHI);
    > igcd(E,PHI);
    >
    > igcdex(E,PHI,'D1','V');
    > D1;

    > #C:= M^E mod N;
    >
    > expomodulo:=proc(xx,nn,mm)
    > local x,n,resul:
    > x:=xx mod mm:
    > resul:=1:
    > n:=nn:
    > while n>0 do
    > if type(n,odd) then
    > resul:=resul*x mod mm:
    > n:=n-1:
    > else x:=x*x mod mm:
    > n:=n/2 fi:
    > od:
    > resul:
    > end:

    > C:=expomodulo(M,E,N);

    > m:=expomodulo(C,D1,N);

    > chiffreatexte := proc(nb)
    > local var,liste,s:
    > global nb_lettres:
    > liste := convert(nb,base,nb_lettres+1):
    > s:=seq(lettre[var],var = liste):
    > cat(s):
    > end:
    > chiffreatexte(m);

    merci pour votre aide, ça doit être une erreur débile mais à force d'avoir le nez dedans j'y vois plus rien lol

    -----

  2. #2
    cryptaubin

    Re : cryptographie RSA Maple

    Bonjour,
    je dois rendre un TP Maple lundi sur la cryptographie.. j'ai trouvé quelques algo et tutos trés utiles mais j'ai un soucis dans le tout dernier exo (je mettrai mon code à la fin)

    alors en gros il faut décrire un protocole concret d'échanges RSA entre Alice et Bob
    alors Alice veut transmettre un message M à Bod, pour cela elle le transforme en chiffre (c'est ce que fait ma procédure "texteàchiffre")
    Bob choisit au hasard deux entiers premiers p et q (ma procédure gene_prem me fait ceci) puis on calcule n=pq et phi=(p-1)(q-1)
    ensuite Bob choisit un entier premier avec phi au hasard (fonction gene_prem2)
    on calcule à l'aide de igcdex l'inverse de e modulo phi que j'ai apelé d1
    puis on crypte le message d'Alice en faisant C=M^e mod n
    (j'ai utilisé un algo d'exponentiation rapide que j'ai trouvé dans un tuto parce que ça donne un chiffre trop gros pour Maple)
    et normalement Bod peut décrypter le message en faisant C^d1 mod n (j'ai appelé le résultat de cette opération m) .. et normalement m doit être égal au message initial d'Alice M .. mon problème est la, ce n'est pas le cas !
    j'ai testé toutes mes fonctions independemment les unes des autres, ça marche, je vois vraiment pas où est le soucis

    donc je vous mets mon code


    > restart:
    > Alphabet:=abcdefghijklmnopqrst uvwxyz:
    > nb_lettres:=length(Alphabet):
    > for var to nb_lettres do
    > lettre[var]:=substring(Alphabet,var..var) :
    > od:
    > lettre[0]:=` `:
    > for var from 0 to nb_lettres do
    > num_lettre[lettre[var]]:=var:
    > od:

    > texteachiffre := proc(expression)
    > local var,resul,element:
    > global nb_lettres:
    > resul := 0:
    > for var to length(expression) do
    > element:=num_lettre[substring(expression,var..var)]:
    > resul := resul+element*(nb_lettres+1)^v ar:
    > od:
    > end:
    > M:=texteachiffre(`bonjour bob`);

    > gene_Prem := proc()
    > local test::integer:
    > test := rand(10^6..10^7)();
    > if(isprime(test))
    > then
    > return test
    > else
    > return(nextprime(test))
    > fi:
    > end:
    >
    > P:=gene_Prem();
    > Q:=gene_Prem();
    >
    > N:=P*Q;
    > PHI:=(P-1)(Q-1);

    > gene_Prem2 := proc(n::integer)
    > local tmp::integer,test::boolean:
    > test := false:
    > while (test=false) do
    > tmp:=rand(10^6..10^7)():
    > test := is(igcd(tmp,n)=1):
    > od:
    > return tmp:
    > end:
    >
    > E:=gene_Prem2(PHI);
    > igcd(E,PHI);
    >
    > igcdex(E,PHI,'D1','V');
    > D1;

    > #C:= M^E mod N;
    >
    > expomodulo:=proc(xx,nn,mm)
    > local x,n,resul:
    > x:=xx mod mm:
    > resul:=1:
    > n:=nn:
    > while n>0 do
    > if type(n,odd) then
    > resul:=resul*x mod mm:
    > n:=n-1:
    > else x:=x*x mod mm:
    > n:=n/2 fi:
    > od:
    > resul:
    > end:

    > C:=expomodulo(M,E,N);

    > m:=expomodulo(C,D1,N);

    > chiffreatexte := proc(nb)
    > local var,liste,s:
    > global nb_lettres:
    > liste := convert(nb,base,nb_lettres+1):
    > s:=seq(lettre[var],var = liste):
    > cat(s):
    > end:
    > chiffreatexte(m);

    merci pour votre aide, ça doit être une erreur débile mais à force d'avoir le nez dedans j'y vois plus rien lol

  3. #3
    gg0
    Animateur Mathématiques

    Re : cryptographie RSA Maple

    Joli copier/coller

Discussions similaires

  1. cryptographie avec maple
    Par vanouchskaya dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 23/03/2008, 13h15
  2. Mathématique et cryptographie RSA
    Par aoc dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 26/01/2008, 18h51
  3. [Maple]Entiers sur maple
    Par FonKy- dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 09/08/2007, 17h55
  4. Démonstration de rsa
    Par Watashi dans le forum Mathématiques du collège et du lycée
    Réponses: 9
    Dernier message: 14/05/2006, 12h39
  5. Rsa
    Par coucouman dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 24/06/2005, 16h48