Рейтинг:1

Что такое хороший и надежный закрытый ключ для кривых ECC?

флаг it

Я новичок в низкоуровневых математических деталях криптографии, хотя до этого работал в криптографии 2,5 года. Так что, если я ошибаюсь в какой-либо из приведенных ниже частей, пожалуйста, поправьте меня без жеста фейспалма;)

Уже есть некоторые обсуждения по этому поводу, а также вопросы о том, что является действительным закрытым ключом, но ни один из этих ответов не является убедительным. По крайней мере, я не согласен с их аргументами, что любой действительный закрытый ключ является хорошим ключом.

например

EdDSA (Ed25519) является ли любое случайное число достаточным для хорошего закрытого ключа? Да .... ответил 28 окт. Фрэнк Денис

Действительны ли все возможные закрытые ключи EC? @Fozi: 1 не лучше и не хуже, чем 0x3b6ddba1f4b325cee4505084bc507d2019e86539f8d4be027004b69f9aa0bc74, если они имеют одинаковую вероятность появления, а именно 1/n или около 1/2256, так что у противника нет большей вероятности успеха, угадывая одно или другое первый. Обратите внимание, что вероятность получения любого из них по отдельности ничтожно мала, как и любой другой возможный секретный скаляр. ✓ Брезгливый Оссифрэйдж 11 сен.

Вот мой аргумент:

AFAIK, открытый ключ вычисляется путем умножения н времена образующей точки G, где н это случайное число, сгенерированное как закрытый ключ.

Понятие паб = n * G

Тогда для любой известной кривой я могу вычислить миллион открытых ключей в виде радужной таблицы, где n находится в диапазоне от 1 до 1 000 000. Это заняло бы всего 32 МБ в случае 256-битной кривой.Если кто-то использует какое-либо значение в этом диапазоне для создания открытого ключа, я могу легко определить его, сравнив его с таблицей. На практике тестовые векторы для данной кривой обычно начинаются с n = 1, 2, 3,... например https://crypto.stackexchange.com/a/21206/95843

В более диком масштабе кто-то может хранить даже 1 ТиБ или 1 ПиБ (о, деньги!) Этот тип таблицы. Так что в этом смысле любой закрытый ключ меньше 2^20 или даже 2^50 не годится!

Теперь из вычитания сверху исчерпана нижняя граница приватного ключа. Но есть ли верхняя граница? Или любой действительный число выше нижней границы является хорошим и достаточно пуленепробиваемым?

флаг jp
0x3b6ddba1f4b325cee4505084bc507d2019e86539f8d4be027004b69f9aa0bc74 — довольно хороший и надежный закрытый ключ. Вы должны использовать тот. (это шутка)
jjj avatar
флаг cn
jjj
Зачем кому-то создавать такую ​​таблицу? Никто никогда не сможет взломать какой-либо случайно сгенерированный ключ, потому что маловероятно, что они находятся в этом диапазоне. Тем не менее, они так же хороши, как и любой другой случайный ключ.
jjj avatar
флаг cn
jjj
Если вы исключите первый миллион, то 2-й миллион станет новым первым. По индукции это будет означать, что ни один ключ не является хорошим
Match Man avatar
флаг it
Большое спасибо всем за ответы и комментарии к этой теме. Я закрываю беседу, так как уже получил то, что ищу.
Рейтинг:7
флаг us

Что такого особенного в первый 1 миллион ключи? Разве нет также небольшой радужной таблицы, содержащей ключи в диапазоне от 1M до 2M, и небольшой радужной таблицы, содержащей ключи в диапазоне от 2M до 3M, и небольшой радужной таблицы, содержащей ключи в диапазоне от 842347283958M до 842347283959M и т. д. и т. д.?

Та же логика, которая заставляет вас беспокоиться о маленьких ключах (менее 1M), может также заставить вас беспокоиться о ключах в Любые спектр! Независимо от того, какой у меня ключ, там действительно есть маленький радужный стол. где-то это может позволить кому-то легко сломать мой ключ. Но злоумышленник должен знать, какой из $2^{236}$ из возможных радужных таблиц (диапазонов ключей) попробовать!

Я думаю, что это ошибка думать о особый диапазон ключей (например, от 0 до 1M) как проблематичный особым образом. Если самый низкий диапазон ключей особенно плох, то процесс генерации ключей должен их избегать. Но тогда следующий самый низкий диапазон ключей становится плохим по той же логике, поэтому вам также следует избегать их. Эта логическая цепочка завершается без выбора безопасных ключей.

