Исследователи спрятали в нейросеть способность под криптографическим замком. Часть 2: как устроен замок, во что он обходится и по каким признакам такую модель пробуют заметить
Темы: ИИ, Безопасность

Это продолжение разбора. В первой части простыми словами рассказано, что сделали исследователи: спрятали внутри нейросети зашифрованную маленькую сеть, которая работает только по секретному ключу, и привычные способы проверки не смогли её вызвать, кроме перебора совсем короткого ключа. Здесь про то, как это устроено: что именно доказано, как работает цифровой замок, как алгоритм превращается в веса нейросети, сколько это стоит и где у работы слабые места. Будут формулы, каждая с объяснением словами.
Источник один: препринт arXiv:2610.13928 (Драгунс, Мотвани, Дуглас, Шрёдер де Витт, 9 октября 2026 года). Все данные о работе ниже из него. Несколько числовых примеров, поясняющих формулы, мои, они отмечены словами «мой пример».
Сразу несколько слов, которые дальше встречаются постоянно. Веса это числа внутри нейросети, задающие её поведение. Ключ (в препринте trigger) это секретная строка во входных данных. Проверяющий это тот, кто пытается найти или вызвать скрытую способность. Полиномиальное время значит, что работа проверяющего растёт не быстрее некоторой степени от размера задачи; полный перебор ключа длины λ растёт экспоненциально, как 2^λ, и в этот класс не входит, если λ растёт. Это теоретическое понятие: полиномиальный алгоритм не обязательно быстрый на практике, а перебор короткого ключа, как будет видно в опытах, вполне доступен.
Что именно доказывается
Пусть H это обычная модель-«хозяин», которую собираются использовать, а C это способность, которую злоумышленник хочет спрятать: функция, которая по входу x выдаёт ответ. Злоумышленник выбирает секретный ключ T и собирает новую модель:
M = Embed(H, C, T)
Словами: процедура Embed встраивает способность C в модель H так, что открыть её можно ключом T. Проверяющий получает архитектуру и все веса M, может даже знать саму процедуру Embed, но не знает T.
Модель считается содержащей скрытую способность, если выполнены два условия: на обычных входах x она отвечает как H, а на входах вида T‖x (ключ, приписанный перед входом) выдаёт C(x); и то и другое с точностью до допуска, принятого для задачи. Значок ‖ означает «приписать одну строку к другой».
Невызываемость авторы определяют через две игры между проверяющим и тем, кто строит модель.
- Игра «найди ключ». Проверяющему дают M. Он выигрывает, если предъявит вход, который открывает скрытое вычисление. Требование: у любого проверяющего, работающего полиномиальное время, вероятность выигрыша пренебрежимо мала.
- Игра «угадай, что спрятано». Берут две способности одинакового размера, C₀ и C₁. Подбрасывают монету: бит b равен 0 или 1. Проверяющему дают M_b = Embed(H, C_b, T). Он выигрывает, если угадает b. Требование:
Pr[угадал b] ≤ 1/2 + negl(λ)
Словами: проверяющий угадывает, какая из двух способностей внутри, не лучше, чем подбрасывая монету, с точностью до пренебрежимо малой добавки. Здесь λ это параметр безопасности, условно «сколько бит стойкости». negl(λ) это функция, которая с ростом λ убывает быстрее, чем 1/λ в любой степени. Поэтому, увеличивая λ, добавку можно сделать сколь угодно малой.
Есть условие на сам ключ: его минимальная энтропия не меньше λ. Это значит, что ни один конкретный ключ не выбирается с вероятностью больше чем 2^(−λ). Словами: ключ нельзя угадать, перебрав несколько «популярных» вариантов. Мой пример: при λ = 128 вероятность любого отдельного ключа не больше 2^(−128), то есть примерно 3·10^(−39).
Чего определение не обещает, авторы пишут прямо. Оно не утверждает, что изменённую модель нельзя статистически отличить от обычной, и не запрещает проверяющему заметить, что веса странные. Оно не мешает проверяющему самому выучить ту же задачу по другим данным. Это свойство называется невызываемостью (unelicitability), и оно слабее необнаружимости (undetectability): необнаружимость означала бы, что нельзя даже понять, что модель изменена.
Цифровой замок
Вся гарантия опирается на известный криптографический приём, цифровой замок (digital locker). Это программа, которая на правильном ключе k возвращает спрятанное сообщение m, а на любом другом входе возвращает отказ, обозначаемый ⊥.
Простейшая конструкция, которую приводят авторы, строится на хеш-функции h, превращающей строку из a бит в строку из b бит:
c = h(k) ⊕ m, L(x) = h(x) ⊕ c
Словами: заранее вычисляют хеш правильного ключа и складывают его с сообщением по правилу XOR, получая шифртекст c; его и хранят в модели. Когда приходит вход x, замок вычисляет хеш x и снова складывает с c. XOR это побитовое «исключающее или»: 0⊕0 = 0, 1⊕1 = 0, 0⊕1 = 1⊕0 = 1. У него есть главное для нас свойство: если сложить одно и то же дважды, оно исчезает. Поэтому на правильном ключе
L(k) = h(k) ⊕ h(k) ⊕ m = m,
а на неправильном x получается h(x) ⊕ h(k) ⊕ m, то есть сообщение, перемешанное с мусором.
Чтобы замок умел явно сказать «отказ», к сообщению приписывают метку из r единиц: прячут не m, а m‖1^r. После расшифровки замок смотрит на последние r бит: если там r единиц, отдаёт сообщение, если нет, возвращает ⊥. В модели случайного оракула, где выходы хеш-функции на разных входах считаются независимыми и равномерно случайными строками, у любого конкретного неправильного ключа последние r бит выглядят как случайные, и все они окажутся единицами с вероятностью
2^(−r).
Словами, мой пример: при метке из 32 бит неправильный ключ случайно «пройдёт» примерно в одном случае из четырёх миллиардов.
Стойкость замка формулируется так же, как стойкость всей модели: если ключ выбран с минимальной энтропией не меньше λ, никакой противник с полиномиальным временем, видя замок целиком, не найдёт вход, на котором замок не отказывает, кроме как с пренебрежимо малой вероятностью; и два замка с разными сообщениями одинаковой длины для него неотличимы. В качестве h авторы берут семейство Keccak, на котором построен стандарт SHA-3. У Keccak есть режим с выходом произвольной длины, это удобно: длину хеша подгоняют под длину спрятанных весов. Важная оговорка самих авторов: конструкция на хеше доказана в модели случайного оракула, то есть при допущении, что хеш ведёт себя как идеально случайная функция; бывают замки и без этого допущения, в стандартной модели.
Почему стойкость замка переходит на всю модель, объяснено в приложении C. Если всё, что зависит от секрета, это шифртексты c, а остальное в модели получается из открытых данных общедоступной процедурой F,
Weights(M) = F(H, p, c; ρ),
где p это открытые настройки, а ρ случайность компилятора, то любой, кто знает шифртексты, может сам собрать модель. Значит, проверяющий, который что-то узнал бы из модели, узнал бы то же самое из шифртекстов, а это запрещено стойкостью замка. Это стандартный приём криптографии, сведение одной задачи к другой.
Как алгоритм превращается в веса
Шифровальную часть нельзя обучить обычным способом: криптографические функции, как напоминают авторы, вообще плохо поддаются обучению на примерах. Поэтому их не обучают, а «компилируют», то есть выставляют веса вручную по программе. Цепочка такая:
Алгоритм → программа без ветвлений → пороговая схема → матрицы → блоки GLU
Сначала алгоритм записывают как программу с фиксированным числом шагов и без условных переходов. Потом её переводят в схему из пороговых элементов, это простейшая модель нейрона:
LTG(x) = 1, если Σ wᵢxᵢ ≥ θ; иначе 0.
Словами: элемент складывает входы с весами wᵢ и выдаёт единицу, если сумма дотянула до порога θ. Из таких элементов собираются «и», «или», сумматоры и целая хеш-функция Keccak.
Пример выразительности из приложения F, XOR от n бит, то есть чётность числа единиц, всего в два слоя:
c_k = 1[Σ xᵢ ≥ k], k = 1…n; XOR(x) = 1[Σ (−1)^(k−1) c_k ≥ 1]
Словами: первый слой для каждого k отвечает на вопрос «единиц хотя бы k?». Второй слой складывает эти ответы с чередующимися знаками: если единиц ровно s, то сумма равна 1 − 1 + 1 − … из s слагаемых, то есть 1 при нечётном s и 0 при чётном. Авторы отмечают, что та же функция, записанная логической формулой в дизъюнктивной или конъюнктивной нормальной форме (ДНФ или КНФ), требует экспоненциального размера.
Каждый слой схемы это матрица. Но в современных моделях нет ступенчатой функции активации, есть гладкие. Ступеньку авторы собирают из разности двух сдвинутых функций ReLU (ReLU(z) = max(0, z)) с крутизной c = 4: на допустимых двоичных входах с целыми весами и порогами такая разность в точности повторяет пороговый элемент. А ReLU приближают через Swish, функцию активации, которая стоит в блоках SwiGLU: ReLU(z) ≈ Swish(qz)/q при q = 4. Словами: вход растягивают, пропускают через Swish и сжимают обратно, и на нужных значениях получается почти ReLU. Работает это, пока ошибки приближения и округления не переворачивают двоичные ответы.
Как расшифрованные веса выполняются
После замка в модели оказываются не веса, а числа-активации, которые и есть веса скрытой сети. Их нужно умножить на вход, а схема умножения большая. Авторы обходят это через блок GLU, который и так есть в современных трансформерах:
GLU(z) = W_o( f(W_g z) ⊙ W_v z )
Здесь z это вход блока, W_g, W_v, W_o три постоянные матрицы, f функция активации, а ⊙ поэлементное умножение. Словами: блок делает две разные линейные проекции входа, одну пропускает через f, перемножает их поэлементно и проецирует обратно. Авторы подают на вход z склейку из входа скрытого слоя x (длины a) и расшифрованной матрицы W (размера b × a, развёрнутой в строку). Матрица W_v копирует расшифрованные веса, W_g делает b копий x, после f копии поэлементно умножаются на веса, а W_o складывает нужные произведения. На выходе получается W·f(x), то есть скрытый слой выполнен.
Цена такого трюка видна сразу: блоку нужно b·a + a входных измерений, чтобы держать и матрицу, и вход. Авторы приводят пример: при 10 000 измерений хозяина скрытая квадратная матрица может быть не больше 99 × 99. Моя проверка: 99·99 + 99 = 9900, а 100·100 + 100 = 10 100 уже не помещается. Для сети ширины n это O(n²) измерений.
Есть второй вариант, построчный: на каждом шаге генерации текста расшифровывается одна строка матрицы, вычисляется одно скалярное произведение sᵢ = ⟨W_{i,:}, f(z)⟩, а потом механизм внимания складывает все строки в один вектор. Тогда ширина нужна O(n), но для сети глубины d требуется O(n·d) позиций в тексте. Это обмен ширины модели на длину контекста.
Сколько это стоит
Накладные расходы в препринте приведены подробно, и они большие.
| Что | Число из препринта |
|---|---|
| Скрытая сеть для химии | 64 → 8 → 16 → 2, 672 весов, каждый из {−1, 0, 1} |
| Один блок Keccak-p[25,1] | 7 уровней схемы, ширина 276, около 2,47·10^5 параметров, из них около 10^4 ненулевых |
| Собранная модель (1 раунд Keccak, ключи 4-16 бит) | 38 слоёв, около 2,07·10^9 параметров, 1,90·10^6 ненулевых, ширина 10 266 |
| Доля хеширования | около 1,98·10^9 параметров, примерно 95% |
| Обученная модель с паролем для сравнения | около 1,7·10^5 параметров |
| Каждый дополнительный скрытый вес | около 3,1·10^6 параметров хозяина |
| Полная стойкость (24 раунда Keccak-f[1600], ключ 128 бит) | 110 слоёв, 3,58·10^9 параметров |
| Вариант с параллельным хешированием | 15 слоёв, 6,37·10^9 параметров |
| Построчный вариант | 13 слоёв, 0,36·10^9 параметров, выполнение за 26 токенов |
Здесь «параметры» это все числа в матрицах, включая нули; ненулевых на три порядка меньше. Вариант с полной стойкостью, по словам авторов, совпал со скрытым классификатором на всех отложенных примерах при правильном ключе и на всех 10 000 проверенных неправильных ключах выполнил подставную схему вместо скрытой.
Главная оговорка к опытам: проверки вызываемости шли на ослабленных настройках, один раунд Keccak и ключи по 8 и 16 бит. Такие настройки, как признают авторы, не выдержали бы криптоанализа. Их довод: проверенные методы вообще не используют устройство хеша, поэтому и на слабых настройках они не работают. Это довод об этих методах, а не доказательство для слабых настроек.
Результаты всех проверок
Сравнивались две модели с одной задачей (по исходным веществам и возможному продукту, закодированным в 64 бита, сказать, получается ли из этих веществ этот продукт): обученная модель с паролем, стандартный способ делать «закладки», и зашифрованная. Точность в процентах, среднее по трём запускам с 95-процентным доверительным интервалом:
| Проверка | С паролем | Зашифрованная |
|---|---|---|
| Без ключа | 50,7 ± 0,1 | 50,6 ± 2,1 |
| Дообучение, 500 шагов | 92,8 ± 0,9 | 50,9 ± 1,0 |
| Обучение с помехами в скрытых слоях, восемь слоёв | 91,7 ± 0,7 | 52,9 ± 3,9 |
| Подбор ключа по градиенту, ключ 8 бит | 92,7 ± 0,2 | 73,5 ± 2,6 |
| Подбор ключа по градиенту, ключ 16 бит | 92,9 ± 0,4 | 52,7 ± 1,4 |
| С правильным ключом | 92,7 ± 0,2 | 73,5 ± 2,6 |
Подбор ключа по градиенту здесь это метод GCG: программа меняет символы во входе по одному и на каждом шаге выбирает замены, которые, по расчёту производных внутри модели, сильнее всего приближают нужный ответ. В отличие от слепого перебора, он использует устройство модели, но в этом опыте при 8-битном ключе сработал не лучше случайного перебора с тем же числом попыток.
Как читать. 50% это угадывание: ответов два, классы уравновешены. Дообучение и обучение с помехами «разговорили» модель с паролем почти до её полной точности, а зашифрованная осталась около угадывания. Чтобы проверить, не даёт ли спрятанная сеть хоть какой-то выигрыш, авторы сделали контрольную модель, в замке которой лежит случайная сеть вместо обученной. Она дала 50,6% при дообучении и 53,6% при обучении с помехами, то есть не меньше, чем модель с настоящей сетью: выгоды от спрятанной сети при этих проверках не видно. Подбор ключа по градиенту при 8 битах просто перебрал все 2^8 = 256 вариантов и нашёл ключ, столько же дал бы и случайный перебор с тем же числом попыток. При 16 битах, то есть 65 536 вариантах, в отведённое число попыток он не справился. Шум в весах масштаба 0,01 и 0,1 перед дообучением результатов заметно не изменил.
Второй опыт на задаче чётности подмножества:
f_s(x) = ⊕_{i∈s} xᵢ
Словами: на вход n бит, ответ равен XOR тех бит, номера которых входят в секретное подмножество s. Эту задачу выбрали потому, что для методов, обучающихся по градиенту, она в определённых условиях доказуемо трудна. Это позволяет отличить настоящее вызывание скрытой способности от того, что модель просто выучила задачу заново во время проверки. В опыте было 4 бита ключа и 4 бита входа, подмножество из двух бит. С правильным ключом обе модели считают точно. Дообучение без ключа довело модель с паролем до 100%, а собранная модель осталась на уровне угадывания. Шум не вызвал способность ни у одной.
Как это можно заметить
Здесь у работы самое заметное слабое место, и авторы его не скрывают. Собранные веса сильно отличаются от случайно заданных, с которыми их сравнивают авторы; сравнения с весами обученных моделей в работе нет. Для восьмислойной сети с Keccak они приводят такие статистики:
| Признак | Случайные веса (эталон) | Собранные как есть | После маскировки |
|---|---|---|---|
| Расстояние Колмогорова-Смирнова до эталона | 0,002 | 0,505 | 0,005 |
| Избыточный эксцесс | 0,00 | 371 | 0,57 |
| Доля нулей | меньше 10^(−4) | 0,991 | 0,007 |
| Доля целых чисел | меньше 10^(−4) | 0,998 | 0,007 |
Эталон здесь это веса той же формы, заданные случайно из нормального распределения, как при обычной инициализации сети. Расстояние Колмогорова-Смирнова показывает, насколько распределение весов отличается от эталонного: 0 значит совпадение. Избыточный эксцесс показывает, насколько у распределения «тяжёлые хвосты» по сравнению с нормальным, у нормального он 0. Без маскировки 99% весов это точные нули, почти все остальные целые числа, а эксцесс исчисляется сотнями: по простым статистикам такие веса резко отличаются от случайных. Отличит ли их от обычных обученных весов любая конкретная проверка, работа не исследует.
Маскировка устроена так: каждый скрытый слой расширяют парами весов из нормального распределения, которые взаимно гасят друг друга, и применяют симметрии блока SwiGLU (повороты и перестановки, которые не меняют вычисление). Функция при этом сохраняется точно, а простые статистики становятся похожими на случайные. Но авторы сами пишут, что сходство со случайными весами не делает модель похожей на обученную, и что между векторами весов внутри слоя остаются необычные корреляции, которые, по их словам, могут помочь проверяющему заметить собранную конструкцию; способа обнаружения по ним в работе нет.
Отсюда их общий вывод: пока гарантия касается невызываемости, а не необнаружимости. Проверяющий может увидеть, что в модели что-то не так, но, при допущениях работы, не сможет узнать, какая из двух способностей спрятана и как её включить. И даже обнаружение, по словам авторов, может не дать понятного лечения: проверяющий может не суметь определить, вредная ли там способность, безобидная водяная метка или артефакт архитектуры, а удаление конструкции рискует ухудшить модель. Как возможный выход авторы называют потенциально дорогое решение не пользоваться моделью.
Что предлагают против этого
В приложении H авторы перечисляют возможные защиты, каждую со слабым местом:
- Поиск аномалий в весах. Статистика весов и вычислительного графа, инструменты интерпретируемости. Слабое место: маскировка уже сближает простые статистики, а интерпретация обычных сетей и так трудна.
- Наблюдение во время работы. Скрытая способность включается только на ключе, и в этот момент её поведение или внутренние активации могут выделиться. Авторы называют это перспективным направлением.
- Прореживание модели и перефразирование входов. Могут сломать выполнение скрытой сети, даже не обнаружив её. Слабое место: злоумышленник может добавить коррекцию ошибок и сделать ключ смысловым, который перефразированием не убрать.
- Проверка происхождения модели на всём пути от данных и обучения до запуска.
Как работа соотносится с предыдущими
| Работа | Свойство | Что спрятано | Реализация |
|---|---|---|---|
| Goldwasser и др., 2022 | необнаружимость | переворот бита ответа классификатора | нет |
| Draguns и др., 2024 | невызываемость | фиксированная строка | PyTorch |
| Эта работа | невызываемость | исполняемая модель | PyTorch |
Шаг вперёд в том, что внутри теперь не ответ, а вычисление: спрятанная сеть получает вход и что-то по нему считает.
Ограничения, собранные вместе
- Опыты на маленьких моделях и узких задачах: один крошечный классификатор и чётность на нескольких битах.
- Проверки вызываемости шли на ослабленных криптографических настройках; модель с полной стойкостью собрана и проверена на правильность, но, судя по тексту, весь набор атак на ней не прогоняли.
- Полную конструкцию в настоящую обученную модель не встраивали: отдельные блоки GLU проверены внутри Gemma 3 270M, остальное, включая внимание и остаточные связи, оставлено на будущее.
- Накладные расходы огромные: миллиарды параметров на 672 скрытых веса.
- Факт вмешательства, по словам самих авторов, может быть обнаружен.
- Авторы не утверждают, что такие структуры возникают при обычном обучении.
Что из этого следует
Это мои выводы из препринта, а не его утверждения. Сильная часть работы в том, что гарантия доказана, а не только наблюдалась на опыте. Но доказательство относится к проверяющим, чья работа растёт полиномиально, к допущениям о стойкости замка и к достаточно большому параметру безопасности: при коротком ключе, как показал опыт с 8 битами, перебор справляется. В этих рамках вопрос «есть ли в модели опасная способность» для модели из ненадёжного источника нельзя закрыть одними проверками поведения. Слабая часть в цене и заметности: в нынешнем виде конструкция громоздкая, а авторы сами пишут, что её присутствие может быть обнаружено по весам.
Что из этого делать компании, по шагам, с теми же оговорками, что это мои советы:
- Начать со списка моделей, которые вы запускаете у себя. У каждой записать, откуда скачана и кто её выпустил.
- Кто делает: тот, кто отвечает в компании за ИИ-инструменты.
- Чем проверить: у каждой строки списка есть адрес официальной страницы разработчика и отметка, совпал ли отпечаток (контрольная сумма) запущенного файла с опубликованным разработчиком. Адрес страницы сам по себе не подтверждает, что запущен именно этот файл: копию могли изменить. Если разработчик отпечатков не публикует, так и записать: происхождение файла не подтверждено, и такая модель идёт по пункту 2.
- Если происхождение установить нельзя (модель из случайного зеркала, «улучшенная» сборка неизвестного автора), заменить её моделью с известным разработчиком или пользоваться ею только там, где у неё нет доступа к важным данным и системам.
- Кто делает: тот же ответственный вместе с руководителем, который решает, куда подключать модель.
- Чем проверить: у моделей без известного происхождения в списке записано, к чему у них есть доступ, и в этом перечне нет рабочих систем с деньгами, клиентскими данными и правом отправлять сообщения от имени компании.
- Ограничить права модели и вести журнал её действий по правилам из первой части: только время, вид действия и система, без содержимого писем, файлов и переписки, с проверкой на тестовой копии, что персональные данные и пароли в запись не попадают, а если пароль или ключ всё же попал, сменить его и удалить запись. Если журнал вести нельзя (например, модель встроена в чужой сервис без доступа к её действиям), считать, что наблюдения нет, и давать такой модели меньше прав, а не больше.
- Кто делает: администратор.
- Чем проверить: проверка на тестовой копии, что запрещённые действия не выполняются, и запись о том, для каких моделей журнал есть, а для каких нет.
Итог
Препринт формально определяет скрытую способность через две игры, «найди ключ» и «угадай, что спрятано», и сводит их стойкость к стойкости цифрового замка на хеш-функции Keccak. Алгоритм вручную компилируется в пороговые схемы, затем в блоки GLU, которые умеют выполнить расшифрованные веса без отдельной схемы умножения. На опытах дообучение, обучение с помехами и подбор 16-битного ключа не вызвали спрятанную химическую способность (8-битный ключ перебор нашёл), тогда как обычную «закладку» с паролем дообучение раскрыло. Цена конструкции миллиарды параметров, и без маскировки её веса по простым статистикам резко отличаются от случайных; с маскировкой простые статистики сходятся, но авторы наблюдали необычные корреляции весов, которые, по их словам, могут помочь её заметить; надёжный способ обнаружения в работе не показан.
Я занимаюсь ИИ-агентами и автоматизацией. Если хотите посмотреть мои проекты или обсудить свою задачу, загляните в портфолио.
Источники
- Andis Draguns, Sumeet Ramesh Motwani, Raymond Douglas, Christian Schroeder de Witt: AI Models Can Provably Hide Arbitrary Capabilities. arXiv:2610.13928, 09.10.2026. https://arxiv.org/abs/2610.13928 (полный текст: https://arxiv.org/html/2610.13928v1)