diff --git a/main.pdf b/main.pdf new file mode 100644 index 0000000..7ee5739 Binary files /dev/null and b/main.pdf differ diff --git a/main.typ b/main.typ index 3a6b909..98fd342 100644 --- a/main.typ +++ b/main.typ @@ -31,7 +31,7 @@ ) = Notes Le code présenté est retrouvable sur #link("ssh://sherbrooke@bigblase.xyz:/srv/git/crypto2")\ -mot de passe: `FDS8EbKiDNoJh2QN`\ +mot de passe : `FDS8EbKiDNoJh2QN`\ Le code a été testé sous linux, kernel 6.5 et librairie à jour (sept 2023), en utilisant gcc 13.2.1. Pour compiler, il faut d'abord créer le dossier _build_ à la racine du projet. @@ -40,15 +40,15 @@ Il _devrait_ être portable (C99, POSIX compliant) #set heading(numbering: "I) a) i)") = Mac insécure -Pour tester le code, il faut exdecuter ```sh make run test= eve=``` -en prennant pour `test`: `ZERO`, `MID`, `MAX`, ou `NAME` (ce qui correspond à un +Pour tester le code, il faut exécuter ```sh make run test= eve=``` +en prenant pour `test`: `ZERO`, `MID`, `MAX`, ou `NAME` (ce qui correspond à un message de `0x00000000`, `0x0000ffff`, `0xffffffff`, et `0x626f62` (qui est -"bob\0" en ASCII) respectivement). Les arguments de `eve` sont les m^emes, +"bob\0" en ASCII) respectivement). Les arguments de `eve` sont les mêmes, et modifient le message et le tag de manière à ce que bob vérifie le mac tag -le message correctement. Si aucun argument de eve n'est spécifié, eve ne fait +le message correctement. Si aucun argument d'Eve n'est spécifié, Eve ne fait rien. -== Eve ne fait rien : traces d'éxécutions +== Eve ne fait rien : traces d'exécutions === ```test=ZERO: --- MSG --- @@ -143,8 +143,8 @@ Ici, le tag est $t$, la clef key est $k$, le message est $m$, et _verifies_ est $v$. == Eve modifie le message et le tag -En faisant tourner n'importe quel test avec un paramètre d'eve, on voit -que le MAC est toujours vérifié pour bob: +En faisant tourner n'importe quel test avec un paramètre d'Eve, on voit +que le MAC est toujours vérifié pour Bob: === ```test=MAX eve=ZERO --- MSG --- @@ -208,29 +208,29 @@ Ainsi, Eve peut intercepter et envoyer un tag qui semble correct à Bob, peu importe le message reçu. On peut faire cela car : $t = m xor k$, et Eve connait $t, m$. Ainsi, le tag $t'$ est correct aux yeux de Bob, où -$t' = m xor m xor k = m xor mac$. +$t' = m xor m xor k = m xor "mac"$. Donc, en introduisant le message $m_e$ de Eve, on a: $t_e &= m_e xor t xor m \ &= m_e xor m xor k xor m \ &= m_e xor k$ -Quand Bob vérifira le message, il verra donc un message correctement taggé. +Quand Bob vérifiera le message, il verra alors un message correctement taggé. Eve peut donc envoyer n'importe quel message traffiqué et vérifiable avec une probabilité de 1, du moment que le message et le tag qu'elle reçoit sont vérifiables. == Pseudo-aléatoire -Soit $F: {0,1}^n cross {0,1}^n -> {0,1}^n$ telle que $F(k, x) = x xor k$. +Soit $F: {0,1}^n times {0,1}^n -> {0,1}^n$ telle que $F(k, x) = x xor k$. En fixant $k in {0,1}^n$, on peut écrire $F(k, .): {0,1}^n -> {0,1}^n$. -Cette fonction est pseudo aliéatoire, car la fonction $F_k$ forme une +Cette fonction est pseudo aléatoire, car la fonction $F_k$ forme une bijection sur ${0,1}^n$: -* surjectice: +* Surjective: $forall x in {0,1}^n, exists y in {0,1}^n | x xor k = y$ C'est évident : il suffit de prendre $y = x xor k$, qui existe - car $xor$ est définit sur ${0,1}^n cross {0,1}^n$ et à valeurs dans ${0,1}^n$ -* injective: + car $xor$ est définit sur ${0,1}^n times {0,1}^n$ et à valeurs dans ${0,1}^n$ +* injective : $forall x, y in {0,1}^n, & F_k(x) &= F_k(y) => x = y$ Supposons qu'on a ces $x,y$. On a alors : $x xor k &= y xor k\ @@ -238,5 +238,51 @@ bijection sur ${0,1}^n$: <=> x &= y $ On a donc ce que l'on voulait. Ainsi, la sortie de $F_k$ est uniformément répartie sur ${0,1}^n$. -Elle est donc pseudo aléatoire car elle donne une sortie autant répartie que +Elle est donc pseudo aléatoire, car elle donne une sortie autant répartie que son entrée. + += RSA +Soit la sortie $(143, 11, 13)$ d’un algorithme *GenModulus*($1111$) pour RSA. + +== $N, P,$ et $q$ +Ici, $N = 143, p = 11, q = 13$. On remarque que $N = p dot q$ + +== $Phi(N)$ +Ici, $Phi(N) = |bb(Z)^*_N| = |bb(Z)/(N bb(Z))| = Phi(p q) = (p-1)(q-1) = 120$ + +La quatrième égalité est valable, car $p$ et $q$ sont premiers. + +== Exposant inverse +On pose $e = 7$. On cherche $d = e^-1$ dans $Z^*_N$. +$ +d = 1 ; d dot e eq.triple 7 [120] \ +d = 2 ; d dot e eq.triple 14 [120] \ +d = 3 ; d dot e eq.triple 21 [120] \ +... \ +d = 99 ; d dot e .eq.triple 93 [120] \ +d = 100 ; d dot e .eq.triple 100 [120] \ +d = 101 ; d dot e .eq.triple 107 [120] \ +d = 102 ; d dot e .eq.triple 114 [120] \ +d = 103 ; d dot e .eq.triple 1 [120] \ +$ + +On voit que $d = 103 eq.triple e^(-1) [N]$ convient. + +== RSA +La clef public est donc le couple $k_(italic("pub") = (7, 143) = (e, N)$, +et la clef privée est le couple $k_(italic("priv") = (103, 143) = (d, N)$ +Pour chiffrer un message $m$, on peut faire $c = m^e % N$, et pour le +déchiffrer, $m = c^d % N$. + +Exemple : + +` +n = 143 +e = 7 +d = 103 +Public key: (7, 143) +Private key: (103, 143) +Original message: 42 +Encrypted message: 81 +Decrypted message: 42 +`