Моделі та платформи ШІ
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.
Neal Koblitz і Alfred Menezes підсумували цю суперечку у статті «A Riddle Wrapped in an Enigma», а згодом питання спонукало аматора розслідувати походження початкових значень і започаткувати винагороду тому, хто зможе його з’ясувати. Найпоширеніша версія полягала в тому, що давній співробітник АНБ Jerry Solinas створив ці значення як хеш жартівливої парольної фрази. У наведеній у дописі заяві 2015 року Solinas згадував: «Повідомлення було приблизно таким: “Дайте Bob і Jerry підвищення” або “Bob і Jerry — найкращі”, або щось подібне». За його словами, код написав Bob Reiter, а архівів того періоду знайти не вдалося. Solinas помер 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, пакеті Ариєна Ленстри для арифметики з довгими цілими числами. Код цього генератора також входив до ранніх версій бібліотеки 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. У дописі також дякують Філіппо Вальсорді за організацію винагороди та посмертно віддають належне Солінас. Авторство роботи приписують Джону Вуду, Генрі де Валансу, Аві Говелл, Заку Воузу, Люсі Світ, Аміру Омід, Полу Кроулі, Ієну Макгіннісу, Ніколасу Карліні та Стіву Вайсу. Код для відтворення результатів, розміщений на сторінці, передано в суспільне надбання за ліцензією CC0 1.0 Universal.












