Sebastien Rousseau

ТАЄМНИЧІ

Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години

Питання, яке залишалося відкритим після того, як єдина людина, здатна на нього відповісти, померла у 2023 році, мало буденну відповідь: генератор випадкових чисел 1990-х років, ініціалізований за годинником. Автори кажуть, що ця відповідь зміцнює, а не послаблює їхню впевненість у чесному виборі кривих.

12 хв читання
Banner for: Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години

Питання, яке залишалося відкритим після того, як єдина людина, здатна на нього відповісти, померла у 2023 році, мало буденну відповідь: генератор випадкових чисел 1990-х років, ініціалізований за годинником. Автори кажуть, що ця відповідь зміцнює, а не послаблює їхню впевненість у чесному виборі кривих.

Резюме для керівників

  • Алгоритм ECDSA був прийнятий NIST у 2000 році як частина Стандарту цифрового підпису FIPS 186-2. У специфікаціях публікувалися параметри "зерна" (seed), хеш-значення яких мало визначати коефіцієнт b кривої. АНБ (NSA) надало ці зерна без жодних пояснень чи обґрунтувань.
  • У жовтні 2026 року співробітник Anthropic попросив внутрішню дослідницьку модель з'ясувати, як саме генерувалися ці зерна, не даючи жодних підказок. Менш ніж за пів години Claude виявив, що жодне із зерен не було виходом хеш-функції. Вони були результатом роботи lrand48 - поширеного генератора псевдовипадкових чисел, ініціалізованого за системним годинником.
  • Це відкриття не є криптографічним зламом, новою атакою чи вразливістю в кривих ECDSA. Автори зазначають, що воно зміцнює їхню впевненість у тому, що криві обиралися без бекдорів або навмисних слабких місць.
  • Claude також пояснив базові точки шести кривих від травня 1997 року як такі, що отримані з генератора випадкових чисел у FreeLIP - пакеті довгої цілочисельної арифметики Ар'єна Ленстри. Наскільки відомо авторам, жодна базова точка NIST раніше не мала пояснення.
  • Відкритими залишаються питання: як обиралися базові точки кривих P-224, P-256, P-384 та P-521 і які критерії (якщо вони взагалі були) стояли за пропуском кривих-кандидатів.

Коефіцієнт, що виглядав похідним, і зерно, яке ніхто не міг пояснити #

Алгоритм ECDSA був прийнятий NIST у 2000 році як частина Стандарту цифрового підпису FIPS 186-2. Специфікації його кривих містили параметр "зерна" (seed), хеш-значення якого використовується для визначення коефіцієнта b кривої. На папері це заспокійлива конструкція. Мовляв, якщо коефіцієнт виходить із хешу опублікованого зерна, ніхто не міг підігнати криву вручну.

Цей аргумент надійний рівно настільки, наскільки надійним є саме зерно. Зерна були надані АНБ без жодних пояснень чи обґрунтувань, і в цій прогалині полягає вся проблема. Хеш - це двері в один бік: він доводить, що коефіцієнт випливає із зерна, але нічого не каже про те, звідки взялося саме зерно. Роками ці зерна залишалися в стандарті як непояснені константи.

Існувала легенда, що заповнювала цю прогалину. За найвідомішою версією, Джеррі Солінас, давній співробітник АНБ, згенерував ці зерна з хешу якоїсь жартівливої парольної фрази. Далі в джерелі зазначається, що це виявилося неправдою. У такі історії зазвичай вірять, бо вони конкретні й трохи кумедні, а ще тому, що ніхто не може їх спростувати. Проте як доказ вони не годяться. Практичним наслідком було те, що ніхто не міг перевірити це твердження, а пошуки самої фрази, побудовані на чутках, закінчилися нічим.

Очевидною людиною, яку варто було запитати, був сам Солінас. Джеррі помер у 2023 році, а інші тогочасні колеги не виходили на зв'язок. Це залишило відкритим питання про те, як ці зерна були отримані початково.

Я б сказав, що це правильний погляд на ситуацію: питання походження, яке тримається на пам'яті кількох людей - це крихка основа для стандарту, на якому базуються цифрові підписи. Найцікавіше в тому, що сталося далі, - це те, що чиїсь спогади взагалі не знадобилися. Відповідь лежала в самих опублікованих зернах, чекаючи, поки хтось перевірить правильну гіпотезу.

Тридцять хвилин, жодних підказок і результат, який виявився не хешем #

