Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
crypto-attacks — Implementazioni Python di attacchi crittografici e utilità. | Kitploit
Strumenti/GitHubGitHub/jvdsn/crypto-attacks
Strumenti di Crittografia/DecrittografiaCrittografiaCTFPaper e RicercaApprendimento e FormazioneTop in Crittografia n.15Top in Strumenti di Crittografia/Decrittografia n.16
GitHubjvdsn/crypto-attacks

crypto-attacks

Implementazioni Python di attacchi crittografici e utilità.

1.3k144718 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository

Introduzione

Implementazioni Python di attacchi crittografici e utility.

Requisiti

  • SageMath con Python 3.9
  • PyCryptodome

Puoi verificare la versione di Python del tuo SageMath usando il seguente comando:``` $ sage -python --version Python 3.9.0

Se la versione del tuo Python SageMath è precedente alla 3.9.0, alcune funzionalità in alcuni script potrebbero non funzionare.

## Utilizzo
I test unitari si trovano nella directory `test` e possono essere eseguiti tramite il modulo `unittest` o usando `pytest`. Non dovrebbe richiedere molto tempo, forse qualche minuto a seconda della macchina.

Per eseguire un attacco specifico, devi aggiungere il codice al file appropriato prima di eseguirlo.

### Esempio

Ad esempio, vuoi attaccare RSA usando l'attacco Boneh-Durfee, con i seguenti parametri (tratti da [test_rsa.py](https://github.com/jvdsn/crypto-attacks/blob/master/test/test_rsa.py)):```python
N = 88320836926176610260238895174120738360949322009576866758081671082752401596826820274141832913391890604999466444724537056453777218596634375604879123818123658076245218807184443147162102569631427096787406420042132112746340310992380094474893565028303466135529032341382899333117011402408049370805729286122880037249
e = 36224751658507610673165956970793195381480143363550601971796688201449789736497322700382657163240771111376677180786660893671085854060092736865293791299460933460067267613023891500397200389824179925263846148644777638774319680682025117466596019474987378275216579013846855328009375540444176771945272078755317168511

Aggiungi il seguente codice in fondo al file 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 = }")

Poi puoi semplicemente eseguire il file usando Sage. Non importa da dove lo esegui, il percorso Python viene impostato automaticamente (puoi anche richiamare gli attacchi da altri file Python, ma in tal caso dovrai sistemare il percorso Python da solo):```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

I parametri m e t mostrati nel log di output meritano particolare attenzione. Questi parametri sono usati in molti algoritmi reticolari (piccole radici) per regolare la dimensione del reticolo. Concettualmente, m (a volte chiamato k) e t rappresentano il numero di "shifts" usati nel reticolo, che è approssimativamente uguale o proporzionale al numero di righe. Pertanto, aumentare m e t aumenterà la dimensione del reticolo, il che aumenta anche il tempo necessario per eseguire la riduzione reticolare (attualmente usando LLL). D'altra parte, se m e t sono troppo bassi, è possibile che la riduzione reticolare non produca vettori appropriati, sprecando così il tempo dedicato alla riduzione. Dunque, si tratta di un compromesso.

Nella versione attuale del progetto, m deve essere sempre fornito dall'utente (il valore predefinito è 1). t può, in alcuni casi, essere calcolato in base al metodo specifico per piccole radici usato dall'attacco. Tuttavia può comunque essere modificato dall'utente. In generale, ci sono due modi per usare questi tipi di parametri:

  • Implementare un ciclo che parte da m = 1 fino a quando non viene trovata una risposta (esempio sotto). Questo è un approccio semplice, ma rischia di sprecare tempo in calcoli inutili con reticoli troppo piccoli.``` m = 1 while True: res = attack(..., m=m) if res is not None: # The attack succeeded! break m += 1
* Implementa una versione di debug dell'attacco che stai cercando di utilizzare (con risultati noti) e determina il valore di `m` che produce buoni vettori del reticolo. Quindi chiama direttamente il metodo dell'attacco con il valore `m` corretto.


## Attacchi implementati
### Divisore comune approssimato
* [x] [Attacco polinomiale multivariato](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/mp.py) [^acd_mp]
* [x] [Attacco basato sul reticolo ortogonale](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/ol.py) [^acd_ol]
* [x] [Attacco basato sull'approssimazione diofantea simultanea](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/sda.py) [^acd_sda]

### CBC
* [x] [Attacco di bit flipping](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/bit_flipping.py)
* [x] [Attacco di recupero dell'IV](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/iv_recovery.py)
* [x] [Attacco tramite oracolo di padding](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/padding_oracle.py)

### CBC + CBC-MAC
* [x] [Attacco di riuso della chiave (encrypt-and-MAC)](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_and_cbc_mac/eam_key_reuse.py)
* [x] [Attacco di riuso della chiave (encrypt-then-MAC)](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_and_cbc_mac/etm_key_reuse.py)
* [x] [Attacco di riuso della chiave (MAC-then-encrypt)](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_and_cbc_mac/mte_key_reuse.py)

### CBC-MAC
* [x] [Attacco di estensione della lunghezza](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_mac/length_extension.py)
Scarica lo strumento