Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
crypto-attacks — Реализации криптографических атак и утилит на Python. | Kitploit
Инструменты/GitHubGitHub/jvdsn/crypto-attacks
Инструменты шифрования/дешифрованияКриптографияCTFСтатьи и ИсследованияОбучение и ОбразованиеТоп в Криптография №15Топ в Инструменты шифрования/дешифрования №16
GitHubjvdsn/crypto-attacks

crypto-attacks

Реализации криптографических атак и утилит на Python.

1.3k144708 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

Введение

Реализации криптографических атак и утилит на Python.

Требования

  • SageMath с Python 3.9
  • PyCryptodome

Вы можете проверить версию Python в SageMath с помощью следующей команды:``` $ sage -python --version Python 3.9.0

Если ваша версия Python в SageMath старее 3.9.0, некоторые функции в некоторых скриптах могут не работать.

## Использование
Модульные тесты находятся в каталоге `test` и могут быть запущены с помощью модуля `unittest` или `pytest`. Это не должно занять много времени, возможно, несколько минут в зависимости от вашего компьютера.

Чтобы запустить конкретную атаку, необходимо добавить код в соответствующий файл перед его выполнением.

### Пример

Например, вы хотите атаковать RSA с помощью атаки Boneh-Durfee, используя следующие параметры (взято из [test_rsa.py](https://github.com/jvdsn/crypto-attacks/blob/master/test/test_rsa.py)):```python
N = 88320836926176610260238895174120738360949322009576866758081671082752401596826820274141832913391890604999466444724537056453777218596634375604879123818123658076245218807184443147162102569631427096787406420042132112746340310992380094474893565028303466135529032341382899333117011402408049370805729286122880037249
e = 36224751658507610673165956970793195381480143363550601971796688201449789736497322700382657163240771111376677180786660893671085854060092736865293791299460933460067267613023891500397200389824179925263846148644777638774319680682025117466596019474987378275216579013846855328009375540444176771945272078755317168511

Вы добавляете следующий код в конец файла 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 = }")

Затем вы можете просто выполнить файл с помощью Sage. Не имеет значения, откуда вы его выполняете, путь Python устанавливается автоматически (вы также можете вызывать атаки из других Python-файлов, но тогда вам придётся исправить путь Python самостоятельно):```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

Параметры m и t, показанные в журнале вывода, заслуживают особого внимания. Эти параметры используются во многих алгоритмах на основе решёток (малых корней) для настройки размера решётки. Концептуально m (иногда называемый k) и t представляют количество «сдвигов», используемых в решётке, которое примерно равно или пропорционально количеству строк. Поэтому увеличение m и t увеличит размер решётки, что также увеличивает время, необходимое для выполнения редукции решётки (в настоящее время используется LLL). С другой стороны, если m и t слишком малы, возможно, что редукция решётки не приведёт к подходящим векторам, поэтому время, затраченное на редукцию, будет потрачено впустую. Следовательно, это компромисс.

В текущей версии проекта m всегда должен указываться пользователем (значение по умолчанию установлено на 1). t в некоторых случаях может быть вычислено на основе конкретного метода малых корней, используемого атакой. Тем не менее, пользователь всё ещё может его подстроить. В общем, есть два способа использования таких параметров:

  • Реализовать цикл, который начинается с m = 1 и продолжается до тех пор, пока не будет найден ответ (пример ниже). Это простой подход, но есть риск потратить время на бесполезные вычисления со слишком малыми решётками.``` m = 1 while True: res = attack(..., m=m) if res is not None: # The attack succeeded! break m += 1
* Реализуйте отладочную версию атаки, которую вы пытаетесь применить (с известными результатами), и определите значение `m`, которое даёт хорошие векторы решётки. Затем напрямую вызовите метод атаки с правильным значением `m`.


## Реализованные атаки
### Приближённый общий делитель
* [x] [Мультивариантная полиномиальная атака](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/mp.py) [^acd_mp]
* [x] [Атака на основе ортогональных векторов](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/ol.py) [^acd_ol]
* [x] [Атака на основе совместной диофантовой аппроксимации](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/acd/sda.py) [^acd_sda]

### CBC
* [x] [Атака с переворотом битов](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/bit_flipping.py)
* [x] [Атака восстановления IV](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/iv_recovery.py)
* [x] [Атака на оракул дополнения](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc/padding_oracle.py)

### CBC + CBC-MAC
* [x] [Атака повторного использования ключа (encrypt-and-MAC)](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_and_cbc_mac/eam_key_reuse.py)
* [x] [Атака повторного использования ключа (encrypt-then-MAC)](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_and_cbc_mac/etm_key_reuse.py)
* [x] [Атака повторного использования ключа (MAC-then-encrypt)](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_and_cbc_mac/mte_key_reuse.py)

### CBC-MAC
* [x] [Атака расширения длины](https://github.com/jvdsn/crypto-attacks/blob/master/attacks/cbc_mac/length_extension.py)
Скачать инструмент