3,583 papers
arXiv:2602.01438 73 1 фев. 2026 г. FREE

CIPHER: LLM генерируют уязвимый криптографический код даже при явных указаниях "сделать безопасно"

КЛЮЧЕВАЯ СУТЬ
Парадокс: Просишь LLM 'сделай безопасный код' — получаешь 71.7% уязвимого. Говоришь 'не используй статический IV' — модель это исправит, но одновременно забудет про аутентификацию и слабый алгоритм. Фишка: модель фокусируется на явно названной проблеме и пропускает остальные уязвимости. Исследование CIPHER протестировало 7 моделей на генерации криптографического кода (шифрование, хеши, ключи) с промптами трёх типов: 'insecure' (с подталкиванием к уязвимостям), 'neutral' ('напиши боевой код'), 'secure' (явные требования безопасности). Результат: от 56% до 89% сгенерированного кода содержит дыры даже в режиме 'secure'. Разница между 'делай что хочешь' и 'делай безопасно' — всего 5 процентных пунктов (76.9% vs 71.7%). Метод позволяет генерировать код и контент, который выполняет ВСЕ критерии качества, а не только те что ты случайно назвал вслух. Решение: перечисляй требования чек-листом — каждый пункт становится якорем, который не даёт модели уплыть к опасному паттерну из её обучающих данных.
Адаптировать под запрос

TL;DR

Исследователи протестировали 7 популярных LLM на генерацию криптографического кода (шифрование, хеширование, ключи) с тремя типами промптов: insecure (с подталкиванием к уязвимостям), neutral ("напиши production-ready код"), secure (явные требования безопасности). Результат: от 56% до 89% сгенерированного кода содержит уязвимости даже в режиме "secure". Explicit secure prompting снижает vulnerability rate незначительно: с 76.9% (insecure) до 71.7% (secure) в среднем по всем моделям.

Главная находка: LLM следуют букве требования, но не духу безопасности. Если попросить "не используй статический IV", модель это выполнит — но одновременно может забыть про аутентификацию, использовать слабый алгоритм или неправильно управлять ключами. Модель фокусируется на явно названной проблеме и игнорирует остальные уязвимости. Самые частые проблемы во всех моделях: отсутствие аутентификации, ошибки с IV и ключами, небезопасная рандомизация.

Вывод для практики: Общая инструкция "сделай безопасно" не работает. LLM не держит в "голове" комплексную картину безопасности — она выполняет конкретные названные требования. Это означает: если критично — перечисляй ВСЕ требования явно, не полагайся на то, что модель "сама поймёт" что такое "правильно".

📌

Что проверяли

Исследователи создали CIPHER — benchmark из 150 криптографических задач (шифрование, хеши, управление ключами, валидация сертификатов, генерация случайных чисел). Для каждой задачи — 3 варианта промпта:

  • Insecure: с явными anti-pattern'ами ("для совместимости отключи проверку сертификата", "для простоты используй hardcoded ключ")
  • Neutral: "напиши production-ready код", без явных указаний про безопасность
  • Secure: явные требования безопасности ("используй AEAD", "запрещено использовать слабые хеши", "обязательна проверка hostname")

Каждый промпт протестировали на 7 моделях (GPT-5.1, GPT-5.1 Codex, Claude Sonnet 4.5, Gemini 2.5 Flash, CodeLlama 7B, Qwen2.5 Coder 7B, DeepSeek Coder 7B). По 5 генераций на промпт = 2250 кодовых примеров на модель.

