Skip to content

Commit f179758

Browse files
mouwaficbdre-mandyseathiel-12
authored
Hotfix/problèmes globaux (#52)
* Documentation de la fonction d'entropie * Essai de fusion (1/2) * Implementation de la fonction de validation du texte déchiffrer * Récupération du main (1/2) * Mise en place des tests unitaires (1/4) * Revert "Mise en place des tests unitaires (1/4)" This reverts commit e965801. * Mise en place des tests unitaires (1/4) * Définition de la classe de gestion des rapports de ission et implémentatioon de la fonction de génération des rapport de synthèse * Implémentation de la fonction de recherche d'anciens rapports * Mise en place des tests liés à l'analyzer aes cbc * Corrections de typage et de logique * Correction du comportement à la levée de l'exception * Correction de la lgoque de test de test_exception_déchiffrer * Corection de la logique de test_verification_texte_dechiffre * fix: Utilisation de pathlib pour une gestion portable des chemins. * merge réussi * Validation des tests et corrections du rapport mission * chekpoint: Blowfish _Analyzer.identifier_algo() * add: Intiialisation de Blowfish_Analyzer et implémentation de Blowfish_Analyzer.identifier_algo() * Implémentation de Blowfish_Analyzer.filtrer_dictionnaire_par_indice() * Correction de bug * Implementer de Blowfish déchiffrer * Integration de blowfish dans le detecteur crypto * Gestion des bugs de chemin et d'import * Update gitignore * add: Fichier run_tests.py qui run tous les tests et donne le feedback * fix: Standardisation uniforme de tous les imports pour uniformité * tests aes_gcm * fix: Correction de la validation de la taille de clé dans Blowfish_Analyzer pour respecter l'intervalle de 4 à 56 bytes. * fix: Amélioration et uniformisation de la gestion des erreurs pour les différents cas. * fix: Correction des erreurs de logique * merged * test de l'analyzer Fernet * Correction de l'orchestrateur et ajustements correspondants * Lancement du système de stepping pour la progress bar * fix: Corrections mineures * add: Script de test pour les identifier_algo() * add: Script pour afficher les résultats de décryptage * add: Script pour tester les déchiffrer() * fix: Implémentation des méthodes manquantes et correction des bugs * fix: Retrait du fallback poly-1305 pour l'analyzer ChaCha20 * fix: Score de retour des identifier_algo --------- Co-authored-by: e-mandy <andymfrd02@gmail.com> Co-authored-by: Seathiel <ogoudedjimonde@gmail.com>
1 parent 6b08616 commit f179758

File tree

6 files changed

+688
-666
lines changed

6 files changed

+688
-666
lines changed

src/analyzers/aes_cbc_analyzer.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ class Aes_Cbc_Analyzer(CryptoAnalyzer):
2626

2727
def identifier_algo(self, chemin_fichier_chiffre: str) -> float:
2828
'''
29-
Détermine la probabilité que l'algo de chiffrement utilisé soit l'aes cbc en:
29+
Estime la probabilité que le fichier soit chiffré en AES-CBC.
3030
31-
- recherchant l'IV en tête
32-
- vérifiant si le reste du fichier en dehors de l'IV a une taille multiple de 16 octets
33-
- déterminant si l'entropie est assez élevée dans le fichier chiffré (>7.5)
31+
Principes:
32+
- IV attendu en début de fichier (16 octets), suivi des données chiffrées.
33+
- En CBC, le corps (hors IV) est multiple de 16 octets (padding par blocs).
34+
- L'entropie élevée est un indicateur secondaire (faible poids).
35+
- On pénalise un motif typique AES-GCM (nonce 12B + tag 16B + corps non multiple de 16).
3436
3537
Args:
3638
chemin_fichier_chiffre(str): Le chemin du fichier chiffré à traiter (mission1.enc).
@@ -43,6 +45,7 @@ def identifier_algo(self, chemin_fichier_chiffre: str) -> float:
4345
with open(chemin_fichier_chiffre, "rb") as f:
4446
contenu_fichier = f.read()
4547

48+
# Garde simple: impossible d'avoir IV (16B) si le fichier est trop court
4649
if len(contenu_fichier) < 16:
4750
return 0.0
4851

@@ -51,18 +54,19 @@ def identifier_algo(self, chemin_fichier_chiffre: str) -> float:
5154

5255
score: float = 0.0
5356

54-
# CBC: taille des données chiffrées multiple de 16
57+
# CBC: le corps doit être multiple de 16 (car padding par blocs de 16)
5558
if len(corps) % 16 == 0 and len(corps) > 0:
5659
score += 0.55
5760
else:
5861
score -= 0.25
5962

60-
# Entropie globale des données
63+
# Entropie globale des données (indicateur secondaire, on ajoute un bonus léger)
6164
ent = calculer_entropie(corps)
6265
if ent > 7.3:
6366
score += 0.35
6467

65-
# Négatifs structure GCM: nonce 12B au début + tag 16B à la fin et corps non-multiple de 16
68+
# Négatif contre GCM: motif nonce 12B au début + tag 16B à la fin + corps non multiple de 16
69+
# Si ce motif est détecté, cela contredit CBC → forte pénalité
6670
if len(contenu_fichier) >= 28:
6771
from src.utils import calculer_entropie as entf
6872
nonce12 = contenu_fichier[:12]
@@ -73,7 +77,7 @@ def identifier_algo(self, chemin_fichier_chiffre: str) -> float:
7377
):
7478
score -= 0.60
7579

76-
# Clamp [0,1]
80+
# Normalisation: on borne toujours le score dans [0, 1]
7781
if score < 0.0:
7882
score = 0.0
7983
if score > 1.0:

0 commit comments

Comments
 (0)