Я создал бумажный кошелек на coinbase и хотел импортировать его на coinbase.com. Это позволило мне импортировать его, указав только закрытый ключ. Я был удивлен, что мне не нужно было указывать открытый ключ... это безопасно?
Я, конечно, что-то упускаю здесь, но аналогия, которая приходит мне на ум, — это возможность войти в чью-то учетную запись gmail, указав только пароль, а не адрес электронной почты. Я имею в виду, что если бы это было возможно, мы могли бы указать «P@ssword», и я уверен, что у кого-то есть такой пароль для электронной почты, что позволило бы нам войти в эту учетную запись.
Точно так же я мог бы указать какой-то случайный закрытый ключ и надеяться, что он связан с каким-то публичным адресом...
Не могли бы вы пояснить, почему мои рассуждения неверны и почему импорт биткойнов с указанием только закрытого ключа безопасен?
Спасибо!
Аналогия, которую вы предлагаете, не совсем точна, потому что пара закрытый/открытый ключ имеет очень точную математическую связь, тогда как имя пользователя/пароль не имеет реальной связи (за исключением, возможно, записи где-то в базе данных).
Закрытый ключ — это, по сути, 256-битное число. Используя этот закрытый ключ и библиотеку эллиптических кривых, которая поддерживает использование кривой secp256k1
, вы можете детерминистически вычислить, что представляет собой связанный открытый ключ. Поскольку биткойн-адрес — это хэш открытого ключа, все, что вам действительно нужно, — это закрытый ключ, и вы можете рассчитать все остальное, чтобы иметь возможность увидеть, какие транзакции привели к тому, что адрес зачислил / списал монеты. Вот почему coinbase требует, чтобы вы давали свой закрытый ключ только вам.
Короткий ответ: как и во многих других распространенных системах шифрования, вы можете создать открытый ключ из закрытого ключа (и, следовательно, получить доступ к содержимому), но вы не можете создать закрытый ключ из открытого. Поэтому вам не нужно вводить открытый ключ, поскольку его можно сгенерировать из закрытого ключа.
Как уже говорилось в других комментариях, шансы на то, что вы угадаете/сгенерируете действительный закрытый ключ, практически равны нулю.
В отличие от учетных записей электронной почты и паролей, в биткойне два открытых ключа не могут использовать один и тот же закрытый ключ, потому что открытый ключ математически выводится из закрытого ключа.
Это правда, что вы можете генерировать закрытые ключи случайным образом и проверять их соответствующие общедоступные адреса на наличие неизрасходованных биткойнов. И если вы их найдете, вы сможете потратить их, так как у вас будет закрытый ключ. Если бы было возможно найти и потратить биткойны других пользователей таким образом, реестр биткойнов был бы бесполезен. Таким образом, набор возможных ключей был намеренно огромен, чтобы сделать такой случайный поиск неосуществимым и бессмысленным, даже если для выполнения этих поисков веками использовались чрезвычайно мощные компьютеры.
Вот отличное видео на эту тему:
Дэвид Шварц
*Similarily, I could specify some random private key and hope that it's associated with some public address...*
Конечно, но атака, основанная на надежде, не особенно полезна. Я могу угадать учетную запись и пароль и надеяться, что они твои.