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

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

Если мой кошелек знает мой открытый ключ (конечно, знает), он может сгенерировать множество пар закрытый/открытый ключ, просто добавив к нему число. Например, предположим, что закрытый ключ — это , xа его открытый ключ — y. Если кошелек удалил приватный ключ xна какое-то время, он может сгенерировать адрес y+1и быть уверенным, что когда он это сделает, x+1он получит приватный ключ для этого адреса в будущем, когда ему понадобится потратить эти средства. Это свойство эллиптической криптографии, потому что существует гомеоморфизм между наборами закрытых и открытых ключей.

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

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

Итак, как это делается? Как я могу, имея открытый ключ кого-то, сгенерировать для него случайный адрес, чтобы он мог получить для него закрытый/открытый ключ позже, но чтобы ему не нужно было хранить что-либо, что было использовано для генерации этот адрес?

Я не могу полностью понять вашу логику... Мы говорим о биткойнах? Не уверен, что ваше утверждение верно, что добавление одноразового номера к открытому ключу генерирует случайные адреса. Что ж, можно было подумать. Вы уверены, что не имеете в виду иерархические детерминированные кошельки BIP32/44 и получение ключей?
@pebwindkraft Я говорю об этом: bitcoin.stackexchange.com/questions/41947/…

Ответы (1)

Я полагаю, вы говорите о ключах, полученных из HD, как и предыдущий вопрос, который вы связали. Структура кошелька HD представлена ​​в BIP 32 .

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

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