Перейти к содержанию

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


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."

 

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

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

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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...