Найти в Дзене

AES-шифрование для Python: защита кода и безопасный "exec": шифруем Python-файлы и выполняем их без раскрытия исходника

Метод криптографической обфускации Python кода с AES-256 (AES‑GCM). Недавно пришлось делиться своим мнением о том, как защитить свой код на python от копирования и несанкционированного использования. Поскольку PY-код распространяется в виде открытого текста, то его не проблема просто скопировать и что угодно в нем изменить. Метод подобного сокрытия исходного кода часто применяется в "некоторых органах". Примечание: материал предназначен для технических специалистов! Если вы к ним не относитесь, просто закройте страницу. Как защитить такой код от копирования чужими? Привожу свой метод защиты PY-кода. Объяснять не буду, поскольку это материал для специалистов и "тех кто в теме". Ну, в общем, все на GitHub: https://github.com/Nestorchik/py_crypter Что важно При шифровании Python-кода с AES-256-GCM: То есть, 4 КБ исходного кода или 4 МБ — с точки зрения криптостойкости разницы нет, если ключ неизвестен. Расчёт сложности взлома AES-256 использует 256-битный ключ. Возможное число ключей: Пр

Метод криптографической обфускации Python кода с AES-256 (AES‑GCM). Недавно пришлось делиться своим мнением о том, как защитить свой код на python от копирования и несанкционированного использования. Поскольку PY-код распространяется в виде открытого текста, то его не проблема просто скопировать и что угодно в нем изменить. Метод подобного сокрытия исходного кода часто применяется в "некоторых органах".

Примечание: материал предназначен для технических специалистов! Если вы к ним не относитесь, просто закройте страницу.

Как защитить такой код от копирования чужими? Привожу свой метод защиты PY-кода. Объяснять не буду, поскольку это материал для специалистов и "тех кто в теме". Ну, в общем, все на GitHub: https://github.com/Nestorchik/py_crypter

GitHub - Nestorchik/py_crypter: "Криптер + Загрузчик" AES-256 кода на Python

Пояснения к AES-256 (AES-GCM)

Что важно

При шифровании Python-кода с AES-256-GCM:

  • AES-256 — симметричный блоковый шифр.
  • Ключ фиксированной длины 32 байта (256 бит).
  • Длина исходного файла не влияет на сложность подбора ключа, она влияет только на время самого дешифрования, а не на взлом методом брутфорса.

То есть, 4 КБ исходного кода или 4 МБ — с точки зрения криптостойкости разницы нет, если ключ неизвестен.

Расчёт сложности взлома

AES-256 использует 256-битный ключ. Возможное число ключей:

  • 2^256 ≈ 1.16 × 10^77

При скорости проверки 10^12 ключей в секунду (тридцать лет на суперкомпьютере — сильно завышенная скорость), время будет астрономическим.

Пример грубой оценки:

2^256 / 10^12 секунд ≈ 3.67 × 10^57 лет

Это много больше возраста Вселенной (~13.8 млрд лет).

Вывод: подбор ключа «в лоб» невозможен для любого практического сценария, даже если ключ 32 байта, даже если исходный файл маленький.

Что реально влияет на безопасность

  1. Пароль/ключ для PBKDF2
    Если используется пароль человека (например, «123456») — подбить реально.
    PBKDF2 с 200 000 итераций замедляет перебор, но слабый пароль ломается за секунды/минуты.
  2. "Соль" и случайность
    "
    Соль" уникальна для каждого файла — нельзя использовать предвычисленные таблицы.
  3. AES сам по себе
    Ключ 32 байта = 256 бит → взломать методом перебора невозможно.

4. Влияние размера исходного файла (например, 4 КБ)

  • AES-GCM расшифровывает несколько МБ в миллисекунды на обычном процессоре.
  • Для 4 КБ времени на дешифровку практически нет — доли миллисекунды.
  • С точки зрения безопасности, размер файла почти не имеет значения.

К чему пришли

  • 4 КБ Python-файла + AES-256-GCM → время взлома методом перебора ключа астрономическое (10^57 лет).
  • Практическая уязвимость — это слабый пароль, а не размер файла.
  • Реальное время расшифровки при известном ключе — миллисекунды, независимо от 4 КБ или 4 МБ длины ключа.

NStor

Обложка статьи
Обложка статьи