PLAN
I-PRESENTATION GENERALE
II-IDEE DE BASE (logique derrière la conception de l’algorithme)
III-ALGORITHME (Diagramme, Algorithme, Description)
IV-IMPLEMENTATION ET TEST (Input, Process, Output)
V-FAIBLESSES ET EVOLUTIONS
I-PRESENTATION GENERALE
TWOFISH est un algorithme de chiffrement par bloc développé en1998 par une
équipe de cryptographes dirigée par BRUCE schneier. Il a été conçu pour un
remplacement potentiel pour l’algorithme de chiffrement DES (Data Encryptions
Standard), qui était devenu vulnérable à des attaques cryptanalytiques.
Twofish est un algorithme de chiffrement symétrique qui utilise une clé secrète,
pour chiffrer et déchiffrer les données.
Il a été conçu pour être rapide, sécurisé et flexible, et il est capable de chiffrer des
blocs de données de différentes tailles.
Twofish a été soumis à l’AES (Advanced Encryptions Standard) en 1998, mais il n’a
pas été sélectionné comme gagnant. Cependant, il est toujours considéré comme un
algorithme de chiffrement sécurisé et il est utilisé dans certains produits et
applications de sécurité.
II-IDEE DE BASE : (logique derrière la conception l’algorithme ?)
II-1 OBJECTIFS DE CONCEPTION :
1. Sécurité : Twofish a été conçu pour être sécurise contre les attaques
cryptanalytiques.
2. Efficacité : Twofish a été conçu pour être rapide et efficace en termes de
performances.
3. Flexibilité : Twofish a été conçu pour être adaptable a différents
environnements et applications.
II-2 CONCEPTIO DE BASE :
1. Chiffrement par blocs :
Twofish chiffre les données par blocs de 128 bits.
2. Clé secrète :
Twofish utilise une clé secrète de 128, 192 ou 256 bits.
3. Fonctions de chiffrement :
Twofish utilise des fonctions de chiffrement basées sur les opérations
arithmétiques et des permutations (substitution-permutation).
4. Rounds de chiffrement :
Twofish utilise 16 rounds de chiffrement pour garantir la sécurité.
II-3 MECANISMES DE SECURITE :
1. Confusion et diffusion :
Twofish utilise des mécanismes de confusion et de diffusion pour rendre
difficile la cryptanalyse.
2. Clé de chiffrement :
Twofish utilise une clé de chiffrement pour protéger les données.
3. Vecteur d’initialisation :
Twofish utilise un vecteur d’initialisation pour garantir la sécurité des
données.
Twofish est un algorithme de chiffrement sécurisé, efficace et flexible qui
utilise des mécanismes de confusion et de diffusion pour protéger les
données.
Fonctionnement :
1. Le texte clair est divisé en blocs de 128 bits.
2. Chaque bloc est chiffré à l’aide d’une clé secrète.
3. Le chiffrement se fait en 16 tours, avec des opérations de substitution
et de permutation.
4. Le texte chiffré est obtenu après les 16 tours.
Avantages :
Sécurité élevée grâce à la taille de clé et au nombre de tours.
Rapidité de chiffrement et de déchiffrement.
Flexibilité dans la taille de clé et de bloc.
Inconvénients :
Complexité de l’algorithme.
Nécessité d’une clé secrète pour le chiffrement et le
déchiffrement.
III-ALGORITHME : (Diagramme, Algorithme, Description)
Début :
Paramètres :
Clé de chiffrement :128 bits (16 octets).
Taille du bloc : 128 bits (16 octets).
Nombre de tours : 16.
Etapes de chiffrement :
1. Initialisation :
Divisez la clé de chiffrement en 8 mots de 16 bits : K0, K1, ---, K7.
Initialisez les registres de chiffrement : R0, R1, ---, R15.
2. Tour de chiffrement :
Pour chaque tour (i=0 à 15) :
Calculez les valeurs intermédiaires :
RS = R[i]^K[i]
RT = R[i+1] ^K[i+1]
Appliquez la fonction de déchiffrement :
R[i+2] = (RS+RT) mod2^16
R[i+3] = (RS+RT) mod2^16
Echangez les registres :
R[i] = R[i+2]
R[i+1] = R[i+3]
3. Finalisation :
Calculez la valeur finale :
C = R [15] ^R [7]
Etapes de déchiffrement :
1. Initialisation :
Divisez la clé de chiffrement en 8 mots de 16 bits : K0, K1, ---, K7.
Initialisez les registres de déchiffrement : R0, R1, ---, R15.
2. Tour de chiffrement :
Pour chaque tour (i=15 à 0) :
Calculez les valeurs intermédiaires :
RS = R[i]^K[i]
RT = R[i+1] ^K[i-1]
Appliquez la fonction de déchiffrement :
R[i-2] = (RS+RT) mod2^16
R[i-3] = (RS+RT) mod2^16
Echangez les registres :
R[i] = R[i-2]
R[i-1] = R[i-3]
3. Finalisation :
Calculez la valeur finale :
P = R [0] ^R [0]
Fin.
IV-IMPLEMENTATION ET TEST : (Input, Process, Output)
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#define ROUNDS 16
uint32_t S[4][256]; // S-boxes
uint32_t K[40]; // Subkeys
// Simplified example S-box initialization
void init_s_boxes() {
for (int i = 0; i < 256; i++) {
S[0][i] = i; // Example initialization, not secure
S[1][i] = 255 - i;
S[2][i] = (i * 2) % 256;
S[3][i] = (i * 3) % 256;
}
}
// Simplified example key schedule
void key_schedule(uint8_t *key, int key_len) {
for (int i = 0; i < 40; i++) {
K[i] = 0; // Example initialization, not secure
}
}
// Simplified example Feistel function
uint32_t f(uint32_t x) {
uint8_t b[4];
b[0] = x & 0xFF;
b[1] = (x >> 8) & 0xFF;
b[2] = (x >> 16) & 0xFF;
b[3] = (x >> 24) & 0xFF;
// Example substitution and mixing using S-boxes
uint32_t result = S[0][b[0]] ^ S[1][b[1]] ^ S[2][b[2]] ^ S[3]
[b[3]];
return result;
}
// Simplified example encryption function
void encrypt_block(uint8_t *plaintext, uint8_t *ciphertext) {
uint32_t L = ((uint32_t*)plaintext)[0];
uint32_t R = ((uint32_t*)plaintext)[1];
for (int i = 0; i < ROUNDS; i++) {
uint32_t temp = L ^ f(R ^ K[2*i]) ^ K[2*i+1];
L = R;
R = temp;
}
((uint32_t*)ciphertext)[0] = R;
((uint32_t*)ciphertext)[1] = L;
}
int main() {
uint8_t key[32] = {0}; // 256-bit key
uint8_t plaintext[16] = "my name"; // 128-bit block
uint8_t ciphertext[16];
init_s_boxes();
key_schedule(key, 32);
encrypt_block(plaintext, ciphertext);
printf("Ciphertext: ");
for (int i = 0; i < 16; i++) {
printf("%02x ", ciphertext[i]);
}
printf("\n");
return 0;
}
V-FAIBLESSES ET EVOLUTIONS :
Twofish est un algorithme de chiffrement par blocs qui a été conçu dans les
années 1990. Bien qu’il soit considéré comme sécurisé, il présente certaines
faiblesses et a évolué au fil de temps pour répondre aux nouvelles menaces et aux
progrès de la cryptanalyse.
V.1-FAIBLESSES DE TWOFISH :
Faiblesse contre les attaques par la force brute :
Twofish utilise une clé de 128 bits, ce qui signifie qu’il est vulnérable aux attaques
par force brute si la clé est faible ou si elle est stockée de manière non sécurisé.
Faiblesse contre les attaques par analyse différentielle :
Twofish a été montré vulnérable aux attaques par analyse différentielle qui
consistent à analyser les différences entre les sorties de l’algorithme pour
retrouver la clé.
Faiblesse contre les attaques par canal auxiliaire :
Twofish peut être vulnérable aux attaques par canal auxiliaire, qui consistent à
utiliser des informations sur le temps de calcul ou la consommation d’énergie
pour retrouver la clé.
Complexité d'implémentation :
Structure complexe qui peut mener à des implémentations incorrectes
Difficulté d'optimisation sur certaines plateformes
Performance :
Plus lent que AES sur certaines plateformes
Utilisation plus importante de mémoire que d'autres algorithmes
Cryptanalyse :
Attaque par related-key sur version réduite (pas sur la version complète)
Complexité de la preuve formelle de sécurité.
V.2-EVOLUTIONS DE TWOFISH :
Mise à jour de la taille de la clé :
Pour répondre aux attaques par la force brute, il est recommandé d’utiliser des
clés de taille plus grande, telles que 192 ou 256 bits.
Utilisation de modes de chiffrement plus sécurisés :
Pour répondre aux attaques par analyse différentielle, il est recommandé
d’utiliser des modes de chiffrement plus sécurisés, tels que le mode CBC (Cipher
Block Chaining) ou le mode GCM (Galois/Counter Mode).
Implémentation de contre-mesures contre les attaques par canal auxiliaire :
Pour répondre aux attaques par canal auxiliaire, il est recommandé
d’implémenter des contre-mesures, telles que la mise en œuvre de techniques
de masquage ou de blinding pour empêcher les attaquants de récupérer des
informations sur la clé.
Utilisation actuelle :
Principalement dans des applications spécialisées
Alternative à AES dans certains systèmes
Intégré dans plusieurs bibliothèques cryptographiques
En résumé, bien que Twofish soit considéré comme sécurisé, il
présente certaines faiblesses qui peuvent être exploitées par les attaquants.
Pour répondre à ces faiblesses, il est recommandé de mettre à jour la taille
de la clé, d’utiliser des modes de chiffrement plus sécurisés et d’implémenter des
contre-mesures contre les attaques par canal auxiliaire.