У жовтні 2026 року допитливий співробітник Anthropic запитав внутрішню дослідницьку модель, чи зможе вона з'ясувати, як були згенеровані ці зерна, не даючи їй жодної зачіпки. Формулювання має значення. Моделі не сказали, що саме шукати, і не дали готової відповіді для підтвердження.

Менш ніж за пів години Claude відкрив походження зерен NIST P-192, P-224, P-256, P-384 та P-521. Результат прямолінійний: жодне із зерен не було результатом роботи будь-якого алгоритму хешування. Вони були виходом генератора випадкових чисел lrand48 зі стандартної бібліотеки C.

Отже, історію з парольною фразою ніколи б і не знайшли, бо не існувало жодної фрази, яку можна було б знайти. Зерна були згенеровані поширеним генератором псевдовипадкових чисел, ініціалізованим за годинником. Це прозаїчне пояснення, і саме в цьому його привабливість: воно не потребує жодного секрету, жодного таємного знання і жодної непоясненої константи.

Механізм простий для опису. Кожна ітерація алгоритму бере 20 байтів із генератора як зерно-кандидат. Кількість ітерацій є цікавою деталлю, оскільки показує, що процес був пошуком, а не одноразовим вибором. Наприклад, для P-256 знадобилося 1842 ітерації, щоб видати стандартизоване зерно. Той, хто запускав цю програму, дозволив їй перебирати кандидатів, доки один із них не породив криву, що відповідала висунутим вимогам.

Автори обережні щодо того, що це означає і чого не означає, і їхнє формулювання варто повторити. Це не криптографічний злам, не нова атака і не вразливість у кривих ECDSA. Жодних дій вживати не потрібно. Вони йдуть на крок далі й кажуть, що це робить їх більш упевненими в тому, що криві обиралися без будь-яких бекдорів чи навмисних вразливостей. Це обережний висновок, і таким він має залишатися. Джерело подає це як упевненість авторів, а це інша річ, ніж суворе доведення невинності кривих. Те, що дає ця знахідка - це буденний, придатний до перевірки звіт замість неперевіреної байки.

Як сканер знайшов відбиток генератора 1990-х років #

Метод заслуговує на увагу, бо це та частина, яку можуть повторно використати інші.

Claude припустив, що програмне забезпечення, яке генерувало криві, використовувало ДПВЧ (PRNG), що постачався з бібліотеками C 1990-х років. Джерело трактує це як здогадку, і вона виявилася вдалою. Вона звузила необмежений пошук до короткого списку кандидатів однієї епохи.

Потім Claude написав сканер. Він проходив уздовж кожного опублікованого зерна біт за бітом і перевіряв, чи є сусідні фрагменти послідовними виходами генератора зразка 1990-х років. Сканування охопило 34 комбінації генераторів і зрізів вихідних даних. Збіг проявився як патерн у старших бітах - такий, що випадково трапляється з імовірністю 1/5810.

Цей патерн був характерним підписом лінійного конгруентного генератора lrand48, який повертає лише старші 31 біт із 48-бітного стану. Саме тут конструкція генератора видає себе. Оскільки lrand48 приховує 17 бітів свого 48-бітного стану під час кожного виклику, вихідні дані мають регулярність, якої не показав би справді випадковий рядок, і сканер, створений для пошуку цієї регулярності, здатен її виявити.

Щоб відновити стан, Claude узяв перше машинне слово і перебрав усі 2^17 значень 17 прихованих бітів. Це невеликий перебір, і він дешевий, оскільки сам генератор надзвичайно простий. Кожен стан-кандидат можна було перевірити на наступному фрагменті зерна, і правильний стан змусив усю послідовність зійтися.

Зерна кривих над простими полями виявилися складнішими, хоча й ненабагато. Вони походили з того самого генератора lrand48, але зберігали менше бітів кожного виходу. Менше видимих бітів означає менше точок опори для здогадки, тож трюк із прямим перебором уже не працює так само легко. Відповідь джерела полягає в тому, що відновлення стану усіченого лінійного конгруентного генератора - це хрестоматійна задача на решітках (lattice problem), яка розв'язується за допомогою алгоритму зведення базису Ленстри-Ленстри-Ловаса (LLL). Модель змогла розпізнати це і застосувати стандартний інструмент без жодної екзотики.

П'ять зерен кривих NIST над простими полями плюс іще п'ять зі стандарту ANSI X9.62 мали однаковий шаблон: lrand48() >> 23. Десять зерен, що поділяють одне правило вилучення бітів - це вагомий доказ єдиного процесу за ними.

