Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
crypto-attacks — Implémentations Python d'attaques cryptographiques et d'utilitaires. | Kitploit
Outils/GitHubGitHub/jvdsn/crypto-attacks
Outils de Chiffrement/DéchiffrementCryptographieCTFArticles et RechercheApprentissage et ÉducationTop en Cryptographie n°15Top en Outils de Chiffrement/Déchiffrement n°16
GitHubjvdsn/crypto-attacks

crypto-attacks

Implémentations Python d'attaques cryptographiques et d'utilitaires.

1.3k14470il y a 8 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

Introduction

Implémentations Python d'attaques et d'utilitaires cryptographiques.

Prérequis

  • SageMath avec Python 3.9
  • PyCryptodome

Vous pouvez vérifier la version Python de SageMath à l'aide de la commande suivante :``` $ sage -python --version Python 3.9.0

Si votre version Python de SageMath est antérieure à 3.9.0, certaines fonctionnalités de certains scripts pourraient ne pas fonctionner.

## Utilisation
Les tests unitaires se trouvent dans le répertoire `test` et peuvent être exécutés à l’aide du module `unittest` ou de `pytest`. Cela ne devrait pas prendre très longtemps, peut-être quelques minutes selon votre machine.

Pour exécuter une attaque spécifique, vous devez ajouter le code au fichier approprié avant de l’exécuter.

### Exemple

Par exemple, vous souhaitez attaquer RSA à l’aide de l’attaque Boneh-Durfee, avec les paramètres suivants (tirés de [test_rsa.py](https://github.com/jvdsn/crypto-attacks/blob/master/test/test_rsa.py)) :```python
N = 88320836926176610260238895174120738360949322009576866758081671082752401596826820274141832913391890604999466444724537056453777218596634375604879123818123658076245218807184443147162102569631427096787406420042132112746340310992380094474893565028303466135529032341382899333117011402408049370805729286122880037249
e = 36224751658507610673165956970793195381480143363550601971796688201449789736497322700382657163240771111376677180786660893671085854060092736865293791299460933460067267613023891500397200389824179925263846148644777638774319680682025117466596019474987378275216579013846855328009375540444176771945272078755317168511

Vous ajoutez le code suivant en bas du fichier boneh_durfee.py :```python import logging

Some logging so we can see what's happening.

logging.basicConfig(level=logging.DEBUG)

N = 88320836926176610260238895174120738360949322009576866758081671082752401596826820274141832913391890604999466444724537056453777218596634375604879123818123658076245218807184443147162102569631427096787406420042132112746340310992380094474893565028303466135529032341382899333117011402408049370805729286122880037249 e = 36224751658507610673165956970793195381480143363550601971796688201449789736497322700382657163240771111376677180786660893671085854060092736865293791299460933460067267613023891500397200389824179925263846148644777638774319680682025117466596019474987378275216579013846855328009375540444176771945272078755317168511 p_bits = 512 delta = 0.26

p, q = attack(N, e, p_bits, delta=delta, m=3) assert p * q == N print(f"Found {p = } and {q = }")

Ensuite, vous pouvez simplement exécuter le fichier avec Sage. Peu importe d'où vous l'exécutez, le chemin Python est automatiquement défini (vous pouvez également appeler les attaques depuis d'autres fichiers Python, mais dans ce cas, vous devrez corriger le chemin Python vous-même) :```commandline
[crypto-attacks]$ sage -python attacks/rsa/boneh_durfee.py
INFO:root:Trying m = 3, t = 1...
DEBUG:root:Generating shifts...
DEBUG:root:Creating a lattice with 11 shifts (order = 'invlex', sort_shifts_reverse = False, sort_monomials_reverse = False)...
DEBUG:root:Reducing a 11 x 11 lattice...
DEBUG:root:Reconstructing polynomials (divide_original = True, modulus_bound = False, divide_gcd = True)...
DEBUG:root:Polynomial at row 8 is constant, ignoring...
DEBUG:root:Reconstructed polynomial has gcd 1312232632720549890113031660369306919929075823824696839212183146130434668203517349691252841557097914064120078389640402109017308806168467714230057403815071456395553717020189622129706447677967264344568789118172311850383406340547579993263937406518074980025897726255316031512238322022839331135299265704052474541497687419350763703993630899191179705015113329644753599872380152055902238937889027950089072598069861391599563222633064848996619752054685734260976071760984100109990150069201501748622288840900421607423175114026653242500476408861976142751384898489130281755466581359057847077651502734556259387442296763474369957121 with polynomial at 8, dividing...
DEBUG:root:Reconstructed 10 polynomials
DEBUG:root:Computing pairwise gcds to find trivial roots...
DEBUG:root:Using Groebner basis method to find roots...
DEBUG:root:Sequence length: 10, Groebner basis length: 1
DEBUG:root:Sequence length: 9, Groebner basis length: 1
DEBUG:root:Sequence length: 8, Groebner basis length: 1
DEBUG:root:Sequence length: 7, Groebner basis length: 2
DEBUG:root:Found Groebner basis with length 2, trying to find roots...
Found p = 7866790440964395011005623971351568677139336343167390105188826934257986271072664643571727955882500173182140478082778193338086048035817634545367411924942763 and q = 11227048386374621771175649743442169526805922745751610531569607663416378302561807690656370394330458335919244239976798600743588701676542461805061598571009923

Les paramètres m et t tels qu'affichés dans le journal de sortie méritent une attention particulière. Ces paramètres sont utilisés dans de nombreux algorithmes à base de réseaux (petites racines) pour ajuster la taille du réseau. Conceptuellement, m (parfois appelé k) et t représentent le nombre de « décalages » utilisés dans le réseau, ce qui est à peu près égal ou proportionnel au nombre de lignes. Par conséquent, augmenter m et t augmentera la taille du réseau, ce qui augmente également le temps nécessaire pour effectuer la réduction du réseau (actuellement en utilisant LLL). D'un autre côté, si m et t sont trop faibles, il est possible que la réduction du réseau ne produise pas des vecteurs appropriés, gaspillant ainsi le temps passé à réduire. Il s'agit donc d'un compromis.

Dans la version actuelle du projet, m doit toujours être fourni par l'utilisateur (la valeur par défaut est définie sur 1). t peut, dans certains cas, être calculé en fonction de la méthode spécifique des petites racines utilisée par l'attaque. Cependant, il peut toujours être ajusté par l'utilisateur. En général, il existe deux façons d'utiliser ce type de paramètres :

  • Implémenter une boucle qui commence à m = 1 jusqu'à ce qu'une réponse soit trouvée (exemple ci-dessous). C'est une approche simple, mais elle risque de perdre du temps dans des calculs inutiles avec des réseaux trop petits.``` m = 1 while True: res = attack(..., m=m) if res is not None: # The attack succeeded! break m += 1
* Implémentez une version de débogage de l'attaque que vous essayez d'utiliser (avec des résultats connus), puis déterminez la valeur `m` qui produit de bons vecteurs de réseau. Appelez ensuite directement la méthode d'attaque avec la valeur `m` correcte.


## Attaques implémentées
### Diviseur commun approché
* [x] [Attaque par polynômes multivariés](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/mp.py) [^acd_mp]
* [x] [Attaque basée sur l'orthogonalité](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/ol.py) [^acd_ol]
* [x] [Attaque par approximation diophantienne simultanée](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/sda.py) [^acd_sda]

### CBC
* [x] [Attaque par retournement de bits](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/bit_flipping.py)
* [x] [Attaque de récupération de l'IV](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/iv_recovery.py)
* [x] [Attaque par oracle de bourrage](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/padding_oracle.py)
Télécharger l’outil