Pull to refresh

Comments 41

Ну вот и толковое объяснение. А то лишь бы паниковать
UFO just landed and posted this here
Тема просто очень специфическая и сложная для понимания. Тут надо достаточно глубоко понимать, как работает сеть. Я лишь перевел как было, объяснить простым языком без ссылок на основы наверное сложновато.

Если по-простому. При отправке денег с биржи генерится уникальный хэш транзакции по типу 9c7e169e2056d904ef5f4b6afedaa8931dc7cc17b79c18af688fa2ffb649669b через который можно отследить все операции по сделке (кому и сколько было выплачено). По этому хэшу через сеть MtGox и проверял получил ли клиент свои средства или нет. Однако можно сделать маленький финт ушами и добавить некоторые незначительные данные в транзакцию о тех пор, пока она еще не была подтверждена в результате чего, изменится ее хэш и уточнить данные об успешном прохождении можно будет только по новому хэшу. Сама транзакция не пострадает, однако гокс, который использует такой механизм проверки, таким способом удалось обвести вокруг пальца..
Если удалось обвести.
Вообще слишком всё совпало. И именно у Гокса. И именно тогда, когда тянуть було дальше некуда. Забавно, да?
Понятно, что в истории еще много неизвестного и никто не знает как, что и сколько точно, и возможно этого мы никогда и не узнаем. Так что пока лишь предположения дабы хоть немного понимать ситуацию, не паниковать и не делать скоропостижных выводов.
UFO just landed and posted this here
Тема — темой, но:
1) запятые невпопад (и куча лишних)
2) настоящее время
3) кривые англицизмы типа «даблспендинг»
4) неумение подобрать нормальные русские слова: не «некоторое количество», а «несколько».
Но ведь транзакция подписывается закрытым ключом. Или в транзакции есть поля, которые не подписываются?
Подпись не покрывает все данные в транзакции, а хэш считается от всей. Таким образом, можно изменить некоторые поля, что подпись останется неизменной, а хэш будет другим.
как оказалось — есть.
там достаточно сложная для понимания структура данных: есть несколько входов и несколько выходов.
каждый вход подписывается своим ключом, а транзакцию «в целом» вообще говоря чем и зачем потом подписывать?
такая гибкость была заложена в протокол изначально.
UFO just landed and posted this here
UFO just landed and posted this here
> Т.е. как именно система определит, что это одна транзакция и надо только одну запись включать?

Майнер не включит транзакцию ABC123 в блок, потому что сперва проверит и увидит, что ее входы были уже потрачены транзакцией ABC124
Если майнер несмотря на это включит ее в блок — сеть такой блок не примет, так как увидит даблспендинг

> Или зачем вообще тогда хеш транзакции нужен, если он ничего не значит?

Для идентификации транзакции. Как иначе делать уникальные идентификаторы в распределенной системе?
UFO just landed and posted this here
> Вход это же номер кошелька? У меня на кошельке может быть 10 биткоинов, а я перевёл один биткоин, значит ещё 9 осталось.

Немного не так. Попробуйте самостоятельно почитать, а то мне в двух словах трудно объяснить.
Допустим я дал вам 10 биткойнов. (какой я щедрый!) До этого у вас биткойнов не было вообще.
У вас есть 1 неизрасходованный «вход»
Когда вы из 10 биткоинов хотите заплатить 1 — то в транзакции будет два выхода — один на 1 биткойн, а второй на 9 — так называемая «сдача»
(пока про комиссии не будем)
Вообще говоря — сдачу принято на свой новый адрес пересылать, но можно и на исходный.
То есть после того как вы переслали 1 биткойн — у вас теперь 1 неизрасходованный вход на 9 биткойнов.
А мой перевод — он уже израсходован.
> Раз майнеры понимают, что две транзакции с разными хешами по сути одинаковы, значит есть сочетание полей, которое более уникально идентифицирует транзакцию, чем хеш.

