Можно ли безопасно покупать тщеславные адреса у третьих лиц, не рискуя украсть свои монеты?

Можно легко сгенерировать тщеславные адреса для биткойнов, но на их создание может уйти довольно много времени. Аутсорсинг этого процесса кому-то с мощной майнинговой установкой — вариант, но тогда есть риск, что человек, сгенерировавший адрес, использует его без нашего ведома, чтобы украсть наши монеты. Можно ли генерировать тщеславные адреса таким образом, чтобы никто не мог украсть ваши личные ключи?

Ответы (3)

Из того, что кажется, да, это возможно, и довольно просто передать создание адреса тщеславия на аутсорсинг третьей стороне, ничем не рискуя.

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

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

JoelKatz объяснил это в своем посте , а я пошел дальше и внедрил «тщеславный пул» , который делает возможным такой аутсорсинг. Более того, я также создал простой тестовый набор для игры с комбинированием пар ключей ECDSA . В настоящее время не существует доступных «майнеров тщеславия с разделенным ключом» или каких-либо автономных решений этой проблемы, но они могут появиться в ближайшее время.

Благодаря криптографии на основе эллиптических кривых третьему лицу не нужно знать закрытый ключ для создания тщеславного адреса, как описывает здесь Джоэл Кац:

Хм, очень интересно и немного ошеломляюще...
Я думаю, что в сообщении Джоэла есть некоторые ошибки, например, «уменьшите его по модулю генератора SECP256k1». Вы никогда не используете генератор таким образом, вместо этого вы должны уменьшить его по модулю порядка основного поля, p. Кроме того, нет необходимости выбирать числа меньше генератора. Наконец, может быть неясно, что при сложении точек на кривой (x1,y1) и (x2,y2) их сумма не равна (x1+x2,y1+y2), а использует специальную функцию сложения, описанную на странице 12 cs.ucsb.edu/~koc/ccs130h/notes/ecdsa-cert.pdf
@ChrisMoore На самом деле, я думаю, это может быть N - порядок генератора. Недавно я немного поиграл с этими концепциями, и N, похоже, дал мне правильные результаты...
@ThePiachu, это имеет смысл. Я также играл с этими концепциями, и использование порядка основного поля давало мне неправильные результаты;)

Я буду говорить о деталях.

Открытый ключ ECC имеет форму dG, где Gточка генератора (параметр кривой) и dваш закрытый ключ (должен быть между 1и prime order-1включительно)

dне может быть найден без перебора точек, если вы знаете открытый ключ ( dg).

Цель состоит в том, чтобы заставить кого-то найти подходящее dG, которое Hash(dG)находится в ожидаемом диапазоне.

Итак, вам нужно будет сохранить часть dсебя, а затем объединить ее. Как?

Для всех методов начало одинаковое:

Вы вычисляете некоторые d_1и держите их при себе, пока делитесь(d_1)G

Для начала рассмотрим свойства точек EC.

Линейность:

(d_1)G + (d_2)G = (d_1 + d_2)G

(d_1)(kG) = (k * d_1)G


Способ 1) аддитивный

Это метод, используемый Vanitygen, и он более популярен, чем другие.

Охотник за головами пробует множество случайных d_2значений, попадающих Hash((d_2)G + (d_1)G)в ожидаемый диапазон. Если охотник преуспевает, он отправляет d_2награду раздающему (либо публичному, либо частному). Теперь тщеславный «назначатель» может комбинировать d_1и d_2создавать окончательные закрытые и открытые ключи.

Обратите внимание, что (d_1 + d_2)Gэто также может быть рассчитано третьими лицами, что означает, что другие люди смогут отслеживать его / ее платежи. (потому что d_2может быть передан охотником за головами, Gуже известен и (d_1)Gопубликован цедентом, так что (d_2)G + ((d_1)G)) Это также относится ко всем известным методам.

Метод 2) Мультипликативный

Это используется редко.

Теперь, когда охотник за головами хотел Hash((d_1 + d_2)G)в ожидаемом диапазоне шаблонов, он хотел чего-то другого и использовал другой способ создания ненадежного тщеславия.

Инновационный охотник за головами вычисляет d_2значение методом грубой Hash(d_2((d_1)G))силы: он вычисляет множители (d_1)Gи проверяет их.

Теперь вы понимаете, что d_2должно быть между 1и prime order-1, также в этом методе? (Подсказка: в чем смысл простого порядка?)

Он использует тот факт, что d_2((d_1)G) = (d_2 * d_1)G(с соответствующими операциями по модулю)

Способ 3: Комбинированный

Я никогда не видел, чтобы это упоминалось где-либо. Это не очень полезно.

Просто: охотник за головами находит d_2и d_3оценивает такие, которые Hash((d_1 * d_2)G + (d_3)G)находятся в ожидаемом диапазоне шаблонов. Это сложнее, потому что у него есть две переменные. Никаких исследований по этому поводу не проводилось. На первый взгляд он выглядит медленнее, но ничто не мешает майнеру тщеславия исправлять d_2или d_3.