Далі йде перевірка, яка відділяє випадковий збіг від справжнього. Кожен відновлений 48-бітний стан заново генерує всі 160 бітів свого зерна, а таке не стається випадково. Частковий збіг міг би бути збігом обставин. Повна регенерація кожного біта - це річ, яку набагато важче списати на випадковість, і саме тому результат можна стверджувати прямо.

Прокручування генератора назад, щоб прочитати годинник #

Відновлення стану говорить вам, як було отримане зерно. Воно ще не говорить, коли саме. Для цього Claude використав властивість генератора: він працює у зворотному напрямку так само легко, як і в прямому. Для кожного зерна Claude відмотував стан назад, доки не досягав форми, яку дає ініціалізація srand48, де молодші 16 бітів дорівнюють 0x330E.

Ця форма сама по собі є відбитком пальця. Якщо відновлений стан можна відмотати назад до значення з молодшими 16 бітами, рівними 0x330E, отже генератор було запущено стандартним чином - зі значення зерна, переданого у srand48. А значенням зерна в цьому випадку був час. Зерна генерувалися за допомогою слабкого ДПВЧ, ініціалізованого часовою міткою Unix.

Внутрішні міркування Claude в той момент зафіксували мить упізнання: усі старші біти були нульовими, 20 бітів, з імовірністю випадковості 1e-6. Це дрібна деталь, але вона показує, що логіка працювала з числами в міру їх появи, а не з історією, складеною заднім числом.

Не всі дати виявилися чистими. Чотири ініціалізації двійкових кривих читалися як лютий 1984 року, а це явно не та дата, якої хтось очікував би для генератора, використовуваного наприкінці 1990-х. Після подвоєння часових міток ініціалізації двійкових кривих відображаються на 17 квітня 1998 року - через два тижні після запуску для P-224. Джерело робить висновок, що програма, можливо, ділила показники годинника навпіл. Це сформульовано обережно, і так і має бути: це запропоноване пояснення того, чому сирі значення читаються як 1984 рік, а подвоєння, яке потрапляє рівно на два тижні після іншого запуску, є промовистим, хоча й не є прямим підтвердженням внутрішнього коду програми.

Я вважаю це найпереконливішою частиною всієї розповіді з причини, не пов'язаної з криптографією. Вигадана історія дала б охайні дати. А ця дала незграбну дату, а потім поправку, яка вибудувала двійкові криві в узгоджену послідовність із запуском P-224. Неохайні дані, які впорядковуються за допомогою простої гіпотези - ось як виглядає справжня історія походження.

У базових точок теж є рецепт #

Зерна визначають самі криві. Базові точки - це окрема справа, і джерело розглядає їх окремо.