Неправильный вывод. Один из этапов каждого майнера — проверить правильность всех инпутов. Если хоть один из инпутов не проходит проверки — транзакция улетает в dev/nul

Проверять является ли транзакция дубликатом другой транзакции не нужно и гораздо более сложно — ведь какие-то инпуты могут быть валидными, какие-то невалидными — это не точный дубликат, но невалидная транзакция. И вообще — ну что сделает майнер, если обнаружит точный дубликат уже существующей транзакции? Позвонит в ООН? Нет. Он просто выкидывает ее.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Что-то мне не очень понятно: если посторонний человек может изменить сумму транзакции (хотя бы на один сатоши) — то почему это не является недостатком протокола Bitcoin? Сатоши — вроде и немного, но говорят, что Bitcoin — дефляционная валюта, так что при повышении рыночной капитализации экономики Bitcoin можно ожидать только повышения курса, что приведет в конце концов к тому, что и один сатоши станет существенной суммой, наподобие долларового цента.
UFO just landed and posted this here
Вот тут есть обуждение, начатое еще в 2011
bitcointalk.org/index.php?topic=8392.0

Насколько я понял — один из способов поменять hash — это другим способом записать сигнатуру
DER-формат мне показался мягко говоря «странным», вполне возможно, что его конкретные имплементации допускают различную форму записи одной и той же сигнатуры. А может сигнатура не только так может быть записана?
Например, для записи 32-байтового (не битового, а именно байтового!) беззнакового числа используется следующая форма записи:
1) если старший бит 1 — то число отрицательное (а нам важно что оно беззнаковое!) так что пишем длину=33, потом 00, потом само число
2) иначе если старший байт ненулевой — пишем длину=32, потом само число
3) иначе пытаемся сэкономить, записав 32-байтовое число в 31 байте учитывая что старший байт и так нулевой
В общем, в результате сигнатура имеет не фиксированный размер — от 72 байт и меньше

Но вполне возможно, что допускаются и «не совсем канонические способы записи».
Или возможна обратная ситуация — допустим, MTGOX неправильно формировал сигнатуру, например для начинающихся с нулевого байта чисел не отрезал этот байт, а для отрицательных чисел не добавлял 00.
Злоумышленник-педант-майнер просто корректировал чтобы подпись была корректной.
(Повторюсь — я тут не копенгаген — это «размышления на заданную тему»)
вот тут еще интересное обсуждение.
bitcointalk.org/index.php?topic=360347.0
жаль, что детали оригинальной транзакции не сохранились — можно было бы посмотреть в чем разница между оригинальной и измененной верией
все гораздо проще оказалось.
bitcoin.stackexchange.com/questions/22051/transaction-malleability-in-the-blockchain
операция с кодом 0x49 означает «положить последующие 0x49 байт в стек»
операция 0x4d означает «взять последующее 16-битовое число и столько байт поле него положить в стек»
в следующих 2 байтах как раз число 0x49 (little-endian)
байты о которых мы говорим — это и есть подпись остальной части транзакции

таким образом достаточно было поменять [49] на [4d4900] и хеш менялся, а сама транзакция оставалась валидной
можно и многими другими способами добиться того же самого
UFO just landed and posted this here
Интересно, ведь размер базы транзакций непрерывно растёт и довольно быстро. Что с этим делать? Скоро же нужно будет под новый кошелёк покупать отдельный винт.
Под кошелек не надо. Кошелек сам по себе маленький. Если уже есть база на компьютере, то вторая не нужна.
На самом деле по этому поводу планируется массовый уход на легкие клиенты, у которых нет полноценной базы, и функционал несколько урезан, но в целом позволяет передавать и получать денежку.
Я вижу здесь другую опасность:
знаю некоторых людей которые оперируют тысячами битков. Эти ребята так же как и я пользуются вебклиентом от битчаин.
Я то риски осознаю, но поскольку оперирую небольшими суммами, то риски считаю допустимыми. А так — вот решит битчаин ограбить всех своих пользователей, и что будет с битками? :)

