Перейти к публикации
fxseminar

Возможно ли в Биткойне совместное создание транзакции?

Рекомендованные сообщения

Может ли пользователь подготовить один вход транзакции (часть транзакции, описывающую один её вход) и передать эту заготовку другому пользователю, который добавит второй вход и завершит создание этой транзакции?

 

Если да, то правильно ли я понимаю, что приватный ключ, использованный первым пользователем (для создание "своего" входа в транзакцию) не станет при этом известен второму пользователю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Конечно, и очень давно и в различных вариантах. https://en.bitcoin.it/wiki/Address#Multi-signature_addresses

Подробнее https://en.bitcoin.it/wiki/Multisignature

Только мультисиг это не "свои" входы, а общий адрес.

 

 

А если вы хотите потратить просто 2 разных входа и подписать 2 разными приватными ключами - то и это не проблема.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

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

 

-- два человека, два компьютера, в разных местах. На обоих компах, конечно, установлен клиент. То есть работают два (разных) экземпляра клиента.

 

Первый пользователь (в своём клиенте) не может "подписать транзакцию", потому что она ещё не "собрана". Он может/хочет своим приватным ключом подписать только "заготовку входа в транзакцию", который -- вход -- израсходует его биткоины. 

 

А уже второй пользователь - каким-то образом получив (в свой клиент) эту заготовку  -- завершит создание транзакции (добавив свои расходуемые биткоины). Возможно ли это? (Извиняюсь за повторный пересказ задачки.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Или, возможно, первый сразу создаёт транзакцию, но оставляет второй её вход неподписанным (поскольку он не имеет соответствующего ключа), и пересылает это "недоделанную" транзакцию второму, а тот уже просто своим ключом подписывает в ней второй (свой) вход?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Или, возможно, первый сразу создаёт транзакцию, но оставляет второй её вход неподписанным (поскольку он не имеет соответствующего ключа), и пересылает это "недоделанную" транзакцию второму, а тот уже просто своим ключом подписывает в ней второй (свой) вход?

Я вам уже на это ответил, так можно и так это и работает.

 

https://txid.io , может взять и попробовать, вместо того чтобы быть великим теоретиком? Возьмите два разных адреса и два разных приватных ключа, найдите соотвествующие UTXO, а теме про двойную трату описано очень подробно где и что смотреть, и потом подпишите транзакцию сначала одним приватным ключом, а потом возьми результат этой подписи и подпишите вторым приватным ключом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос возник потому, что в одной статье (легко находится яндексом) я сегодня прочитал дословно:

 

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

 

-- получается, "Дорит Рон, Ади Шамир. Кафедра компьютерных наук и прикладной математики Института Вейцмана" глупость написали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Выходит что так. Многие люди ежедневно пишут и делают глупости, и обычные люди и доктора наук.

 

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

 

Совершенно другой вопрос, что разумные люди так не делают, так как это не имеет никакого практического смысла. Каждый может отправить свои монеты, зачем кому-то нужно договариваться и делать такие действия? Чтобы просто засунуть в одну транзакцию "для красоты"?

Изменено пользователем e46btc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

это не имеет никакого практического смысла

 

так можно частным образом "перемешивать" монеты и тем самым дурить Большого Брата: два незнакомых человека взяли каждый по 1 (10, 100, 1000) своих биткоинов, смешали их в одной транзакции и разослали по 1 (10, 100, 1000) биткоинов на два новых адреса. Как Большой Брат узнает, какой из адресов-получателей кому принадлежит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

так можно частным образом "перемешивать" монеты и тем самым дурить Большого Брата: два незнакомых человека взяли каждый по 1 (10, 100, 1000) своих биткоинов, смешали их в одной транзакции и разослали по 1 (10, 100, 1000) биткоинов на два новых адреса. Как Большой Брат узнает, какой из адресов-получателей кому принадлежит?

А у тебя есть 10, 100, 1000 биткоинов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возьмём первую попавшуюся транзакцию с двумя входами и предположим, что эти входы принадлежали разным людям. Предположим, отправляет транзакцию в сеть второй чел (владелец 2-го входа), а первый только "подписывает" свой вход.

 

Подпись 1-го входа там:

ScriptSig: PUSHDATA(71)[304402207bf715f595a83d7cfc804921de2dfc863311c255987d56a3e51dc850a62cc9ee02206055e2eb12d0af96e480f55706901cf9e7c936ae6c9ac74bd1036b90317deaab01] PUSHDATA(33)[039277e624bf73b05ea74faee32730fc6f6096c3bb23e4798dc60d4fc316f2ccc0]

 

- вот эти ключи "304402207bf715f595a83d7cfc804921de2dfc863311c255987d56a3e51dc850a62cc9ee02206055e2eb12d0af96e480f55706901cf9e7c936ae6c9ac74bd1036b90317deaab01"

и "039277e624bf73b05ea74faee32730fc6f6096c3bb23e4798dc60d4fc316f2ccc0"

 

знает только первый чел, но когда он их перешлёт второму челу, чтобы тот вставил их в транзакцию, тот (второй) сможет ведь этого (первого) кинуть: использовать эти ключи для отправки этих 1.4 BTC на какой-то неоговоренный адрес. То есть украсть...

 

Значит вот это:

 

 

два незнакомых человека взяли каждый по 1 (10, 100, 1000) своих биткоинов, смешали их в одной транзакции и разослали по 1 (10, 100, 1000) биткоинов на два новых адреса.

 

-- я всё-таки неправильно написал, такая схема -- без доверия -- не работает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@fxseminar, все что находится в блокчейне - все публично.

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


 

 

-- я всё-таки неправильно написал, такая схема -- без доверия -- не работает?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

, да, получается, я изобрёл CoinJoin. Осталось понять, возможен ли безрисковый CoinJoin для не доверяющих друг другу акторов. (См., например, https://en.wikipedia.org/wiki/CoinJoin#Security_issues )

 

Наверное, не Бином Ньютона ... но как-то туго идёт коммуникация.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

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

 

-- это мантра. Вопрос не в том "в безопасности ли я" ... И даже не в том, наверное, в безопасности ли денежка, "расходующий скрипт" для которой передан кому-то (потому что публикуется же он широковещательно!). А вопрос в том, каким образом эта безопасность достигается в Биткойне.

 

Почему злоумышленник не может взять Input Script из любой транзакции в мемпуле и использовать его для отправки описанной им (скриптом) денежки на свой адрес?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Почему злоумышленник не может взять Input Script из любой транзакции в мемпуле и использовать его для отправки описанной им (скриптом) денежки на свой адрес?

Бессмысленный диалог.   Посмотрите что такое транзакция и как формируется, как подписывается, что такое скрипты и для чего нужен приватный ключ.  Без этого ничего не выйдет ИМХО.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@e46btc, да, посмотрю. И даже напишу сюда ответ на свой вопрос, когда разберусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Почему злоумышленник не может взять Input Script из любой транзакции в мемпуле и использовать его для отправки описанной им (скриптом) денежки на свой адрес?

 

Потому что scriptSig содержит подпись (хеш) транзакции.

Подпись транзакции сделана с помощью секретного ключа.

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

А никаких секретных ключей в scriptSig нет.

 

https://www.bitcoinbook.info/translations/ru/book.pdf

Изменено пользователем Old Miner

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

 

-- спасибо за книгу! Особенно приятно, что там есть русская версия ( https://www.bitcoinbook.info/translations/ru/book.pdf ). Я знаю английский, но по-русски всяко получится читать (и понимать!) в несколько раз быстрее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

-- спасибо за книгу! Особенно приятно, что там есть русская версия ( https://www.bitcoinb...ons/ru/book.pdf ). Я знаю английский, но по-русски всяко получится читать (и понимать!) в несколько раз быстрее.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Old Miner, начал смотреть книгу, но пока не понял, хороша ли она. Бросается в глаза объём -- понятно, бумажная книга должна быть толстой, чтобы выглядеть солидно ...

 

Кстати, её английская версия в pdf-формате лежит на rutracker.org ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Old Miner, начал смотреть книгу, но пока не понял, хороша ли она.

 

Для начального ознакомления сойдёт, но мне эта книга представилась неравномерной в детализации различных аспектов Биткойна.

Некоторые вопросы освещаются подробно, а другие наоборот.

 

К примеру, я в ней не нашёл ответа на вопрос: как формируется подпись транзакции (sig), которая содержится внутри scriptSig.

Зато подробно расписано, как  scriptSig и scriptPubKey сливаются в единую последовательность команд и дают возможность потратить выход.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

не нашёл ответа на вопрос: как формируется подпись транзакции (sig), которая содержится внутри scriptSig.

 

-- именно так! Собственно, что автор (в главе "Creating, Signing, and Submitting Transactions Based on Unspent Outputs") проделывает:

 

1. определяемся с адресами и суммами и запихиваем их в вызов команды createrawtransaction

 

2. о, какую строчку она нам вернула! Давайте её проанализируем, а для этого пропустим её через команду decoderawtransaction

 

3. "Как вы могли заметить, транзакция содержит пустой scriptSig, так как мы ее еще не подписали."

 

Давайте теперь подпишем командой signrawtransaction

 

4. "Команда signrawtransaction возвращает другую сырую транзакцию в формате шестнадцатеричной строки. Декодируем ее с помощью команды decoderawtransaction для того, чтобы посмотреть что изменилось: Итак, входы, используемые в транзакции содержат scriptSig, который является цифровой подписью, подтверждающий право адреса 1hvz... и разблокирующие выход так, что он может быть потрачен. Подпись делает эту сделку проверяемой любым узлом в сети Bitcoin."

 

Ура, мы молодцы, можно отправлять транзакцию в сеть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×