Споры о «закладке в начальном значении» эллиптических кривых NIST длились 25 лет. 16 октября Anthropic дала ответ: начальные значения нескольких кривых — от P-192 до P-521 — не были хешами паролей, которые кто-то спрятал. Их выдал генератор случайных чисел lrand48 из библиотеки C 90-х годов, а начальным значением служила тогдашняя временная метка Unix. Начальное значение P-256 соответствует 1842-му кандидату, выданному генератором, запущенным в ту самую секунду — 16 августа 1997 года в 9:52:34 по пекинскому времени. Внутренняя модель Claude нашла его менее чем за полчаса, а опубликованный первоначальными авторами скрипт позволяет посимвольно воспроизвести результат. Команда пожертвовала вознаграждение в размере 36 864 долларов некоммерческой организации, стоящей за Let's Encrypt.
В итоге теория заговора свелась к тому, что кто-то посмотрел на часы. Вполне соответствует моим представлениям об инженерах.
Несколько замечаний с инженерной точки зрения:
1. Bitcoin и Ethereum используют secp256k1 с параметрами a=0, b=7 — никаких начальных значений там нет, так что к вашим криптовалютам эта история вообще не относится. P-256 применяется в passkey и защищённых чипах смартфонов, поэтому кошелькам, подписывающим транзакции с помощью passkey, можно выдохнуть.
2. Нужно сказать и о том, что осталось без объяснения: происхождение ещё одного начального значения и базовых точек четырёх кривых так и не установлено. Кроме того, тогдашняя процедура пропустила некоторые кандидаты, которые выглядели подходящими. На данный момент нет доказательств, что кривые ослабили намеренно.
3. На самом деле частным инвесторам стоит запомнить обратную сторону этой истории. Использовать временную метку как источник случайности для открытых параметров — нормально: они и так публичны, главное — чтобы потом можно было объяснить, как они были получены. А вот использовать временную метку как источник случайности для приватного ключа — катастрофа. Именно это произошло в инциденте Milk Sad в 2023 году: один кошелёк с открытым исходным кодом генерировал мнемонические фразы, подавая системное время на вход генератора случайных чисел. Злоумышленники перебрали все временные значения за несколько лет. По опубликованным данным, было похищено около 900 тысяч долларов.
Я поступаю так: мнемоническую фразу генерирую только на самом устройстве с помощью аппаратного кошелька или надёжного кошелька. Не пользуюсь «генераторами мнемонических фраз» в интернете и не придумываю «осмысленные» фразы сам. Если кошелёк был создан несколько лет назад с помощью малоизвестного инструмента или старой версии программы, проверяю, не сообщалось ли об уязвимостях генератора случайных чисел в этой версии. Если сообщалось — создаю новый кошелёк и перевожу туда средства.
В итоге теория заговора свелась к тому, что кто-то посмотрел на часы. Вполне соответствует моим представлениям об инженерах.
Несколько замечаний с инженерной точки зрения:
1. Bitcoin и Ethereum используют secp256k1 с параметрами a=0, b=7 — никаких начальных значений там нет, так что к вашим криптовалютам эта история вообще не относится. P-256 применяется в passkey и защищённых чипах смартфонов, поэтому кошелькам, подписывающим транзакции с помощью passkey, можно выдохнуть.
2. Нужно сказать и о том, что осталось без объяснения: происхождение ещё одного начального значения и базовых точек четырёх кривых так и не установлено. Кроме того, тогдашняя процедура пропустила некоторые кандидаты, которые выглядели подходящими. На данный момент нет доказательств, что кривые ослабили намеренно.
3. На самом деле частным инвесторам стоит запомнить обратную сторону этой истории. Использовать временную метку как источник случайности для открытых параметров — нормально: они и так публичны, главное — чтобы потом можно было объяснить, как они были получены. А вот использовать временную метку как источник случайности для приватного ключа — катастрофа. Именно это произошло в инциденте Milk Sad в 2023 году: один кошелёк с открытым исходным кодом генерировал мнемонические фразы, подавая системное время на вход генератора случайных чисел. Злоумышленники перебрали все временные значения за несколько лет. По опубликованным данным, было похищено около 900 тысяч долларов.
Я поступаю так: мнемоническую фразу генерирую только на самом устройстве с помощью аппаратного кошелька или надёжного кошелька. Не пользуюсь «генераторами мнемонических фраз» в интернете и не придумываю «осмысленные» фразы сам. Если кошелёк был создан несколько лет назад с помощью малоизвестного инструмента или старой версии программы, проверяю, не сообщалось ли об уязвимостях генератора случайных чисел в этой версии. Если сообщалось — создаю новый кошелёк и перевожу туда средства.