У меня есть пробел в понимании генерации биткойн-адресов посредством хеширования. (Ниже я цитирую Антоноплюса для удобства, но я проконсультировался с несколькими другими источниками.)
По словам Антонполуса:
«Адрес биткойн получается из открытого ключа с помощью одностороннего криптографического хэширования (Antonpolous, 2014: 71)».
Я понимаю открытые ключи так, что они не меняются после создания из закрытого ключа (через умножение ECDSA):
«Поскольку точка генерации всегда одинакова для всех пользователей биткойнов, закрытый ключ k, умноженный на G, всегда будет давать один и тот же открытый ключ K» (Antonpolous, 2014: 68)».
Передовая практика в отношении биткойн-адресов рекомендует следующее:
«Для каждой транзакции следует использовать уникальный адрес. Большинство программного обеспечения и веб-сайтов Биткойн помогут в этом, генерируя новый адрес каждый раз, когда вы создаете счет или запрос на оплату» (Antonpolous, 2014: 188)».
Я понимаю, что выполнение хеш-функции для одних и тех же данных всегда будет давать один и тот же результат (дайджест):
«Для любого конкретного ввода результирующий хэш всегда будет одним и тем же, и его может легко вычислить и проверить любой, кто реализует тот же алгоритм хеширования». (Антонполус, 2014: 188).
Учитывая все вышеизложенное, у меня возникает вопрос, как можно сгенерировать разные адреса из одного и того же неизменного ввода, а именно открытого ключа?
Это двойное хэширование (SHA256 + RIPEMD160)? Это пул адресов? Это из-за детерминированных кошельков? Ответ, вероятно, прост и смотрит мне прямо в лицо, но я его не вижу. Спасибо за любые разъяснения.
Вы почему-то пришли к выводу, что можно просто получить несколько адресов из одного открытого ключа, но в цитируемом тексте об этом не сказано. В нем говорится, что открытый ключ однозначно генерируется из закрытого ключа (путем умножения генератора кривой G на случайное 256-битное число, которое является закрытым ключом). В нем также говорится, что адрес получен из открытого ключа путем его хеширования (RIPEMD160 и SHA256). Наконец, он говорит, что рекомендуется каждый раз использовать другой адрес.
Это не означает, что вы генерируете несколько адресов из одного и того же открытого ключа. Каждый раз вам нужно генерировать новый закрытый ключ, затем открытый ключ из этого закрытого ключа и, наконец, адрес из открытого ключа.
Чтобы подкрепить хорошие ответы, уже данные о парах ключей...
«В качестве дополнительного брандмауэра для каждой транзакции следует использовать новую пару ключей, чтобы предотвратить их привязку к общему владельцу».
Сатоши Накамото, технический документ Биткойн, 2009 г., стр. 6:
Что касается дальнейшего уточнения вопроса, принимая во внимание, что абзац, указанный в вопросе, просто подразумевает, что для каждого запроса должны создаваться разные частные/общедоступные пары:
«Для каждой транзакции следует использовать уникальный адрес. Большинство программного обеспечения и веб-сайтов Биткойн помогут в этом, генерируя новый адрес каждый раз, когда вы создаете счет или запрос на оплату» (Antonpolous, 2014: 188)».
на самом деле всегда можно сгенерировать как минимум три разных действительных биткойн-адреса из одного и того же открытого ключа, поскольку всегда существует гибридная , сжатая и несжатая форма одной и той же пары открытых/закрытых ключей .
Так, например, открытый ключ (x, y):
(50863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352,
2cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6)
с соответствующим уникальным закрытым ключом, может быть выражен с помощью этих трех разных адресов:
16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs
1DcuACZPCeAEmvSPzKiF8pAaZAEY1XPyue
которые на самом деле соответствуют совершенно разным биткойн-адресам, но ко всем из которых, в принципе, можно получить доступ с одной и той же парой закрытых/открытых ключей.
Нейт Элдридж
Ник Оделл
Колман МакМахон
Нейт Элдридж
cpsola
Ник Оделл