Как выглядит кривая, используемая в биткойне, secp256k1?

Я читаю кривые ECC, и на многих из них я вижу иллюстрацию, которая выглядит как

введите описание изображения здесь

Как выглядит сравнимая кривая в биткойне или все кривые в целом одинаковы?

35 голосов | спросил CHI Coder 007 9 FebruaryEurope/MoscowbSun, 09 Feb 2014 20:47:59 +0400000000pmSun, 09 Feb 2014 20:47:59 +040014 2014, 20:47:59

2 ответа


48

Боюсь, вам не понравится ответ.

Эти кривые - включая кривую secp256k1, y 2 = x 3 + 7` - 'выглядят' хорошо при оценке в типичных полях чисел (целые числа, числа,. ..), но secp256k1 определяется над полем Z 2 256 -2 32 -977 , что означает, что координаты X и Y равны 256 -битные целые числа по модулю большого числа. Кривые, использующие такие координаты, не обладают хорошими свойствами непрерывности.

Я попытался построить эту кривую над подобным, но гораздо меньшим полем, Z 2 8 +1 . Координаты простираются от -128 до 128.

y² = x³ + 7 над Z257, -128 через 128

Обратите внимание, что, хотя он может и не иметь смысла геометрически, он все еще обладает всеми необходимыми свойствами. Линия (что означает, что группа точек с уравнением a y + b x + c = 0), которая «пересекает» 2 точки кривой, пересечет третью. Tangent снова не имеет геометрической интерпретации, но вы все же можете вычислить локальное линейное приближение для уравнения кривой в данной точке, которое будет иметь свойство пересечения кривой во второй точке.

Чтобы показать вам, что вы получите, если бы это было над реальными числами, вот график того же уравнения кривой для этого случая. Однажды с координатами от -128 до 128, один раз с -8 до 8.

y² = x³ + 7 над R, -128 через 128 y² = x³ + 7 над R, -8 через 8

ответил Pieter Wuille 9 FebruaryEurope/MoscowbSun, 09 Feb 2014 23:05:07 +0400000000pmSun, 09 Feb 2014 23:05:07 +040014 2014, 23:05:07
12

вы можете проверить документ Bitcoin https://en.bitcoin.it/wiki/Secp256k1, там вы найдете некоторые технические подробности о secp256k1, используемом в биткойне.

Ниже иллюстрация эллиптической кривой secp256k1 y2 = x3 + 7 над действительными числами (график с использованием www .desmos.com /калькулятор /ialhd71we3 )

 secp256k1 с использованием www.desmos.com/calculator/ialhd71we3

в контексте конечного поля Zp, что сильно изменяет внешний вид ECC, но не его базовое уравнение или специальные свойства. на рисунке ниже представлено такое же уравнение в конечном поле F17 (значения x и y являются целыми числами от 0 до 17).

 Эллиптическая кривая над F17

и здесь над F59:

 введите описание изображения здесь>> </a> </p>

<p> Здесь вы найдете онлайн-инструмент для раскрытия информации <a href= https: //cdn.rawgit.com/andreacorbellini/ecc/920b29a/interactive/modk-add.html который поможет вам построить граф и сделать дополнение или скалярное умножение на EC. Например, график над F97 с P + Q.

 введите описание изображения здесь>> </a> </p>

<p> еще одна хорошая статья, чтобы прочитать о ECDSA в биткойне: <a href= https: //github .com /bellaj /Bitcoin_Ethereum_docs /BLOB /6bffb47afae6a2a70903a26d215484cf8ff03859 /ecdsa_bitcoin.pdf

  

secp256k1 почти никогда не использовался до того, как Биткойн стал популярным, но он   теперь завоевывает популярность благодаря нескольким приятным свойствам. Наиболее   обычно используемые кривые имеют случайную структуру, но secp256k1 был   построенный специальным неслучайным способом, который позволяет особенно   эффективное вычисление. В результате, это часто более чем на 30% быстрее   чем другие кривые, если реализация достаточно оптимизирована.   Кроме того, в отличие от популярных кривых NIST, константы secp256k1 были   выбирается предсказуемым образом, что значительно снижает   возможность того, что создатель кривой вставил любой вид бэкдора   в кривую.

ответил Badr Bellaj 4 +03002016-10-04T22:03:56+03:00312016bEurope/MoscowTue, 04 Oct 2016 22:03:56 +0300 2016, 22:03:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132