Cryptographie symétrique

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
gally
Membre Naturel
Messages: 26
Enregistré le: 09 Mai 2012, 16:45

Cryptographie symétrique

par gally » 28 Mai 2012, 10:31

Bonjour,
Je suis un peu perdu pour faire cet exercice : http://www.math.u-bordeaux1.fr/~cbachocb/Enseignements/CodesCryptoL1/TD5.pdf
Je pense savoir comment faire les trois opérations mais je ne sais pas quoi faire.
Est-ce que je dois prendre le message m et lui ajouter K1 puis multiplier le résultat par K2 mod 2^16 puis multiplier par K3 mod 2^16 puis multiplier par K4 mod 2^16 + 1 etc..? mais dans ce cas je ne prendrais pas en compte les autres signes sur le circuit entre les K ?
Merci d'avance
Cordialement
Gally



wserdx
Membre Rationnel
Messages: 654
Enregistré le: 03 Oct 2009, 13:44

par wserdx » 28 Mai 2012, 11:37

Bonjour,
je pense que tu devrais regarder plus en détail la définition du vrai IDEA.
Dans ton mini-idea, tu as 4 "fils" d'entrée et 4 "fils" de sortie. Il faut voir chaque fil comme un "pipe-line" qui manipule un "mot" soit ici 4 bits.
La première opération est donc de découper le message en 4 mots de 4 bits chacun selon une convention "naturelle" qui n'est pas définie dans ton exercice mais que tu peux raisonnablement calquer sur la méthode du vrai IDEA, à savoir les 4 bits de gauche dans le premier fil et ainsi de suite.
En sortie, tu recomposes le message en regroupant les 4 mots de 4 bits en un seul de 16.

gally
Membre Naturel
Messages: 26
Enregistré le: 09 Mai 2012, 16:45

par gally » 28 Mai 2012, 18:07

wserdx a écrit:Bonjour,
je pense que tu devrais regarder plus en détail la définition du vrai IDEA.
Dans ton mini-idea, tu as 4 "fils" d'entrée et 4 "fils" de sortie. Il faut voir chaque fil comme un "pipe-line" qui manipule un "mot" soit ici 4 bits.
La première opération est donc de découper le message en 4 mots de 4 bits chacun selon une convention "naturelle" qui n'est pas définie dans ton exercice mais que tu peux raisonnablement calquer sur la méthode du vrai IDEA, à savoir les 4 bits de gauche dans le premier fil et ainsi de suite.
En sortie, tu recomposes le message en regroupant les 4 mots de 4 bits en un seul de 16.


Ok merci, je n'ai rien sur mon cours mais sur wikipedia j'ai réussi à voir comment ca se déroulait : http://fr.wikipedia.org/wiki/International_Data_Encryption_Algorithm
Par contre j'ai m=1000010000111001 donc ce qu'ils appellent x1, x2, x3 x4 correspond aux 4 mots de 4 bits ? j'ai donc x1=1000 x2=0100 x3=0011 x4=1001 ? et quand ils parlent de première sous clef ça correspond à K1 c'est ça?

Merci d'avance

wserdx
Membre Rationnel
Messages: 654
Enregistré le: 03 Oct 2009, 13:44

par wserdx » 28 Mai 2012, 18:16

Oui, a priori. On fait pareil que dans un vrai IDEA aux différences suivantes:
on ne fait qu'une seule ronde, les mots font 4 bits au lieu de 16, les opérations sont adaptées en conséquence.

wserdx
Membre Rationnel
Messages: 654
Enregistré le: 03 Oct 2009, 13:44

par wserdx » 28 Mai 2012, 19:26

script magma à utiliser sur le site
magma
sans garantie de ma part :lol3:


m := "1000010000111001";

X1 := StringToInteger(Substring(m,1,4),2);
X2 := StringToInteger(Substring(m,5,4),2);
X3 := StringToInteger(Substring(m,9,4),2);
X4 := StringToInteger(Substring(m,13,4),2);

K1 := StringToInteger("0110",2);
K2 := StringToInteger("0111",2);
K3 := StringToInteger("1010",2);
K4 := StringToInteger("0000",2);
K5 := StringToInteger("0001",2);
K6 := StringToInteger("0010",2);

add_4:=function(a,b);
return (a+b) mod 2^4;
end function;

mult_4:=function(a,b);
if a eq 0 then a:=2^4; end if;
if b eq 0 then b:=2^4; end if;
c:= (a*b) mod (2^4+1);
if c eq 0 then c:=2^4; end if;
return c;
end function;

BoolToInt:=function(b);
if b then return 1;
else return 0;
end if;
end function;

IntToBool:=function(a);
return a eq 1;
end function;

xor_4:=function(a,b);
return Seqint([ BoolToInt(IntToBool(Intseq(a+2^4,2)[i]) xor IntToBool(Intseq(b+2^4,2)[i])): i in [1..4]],2);
end function;