Да, там как я понимаю есть некоторые меры для защиты кошельков от самого битчаина, но защита организована ими самими, так что несерьезно это. Ну и если завтра все будут плавно переходить на тонкие клиенты, то будет всё больше схем которые сделают кошельки более уязвимыми от третьих лиц. И не говорите что люди не будут делать таких ошибок. Особенно не говорите этого в ЭТОЙ теме.
Забудьте уже про онлайн-кошельки, это пережиток прошлого и случаев, где они действительно необходимы, очень мало.

Откройте для себя Thin Client Security, и один из популярнейших тонких клиентов, поддерживающий это — Electrum.

Доступ к монетам сервер не имеет, а используется исключительно для выдачи информации по балансам на кошельке (точнее об указанных адресах) плюс много много других фич, типа генерация всех будущих пар ключей для адресов кошелька на базе одного seed.
Если все будут пользоваться тонкими кошельками, не сделает ли это сеть уязвимой к атаке? Особенно, когда эпоха майнинга подойдет к концу?
По этой причине я бы сформулировал следующее, пользуйтесь electrum но устанавливайте свой сервер (конешел bitcoin + abe + сервер electrum), в этом случае одна установка bitcoin может быть использована вами в нескольких местах (мобильник, компьютер и т.п.) но при этом может находиться на специальном выделенном сервере.
Обратите внимание на мою последнюю фразу. Смысл не в том, что есть более надежные решения. Смысл в том, что будет когда количество пользующихся недостаточно надежными решениями перевалит за критический предел?
Ну даже и ладно. Если битчайн рухнет, то со всех остальных народ убежит за неделю.
Но что говорить о тех же серверах «у которых нет доступа к монетам»? Злоумышленник контролирующий сервер который «всего-лишь» сообщает о поступлении средств на счета сможет довольно много денег увести и без того.

Что касается места на диске, то не всё упирается в диск. Эту базу еще и выкачать надо.
Если два года назад я выкачал базу за полдня, то когда была пробита тысяча, я на третий день плюнул на выкачивание базы и залил свой кошелек на веб.
Держать биткойны, тем более такое количество, на удаленном сервисе, без каких-либо официальных договоренностей с владельцами — чистое безумие и непонимание самой сути криптовалют. Владельцы сервиса в любой момент могут решить, что накопленных средств достаточно для безбедной старости и им ровно ничего за это не будет. Не говоря уж о том, что любые крупные хранилища привлекают множество желающих их взломать.
размер блока 1 мегабайт (хотя под завязку его никто не наполняет)
блок раз в 10 минут / 6 в час / 144 в сутки
при самом плохом раскладе 52 гигабайта в год
на ближайшие 10 лет мне моего винчестера хватит.
больше чем на 10 лет я не привык планировать.

ну, если у вас на компе 100500 форков — то…
UFO just landed and posted this here
Ну так вы ссылку-то сами читали?
Он сказал, что атакующие совмещают атаку «двойного вывода» с DDoSом всей биткойн-сети, чтобы сбить с толку учетные системы бирж и увеличить вероятность того, что на фоне этого злоумышленники получат «компенсацию»
«Атака двойного вывода» — это именно то, что здесь описано, она может быть только адресной, потому что надо запросить возврат у саппорта биржи, который должен вручную запустить повторный вывод средств. А DDOS — чтобы махинации было сложнее распознать. Странно, что bitcointalk заодно не положили, как это частенько бывает.
Кстати кому форки интересны — вот неплохой список криптовалют bitomatics.com/forum/25-spisok-kriptovalyut более или мене внятно расписано что есть что.

Кстати вероятно что уставший от Doge и MintCoin сейчас позитивно отреагирует на разные Dark и Vertcoin.
Sign up to leave a comment.

Articles