флаг cn
Проблема может заключаться в том, что если человек вручную выбирает `n`, у него есть сильная тенденция выбирать очень низкие значения. Я знаю некоторых людей, которые могут распознать хэш md5 пустой строки, потому что они так часто его видели. Не удивлюсь, если некоторые люди, которые много работают с криптографией, смогут распознать некоторые ключи, которые постоянно используются в примерах.
Match Man avatar
флаг it
Потому что это легко понять. И дешево. Также благодаря некоторым «экспертам» в области безопасности утверждают, что 0 или 1 так же безопаснее, как 0x3b6ddba1f4b325cee4505084bc507d2019e86539f8d4be027004b69f9aa0bc74, поэтому кто-то будет использовать их в качестве пуленепробиваемого «случайного» числа для генерации своего открытого ключа. И способная сторона может просканировать весь открытый ключ, чтобы увидеть, не использует ли кто-то «к счастью» слишком маленькое случайное число для его генерации. Те же правила применимы и к тому, почему «123456» или ваш день рождения не являются хорошим паролем. Поскольку их все так легко попробовать.
флаг us
Безопасность не является неотъемлемым свойством *конкретного* ключа. Это происходит из *процесса* выбора ключа. Если у вас есть правильный процесс, то все эти проблемы исчезнут.
Match Man avatar
флаг it
>Эта логическая цепочка завершается без выбора ключей от сейфа.
Match Man avatar
флаг it
Во-вторых, цепочка не повторяется бесконечно из-за ограничения памяти. Ссылаясь на https://theconversation.com/the-worlds-data-explained-how-much-were-production-and-where-its-all-stored-159964#:~:text=In%202018%2C%20the% 20total%20amount,One%20zettabyte%20is%208%2C000%2C000%2C000%2C000%2C000%2C000%2C000%20bits., до 2020 года в мире существует 59 ZB хранилищ. Тогда *почти* невозможно сохранить таблицу 590 ZB, даже при использовании технологии сжатия. В этом смысле случайное число больше 590 ZB считается пуленепробиваемым. Что больше 2^82.
Match Man avatar
флаг it
Что превышает 2 ^ 82.... Но это все еще относительно мало по сравнению со всем пространством ключей, например 2 ^ 256 или 2 ^ 512.
флаг us
Таким образом, любой ключ выше $2^{82}$ является "пуленепробиваемым". Тогда вы предлагаете иметь процесс генерации ключей, который полностью исключает ключи
Match Man avatar
флаг it
Нет, дело в том, что каждый может выбрать диапазон, который он считает достаточно безопасным. А способный отряд, или, скажем, хищник, преследует только самую легкую цель.
Рейтинг:2
флаг ng

Вопрос правильный, что любой закрытый ключ меньше 250 может быть найдена из открытого ключа, и метод, который он описывает, будет практичным. Однако

  • Есть гораздо лучшие методы, которые могут найти ключ меньше, чем к2 с усилием, пропорциональным к (например. Поллард Ро) и мало памяти, со значительной вероятностью. Таким образом 250 операций достаточно, чтобы найти ключ меньше 2100 со значительной вероятностью.
  • 250 — это небольшое число для количества операций по взлому криптографии. В 1970-х годах АНБ согласилось, что DES имеет 256 ключи, потому что они знали, что могут сломать это, если потребуется. К 2000 году базовый уровень безопасности составлял 280. Современная базовая линия может быть 296, а практика для новых систем порядка 2128 или больше. Это еще до того, как приступить к учету приведенных выше атак.

есть ли верхняя граница?

Да. Для каждого метода и кривой подписи на основе эллиптических кривых существует предписанный набор закрытых ключей. За ЭЦДСА, это интервал [1, н-1] где н порядок генератора (а не н в вопросе). Значение н зависит от кривой. Для кривой secp256k1, н чуть ниже 2256. Таким образом, ожидаемое усилие найти закрытый ключ с помощью открытого ключа с использованием ро Полларда (или любого другого известного метода) составляет порядка 2128 операции (добавления на эллиптической кривой) и многое другое.

Если верхняя граница будет превышена, закрытый ключ будет отклонен соответствующим программным обеспечением. Если бы он не был отклонен, и программное обеспечение работало бы правильно с математической точки зрения, а для систем подписи, где закрытый ключ - это непосредственно то, что умножает генератор для формирования открытого ключа (как в вопросе и ECDSA), ключ работал бы как если бы оно было уменьшено по модулю н (порядок генератора), как для генерации открытого ключа, так и для подписи.

