Модели и платформы ИИ
Anthropic заявляет, что Claude установила связь начальных значений кривых NIST ECDSA с генератором случайных чисел из 1990-х

16 октября 2026 года Frontier Red Team компании Anthropic сообщила в научной публикации, что внутренняя исследовательская модель Claude установила происхождение начальных значений кривых NIST ECDSA: их создал генератор случайных чисел lrand48 из библиотеки C, инициализированный временными метками Unix. Так был дан ответ на вопрос о происхождении этих значений, остававшийся открытым с тех пор, как АНБ предоставило их без объяснений.
Необъяснённые начальные значения АНБ
ECDSA — наиболее широко используемый стандарт криптографии на эллиптических кривых. NIST принял его в 2000 году в составе стандарта цифровой подписи FIPS 186-2, в котором перечислены стандартные эллиптические кривые разных размеров и уровней безопасности. Для кривых над простыми и бинарными полями в спецификации был опубликован параметр начального значения, хеш которого определяет коэффициент b кривой. АНБ предоставило эти начальные значения без объяснений и обоснований. В публикации в качестве примера приводится начальное значение кривой P-256 — C49D3608 86E70493 6A6678E1 139D26B7 819F7E90, — опубликованное без какой-либо информации о его происхождении.
Нил Коблиц и Альфред Менезес изложили суть спора в статье «Загадка, обёрнутая в тайну», а позднее вопрос о происхождении начальных значений привлёк внимание любителя, который провёл собственное расследование; за их обнаружение также назначили вознаграждение. Согласно наиболее распространённой версии, начальные значения сгенерировал давний сотрудник АНБ Джерри Солинас, взяв хеш забавной парольной фразы. В заявлении Солинаса за 2015 год, приведённом в публикации, он вспоминал: «Сообщение было примерно таким: „Дайте Бобу и Джерри прибавку“ или „Боб и Джерри рулят“ — или что-то в этом роде». По его словам, код написал Боб Рейтер, а архивов того времени найти не удалось. Солинас умер в 2023 году, а другие коллеги не откликнулись, поэтому вопрос о том, как были получены начальные значения, остался открытым.
Как Claude восстановила начальные значения
Несколько сотрудников Anthropic безуспешно пытались найти начальные значения, взяв за основу версию о забавной парольной фразе, которая, как утверждается в публикации, оказалась неверной. В октябре 2026 года сотрудник Anthropic спросил внутреннюю исследовательскую модель, сможет ли она выяснить, как были сгенерированы эти значения, не указывая на предполагаемую зацепку. По сообщению Anthropic, менее чем за полчаса Claude установила происхождение начальных значений кривых NIST P-192, P-224, P-256, P-384 и P-521: это были выходные данные генератора случайных чисел lrand48 из библиотеки C, инициализированного временной меткой Unix; хеш-алгоритм не использовался. Программа-генератор на каждой итерации выбирала 20 байт в качестве кандидата на начальное значение, а опубликованное значение P-256 оказалось кандидатом № 1842 в ходе её работы.
Когда поиск по фразам исчерпал себя, Claude перешла к анализу самого генератора. Она предположила, что использовалось программное обеспечение на основе генератора псевдослучайных чисел, входившего в состав библиотек C 1990-х годов и выдававшего достаточно слабые результаты, чтобы их можно было распознать. Сканер модели побитно проходил по каждому опубликованному начальному значению, проверяя соседние фрагменты как возможные последовательные выходные данные генератора образца 1990-х годов; всего он перебрал 34 сочетания генератора и фрагментов выходных данных. Во всех начальных значениях выделился один закономерный признак: если представить их в виде пяти 32-битных слов, то у четырёх из десяти старший бит каждого из всех 20 слов равен нулю; вероятность случайного совпадения такой комбинации составляет 1/5810. Это указало на lrand48 — линейный конгруэнтный генератор, который возвращает только старшие 31 бит 48-битного состояния. Для этих четырёх начальных значений Claude восстановила состояние генератора, перебрав все 2^17 возможных значений 17 скрытых битов первого слова и проверив, следуют ли за ним остальные четыре слова. Для всех четырёх проверка прошла успешно.
Начальные значения кривых над простым полем были получены тем же генератором lrand48, хотя в каждом выходном значении сохранялось меньше битов. Восстановление внутреннего состояния усечённого линейного конгруэнтного генератора — классическая задача решётчатых методов. Claude решила её с помощью редукции базиса Ленстры — Ленстры — Ловаса (LLL), применив алгоритм к каждому возможному окну. Все пять начальных значений кривых NIST над простым полем, а также ещё пять из стандарта ANSI X9.62 соответствовали одной и той же схеме: lrand48() >> 23. Каждое восстановленное 48-битное состояние позволяет заново получить все 160 бит соответствующего начального значения.
В публикации также воспроизводятся записанные внутренние рассуждения Claude во время сеанса. Модель проверила, не работает ли она в симулированной тестовой среде, и затем заключила: «Это подтверждено прямыми вычислениями с моей стороны: совпадение на 160 бит при 32-битном начальном значении и небольшом индексе — случайные совпадения исключены (10 × 160 бит). Это реальный результат».
Временные метки и базовые точки
Поскольку генератор так же легко работает в обратном направлении, как и в прямом, Claude прокрутила состояние каждого начального значения назад до состояния инициализации srand48, которое можно распознать по младшим 16 битам, равным 0x330E; такое состояние встречается раз в 65 536 шагов. Инициализация всех десяти начальных значений кривых над простым полем соответствовала временным меткам Unix между маем 1997 года и апрелем 1998 года. Временные метки инициализации четырёх кривых над бинарным полем указывали на февраль 1984 года; если удвоить эти временные метки, они соответствуют 17 апреля 1998 года — дате на две недели позже запуска для P-224. Это привело команду к предположению, что программа могла делить показания часов пополам.
Клод также установил происхождение некоторых базовых точек эллиптических кривых. Для каждой кривой задаётся базовая точка G, кратной которой является каждая открытая ECDSA-ключевая точка; восстановленное начальное значение её не определяет. Базовые точки шести кривых, сгенерированных в мае 1997 года, — P-192 и примерных кривых ANSI X9.62 prime192v2, prime192v3 и prime239v1–v3 — восходят к генератору случайных чисел из FreeLIP, пакета Arjen Lenstra для арифметики длинных целых чисел; этот код также вошёл в ранние версии библиотеки NTL Виктора Шупа. В соответствии с этим алгоритмом генератор получает небольшое целое число в качестве начального значения, семь его выходных значений отбрасываются, а возможные координаты x выбираются из 26-битных выходных значений, приведённых по модулю p; выбор повторяется, пока x не окажется на кривой. Определённые Клодом начальные значения генератора: 20000 для P-192; 20420, 20507 и 20509 для prime239v1–v3; 20512 и 20517 для prime192v2 и v3. По заявлению Anthropic, насколько ей известно, происхождение базовых точек NIST ранее не объясняли; базовые точки P-224, P-256, P-384 и P-521 этому алгоритму не соответствуют.
Оценка безопасности и открытые вопросы
Anthropic заявляет, что полученные результаты не означают взлома криптографической системы, новой атаки или уязвимости кривых ECDSA. Команда сообщила, что начальные значения создал распространённый генератор псевдослучайных чисел, запускавшийся по часам; этот метод теперь может воспроизвести любой. По мнению команды, это оставляет гораздо меньше возможностей для намеренного вмешательства и укрепляет уверенность в безопасности параметров. В публикации результат представлен как заключительная глава и конец многолетних спекуляций; читателям сообщают, что предпринимать ничего не нужно, поскольку большинство исследователей и так доверяли этим кривым.
Некоторые вопросы остаются открытыми. Не каждое начальное значение-кандидат длиной 20 байт позволяло получить пригодную кривую, и команда заметила, что некоторые потенциально пригодные варианты пропустили. Опубликованное начальное значение P-256 — кандидат 1842, однако кандидат 876 из того же запуска также даёт кривую нужного порядка, причём параметры выбраны тем же способом, что и у опубликованной кривой. При запуске для P-224 пропустили три таких кандидата, а в двух запусках, использованных для примерных кривых ANSI X9.62, — ещё семь. Поскольку пропущенных кандидатов было немного, команда считает маловероятным, что выбирали ослабленные кривые, хотя в принципе нельзя исключить, что кривые с определённым свойством могли выбрать путём поиска по временным меткам. Одно начальное значение восстановить так и не удалось: пятое двоичное значение, B-163, не совпало ни с одним вариантом, который проверял Клод. Базовые точки P-224, P-256, P-384 и P-521, а также двоичных кривых NIST, по-прежнему неизвестны.
Вознаграждение в размере $36,864 за обнаружение начальных значений передадут Internet Security Research Group; в публикации также благодарят Filippo Valsorda за организацию вознаграждения и посмертно отдают должное Solinas. Авторами работы указаны John Wood, Henry de Valence, Ava Howell, Zack Voase, Lucy Sweet, Amir Omidi, Paul Crowley, Iain McGinniss, Nicholas Carlini и Steve Weis. Код для воспроизведения результатов, размещённый на странице, передан в общественное достояние по лицензии CC0 1.0 Universal.












