Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Как ИИ Claude расшифровал происхождение параметров криптографических кривых NIST ECDSA

Как ИИ Claude расшифровал происхождение параметров криптографических кривых NIST ECDSA

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

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

Как ИИ Claude расшифровал происхождение параметров криптографических кривых NIST ECDSA

Загадочные параметры стандартов NIST ECDSA

Алгоритм ECDSA выступает в роли наиболее распространенного стандарта эллиптической криптографии. Организация NIST закрепила его в 2000 году в спецификации FIPS 186-2, которая содержит стандартные эллиптические кривые различных размеров и уровней безопасности. Для кривых над простыми и двоичными полями спецификация определяет параметр seed (зерно), хэш-значение которого формирует коэффициент b кривой. Агентство национальной безопасности (АНБ) предоставило данные параметры без каких-либо пояснений или обоснований их происхождения.

Реклама

В публикации приводится пример шестнадцатеричного значения для кривой P-256, опубликованного без информации о его появлении. Математики Нил Коблиц и Альфред Менезес описали возникшую дискуссию в научной работе «Загадка, завернутая в тайну». Позже этот вопрос привел к любительским расследованиям и учреждению денежной награды для того, кто сможет обнаружить источник этих чисел.

Основная рабочая гипотеза предполагала, что давний сотрудник АНБ Джерри Солинас создал параметры путем хэширования шутливой фразы. В заявлении 2015 года Солинас вспоминал, что сообщение было связано с фразой вроде «Дайте Бобу и Джерри прибавку к зарплате» или аналогичной формулировкой. Он утверждал, что код написал Боб Рейтер, однако архивы того периода обнаружить не удалось. После смерти Солинаса в 2023 году другие коллеги не смогли прояснить ситуацию, из-за чего вопрос оставался открытым.

Восстановление параметров с помощью языковой модели

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

Меньше чем за полчаса модель Claude установила происхождение исходных данных для кривых P-192, P-224, P-256, P-384 и P-521. Оказалось, что они получены с помощью генератора случайных чисел lrand48 из стандартной библиотеки языка Си, инициализированного с использованием меток времени Unix без применения каких-либо хэш-функций.

Метод сканирования и работы генератора

Генератор выдавал по 20 байт за одну итерацию в качестве кандидатного зерна, а опубликованный параметр для кривой P-256 оказался 1842-м кандидатом в последовательности. Исчерпав поиск по текстовым фразам, модель перешла к анализу со стороны самого генератора, предположив использование программного обеспечения на базе генератора псевдослучайных чисел из библиотек Си девяностых годов.

Сканирование выполнялось бит за битом по каждой опубликованной последовательности с тестированием соседних блоков. Среди проанализированных данных выделилась закономерность: если записать их в виде пяти 32-разрядных слов, то в четырех из десяти случаев старший бит каждого из 20 слов равен нулю. Такая вероятность случайного совпадения составляет один к 5810.

Это наблюдение указало на функцию lrand48, представляющую собой линейный конгруэнтный генератор, который возвращает только 31 старший бит из 48-битного состояния. Для этих четырех последовательностей алгоритм восстановил внутреннее состояние перебором всех 17 скрытых бит первого слова с проверкой следующих четырех слов.

Реклама

Для остальных параметров потребовалось решить задачу сокращения базиса решетки с помощью алгоритма Ленстры — Ленстры — Ловаса (LLL). В результате все пять параметров для простых кривых, а также аналогичные значения из стандарта ANSI X9.62 подчинялись общему шаблону и позволили полностью восстановить исходные 160-битные значения.

Временные метки и базовые точки кривых

Поскольку генератор работает как в прямом, так и в обратном направлении, модель прокрутила состояния до точки инициализации srand48, которая определяется по младшим 16 битам, равным значению 0x330E. Подобная конфигурация возникает единожды каждые 65 536 шагов.

Для всех десяти параметров простых кривых инициализация соответствовала меткам времени Unix в период с мая 1997 по апрель 1998 года. Четыре инициализации двоичных кривых относились к февралю 1984 года, однако их удвоение переносило метки на середину апреля 1998 года, что позволило исследователям предположить деление тактовой частоты пополам в исходной программе.

Происхождение базовых точек

Каждая кривая задает фиксированную базовую точку G, кратной которой выступает любой открытый ключ ECDSA. Восстановленный параметр seed не определяет ее напрямую. Для шести кривых, сгенерированных в мае 1997 года (P-192, а также ANSI X9.62 prime192v2, prime192v3 и prime239v1–v3), базовые точки прослеживаются до генератора в FreeLIP — пакете арифметики длинных чисел Арьена Ленстры, код которого также применялся в библиотеке NTL Виктора Шоупа.

В этом методе генератор инициализируется малым целым числом, первые семь результатов отбрасываются, кандидатные координаты x берутся из 26-битных выходов по модулю p, а процедура повторяется, пока точка не окажется на кривой. Идентифицированные инициализации составили числа 20000 для P-192, значения для серии prime239, а также параметры для вариантов prime192.

Оценка безопасности и нерешенные вопросы

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

Тем не менее, часть вопросов осталась открытой. Не каждая 20-байтная последовательность приводила к рабочей кривой, причем некоторые потенциально пригодные варианты были пропущены генератором. Например, в последовательности P-256 кандидат под номером 876 также образует корректную кривую правильного порядка, однако разработчики стандарта выбрали вариант под номером 1842.

Одна из бинарных кривых, B-163, сопротивлялась попыткам восстановления, а базовые точки для кривых P-224, P-256, P-384 и P-521 остаются неизвестными. Награда за решение задачи будет передана в организацию Internet Security Research Group, а исследователи опубликовали код воспроизведения под лицензией CC0.

Реклама
01.