Базові точки шести кривих, згенерованих у травні 1997 року (P-192 та п'ять демонстраційних кривих ANSI X9.62: prime192v2, prime192v3 та prime239v1 - v3), походять із генератора випадкових чисел у FreeLIP - пакеті довгої цілочисельної арифметики Ар'єна Ленстри. Ранні версії бібліотеки NTL Віктора Шупа містили той самий код. Цей другий факт важливий для перевірки: генератор існує як опублікований код, який можуть прочитати інші, а не як закритий приватний інструмент.

Рецепт короткий. Ініціалізувати генератор малим цілим числом. Відкинути сім перших виходів. Згенерувати кандидати x-координат із 26-бітних виходів за модулем p. Повторювати цю генерацію кандидатів, доки x не опиниться на кривій.

Claude знайшов початкові зерна генератора: 20000 для P-192, 20420, 20507 і 20509 для prime239v1 - v3, а також 20512 і 20517 для prime192v2 і v3. Це малі цілі числа саме такого виду, які людина вводить у програму вручну, чого якраз і вимагає перший крок рецепта.

Автори роблять тут твердження, яке є скромним і заслуговує на цитування за духом: наскільки їм відомо, жодна базова точка NIST раніше не була пояснена. Застереження належить їм, і воно доречне. Вони не претендують на огляд кожного будь-коли написаного документа, а лише окреслюють межі власних знань.

Потім рецепт перестає працювати. Базові точки кривих P-224, P-256, P-384 і P-521 не вписуються в цей рецепт, і автори не змогли пояснити, як саме їх було обрано. Стаття, яка б замовчала це, виглядала б акуратніше, проте автори залишили цей факт. Пояснення охоплює шість кривих із травня 1997 року і залишає базові точки чотирьох простих кривих NIST непоясненими.

Кандидати, яких пропустили #

Остання знахідка з найбільшою ймовірністю викличе суперечки, тому її варто прочитати максимально точно.

Для P-256 опублікованим зерном є кандидат 1842. Але кандидат 876 того самого запуску також дає криву простого порядку потрібного розміру, з параметрами, обраними так само, як і для опублікованої кривої. Іншими словами, процес пройшов повз криву, яка, на перший погляд, була б цілком прийнятною.

Це не поодинокий випадок. Запуск для P-224 пропустив три такі криві, а два запуски, що стоять за демонстраційними кривими ANSI X9.62, пропустили ще сім.

Автори прямо говорять про те, чого вони не знають. Вони не знають, які критерії могли використовуватися для пропуску кривих, і чи не було це ненавмисним артефактом. Це обмеження, сформульоване як таке, і обережність щодо "ненавмисного артефакту" є чесною позицією: дані показують, що кандидати пропускалися, але не показують чому.

Далі вони пропонують власне судження. Оскільки кількість пропущених кандидатів мала, вони не вважають правдоподібним, що обиралися ослаблені криві. Це обережне міркування про правдоподібність, і воно спирається на підрахунок. Якщо процес пропускає лише жменьку кандидатів загалом, залишається занадто мало простору для цілеспрямованого пошуку вразливості.

Залишається одне застереження, і джерело формулює його як можливість, а не як встановлений факт. Теоретично все ще можна уявити, що ці криві обиралися заради певної специфічної властивості шляхом перебору часових міток, які подавалися на вхід генератора випадкових чисел. Це припущення, прямо позначене як таке. Його не слід читати як доказ чогось, але й тихо відкидати його теж не варто. Добросовісний виклад залишає його на столі як невиключений варіант, водночас зазначаючи, що самі автори вважають версію з ослабленими кривими неправдоподібною.

Що змінює цей результат, і що він залишає відкритим #

Почнімо з того, чого він не змінює. Криві не зламані. Джерело каже про це двічі різними словами, і жодних дій вживати не потрібно. Будь-хто, хто читає це як привід терміново відмовлятися від P-256, зрозумів прочитане неправильно.

Те, що він справді змінює - це статус давнього сумніву. Доки зерна залишалися непоясненими, фраза "надані АНБ без жодних пояснень" висіла постійним знаком питання над стандартом. Тепер цей знак питання має конкретну відповідь. Зерна не були загадковими хешами секретної фрази. Вони були виходом lrand48 із програми, ініціалізованої за годинником, який заново генерує кожен біт кожного зерна з відновленого стану. Пояснення, яке може перевірити кожен, хто має опубліковані зерна, перемагає чутку, яку не може перевірити ніхто.

Тут є важливий момент для засновників та інженерів, які будують системи на основі криптографічних стандартів. Заяви про походження дешево робити і дорого перевіряти, але описана тут перевірка зайняла менш ніж пів години, щойно було поставлене правильне питання. Сканер, перебір 2^17 і зведення решітки - усе це стандартні прийоми. Чого бракувало роками, то це когось, хто виконав би негламурну роботу з їх випробування на опублікованих числах.

Я б також утримався від спокуси переоцінювати сам метод. Джерело повідомляє про результат однієї команди на конкретному наборі зерен. Воно не стверджує, ніби такий самий підхід розколе кожну непояснену константу в кожному стандарті, і я не стверджуватиму цього замість авторів. Те, що він демонструє, є вужчим і, на мою думку, кориснішим: коли походження параметра є загадкою, уважна модель із правдоподібною здогадкою про інструментарій тієї епохи може швидко перевірити цю здогадку й показати хід своєї роботи.

Незавершені справи достатньо чіткі, щоб стати програмою подальших досліджень. Чотири базові точки - для P-224, P-256, P-384 і P-521 - досі не мають пояснення. Пропущені кандидати, такі як 876 перед опублікованим 1842 для P-256, не мають відомого критерію відбору, і ніхто поки не знає, чи був цей пропуск навмисним, чи випадковим артефактом. Чи збереглися ці відповіді в старому вихідному коді, у спогадах живих колег, чи в такому самому пошуку патернів, який розколов зерна - це відкрите питання. На зерна пішло пів години; базові точки вже один раз встояли перед цим підходом.

Часті запитання #

Чи ламає це відкриття криві NIST ECDSA, такі як P-256 або P-384?

Ні. Відкриття того, що зерна кривих були згенеровані функцією lrand48, а не хешем парольної фрази, не створює жодного криптографічного зламу, нової атаки чи математичної вразливості в кривих ECDSA, і через цю знахідку не потрібно проводити жодних виправлень чи міграцій.

Як насправді генерувалися зерна простих кривих NIST?

Кожне 160-бітне зерно було отримане шляхом виклику лінійного конгруентного генератора lrand48 зі стандартної бібліотеки C (зокрема lrand48() >> 23 для п'яти простих кривих NIST та п'яти кривих ANSI X9.62), ініціалізованого через srand48 часовою міткою Unix. Відновлення 48-бітного внутрішнього стану за допомогою алгоритму зведення решітки Ленстри-Ленстри-Ловаса (LLL) відтворює всі 160 бітів кожного опублікованого зерна.

Що залишається непоясненим у параметрах еліптичних кривих NIST?

Хоча базові точки кривої P-192 та п'яти кривих ANSI X9.62 вдалося простежити до генератора випадкових чисел у пакеті FreeLIP Ар'єна Ленстри, ініціалізованого малими цілими числами, базові точки P-224, P-256, P-384 та P-521 не відповідають цьому рецепту, а критерії пропуску раніших кривих-кандидатів простого порядку (таких як кандидат 876 перед кандидатом 1842 у P-256) залишаються невідомими.

Джерела #

Останній перегляд .

Перепублікувати цю статтю

Скопіювати формат для Medium

# Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau

> Originally published at [https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/](https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/)

Початкові зерна (seeds), опубліковані разом із кривими NIST P-192, P-224, P-256, P-384 та P-521, ніколи не були результатами хешування. Вони походили з генератора lrand48 бібліотеки C.

Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/

Скопіювати формат для Mastodon

Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau

Початкові зерна (seeds), опубліковані разом із кривими NIST P-192, P-224, P-256, P-384 та P-521, ніколи не були результатами хешування. Вони походили з генератора lrand48 бібліотеки C.

https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/

Копіювати відформатоване для LinkedIn

Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau

Початкові зерна (seeds), опубліковані разом із кривими NIST P-192, P-224, P-256, P-384 та P-521, ніколи не були результатами хешування.

Ось ключові стратегічні висновки:

- Коефіцієнт, що виглядав похідним, і зерно, яке ніхто не міг пояснити. Алгоритм ECDSA був прийнятий NIST у 2000 році як частина Стандарту цифрового підпису FIPS 186-2.
- Тридцять хвилин, жодних підказок і результат, який виявився не хешем. У жовтні 2026 року допитливий співробітник Anthropic запитав внутрішню дослідницьку модель, чи зможе вона з'ясувати, як були згенеровані ці зерна, не даючи їй жодної зачіпки.
- Як сканер знайшов відбиток генератора 1990-х років. Метод заслуговує на увагу, бо це та частина, яку можуть повторно використати інші.
- Прокручування генератора назад, щоб прочитати годинник. Відновлення стану говорить вам, як було отримане зерно.

Яким є підхід вашої організації до викликів, описаних у цій статті?

→ https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/

#Таємничі #Зерна #За #Криві #Nist

Sebastien Rousseau | CC-BY-4.0
Цитувати цю статтю

Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau

Початкові зерна (seeds), опубліковані разом із кривими NIST P-192, P-224, P-256, P-384 та P-521, ніколи не були результатами хешування. Вони походили з генератора lrand48 бібліотеки C.

BibTeX

@online{rousseau2026таємничі,
  author  = {Rousseau, Sebastien},
  title   = {{Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau}},
  year    = {2026},
  url     = {https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/},
  urldate = {2026}
}

RIS

TY  - GEN
AU  - Rousseau, Sebastien
TI  - Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau
PY  - 2026
UR  - https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/
ER  -

Vancouver

Rousseau S. Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau. sebastienrousseau.com. 2026 Oct 26. Available from: https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/

Chicago

Rousseau, Sebastien. "Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau." sebastienrousseau.com. October 26, 2026. https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/.

APA

Rousseau, S. (2026, October 26). Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/

Перевидати цю статтю

Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau

Початкові зерна (seeds), опубліковані разом із кривими NIST P-192, P-224, P-256, P-384 та P-521, ніколи не були результатами хешування. Вони походили з генератора lrand48 бібліотеки C.

Ця стаття поширюється за ліцензією Creative Commons Attribution 4.0 International. Перевидання вимагає посилання на канонічну URL-адресу.

Таємничі зерна кривих NIST ніколи не були хешами, і Claude з'ясував це менш ніж за пів години — Sebastien Rousseau

Початкові зерна (seeds), опубліковані разом із кривими NIST P-192, P-224, P-256, P-384 та P-521, ніколи не були результатами хешування. Вони походили з генератора lrand48 бібліотеки C.

Originally published at https://sebastienrousseau.com/uk/2026-10-26-tayemnychi-zerna-kryvykh-nist-nikoly-buly/ by Sebastien Rousseau.
Licensed under CC-BY-4.0.