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

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

Я, конечно, что-то упускаю здесь, но аналогия, которая приходит мне на ум, — это возможность войти в чью-то учетную запись gmail, указав только пароль, а не адрес электронной почты. Я имею в виду, что если бы это было возможно, мы могли бы указать «P@ssword», и я уверен, что у кого-то есть такой пароль для электронной почты, что позволило бы нам войти в эту учетную запись.

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

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

Спасибо!

*Similarily, I could specify some random private key and hope that it's associated with some public address...*Конечно, но атака, основанная на надежде, не особенно полезна. Я могу угадать учетную запись и пароль и надеяться, что они твои.

Ответы (3)

Аналогия, которую вы предлагаете, не совсем точна, потому что пара закрытый/открытый ключ имеет очень точную математическую связь, тогда как имя пользователя/пароль не имеет реальной связи (за исключением, возможно, записи где-то в базе данных).

Закрытый ключ — это, по сути, 256-битное число. Используя этот закрытый ключ и библиотеку эллиптических кривых, которая поддерживает использование кривой secp256k1, вы можете детерминистически вычислить, что представляет собой связанный открытый ключ. Поскольку биткойн-адрес — это хэш открытого ключа, все, что вам действительно нужно, — это закрытый ключ, и вы можете рассчитать все остальное, чтобы иметь возможность увидеть, какие транзакции привели к тому, что адрес зачислил / списал монеты. Вот почему coinbase требует, чтобы вы давали свой закрытый ключ только вам.

Спасибо за объяснение, но я до сих пор не понимаю, что мешает мне попробовать случайные 256-битные предложения при импорте закрытых ключей в мой кошелек, и, наконец, я смогу найти ключ с деньгами на нем... Это считается безопасным только потому, что номер используемых в настоящее время кошельков намного меньше, чем количество действительных закрытых ключей, и, следовательно, вероятность того, что я найду закрытый ключ с деньгами на нем, относительно мала?
Существует 2 ^ 256-1 действительных закрытых ключей. Система безопасна, потому что делать именно то, что вы описали, пробуя закрытые ключи, пока вы не получите тот, на котором есть деньги, займет так много времени, что вы почти гарантированно никогда не найдете его. Прочтите больше о криптографии на эллиптических кривых, если вам интересно, это довольно увлекательный материал.
На самом деле есть более эффективные атаки на систему, чем то, что вы описали, но даже на них потребуются годы даже на очень быстрых и параллельных компьютерах.
@Bart: «Относительно маленький» — это сильное преуменьшение .
@Bart: Другими словами, существует 115792089237316195423570985008687907853269984665640564039457584007913129639935 возможных закрытых ключей. Если есть триллион ключей с монетами (на самом деле их меньше), вам нужно будет перепробовать около 116 вигинтиллионов ключей, чтобы найти один. Если вы попробуете триллион ключей в секунду, это займет у вас 4 кваттюордециллиона лет, что в 257 дециллионов раз превышает возраст Вселенной. Так что этого не произойдет.

Короткий ответ: как и во многих других распространенных системах шифрования, вы можете создать открытый ключ из закрытого ключа (и, следовательно, получить доступ к содержимому), но вы не можете создать закрытый ключ из открытого. Поэтому вам не нужно вводить открытый ключ, поскольку его можно сгенерировать из закрытого ключа.

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

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

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

Вот отличное видео на эту тему:

http://youtu.be/ZloHVKk7DHk