Почему вы используете биткойн-адреса вместо открытых ключей?

Почему вы дважды хешируете открытый ключ? Есть ли преимущества для безопасности в абстрагировании от открытого ключа? Это потому, что адрес может представлять несколько вещей? Я что-то упускаю.

Могли бы вы теоретически отправить биткойны напрямую на открытый ключ?

:/ это не правильно сформулированный вопрос. О чем ты говоришь? то что ключ хеширован?
Тот факт, что вы дважды хешируете ключ с помощью SHA256 и RIPEMD160. Зачем проходить процесс? Я работаю над Mastering Bitcoin, и он не очень хорошо объяснил, зачем нам нужны адреса.
это потому, что это какая-то специальная кодировка, которая удаляет lи что- 1то в этом роде, чтобы потом было легче читать
Это просто для того, чтобы их было легче читать? Итак, если это так, можете ли вы теоретически отправить биткойн непосредственно на открытый ключ, а не на адрес?
может быть. как бы вы получили закрытый ключ в изоляции?
@ s.matthew.english: Base58Check - это просто кодировка для представления больших чисел в более удобочитаемом виде. Его можно применять к открытым ключам точно так же, как и к адресам.
Двойной хеш предназначен для защиты от атак с расширением длины. Нет причин думать, что вы будете уязвимы для таких атак, но это дешевый способ гарантировать, что вам даже не придется об этом думать. Небольшое преимущество в плане безопасности заключается в том, что при желании открытый ключ можно дольше хранить в секрете. Как указано ниже, Сатоши использует хэш, чтобы адрес был как можно короче.

Ответы (2)

Да, вы могли отправлять биткойны напрямую на открытый ключ: на самом деле, как Pay-to-PubKey (P2PK), так и Pay-to-PubKey-Hash (P2PKH) были представлены в первом выпуске биткойнов. IIRC, P2PK до сих пор иногда используется для транзакций Coinbase.

Транзакции P2PK немного больше для выходов, но значительно меньше для входов.

Одним из преимуществ P2PKH является то, что адреса короче открытых ключей. Это позволяет представлять адреса 34 символами в Base58check .
Если бы существовал стандарт для представления открытых ключей в Base58check, они, вероятно, имели бы 51 символ. Возможно, легче набрать набор символов, состоящий всего из 34 символов, чем тот, который состоит из 51 символа.

Но на самом деле адреса используются потому, что для них есть стандарт, а для открытых ключей его нет. Почему так, я не знаю.

Вся заслуга Питера, который предоставил знания, чтобы исправить мои ошибки. ;)

Также см. этот связанный с этим вопрос: Почему реализация майнера по умолчанию использует pay-to-pubkey?

WIF — это формат закрытых ключей, а не адресов. Я также никогда не видел стандарта для адресов P2PK.
@PieterWuille: WIF исправлен на Base58. Я не понимаю вашего комментария по поводу «адресов P2PK»?
Вы говорите «открытые ключи (51 символ в Base58), но, насколько мне известно, не существует стандарта для кодирования открытых ключей как base58.
@PieterWuille: Разве он не будет той же длины, что и закрытый ключ, потому что это также 256-битное число?
Ну, да, было бы, но это кажется неуместной гипотетикой. Самая большая причина, по которой люди не делают вывод P2PK, заключается в том, что для него не существует стандарта адреса. Вы можете возразить, почему такого стандарта не существует (как указывает ваш ответ, одной из причин является размер), но вы пропускаете шаг.
@PieterWuille: Думаю, у меня слишком много полузнаний. :п
@PieterWuille Есть ли другие причины?
1) Сжатые открытые ключи не были известны, когда были определены типы адресов P2PKH (поэтому это будет 95 символов base58). 2) Более высокая стоимость для отправителя. 3) Более длительные возможности для гипотетических злоумышленников ECDLP (которым требуется полный открытый ключ).
Без контрольных сумм и префиксов сжатый публичный ключ имеет размер 33 байта, 45 байтов в кодировке base58 и 87 байтов в несжатом виде. Предотвращение атаки ECDLP является лучшей причиной. Без pubkey вам в принципе нечего атаковать.

Как правильно указал @Murch, действительно возможно отправить биткойн либо на открытый ключ, либо на хэш открытого ключа. Первоначальной мотивацией использования хэшей открытых ключей было сокращение размера адреса. Публичные ключи в несжатом виде имеют длину 64 байта, тогда как RIPE-MD выводит 20 байтов (+5 байтов контрольной суммы и версии).

Интересно, что Сатоши не знал, что открытые ключи могут быть сжаты до 32 байтов + 1 бит ( почему Биткойн поддерживает как сжатые, так и несжатые ключи/адреса? ), и поэтому выбрал хэши как способ получения сжатых адресов. Последствия безопасности интересны:

В отличие от открытых ключей, хэш-функции, такие как SHA-256 и RIPE-MD, считаются квантово-устойчивыми. Таким образом, квантовый злоумышленник может эффективно получить закрытый ключ для любого открытого ключа Биткойн, но не для адреса P2PKH. Однако всякий раз, когда транзакция тратится с адреса P2PKH, она раскрывает открытый ключ как часть скрипта.

С другой стороны, общее количество возможных адресов составляет 2 ^ 160, тогда как общее количество открытых ключей составляет примерно 2 ^ 256. Теоретически это означает, что адреса менее защищены от атак грубой силы, чем открытые ключи. Очевидно, что атака полным перебором абсолютно невозможна для любого типа адреса.

@benehsv ваш ответ полезен, но последнее ваше замечание кажется мне ложным. Вы говорите, что PS2PK сложнее атаковать, чем PS2PKH. Я думаю, что все наоборот. С PS2PK эталон длины действительно составляет 2 ^ 256. Но с адресами BTC вам не нужно просто взломать адрес BTC обратно в открытый ключ (2 ^ 256), что не имеет смысла, если и до тех пор, пока вы затем не взломаете открытый ключ обратно в его закрытый ввод для кривой EC ( 2^256). Так что на самом деле ориентир длины равен 2^(256+160)! Следовательно, p2pkh является более безопасным и сложным для взлома.
@RodrigueAfota Я не уверен, что согласен. Скажем, есть адрес addr=H(g^(x)). Цель злоумышленников — найти x' такое, что H(g^x')=H(g^(x)). Этот x' можно использовать для создания подписи, чтобы потратить монеты с адреса. Это не означает, что x=x'. Если RIPMD+SHA256 действительно имеет 160-битную защиту, то лучшая атака выполняется за время примерно 2^160. Если есть атаки на RIPMD, лучшая атака будет уменьшена (например, квантовый компьютер может сделать это за время 2^80). Однако я забыл упомянуть, что лучший классический алгоритм решения задачи дискретного логарифма уже работает за время 2^128.