Можно легко сгенерировать тщеславные адреса для биткойнов, но на их создание может уйти довольно много времени. Аутсорсинг этого процесса кому-то с мощной майнинговой установкой — вариант, но тогда есть риск, что человек, сгенерировавший адрес, использует его без нашего ведома, чтобы украсть наши монеты. Можно ли генерировать тщеславные адреса таким образом, чтобы никто не мог украсть ваши личные ключи?
Из того, что кажется, да, это возможно, и довольно просто передать создание адреса тщеславия на аутсорсинг третьей стороне, ничем не рискуя.
Биткойн-адреса создаются из пар ключей ECDSA. Их свойство состоит в том, что если вы возьмете два закрытых ключа и сложите их вместе (с соответствующими операциями по модулю), сумма будет отображаться в открытый ключ, который будет таким же, как если бы вы сложили два открытых ключа, соответствующих закрытым ключам.
Это означает, что для того, чтобы передать генерацию тщеславных ключей на аутсорсинг, можно создать пару ключей ECDSA, безопасно сохранить закрытый ключ и передать открытый ключ другим людям. Затем они продолжат генерировать пары ключей ECDSA, суммируя сгенерированные открытые ключи с предоставленным вами и проверяя, соответствуют ли они соответствующему личному адресу. Если это так, им нужно только предоставить вам соответствующий закрытый ключ, который затем нужно добавить к вашему секретному закрытому ключу, чтобы получить закрытый ключ, который сопоставляется с тщеславным адресом.
JoelKatz объяснил это в своем посте , а я пошел дальше и внедрил «тщеславный пул» , который делает возможным такой аутсорсинг. Более того, я также создал простой тестовый набор для игры с комбинированием пар ключей ECDSA . В настоящее время не существует доступных «майнеров тщеславия с разделенным ключом» или каких-либо автономных решений этой проблемы, но они могут появиться в ближайшее время.
Благодаря криптографии на основе эллиптических кривых третьему лицу не нужно знать закрытый ключ для создания тщеславного адреса, как описывает здесь Джоэл Кац:
Я буду говорить о деталях.
Открытый ключ 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
Это метод, используемый 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)
) Это также относится ко всем известным методам.
Это используется редко.
Теперь, когда охотник за головами хотел 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
(с соответствующими операциями по модулю)
Я никогда не видел, чтобы это упоминалось где-либо. Это не очень полезно.
Просто: охотник за головами находит d_2
и d_3
оценивает такие, которые Hash((d_1 * d_2)G + (d_3)G)
находятся в ожидаемом диапазоне шаблонов. Это сложнее, потому что у него есть две переменные. Никаких исследований по этому поводу не проводилось. На первый взгляд он выглядит медленнее, но ничто не мешает майнеру тщеславия исправлять d_2
или d_3
.
Пиачу
Крис Мур
Пиачу
Крис Мур