Jump to content

Recommended Posts

Posted

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

 

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

Posted

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

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

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

 

 

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

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

 

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

Posted

 

 

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

 

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

 

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

 

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

Posted

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

Posted

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

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

 

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

Posted

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

 

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

 

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

Posted (edited)

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

 

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

 

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

Edited by e46btc
Posted

 

 

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

 

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

Posted

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

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

Posted

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

 

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

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

 

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

и "039277e624bf73b05ea74faee32730fc6f6096c3bb23e4798dc60d4fc316f2ccc0"

 

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

 

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

 

 

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

 

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

Posted

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

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


 

 

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

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

Posted

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

 

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

Posted

 

 

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

 

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

 

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

Posted

 

 

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

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

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

 

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

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

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

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

 

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

Edited by Old Miner
Posted

 

 

 

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

Posted

 

 

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

 

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

Posted

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

 

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

Posted

 

 

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

 

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

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

 

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

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

Posted

 

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Topics

×
×
  • Create New...