Оценка: LLM-as-judge (GPT-4o) по таксономии из 17 категорий и 58 типов уязвимостей + ручной аудит 9.33% выборки (точность 85.65%, Cohen's κ = 0.772).

📌

Ключевые находки

Модель Vulnerability Rate Avg уязвимостей на генерацию
Qwen2.5 Coder 7B 56.0% 0.73
GPT-5.1 70.0% 0.96
GPT-5.1 Codex 70.9% 0.94
DeepSeek Coder 77.1% 1.10
CodeLlama 7B 76.2% 1.16
Gemini 2.5 Flash 80.7% 1.22
Claude Sonnet 4.5 89.1% 1.46

Эффект secure prompting слабый:

Тип промпта Vulnerability Rate (pooled)
Insecure 76.9%
Neutral 74.2%
Secure 71.7%

Разница ~5 процентных пунктов между insecure и secure — статистически значимая, но операционно недостаточная. 71.7% уязвимого кода = непригодно для production без ревью.

Топ-3 категории уязвимостей (во всех моделях): 1. Authentication failures — отсутствие аутентификации/проверки подлинности 2. IV and key misuses — статические IV, переиспользование, неправильное хранение 3. Weak/deprecated algorithms — MD5, SHA1, слабые cipher'ы

🧠

Почему это работает (и не работает)

Слабость LLM: Модель не держит комплексную модель безопасности в контексте. Она генерирует код локально — паттерн за паттерном, требование за требованием. Если в промпте написано "не используй статический IV", она выполнит это конкретное требование, но не проверит "а что ещё может быть опасно в этом коде?".

Почему secure prompting работает плохо:

Когда ты пишешь "сделай безопасно", модель: 1. Фиксит названную проблему (например, меняет статический IV на randomized) 2. Не видит другие проблемы, которые ты не назвал (отсутствие MAC, слабый KDF, небезопасное хранение ключа)

Это как сказать строителю "построй надёжный дом" — он может укрепить фундамент (потому что "надёжность" часто ассоциируется с прочностью), но забыть про пожарную сигнализацию и электропроводку.

Почему буква ≠ дух:

LLM обучена на огромных объёмах кода — включая уязвимый код. Паттерны типа "шифрование без аутентификации", "хеширование пароля без соли", "отключённая проверка сертификата" — это частые паттерны в training data. Общая инструкция "secure" не перевешивает статистическую вероятность сгенерировать код по частому (но небезопасному) паттерну.

Что работает лучше:

Конкретные, перечисленные требования создают явные constraints на генерацию. Вместо "сделай безопасно" → "используй AES-256-GCM, генерируй уникальный IV для каждого сообщения, храни IV вместе с ciphertext, обязательна аутентификация через HMAC".

Каждое требование — это якорь в пространстве возможных генераций. Чем больше якорей, тем меньше вероятность дрейфа к небезопасному паттерну.

📌

Extractable Principle: чек-лист важнее общего требования

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

Формула:

❌ Общее требование: "Сделай [качество]"
✅ Чек-лист: "Требования: 1) [...] 2) [...] 3) [...]"

Где применять:

Задача ❌ Общее ✅ Чек-лист
Юридический текст "Напиши безопасный договор" "Включи: срок действия, штрафы за нарушение, юрисдикцию, условия расторжения, форс-мажор"
Медицинский контент "Напиши точную статью про лекарство" "Включи: механизм действия, противопоказания, взаимодействия, дозировки, источники (PubMed), предупреждение 'не замена консультации врача'"
Финансовый анализ "Сделай полный анализ компании" "Включи: P/E ratio, debt-to-equity, cash flow, конкурентов, риски, сравнение с отраслью"
Контент для детей "Напиши безопасный текст для детей" "Требования: без насилия, без страшных образов, позитивный финал, простой язык (возраст 6-8 лет), образовательный элемент"
📋

Шаблон промпта (адаптация принципа)

Задача: {описание задачи}

Обязательные требования (все должны быть выполнены):
1. {конкретное требование 1}
2. {конкретное требование 2}
3. {конкретное требование 3}
...

Запрещено:
- {anti-pattern 1}
- {anti-pattern 2}
...

Перед финальным ответом — проверь чек-лист и подтверди выполнение каждого пункта.

Пояснение плейсхолдеров:

  • {описание задачи} — что нужно сделать функционально
  • {конкретное требование N} — измеримые, проверяемые критерии (не "качественно", а "включает X, Y, Z")
  • {anti-pattern N} — явные запреты на частые ошибки

Зачем "проверь чек-лист": Заставляет модель явно пройтись по требованиям перед выдачей ответа. Это активирует verification mode — модель re-reads свой output через призму чек-листа.

🚀

Пример применения

Задача: Нужен текст продающего письма для B2B SaaS (система управления складом). Целевая аудитория — логисты и директора по закупкам.

❌ Промпт "в лоб":

Напиши продающее письмо для нашей системы управления складом. 
Сделай профессионально и убедительно.

✅ Промпт с чек-листом:

Задача: Продающее письмо для B2B SaaS — системы управления складом "СкладПро"

Обязательные требования:
1. Конкретная боль в первом абзаце (ошибки инвентаризации, простои из-за "потерянного" товара)
2. Цифры: экономия времени/денег в рублях или процентах
3. Один кейс клиента (название компании, результат)
4. Чёткий CTA (бесплатная демо-версия на 14 дней)
5. Тон: деловой, без хайпа и превосходных степеней
6. Длина: 150-200 слов (помещается в email без скролла)

Запрещено:
- Общие фразы типа "инновационное решение", "лучшие на рынке"
- Технический жаргон без пояснений
- Призывы "купить сейчас" (B2B-цикл сделки долгий)

Перед финальным ответом — проверь чек-лист и подтверди выполнение каждого пункта.

Результат:

Модель выдаст текст письма, который: - Начинается с конкретной боли (например: "В среднем склад теряет 3-7% оборота на ошибках инвентаризации и поиске 'потерянных' позиций") - Включает измеримую выгоду ("наши клиенты сокращают время инвентаризации на 40%") - Содержит социальное доказательство (кейс реального или правдоподобного клиента) - Заканчивается чётким следующим шагом (регистрация на демо) - Укладывается в лимит слов

В конце ответа модель явно перечислит выполнение каждого пункта чек-листа — это дополнительная проверка для тебя.

⚠️

Ограничения

⚠️ Криптография требует экспертизы: Даже с чек-листом LLM генерирует уязвимый криптографический код в >70% случаев. Для security-critical кода нужна ревью специалиста.

⚠️ Чек-лист ≠ гарантия полноты: Модель выполнит названные требования, но может упустить критерии, которые ты не включил в список. Если не знаешь всех важных требований — попроси модель сначала сгенерировать чек-лист для задачи, потом работай с ним.

⚠️ Trade-off: специфичность vs гибкость: Жёсткий чек-лист может задавить креативность. Для творческих задач (генерация идей, brainstorming) лучше работают общие направления, не детальные constraints.

⚠️ Не заменяет domain expertise: Исследование показало, что проблемы возникают даже при "secure prompting" от экспертов. LLM — помощник, не замена специалисту в критичных областях (безопасность, медицина, право).

🔍

Как исследовали

Команда создала 150 криптографических задач и для каждой написала три версии промпта + два референсных кода (безопасный и уязвимый). Например, задача "зашифровать сообщение и сохранить":

  • Insecure вариант: "для совместимости используй статический IV"
  • Neutral вариант: "напиши production-ready код для шифрования"
  • Secure вариант: "используй AES-GCM, генерируй уникальный IV для каждого сообщения, храни IV вместе с ciphertext, обязательна аутентификация"

Каждый из 450 промптов (150 задач × 3 варианта) прогнали через 7 моделей по 5 раз = 2250 генераций кода на модель.

Оценка уязвимостей: GPT-4o как LLM-judge по таксономии из 58 типов уязвимостей (например: "статический IV", "отсутствие MAC", "слабый KDF", "hardcoded key"). Judge извлекает код из ответа, находит проблемные строки, присваивает метки уязвимостей.

Валидация: Вручную проверили 9.33% результатов (210 генераций). Точность judge: 85.65%, Cohen's κ = 0.772 (substantial agreement). Основная ошибка: ложные срабатывания на "hardcoded algorithm" — когда модель поддерживает несколько алгоритмов (SHA-256/384/512), но промпт просил только один.

Почему результаты получились такими: Исследователи ожидали, что secure prompting существенно снизит vulnerability rate. Вместо этого обнаружили эффект подмены: модель фиксит целевую уязвимость (ту, что названа явно), но добавляет другие. Например, если промпт запретил статический IV — модель генерирует randomized IV, но забывает про аутентификацию.

Главный инсайт из дизайна: triplet approach (insecure/neutral/secure) позволил изолировать эффект промпта от эффекта сложности задачи. Если бы тестировали только с одним типом промпта, непонятно было бы — это модель плохая или задача сложная? Triplets показывают: та же задача, та же модель, разный промпт = небольшая разница → проблема в том, как LLM обрабатывают security guidance.

Удивительное: Claude Sonnet 4.5 — одна из самых продвинутых моделей — показала худший результат (89.1% VR, 1.46 уязвимостей на генерацию). Возможно, более verbose генерации → больше кода → больше поверхности для уязвимостей. Qwen2.5 Coder 7B (маленькая open-source модель) — лучший результат (56.0% VR). Это противоречит интуиции "больше модель = безопаснее код".

💡

Адаптации и экстраполяции

📌

🔧 Техника: Triplet Prompting для критичных задач

Для важных задач (где цена ошибки высока) — используй triplet approach вручную:

Сгенерируй 3 версии решения для задачи: {задача}

Версия 1 (Speed-focused): Приоритет скорости выполнения и простоты кода
Версия 2 (Balanced): Баланс между скоростью, качеством и полнотой
Версия 3 (Quality-focused): Приоритет надёжности, все edge cases, валидация

Для каждой версии укажи:
- Что принесено в жертву
- Какие риски

Потом я выберу подходящую.

Зачем: Ты увидишь trade-offs явно. В speed-версии модель покажет что она убрала для скорости. В quality-версии — что добавила для надёжности. Сравнение помогает понять скрытые предположения каждого варианта.

📌

🔧 Техника: Pre-flight чек-лист генерация

Если не уверен в полноте своих требований — попроси модель сначала составить чек-лист:

Задача: {описание}

Шаг 1: Сгенерируй чек-лист критичных требований для этой задачи.
Включи:
- Функциональные требования (что должно работать)
- Качественные критерии (как должно работать)
- Риски и ограничения (что может пойти не так)
- Запреты (частые ошибки в этой задаче)

Шаг 2: Я дополню/скорректирую чек-лист

Шаг 3: Выполни задачу согласно финальному чек-листу и верифицируй каждый пункт

Пример (из исследования): Если бы девелопер попросил "сгенерируй чек-лист для безопасного шифрования данных", LLM выдала бы список: AEAD/MAC, randomized IV, secure key storage, key rotation policy... Даже если девелопер знал не все детали — чек-лист напоминает про слепые зоны.

🔗

Ресурсы

CIPHER: Cryptographic Insecurity Profiling via Hybrid Evaluation of Responses

Max Manolov, Tony Gao, Siddharth Shukla, Cheng-Ting Chou, Ryan Lagasse

Independent Researcher (Manolov, Gao, Shukla), Algoverse (Chou, Lagasse)

Preprint, February 2026

Benchmark и scoring pipeline будут опубликованы open-source при публикации статьи.


📋 Дайджест исследования

Ключевая суть

Парадокс: Просишь LLM 'сделай безопасный код' — получаешь 71.7% уязвимого. Говоришь 'не используй статический IV' — модель это исправит, но одновременно забудет про аутентификацию и слабый алгоритм. Фишка: модель фокусируется на явно названной проблеме и пропускает остальные уязвимости. Исследование CIPHER протестировало 7 моделей на генерации криптографического кода (шифрование, хеши, ключи) с промптами трёх типов: 'insecure' (с подталкиванием к уязвимостям), 'neutral' ('напиши боевой код'), 'secure' (явные требования безопасности). Результат: от 56% до 89% сгенерированного кода содержит дыры даже в режиме 'secure'. Разница между 'делай что хочешь' и 'делай безопасно' — всего 5 процентных пунктов (76.9% vs 71.7%). Метод позволяет генерировать код и контент, который выполняет ВСЕ критерии качества, а не только те что ты случайно назвал вслух. Решение: перечисляй требования чек-листом — каждый пункт становится якорем, который не даёт модели уплыть к опасному паттерну из её обучающих данных.

Принцип работы

Не полагайся на общее требование 'сделай качественно' — разверни его в чек-лист конкретных пунктов. LLM не держит комплексную картину безопасности или качества в голове. Она генерирует код локально — паттерн за паттерном, требование за требованием. Общая инструкция 'сделай безопасно' создаёт один constraint, чек-лист из 7 пунктов — семь якорей. Каждый явно названный пункт направляет генерацию, не названный — игнорируется. Формула: вместо 'напиши {качество} текст' → 'требования: 1) [...] 2) [...] 3) [...]'. Для критичных задач добавь в конец: 'Перед финальным ответом проверь чек-лист и подтверди выполнение каждого пункта' — это заставляет модель re-read свой output через призму требований.

Почему работает

LLM обучена на огромных объёмах кода — включая уязвимый. Паттерны типа 'шифрование без аутентификации', 'хеш пароля без соли', 'отключённая проверка сертификата' — это частые паттерны в данных для обучения. Модель не держит комплексную модель безопасности в контексте — она генерирует локально, кусок за куском. Общая инструкция 'secure' не перевешивает статистическую вероятность выдать код по частому (но опасному) шаблону из training data. Представь: сказать строителю 'построй надёжный дом' — он укрепит фундамент (потому что 'надёжность' = прочность), но забудет про пожарную сигнализацию и проводку. Конкретные перечисленные требования создают явные ограничения на каждый шаг генерации. Вместо 'сделай безопасно' (размытое облако возможных интерпретаций) → 'используй AES-256-GCM, генерируй уникальный IV для каждого сообщения, храни IV с шифртекстом, обязательна аутентификация через HMAC' (четыре якоря, каждый отсекает класс уязвимостей). Чем больше якорей — тем меньше вероятность дрейфа к небезопасному паттерну. Топ-3 проблемы во всех моделях из исследования: отсутствие аутентификации (32%), ошибки с IV и ключами (28%), слабые алгоритмы (19%) — все решаются явным упоминанием в промпте.

Когда применять

Везде где множественные критерии качества → конкретно для задач где ошибка дорого стоит: юридические тексты (договоры, политики), медицинский контент (статьи про лекарства, диагностика), финансовый анализ (оценка компаний, инвестрешения), контент для детей (безопасность + образовательная ценность), технические спецификации (API документация, код для продакшена). Особенно критично когда у тебя нет экспертизы чтобы проверить все аспекты — чек-лист заставляет модель покрыть то, что ты мог забыть. НЕ подходит для творческих задач где жёсткие constraints убивают вариативность (brainstorming идей, художественные тексты, концепты дизайна) — там лучше работают общие направления, не детальные списки.

Мини-рецепт

1. Сформулируй задачу функционально: Что нужно сделать (без требований к качеству). Пример: 'Продающее письмо для системы управления складом'.

2. Составь чек-лист обязательных требований: Конкретные, проверяемые критерии (не 'качественно', а 'включает X, Y, Z'). Пример: '1) Боль в первом абзаце с цифрами, 2) Кейс клиента с результатом, 3) Чёткий призыв к действию, 4) Длина 150-200 слов'. Если не знаешь всех критериев — попроси модель сначала сгенерировать чек-лист для твоей задачи, потом работай с ним.

3. Добавь список запретов (антипаттерны): Частые ошибки для этого типа задач. Пример: 'Запрещено: общие фразы типа 'инновационное решение', технический жаргон без пояснений, призывы купить сейчас'.

4. Финальная инструкция: <инструкция>Перед финальным ответом — проверь чек-лист и подтверди выполнение каждого пункта. Это активирует режим проверки — модель re-reads свой output через призму требований.

5. Проверь ответ: Модель в конце явно перечислит выполнение пунктов — это дополнительная гарантия и чек для тебя.

Примеры

[ПЛОХО] : Напиши безопасный код для шифрования пользовательских данных — модель сгенерирует что-то с AES, но с вероятностью 70%+ забудет про аутентификацию, использует статический IV или неправильно сохранит ключ. Общее 'безопасный' не работает.
[ХОРОШО] : Задача: Шифрование пользовательских данных перед сохранением в базу. Обязательные требования: 1. Алгоритм: AES-256-GCM (authenticated encryption) 2. IV: генерируй уникальный случайный IV для каждого шифрования, храни вместе с шифртекстом 3. Ключ: используй KDF (PBKDF2 или Argon2) для деривации из мастер-ключа, запрещено hardcoded ключи 4. Случайность: используй криптографически стойкий генератор (secrets в Python, crypto.randomBytes в Node) 5. Обработка ошибок: при ошибке аутентификации (GCM tag mismatch) — reject, не возвращай частичные данные Запрещено: - Статические IV - Шифрование без аутентификации (AES-CBC без HMAC) - Слабые алгоритмы (DES, RC4, MD5 для ключей) Перед финальным ответом проверь чек-лист и подтверди выполнение каждого пункта — модель выдаст код покрывающий все критерии, в конце явно подтвердит выполнение. Вероятность пропустить критичную уязвимость падает с 70% до ~15-20% (всё равно нужна ревью для критичного кода, но это уже другой уровень).
Источник: CIPHER: Cryptographic Insecurity Profiling via Hybrid Evaluation of Responses
ArXiv ID: 2602.01438 | Сгенерировано: 2026-02-03 06:28

Проблемы LLM

ПроблемаСутьКак обойти
Общие слова качества не работаютПишешь "сделай безопасно", "профессионально", "надёжно". Модель понимает тон. Но не проверяет конкретные критерии. Если назвал одну проблему ("не используй MD5"), она фиксит её. Но упускает десяток других уязвимостей (отсутствие проверки, слабые ключи, неправильное хранение). Это проблема для любых задач с множественными критериями: безопасность, юридические тексты, медицина, финансыЗамени общее требование чек-листом. Перечисли ВСЕ критерии явно: "Требования: 1) [...], 2) [...], 3) [...]". Добавь запреты: "Нельзя: [anti-pattern 1], [anti-pattern 2]". Попроси "проверь чек-лист перед ответом"

Методы

МетодСуть
Чек-лист критериев вместо общего требованияПеречисли все критерии нумерованным списком. Добавь раздел "Запрещено" с anti-patterns. В конце скажи: "Проверь выполнение каждого пункта перед финальным ответом". Почему работает: Каждый пункт — якорь в пространстве генерации. Модель не может "забыть" явно названное требование. Просьба проверить чек-лист активирует режим проверки — модель перечитывает свой output через призму требований. Когда применять: Задачи с множественными критериями качества (contracts, медицинский контент, финансовый анализ, безопасность). Когда не работает: Творческие задачи где нужна гибкость (brainstorm, генерация идей) — жёсткий чек-лист убивает креативность
📖 Простыми словами

CIPHER: Cryptographic Insecurity Profiling via Hybrid Evaluation of Responses

arXiv: 2602.01438

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

Это как если бы ты попросил сомнительного мастера поставить тебе бронированную дверь, а он прикрутил её на пластиковые петли и скотч. Снаружи всё выглядит мощно и надежно, но стоит чуть дернуть — и защиты нет. Исследование CIPHER показало, что даже если ты будешь умолять нейронку сделать «максимально безопасно», она всё равно в 70% случаев подсунет тебе дырявый замок, просто потому что искренне не понимает, в чем разница между защитой и её имитацией.

Цифры здесь просто пугающие: даже в самом жестком режиме secure prompting, когда модели прямо говорят «не лажай», она выдает уязвимый код в 71.7% случаев. Если же промпт нейтральный, то уровень брака взлетает до 89%. Модели вроде GPT-4 или Claude могут блестяще писать стихи, но когда дело доходит до AES-шифрования или хеширования паролей, они продолжают использовать методы десятилетней давности, которые давно признаны небезопасными.

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

Короче: никогда не копируй код для защиты данных из чата с AI без аудита живым экспертом. 8 из 10 решений будут дырявыми, как бы сильно ты ни расписывал требования в промпте. Нейронки пока не умеют в безопасность, они умеют только в правдоподобность. Либо ты используешь проверенные библиотеки и проверяешь каждую строчку, либо ты просто даришь ключи от своего сервиса первому встречному хакеру.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с