Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
crypto-attacks — Implementaciones en Python de ataques y utilidades criptográficas. | Kitploit
Herramientas/GitHubGitHub/jvdsn/crypto-attacks
Herramientas de Cifrado/DescifradoCriptografíaCTFPapers e InvestigaciónAprendizaje y EducaciónTop en Criptografía #15Top en Herramientas de Cifrado/Descifrado #16
GitHubjvdsn/crypto-attacks

crypto-attacks

Implementaciones en Python de ataques y utilidades criptográficas.

1.3k14787hace 9 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

Introducción

Implementaciones en Python de ataques y utilidades criptográficas.

Requisitos

  • SageMath con Python 3.9
  • PyCryptodome

Puedes comprobar la versión de Python de SageMath con el siguiente comando:``` $ sage -python --version Python 3.9.0

Si la versión de Python de SageMath es anterior a la 3.9.0, algunas funcionalidades de algunos scripts podrían no funcionar.

## Uso
Las pruebas unitarias se encuentran en el directorio `test` y se pueden ejecutar con el módulo `unittest` o con `pytest`. Esto no debería llevar mucho tiempo, quizás unos minutos dependiendo de tu máquina.

Para ejecutar un ataque específico, debes añadir el código al archivo adecuado antes de ejecutarlo.

### Ejemplo

Por ejemplo, quieres atacar RSA usando el ataque Boneh-Durfee, con los siguientes parámetros (tomados de [test_rsa.py](https://github.com/jvdsn/crypto-attacks/blob/master/test/test_rsa.py)):```python
N = 88320836926176610260238895174120738360949322009576866758081671082752401596826820274141832913391890604999466444724537056453777218596634375604879123818123658076245218807184443147162102569631427096787406420042132112746340310992380094474893565028303466135529032341382899333117011402408049370805729286122880037249
e = 36224751658507610673165956970793195381480143363550601971796688201449789736497322700382657163240771111376677180786660893671085854060092736865293791299460933460067267613023891500397200389824179925263846148644777638774319680682025117466596019474987378275216579013846855328009375540444176771945272078755317168511

Añade el siguiente código al final del archivo 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 = }")

Entonces puedes simplemente ejecutar el archivo usando Sage. No importa desde dónde lo ejecutes, la ruta de Python se establece automágicamente (también puedes llamar a los ataques desde otros archivos de Python, pero entonces tendrás que arreglar la ruta de Python tú mismo):```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

Los parámetros m y t que se muestran en el registro de salida merecen especial atención. Estos parámetros se utilizan en muchos algoritmos basados en retículos (raíces pequeñas) para ajustar el tamaño del retículo. Conceptualmente, m (a veces llamado k) y t representan el número de "desplazamientos" utilizados en el retículo, que es aproximadamente igual o proporcional al número de filas. Por lo tanto, aumentar m y t aumentará el tamaño del retículo, lo que también aumenta el tiempo necesario para realizar la reducción del retículo (actualmente usando LLL). Por otro lado, si m y t son demasiado bajos, es posible que la reducción del retículo no produzca los vectores adecuados, desperdiciando así el tiempo invertido en la reducción. Por lo tanto, hay un equilibrio.

En la versión actual del proyecto, m siempre debe ser proporcionado por el usuario (el valor predeterminado es 1). t puede, en algunos casos, calcularse según el método específico de raíces pequeñas utilizado por el ataque. Sin embargo, el usuario aún puede ajustarlo. En general, hay dos formas de usar este tipo de parámetros:

  • Implementar un bucle que comience en m = 1 hasta que se encuentre una respuesta (ejemplo a continuación). Este es un enfoque simple, pero corre el riesgo de perder tiempo en cálculos inútiles con retículos demasiado pequeños.``` m = 1 while True: res = attack(..., m=m) if res is not None: # The attack succeeded! break m += 1
* Implementa una versión de depuración del ataque que intentas usar (con resultados conocidos) y determina el valor de `m` que produce buenos vectores de retículo. Luego llama directamente al método de ataque con el valor de `m` correcto.


## Ataques implementados
### Divisor Común Aproximado
* [x] [Ataque polinómico multivariado](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/mp.py) [^acd_mp]
* [x] [Ataque basado en ortogonalidad](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/ol.py) [^acd_ol]
* [x] [Ataque de aproximación diofántica simultánea](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/sda.py) [^acd_sda]

### CBC
* [x] [Ataque de volteo de bits](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/bit_flipping.py)
* [x] [Ataque de recuperación del IV](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/iv_recovery.py)
* [x] [Ataque de oráculo de relleno](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/padding_oracle.py)

### CBC + CBC-MAC
* [x] [Ataque de reutilización de clave (encrypt-and-MAC)](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_and_cbc_mac/eam_key_reuse.py)
* [x] [Ataque de reutilización de clave (encrypt-then-MAC)](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_and_cbc_mac/etm_key_reuse.py)
* [x] [Ataque de reutilización de clave (MAC-then-encrypt)](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_and_cbc_mac/mte_key_reuse.py)
Descargar herramienta