Skip to content
Snippets Groups Projects
Commit 10e55a2d authored by kexbng6's avatar kexbng6
Browse files

modification README.md (rédaction du rapport du TP)

parent 65298dab
Branches
No related tags found
No related merge requests found
# TP_chacha20
## Consigne pour la compilation et l'exécution du tp
Kevin Bonga, 1ère ISC du soir
\ No newline at end of file
1. make main
2. make chacha_20
3. make run
## Rapport du travail pratique ChaCha 20
-L'opération de base de l'algorithme de ChaCha se nomme le quarter round. Il s'agit d'une phase durant laquelle nous effectuons des calculs sur 4 integers de 32 bits. Ces calculs peuvent se résumer en une série d'additions modulo 2 puissance 32 avec un ou exclusif (XOR) et un "roulement" de bit vers la gauche (vers les bits les plus élevés).
Une série de vector de test sont fournis par la RFC 8439 afin. Cette partie du travail pratique s'est révélée concluante lors de l'exécution de mon code.
-La deuxième partie consiste à travailler sur une matrice qui contrairement à celle du test quarter round contient 16 integers. L'étape 2.2 se nomme ChaCha state et se déroule de la manière suivante: Il faut appliquer le quarter round sur 4 integers de cette matrice 4x4 selon des indices qui seront fournis à la fonction. exemple pour une matrice sur laquelle nous utilisons cette fonction aux indices (1, 5, 9, 13) 0 *a 2 3
4 *b 6 7
8 *c 10 11
12 *d 14 15
Les quarter round seront appliqués sur les nombres désignés par des lettres avec un *
-La troisième et avant dernière étape est appelée The ChaCha20 Block Function. Au cours de celle-ci, la fonction ChaCha block exécute à de multiple reprises le quarter round. Nous devons fournir à la fonction plusieurs input tels qu'une clé 256 bits qui sera traitée comme une concatenation de 8x32 bits de little-endian integers, un nonce de 96 bits qui sera traité comme la concatenation de 3x32 bits de little endian integers et d'un compteur de 32 bits traité comme 32 bit de little endian integer. La fonction retourne 64 octets qui ont l'air aléatoires
Le ChaCha state est initialisé de la manière suivante: les 4 premiers mots sont des constantes 0x61707865, 0x3320646e,
0x79622d32, 0x6b206574, les 8 mots suivants sont pris de la clé de 256 bits en lisant les octets dans l'ordre du little endian. Le douzième mot est un compteur et les 3 derniers mots sont un nonce qui ne doivent absolument pas être répétés pour la même clé.
schéma du bloc:
cccccccc cccccccc cccccccc cccccccc
kkkkkkkk kkkkkkkk kkkkkkkk kkkkkkkk
kkkkkkkk kkkkkkkk kkkkkkkk kkkkkkkk
bbbbbbbb nnnnnnnn nnnnnnnn nnnnnnnn
c=constant k=key b=blockcount n=nonce
Cette fonction exécute 20 tours en alternant entre les tours de colonne et les tours de diagonal. Chaque est constitué de 4 quarter round. A la fin des 20 tours nous ajoutons les mots de l'input original aux mots de l'output et serialisons le résultat en séquençant les mots un par un dans l'ordre du little endian. Il y a malheureusment une erreur de segmentation lorsque j'essaie d'exécuter cette fonction de mon code.
-La dernière partie étudiée dans le cadre de ce travail pratique est l'algorithme d'encryption de ChaCha 20. Il est d'une certaine façon une amélioration de l'algorithme Salsa20 (d'où l'image du répo Gitlab)
ChaCha20 appelle successivement la fonction bloc ChaCha20, avec la même clé et nonce, et avec un compteur de blocs incrémentant successivement
et passé en paramètres. ChaCha20 sérialise ensuite l'état résultant en écrivant les nombres dans l'ordre little-endian, créant un bloc de flux de clés.
La concaténation des blocs de flux de clé des blocs successifs forme un flux de clés. La fonction ChaCha20 effectue alors un ou exclusif (XOR) de cette keystream avec le texte en clair. Alternativement, chaque bloc de flux de clés
peut être XOR avec un bloc de texte en clair avant de procéder à la création du bloc suivant, économisant de la mémoire. Il n'y a aucune exigence pour le
le texte en clair doit être un multiple entier de 512 bits. S'il y a plus keystream du dernier bloc, il sera alors ignoré.
L'output est un message crypté, ou "texte chiffré", de la même longueur.
En ce qui concerne le déchiffrement il s'effectue de la même manière. La fonction de bloc ChaCha20 est utilisé pour étendre la clé dans un flux de clés, qui est XORée avec le texte chiffré restituant ainsi le texte en clair (inspiré du point 2.4 de la RFC 8439)
Cette partie produit également une erreur de segmentation dans mon code
### Kevin Bonga, 1ère ISC du soir
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment