Криптография, сгенерированная ИИ: где кроются уязвимости?

Автор: Денис Аветисян


Новое исследование показывает, что код для криптографических операций, созданный большими языковыми моделями, часто содержит ошибки безопасности, требующие специальных инструментов для обнаружения.

🚀 Квантовые новости

Подключайся к потоку квантовых мемов, теорий и откровений из параллельной вселенной.
Только сингулярные инсайты — никакой скуки.

Присоединиться к каналу
Успешность компиляции двух алгоритмов оценивалась с помощью трех больших языковых моделей, при этом использование четырех различных стратегий запросов продемонстрировало вариативность в достижении желаемого результата.
Успешность компиляции двух алгоритмов оценивалась с помощью трех больших языковых моделей, при этом использование четырех различных стратегий запросов продемонстрировало вариативность в достижении желаемого результата.

Эмпирическая оценка безопасности криптографического Rust-кода, сгенерированного большими языковыми моделями, выявила уязвимости и зависимость от методов проектирования запросов.

Несмотря на растущую популярность больших языковых моделей (LLM) в разработке программного обеспечения, надежность генерируемого ими кода, особенно в критически важных областях, остается под вопросом. В данной работе, посвященной эмпирической оценке безопасности LLM-генерируемого криптографического Rust-кода (‘An Empirical Security Evaluation of LLM-Generated Cryptographic Rust Code’), показано, что сгенерированный код часто содержит уязвимости, требующие специализированных инструментов для обнаружения. Анализ 240 образцов кода, предназначенных для реализации алгоритмов AES-{256}-GCM и ChaCha20-Poly1305, выявил, что лишь 23.3% компилируются успешно, а более половины скомпилированного кода содержат уязвимости. Какие стратегии разработки и анализа необходимы для обеспечения безопасности программного обеспечения, генерируемого LLM, и сможет ли специализированный анализ эффективно нивелировать риски, связанные с использованием этих технологий?


Криптографическая Уязвимость в Эпоху Искусственного Интеллекта

Современная криптография, лежащая в основе цифровой безопасности, опирается на такие принципы, как аутентифицированное шифрование. Этот подход, сочетающий конфиденциальность, целостность и аутентичность данных, обеспечивает защиту от несанкционированного доступа, модификации и подделки. В основе аутентифицированного шифрования лежит использование криптографических алгоритмов и протоколов, таких как AES-GCM или ChaCha20-Poly1305, которые гарантируют, что данные не только зашифрованы, но и защищены от изменений в процессе передачи или хранения. Без надежной криптографии функционирование современной цифровой инфраструктуры — от онлайн-банкинга и электронной коммерции до защищенной связи и облачных вычислений — было бы невозможно. Именно поэтому постоянное совершенствование и анализ криптографических методов остаются критически важными для поддержания безопасности в постоянно меняющемся цифровом ландшафте.

Несмотря на кажущуюся надёжность современных криптографических реализаций, они подвержены критическим уязвимостям, таким как повторное использование одноразовых чисел (nonce reuse) и внедрение жёстко заданных секретов в код (hardcoded secrets) . Повторное использование nonce в шифровании позволяет злоумышленникам восстановить исходный текст, даже если алгоритм сам по себе устойчив. Внедрение секретных ключей непосредственно в исходный код, вместо использования безопасных хранилищ, делает их уязвимыми для обнаружения путём реверс-инжиниринга или анализа кода. Эти ошибки, кажущиеся незначительными на первый взгляд, могут полностью скомпрометировать безопасность систем, использующих эти криптографические механизмы, подчёркивая важность тщательного аудита и автоматизированного анализа кода.

В связи с растущей популярностью и внедрением искусственного интеллекта в процесс разработки программного обеспечения, возникает острая необходимость в надежном автоматизированном анализе безопасности. Использование ИИ для генерации кода, хотя и повышает производительность, создает новые риски, поскольку автоматически созданный код может содержать уязвимости, которые трудно обнаружить традиционными методами. Эффективный автоматизированный анализ позволяет оперативно выявлять и устранять потенциальные недостатки в безопасности, обеспечивая надежность и защиту цифровых систем, особенно в контексте все более сложных и взаимосвязанных технологических ландшафтов. Отсутствие такой автоматизации может привести к серьезным последствиям, включая утечки данных и компрометацию систем.

Существующие инструменты статического и динамического анализа кода, несмотря на свою эффективность в выявлении распространенных уязвимостей, часто оказываются неспособными обнаружить тонкие и сложные недостатки в криптографических реализациях. Это связано с тем, что современные атаки все чаще используют неявные ошибки в логике, а также эксплуатируют взаимодействие различных компонентов системы. Неспособность выявить такие уязвимости, особенно в контексте растущего объема кода, генерируемого искусственным интеллектом, создает серьезную угрозу для безопасности цифровых систем. В связи с этим, появляется острая необходимость в разработке и внедрении более совершенных методов обнаружения, использующих, например, символьное выполнение, фаззинг с использованием генеративных моделей и машинное обучение для выявления аномалий в поведении криптографических алгоритмов.

Автоматизация Криптографии: Новый Подход на Основе Искусственного Интеллекта

Большие языковые модели (LLM) предоставляют новый подход к автоматизации создания криптографического кода посредством инженерии запросов (Prompt Engineering). Вместо традиционного ручного кодирования, LLM могут генерировать код на основе текстовых инструкций, определяющих требуемую функциональность и параметры. Этот метод позволяет автоматизировать разработку криптографических алгоритмов и протоколов, снижая трудозатраты и потенциальные ошибки, связанные с ручным написанием кода. Эффективность данного подхода напрямую зависит от качества и точности сформулированных запросов, а также от способности LLM интерпретировать эти запросы и генерировать корректный и безопасный код. В частности, возможность генерации кода для таких алгоритмов, как AES и ChaCha20, открывает перспективы для автоматизации создания криптографических библиотек и приложений.

Для управления процессом генерации кода большими языковыми моделями (LLM) применяются различные стратегии промптинга. Zero-Shot Prompting предполагает запрос кода напрямую, без предоставления примеров. Constraint-Based Prompting включает в промпт конкретные ограничения и требования к генерируемому коду, такие как использование определенных функций или следование конкретным стандартам кодирования. Chain-of-Thought Prompting стимулирует LLM к последовательному рассуждению и объяснению шагов решения задачи, что способствует генерации более корректного и функционального кода, особенно для сложных алгоритмов. Комбинирование этих стратегий позволяет повысить точность и надежность генерируемого кода, направляя LLM к созданию работающих решений.

Использование языка Rust обусловлено его встроенными механизмами обеспечения безопасности памяти. В отличие от языков, таких как C или C++, Rust предотвращает распространенные ошибки, связанные с управлением памятью, такие как переполнение буфера, использование указателей после освобождения и гонки данных, на этапе компиляции. Это достигается благодаря системе владения (ownership), заимствования (borrowing) и времени жизни (lifetimes), которые гарантируют, что память используется безопасно и эффективно без необходимости ручного управления памятью или сборщика мусора. В контексте генерации криптографического кода, это существенно снижает риск внедрения уязвимостей, связанных с ошибками в управлении памятью, повышая надежность и безопасность генерируемых реализаций алгоритмов шифрования.

Применение специализированных запросов, ориентированных на безопасность (Security-Focused Prompting), является критически важным для управления процессом генерации криптографического кода большими языковыми моделями. Данный подход позволяет целенаправленно избегать небезопасных шаблонов и ошибок, часто встречающихся при ручной реализации алгоритмов. Конкретно, при генерации кода для симметричного шифрования, такого как AES-256-GCM и ChaCha20-Poly1305, правильно сформулированные запросы направляют LLM на корректное использование криптографических библиотек и предотвращают внедрение уязвимостей, связанных с неправильной обработкой ключей, векторов инициализации или некорректной реализацией математических операций, необходимых для этих алгоритмов. Акцент делается на четкое указание необходимых параметров и ограничений для обеспечения безопасности генерируемого кода.

Валидация Безопасности: Автоматизированный Анализ для Достоверности

Успешная компиляция кода является базовой проверкой, подтверждающей его структурную корректность перед проведением более глубокого анализа. Однако, результаты наших исследований показали, что языковые модели (LLM) демонстрируют лишь 23.3% успешных компиляций. Это указывает на значительные трудности, возникающие у LLM при генерации синтаксически верного и работоспособного кода, что делает необходимым дополнительные проверки и валидацию сгенерированных программ перед их использованием в критически важных системах.

Для целенаправленного выявления криптографических уязвимостей был разработан специализированный анализатор на основе правил. Данный анализатор функционирует путем активного поиска конкретных шаблонов, указывающих на распространенные проблемы безопасности, такие как повторное использование nonce и наличие жестко закодированных секретов. В отличие от универсальных инструментов статического анализа, данный анализатор оптимизирован для обнаружения уязвимостей, специфичных для криптографических реализаций, что позволяет повысить точность и эффективность обнаружения проблем в коде.

Разработанный нами анализатор на основе правил специально предназначен для выявления криптографических уязвимостей, в частности, повторного использования nonce и наличия жестко закодированных секретов. В отличие от универсальных инструментов статического анализа, данный анализатор активно ищет эти специфические ошибки, что позволило обнаружить критические уязвимости в 3.6% скомпилированных образцов кода. Это демонстрирует необходимость специализированных инструментов для эффективного обнаружения уязвимостей, связанных с криптографией.

При использовании CodeQL, мощного инструмента статического анализа, не было выявлено ни одного истинно положительного результата при обнаружении криптографических уязвимостей в исследуемых образцах кода. Кроме того, применение методики Chain-of-Thought Prompting привело к значительному снижению процента успешной компиляции (6.7%) по сравнению с Zero-Shot (35.0%) и Security-Focused (28.3%) подходами (p < 0.001), что указывает на её неэффективность в данном контексте и необходимость использования более подходящих стратегий для обеспечения успешной компиляции и анализа кода.

Влияние и Перспективы: Автоматизация для Безопасного Будущего

Автоматизированное обнаружение уязвимостей способно существенно снизить временные и финансовые затраты, связанные с проведением аудитов безопасности. Традиционные методы, предполагающие ручной анализ кода, являются трудоемкими и дорогостоящими, особенно при работе с крупномасштабными проектами. Автоматизация позволяет проводить более быстрый и всесторонний анализ, выявляя потенциальные слабые места в коде до этапа его развертывания. Это не только сокращает риски возникновения инцидентов безопасности, но и освобождает ресурсы специалистов для решения более сложных задач, таких как разработка стратегий защиты и реагирование на угрозы. В результате, организации могут значительно повысить эффективность своих усилий по обеспечению информационной безопасности и снизить общую стоимость владения программным обеспечением.

Комбинация больших языковых моделей (LLM) и инструментов статического анализа представляет собой перспективное решение для масштабируемого выявления и устранения криптографических уязвимостей. Традиционные методы часто требуют значительных ручных усилий и экспертных знаний для анализа кода на предмет слабых мест в реализации криптографических алгоритмов. LLM, обученные на огромных объемах кода и документации, способны понимать семантику программного кода и выявлять подозрительные паттерны, которые могут указывать на уязвимости. В сочетании со статическим анализом, который обеспечивает точное обнаружение конкретных типов ошибок, LLM позволяют автоматизировать процесс аудита безопасности, существенно сокращая время и затраты, необходимые для защиты криптографических систем. Такой подход позволяет обнаруживать уязвимости на ранних стадиях разработки, что снижает риск их эксплуатации злоумышленниками и повышает общую безопасность программного обеспечения.

Разработанный анализатор обнаружил уязвимости средней степени серьезности в 57.1% из 56 успешно скомпилированных образцов кода, что подчеркивает необходимость дальнейших исследований в данной области. Полученные результаты демонстрируют, что автоматизированные инструменты, способные выявлять подобные недостатки, обладают значительным потенциалом для повышения безопасности программного обеспечения. Несмотря на достигнутый прогресс, высокая доля обнаруженных уязвимостей указывает на пробелы в существующих методах анализа и необходимость разработки более совершенных алгоритмов, способных эффективно обнаруживать и устранять подобные недостатки в коде, а также адаптироваться к постоянно меняющимся угрозам безопасности.

Перспективные исследования в области автоматизированного обнаружения уязвимостей должны быть направлены на повышение точности и эффективности систем, основанных на искусственном интеллекте. Несмотря на достигнутые успехи, текущие модели зачастую демонстрируют склонность к ложноположительным и ложноотрицательным результатам, что требует дальнейшей оптимизации алгоритмов и расширения обучающих выборок. Особое внимание следует уделить разработке методов, позволяющих различать реальные уязвимости от безобидных конструкций кода, а также повысить скорость анализа больших кодовых баз. Улучшение этих параметров не только снизит затраты на аудит безопасности, но и позволит более оперативно реагировать на возникающие угрозы, обеспечивая более надежную защиту информационных систем.

Исследование демонстрирует, что генерируемый LLM код для криптографических операций в Rust, несмотря на кажущуюся корректность, часто содержит уязвимости, требующие специализированного статического анализа для обнаружения. Этот факт подчеркивает необходимость доказуемости и непротиворечивости алгоритмов, особенно в критически важных областях, таких как криптография. Как однажды заметила Барбара Лисков: «Хороший дизайн — это когда что-то работает так, как ожидалось, и когда неожиданное происходит, оно происходит предсказуемо». Данное исследование подтверждает, что простого “рабочего” кода недостаточно; необходимо стремиться к предсказуемости и доказуемой корректности границ и взаимодействий алгоритмов, чтобы избежать потенциальных уязвимостей, даже при использовании продвинутых методов, таких как ‘chain-of-thought’ prompting.

Что дальше?

Представленное исследование выявило закономерность: языковые модели, генерирующие код, склонны к созданию решений, формально корректных, но практически уязвимых. Это не столько недостаток самих моделей, сколько закономерное следствие попытки автоматизировать процесс, требующий глубокого понимания не только синтаксиса, но и семантики криптографических примитивов. Недостаточно просто скомпилировать код; необходимо доказать его безопасность, а это — задача, требующая формальных методов и, увы, человеческого интеллекта.

Направление дальнейших исследований очевидно: необходимо отойти от эмпирической оценки сгенерированного кода к разработке формальных спецификаций и инструментов верификации. Интересно, что использование стратегий «chain-of-thought» привело к ухудшению результатов. Это указывает на то, что словесное «объяснение» логики модели не гарантирует повышения качества генерируемого кода, а скорее создает иллюзию понимания. Элегантность алгоритма не зависит от языка, на котором он реализован; важна лишь непротиворечивость.

В конечном счете, проблема заключается не в том, чтобы научить машину писать код, а в том, чтобы научить ее рассуждать о безопасности этого кода. Задача, требующая не просто увеличения вычислительных мощностей, а принципиально новых подходов к искусственному интеллекту. И, возможно, смирения с тем, что некоторые задачи лучше оставить людям.


Оригинал статьи: https://arxiv.org/pdf/2604.27001.pdf

Связаться с автором: https://www.linkedin.com/in/avetisyan/

Смотрите также:

2026-05-02 00:51

Рекомендуем