Правила генерации закрытого ключа зависят от системы подписи; например Эд25519 указывает пространство для закрытого ключа, которое намного больше, чем н, чтобы повысить устойчивость к некоторым атакам (но не для нахождения закрытого ключа, генерирующего действительную подпись).


Удаление возможных ключей известным злоумышленнику способом уменьшается безопасности, потому что у противника меньше ключей для проверки. Это терпимый удалить несколько возможных ключей. Ни в коем случае не желательно.

Обычный/рекомендуемый/лучший способ выбрать закрытый ключ: равномерно случайным образом в наборе допустимых значений закрытых ключей. Можно исключить некоторые значения (например, небольшие значения, как в вопросе), но это только до тех пор, пока отклоняется лишь небольшая часть значений. Например. для ECDSA на secp256k1 было бы нормально отклонить закрытые ключи меньше 2192, потому что это удаляет лишь незначительную долю около 2-64 (0.000000000000000005%) пространства ключей. Но это также бессмысленно, потому что маловероятно, что будет сгенерирован один из исключенных ключей. А увеличение нижней границы, чтобы эта пропорция стала не пренебрежимо малой, существенно уменьшит наш выбор ключей, позволяя специально разработанному алгоритму поиска ключа найти его легче, чем при равномерно случайном выборе.

Закрытый ключ ECDSA на secp256k1 можно сгенерировать путем свертывания шестигранный кубик 64 раза (если все первые 23 броска дают одинаковое значение, спросите кости и остановитесь). Добросовестно используйте 64 результата в обратном порядке. Результатом является действительный закрытый ключ (проведенный нами тест гарантирует, что результат находится в соответствующем интервале).

Match Man avatar
флаг it
Большое спасибо, что поделились своим мнением по этой теме. Да, 2 ^ 128 - это справедливое число, если рассматривать более «способную» партию, чем гражданское лицо.Но говоря о верхней границе «хорошего» ключа, мой вопрос заключается в том, что если любой допустимый достаточно большой ключ также является хорошим ключом, это означает, что нет верхней границы между максимально возможным хорошим ключом и самым большим действительным ключом. например вся область пространства ключей имеет вид: [наименее действительный закрытый ключ, 2^128] - [2^128+1, (диапазон хороших ключей), самый большой правильный ключ] - [пробел, самый большой действительный ключ] - ª [неверный ключ...]
fgrieu avatar
флаг ng
@MatchMan: удаление возможных ключей способом, известным противнику, _снижает_ безопасность, потому что у противника меньше ключей для проверки. _Допустимо_ удалить несколько возможных ключей. Ни в коем случае не желательно.
Match Man avatar
флаг it
Спасибо, теперь мне действительно ясно.
флаг id
@fgrieu: если кто-то генерирует много ключей и, например, 1% из них может быть протестирован методом перебора на 10% дешевле (стоимость *за кандидата*), чем остальные, тогда злоумышленник сможет найти 1% ключевого пространства, затрачивая всего 0,9% усилий, необходимых для поиска. все это. Если кто-то сгенерирует достаточно ключей, чтобы хотя бы некоторые из них, вероятно, попали в этот 1%, это уменьшило бы усилия злоумышленника по поиску хотя бы одного ключа примерно на 10%. Напротив, исключение 1% ключей уменьшит требуемые усилия злоумышленника только на 1%.
fgrieu avatar
флаг ng
@supercat: поиск ключа в ECC (или DSA, или RSA) не осуществляется путем сканирования пространства ключей. У Ed25519 есть ключи $>2^{252}$, и сканирование даже 0,00–01% (где … заменяет 40 нулей) из них недостижимо, несмотря на все усилия, потраченные впустую на майнинг биткойнов. Существуют атаки, менее далекие от осуществимых, которые напрямую атакуют открытые ключи. В отличие от симметричной криптографии и RSA в гораздо меньшей степени, одновременная атака на множество ключей ECC, по-видимому, не облегчает взлом одного из них. И я не обнаружил, что существуют значительные классы ключей (1%), которые могут быть атакованы намного быстрее (-10%), чем другие.
флаг id
@fgrieu: Мой ответ был связан с общей концепцией, что нельзя определить количество «проблемных» ключей достаточно широко, чтобы можно было случайно нажать на один, при этом оно не должно быть настолько широким, чтобы их исключение уменьшило пространство для ключа грубой силы. Это было бы беспочвенно верным для криптосистем, где вероятность попадания «плохого» ключа была бы практически неотличима от нуля, но я не думаю, что это было бы справедливо для криптосистем, где это не было бы беспричинно верным.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.