← На главную

Reasoning-блоки OpenAI и Anthropic переиспользуют, угадывают мысли

29.05.2026 10:06 · hackernews

Один исследователь безопасности потратил уикенд на изучение зашифрованных «thinking»-блоков в API от OpenAI и Anthropic. Всё началось с того, что он настраивал агента на OpenClaw и получил странную ошибку: API сообщила, что не может проверить подпись в блоке reasoning. Это заставило его копнуть глубже.

Оказалось, что все современные reasoning-модели вроде Claude и GPT прячут свои цепочки мыслей (chain-of-thought, CoT) от пользователя. Но в API они всё равно отправляют их клиенту — только в зашифрованном виде. Клиент должен просто переслать эти бинарные блоки обратно на сервер при следующем запросе. Внутри — Base64-строка, похожая на аутентифицированный шифротекст. У OpenAI структура похожа на стандарт Fernet token, у Anthropic — сложнее, с 64-байтным полем, которое называется «подписью», но на деле подписи там нет.

Зачем это вообще нужно? Потому что API часто работают без сохранения состояния (stateless, zero-retention). Сервер не хранит историю диалога — её таскает клиент. Зашифрованные блоки позволяют модели «вспомнить», о чём она думала, не раскрывая мыслей пользователю.

Исследователь проверил главные уязвимости: replay и side channel. С replay всё оказалось просто — блоки можно переиспользовать в разных сессиях и даже разных аккаунтах. У OpenAI — даже между разными моделями. Это значит, что провайдеры используют один глобальный ключ для шифрования всех данных. Вывод: если злоумышленник может вставить свои блоки в чат (например, через JSON-инъекцию), модель может повести себя непредсказуемо.

Ещё интереснее side channel. Исследователь доказал, что размер зашифрованного блока, количество токенов (reasoning_tokens) и даже wall-clock время ответа зависят от того, о чём модель думает. Он провёл эксперимент: модель было велено думать о секретном бите — если 0, делать короткую операцию, если 1 — долгий checksum. По метрикам (длина блока, время) с высокой точностью угадывался бит. Даже если пользователь не видит сам блок, он может замерить время ответа через обычный чат-интерфейс и сделать то же самое.

Автор попытался вытащить таким образом скрытые system prompt'ы моделей — но ничего не вышло. GPT и Claude в API-режиме вообще не имеют system prompt'а, а выдумывают его, если сильно давить. Зато извлекать конкретные прикладные секреты — да, реально.

Он отправил отчёты в OpenAI и Anthropic. OpenAI сказала, что не смогла воспроизвести. Anthropic заявила, что не видит угрозы, но обновит документацию для разработчиков. Исследователь считает, что провайдерам стоит срочно менять управление ключами — чтобы блоки нельзя было переиспользовать между аккаунтами. А с side channel всё сложнее: проблема в том, что сам процесс мышления может быть источником утечки, и «политические шлюзы» перед reasoning тоже требуют reasoning — замкнутый круг.

Читать оригинал →