// multipliez X1 et la première sous-clef ;
Y1:=mult_4(X1,K1);
// additionnez X2 et la deuxième sous-clef ;
Y2:=add_4(X2,K2);
// additionnez X3 et la troisième sous-clef ;
Y3:=add_4(X3,K3);
// multipliez X4 et la quatrième sous-clef ;
Y4:=mult_4(X4,K4);
// combinez par OU exclusif les résultats des étapes (1) et (3) ;
Y5:=xor_4(Y1,Y3);
// combinez par OU exclusif les résultats des étapes (2) et (4) ;
Y6:=xor_4(Y2,Y4);
// multipliez le résultat de l'étape (5) avec la cinquième sous-clef ;
Y7:=mult_4(Y5,K5);
// additionnez les résultats des étapes (6) et (7) ;
Y8:=add_4(Y6,Y7);
// multipliez le résultat de l'étape (8) par la sixième sous-clef ;
Y9:=mult_4(Y8,K6);
// additionnez les résultats des étapes (7) et (9) ;
Y10:=add_4(Y7,Y9);
// combinez par OU exclusif les résultats des étapes (1) et (9) ;
Y11:=xor_4(Y1,Y9);
// combinez par OU exclusif les résultats des étapes (3) et (9) ;
Y12:=xor_4(Y3,Y9);
// combinez par OU exclusif les résultats des étapes (2) et (10) ;
Y13:=xor_4(Y2,Y10);
// combinez par OU exclusif les résultats des étapes (4) et (10).
Y14:=xor_4(Y4,Y10);

string_4:=function(a);
s:=IntegerToString(a,2);
return "0"^(4-#s) cat s;
end function;
//La sortie de la ronde est constituée des 4 sous-blocs produits par les étapes (11), (13), (12) et (14)
mm:=string_4(Y11) cat string_4(Y13) cat string_4(Y12) cat string_4(Y14);

mm;

gally
Membre Naturel
Messages: 26
Enregistré le: 09 Mai 2012, 16:45

par gally » 28 Mai 2012, 21:48

wserdx a écrit:script magma à utiliser sur le site
magma
sans garantie de ma part :lol3:


m := "1000010000111001";

X1 := StringToInteger(Substring(m,1,4),2);
X2 := StringToInteger(Substring(m,5,4),2);
X3 := StringToInteger(Substring(m,9,4),2);
X4 := StringToInteger(Substring(m,13,4),2);

K1 := StringToInteger("0110",2);
K2 := StringToInteger("0111",2);
K3 := StringToInteger("1010",2);
K4 := StringToInteger("0000",2);
K5 := StringToInteger("0001",2);
K6 := StringToInteger("0010",2);

add_4:=function(a,b);
return (a+b) mod 2^4;
end function;

mult_4:=function(a,b);
if a eq 0 then a:=2^4; end if;
if b eq 0 then b:=2^4; end if;
c:= (a*b) mod (2^4+1);
if c eq 0 then c:=2^4; end if;
return c;
end function;

BoolToInt:=function(b);
if b then return 1;
else return 0;
end if;
end function;

IntToBool:=function(a);
return a eq 1;
end function;

xor_4:=function(a,b);
return Seqint([ BoolToInt(IntToBool(Intseq(a+2^4,2)[i]) xor IntToBool(Intseq(b+2^4,2)[i])): i in [1..4]],2);
end function;


// multipliez X1 et la première sous-clef ;
Y1:=mult_4(X1,K1);
// additionnez X2 et la deuxième sous-clef ;
Y2:=add_4(X2,K2);
// additionnez X3 et la troisième sous-clef ;
Y3:=add_4(X3,K3);
// multipliez X4 et la quatrième sous-clef ;
Y4:=mult_4(X4,K4);
// combinez par OU exclusif les résultats des étapes (1) et (3) ;
Y5:=xor_4(Y1,Y3);
// combinez par OU exclusif les résultats des étapes (2) et (4) ;
Y6:=xor_4(Y2,Y4);
// multipliez le résultat de l'étape (5) avec la cinquième sous-clef ;
Y7:=mult_4(Y5,K5);
// additionnez les résultats des étapes (6) et (7) ;
Y8:=add_4(Y6,Y7);
// multipliez le résultat de l'étape (8) par la sixième sous-clef ;
Y9:=mult_4(Y8,K6);
// additionnez les résultats des étapes (7) et (9) ;
Y10:=add_4(Y7,Y9);
// combinez par OU exclusif les résultats des étapes (1) et (9) ;
Y11:=xor_4(Y1,Y9);
// combinez par OU exclusif les résultats des étapes (3) et (9) ;
Y12:=xor_4(Y3,Y9);
// combinez par OU exclusif les résultats des étapes (2) et (10) ;
Y13:=xor_4(Y2,Y10);
// combinez par OU exclusif les résultats des étapes (4) et (10).
Y14:=xor_4(Y4,Y10);

string_4:=function(a);
s:=IntegerToString(a,2);
return "0"^(4-#s) cat s;
end function;
//La sortie de la ronde est constituée des 4 sous-blocs produits par les étapes (11), (13), (12) et (14)
mm:=string_4(Y11) cat string_4(Y13) cat string_4(Y12) cat string_4(Y14);

mm;


Je ne suis que en première année de licence de mathématiques - informatique, on ne fait que de la théorie, on n'a jamais accès aux ordinateurs en cryptologie. Je vais essayer de faire toute les étapes correspondant à une ronde d'après Wikipédia et envoyer le résultat à celui chargé de mes td. Sinon quand je met tout ce que vous avez écrit dans la case du lien du site magma, ca ne m'affiche rien dans la case du résultat. Ça ne devrait pas m'afficher m chiffré ?
Merci d'avance

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 77 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite