Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Ethereum Blockchain 2.0 basics. Как работает блокчейн (на примере Биткойна)

Содержание

Классический блокчейн, недостаткиПонятие умных контрактов, принципыПример типичного контракта, исходный кодИщем баги, эксплуатируем типичный контрактИстория The DAO и воровство $60 млн при помощи баги в умном контрактеВзломы ParityWallet и CoinDashХардфорки блокчейна, что дальше
Alexey Malanov, malware expertEthereum Blockchain 2.0 basics Классический блокчейн, недостаткиПонятие умных контрактов, принципыПример типичного контракта, исходный кодИщем баги, эксплуатируем Blockchain 1.0 Как работает блокчейн (на примере Биткойна)Блокчейн – это интернет-дневникПользователи формируют транзакции, подписывают Все полные узлы хранят весь блокчейн и выполняют одни и те же СвойстваДецентрализованныйОткрытый на чтениеОткрытый на записьЕдиныйНеизменяемыйС валютойДоверяемыйБлокчейнПреимуществаНеблокируемый/устойчивыйВалидируемыйДоступныйГотовыйНе фальсифицируемыйФинансовыйНе требует репутацииНедостаткиНеэффективный, немасштабируемый (ни вверх, Обслуживание блокчейна (создание новых блоков, обработка транзакций)Процесс «тряски» блока, чтобы он стал Майнящий отец – горе в семье Принцип записиProof-of-WorkМайнеры меняют заголовок блока, пока хеш не станет красивымЭнергозатратно, особенно неэффективноСоздать Если ты опоздал, то покупаешь монетки задорогоЕсли ты опоздал, ты майнишь малоБлок Ethereum – Blockchain 2.0 Первый выпуск 30.07.2015Поддерживает «умные контракты» и виртуальную машину для их исполненияВсе кошельки Чтобы код не загрузил сеть (не зациклился), используется Gas - топливо для Можно написать пирамиду: если на кошелек-контракт приходит 1 эфир, высылаем в ответ Сложно получить случайные числаНе так просто «спрятать» какую-то информациюНет связи с внешним Главное использование контрактов – удобная организация «пузырей»Допустим, у вас отличная идея, и Пишем типичный контракт Пишем типичный контракт Эксплуатируем контракт Contract ExploitStarDAO Память в EVM бывает: storage, memory, code, calldata, stackStorage – это адресное function payAll(){ …    var ToPay = TotalBonus / addresses.length; The DAO robbery DAO (Decentralized Autonomous Organization) - организация, реализованная на смарт-контрактахThe DAO – конкретная DAO - Decentralized Autonomous Organization, организация, реализованная на смарт-контрактахThe DAO – конкретная function splitDAO(uint _proposalID, address _newCurator) noEther onlyTokenholders returns (bool _success) { Атакующий вызывал splitDAO с глубиной стека 30, имея на счету 258 ETH Parity MultiSig Hack MultiSig Wallet – контракт-кошелек, транзакции можно совершать с подтверждения нескольких владельцев19.07.2017 хакер CoinDash Hack 17.07.2017 началось ICO CoinDashХакер взломал сайт и подменил адрес кошелькаЗа час 2000 SoftFork vs HardFork Fork – изменение правил корректности блоков. Следствие – возможное раздвоение блокчейнаSoft Fork Soft Fork – more restrictionsПример: можно попросить майнеров не принимать транзакции с Short «forks» (up to five blocks) appear regularly if blocks mined simultaneously Короткие форки (до пяти блоков) постоянно появляются, если блоки создаются одновременно или LET’S TALK?Kaspersky Lab HQ39A/3 Leningradskoe ShosseMoscow, 125212, Russian FederationTel: +7 (495) 797-8700www.kaspersky.com
Слайды презентации

Слайд 2 Классический блокчейн, недостатки
Понятие умных контрактов, принципы
Пример типичного контракта,

Классический блокчейн, недостаткиПонятие умных контрактов, принципыПример типичного контракта, исходный кодИщем баги,

исходный код
Ищем баги, эксплуатируем типичный контракт
История The DAO и

воровство $60 млн при помощи баги в умном контракте
Взломы ParityWallet и CoinDash
Хардфорки блокчейна, что дальше


Слайд 3 Blockchain 1.0

Blockchain 1.0

Слайд 4 Как работает блокчейн (на примере Биткойна)
Блокчейн – это

Как работает блокчейн (на примере Биткойна)Блокчейн – это интернет-дневникПользователи формируют транзакции,

интернет-дневник
Пользователи формируют транзакции, подписывают их и посылают в сеть
Каждые

10 минут транзакции оформляются в блок
Блок ссылается на предыдущий, дописывается в конец
Блок должен быть «красивым», чтобы его можно было дописать
Чтобы блок стал «красивым», все майнеры его «трясут» все 10 минут
Благодаря этому нельзя просто переписать всю финансовую историю

Революция: в сети без доверия получилось реализовать деньги

Слайд 7 Все полные узлы хранят весь блокчейн и выполняют

Все полные узлы хранят весь блокчейн и выполняют одни и те

одни и те же действия
Блокчейн обычно 100-200 ГБ
Блокчейн медленный

(10 транзакций в секунду для публичного, 1000 транзакций для приватного)
Блокчейн немасштабируем (удвоение ресурсов не меняет пропускную способность)
Чем дороже криптовалюта, тем больше электричества тратится на майнинг (только для PoW)
В блокчейне все видят всё, что не зашифровано

Это должен знать каждый


Слайд 8 Свойства
Децентрализованный
Открытый на чтение
Открытый на запись
Единый
Неизменяемый
С валютой
Доверяемый


Блокчейн
Преимущества
Неблокируемый/устойчивый
Валидируемый
Доступный
Готовый
Не фальсифицируемый
Финансовый
Не требует

СвойстваДецентрализованныйОткрытый на чтениеОткрытый на записьЕдиныйНеизменяемыйС валютойДоверяемыйБлокчейнПреимуществаНеблокируемый/устойчивыйВалидируемыйДоступныйГотовыйНе фальсифицируемыйФинансовыйНе требует репутацииНедостаткиНеэффективный, немасштабируемый (ни

репутации


Недостатки
Неэффективный, немасштабируемый (ни вверх, ни вниз)
Неконфиденциальный
Платный
Сложно делать свой (если

Proof-of-Work)
Замусоренный
Опасный
Псевдонимный

Слайд 9 Обслуживание блокчейна (создание новых блоков, обработка транзакций)
Процесс «тряски»

Обслуживание блокчейна (создание новых блоков, обработка транзакций)Процесс «тряски» блока, чтобы он

блока, чтобы он стал «красивым» (значение хеша меньше таргета)
Получение

вознаграждения в виде эмиссии или комиссий

Если эмиссии в публичном блокчейне нет, то майнинг называется форжингом

Что такое майнинг


Слайд 11 Майнящий отец – горе в семье

Майнящий отец – горе в семье

Слайд 13 Принцип записи
Proof-of-Work
Майнеры меняют заголовок блока, пока хеш не

Принцип записиProof-of-WorkМайнеры меняют заголовок блока, пока хеш не станет красивымЭнергозатратно, особенно

станет красивым
Энергозатратно, особенно неэффективно
Создать свою PoW сеть очень сложно

без достаточной мотивации большого круга майнеров
PoW сети стремятся к централизации (появляются пулы)
Proof-of-Stake
Сформировать блок дают конкретному выбранному участнику (шанс пропорционален состоянию)
Можно скупить нынче пустые кошельки и переписать историю с момента, когда они были полные
Часто используют гибриды PoS+PoW
PoS сети стремятся к централизации (деньги аккумулируются, чтобы увеличить доход)
Proof-of-Authority
Писать могут только сервера (мастер-ноды)
Их ключи в списке доверенных
Можно ограничить долю каждого сервера среди последних N блоков, чтобы один скомпрометированный ключ не скомпрометировал всю сеть
PoA сети по сути централизованы
При любом раскладе действует Proof-of-Correctness
Невалидный блок не будет принят


Слайд 14 Если ты опоздал, то покупаешь монетки задорого
Если ты

Если ты опоздал, то покупаешь монетки задорогоЕсли ты опоздал, ты майнишь

опоздал, ты майнишь мало
Блок создается раз в 10 минут

– тяжело купить жвачку
Размер блока позволяет сделать не более 3 транзакций в секунду (08.2017 вбили костыль, стало 6)
Все видят все транзакции кошелька – нельзя отмыть деньги и обналичить (без использования миксера)
Решаемая задача (подбор SHA256) слишком проста для ASIC – нету частников, только фермы
Весь майнинг сосредоточен в «пулах», сеть централизовалась. 20 пулов создают 98% блоков
Хочется решать больше задач при помощи модного блокчейна (реестр алмазов, DNS, распределенное хранилище…)

Надо придумать свою валюту, с блекджеком

Недостатки Bitсoin


Слайд 16 Ethereum – Blockchain 2.0

Ethereum – Blockchain 2.0

Слайд 17 Первый выпуск 30.07.2015
Поддерживает «умные контракты» и виртуальную машину

Первый выпуск 30.07.2015Поддерживает «умные контракты» и виртуальную машину для их исполненияВсе

для их исполнения
Все кошельки делятся на людские (управляемые извне)

и контракты (код)
Язык контрактов тьюринг-полный (циклы, функции и т.п.)
Обычно контракты пишут на Solidity, но Ethereum Virtual Machine выполняет байткод, ей все равно
Код выполняется, когда его вызывают или когда на кошелек приходит символическая сумма
Код сохраняет и обновляет свое состояние в блокчейне
Все ноды выполняют код одинаково, детерминированно

Ethereum Contracts


Слайд 18 Чтобы код не загрузил сеть (не зациклился), используется

Чтобы код не загрузил сеть (не зациклился), используется Gas - топливо

Gas - топливо для исполнения, счетчик инструкций
Вы покупаете газ

у майнера (за эфир) по штатной цене и задаете лимит на выполнение вашей транзакции
Если ваша команда недовыполнилась, газ не вернут, его все равно заберет себе майнер, результаты работы транзакции откатят
Разместить контракт/считать данные из хранилища/записать данные/передать деньги – всё требует газ

Gas


Слайд 19 Можно написать пирамиду: если на кошелек-контракт приходит 1

Можно написать пирамиду: если на кошелек-контракт приходит 1 эфир, высылаем в

эфир, высылаем в ответ 2 из поступивших после средств
Можно

реализовать лотерею: сначала деньги собираются на кошелек-контракт, а потом он выбирает счастливчика (пропорционально) и отправляет выигрыш
Можно реализовать казино
Можно реализовать аукцион, и даже слепой аукцион
Можно реализовать деривативы (сделки с условиями): фьючерсы, свопы, опционы…

Главное: все видят (условно) текст контракта, все понимают условия его работы, ему можно доверять, потому что это блокчейн
К контракту обычно пишут HTML-фронтенд, который позволяет общаться с блокчейном и видеть результат

Использование умных контрактов


Слайд 20 Сложно получить случайные числа
Не так просто «спрятать» какую-то

Сложно получить случайные числаНе так просто «спрятать» какую-то информациюНет связи с

информацию
Нет связи с внешним миром
Для взаимодействия с контрактами пользователям

нужен эфир
Ethereum работает медленно. На весь мир можно выполнить 3-5 транзакций в секунду.
Сами смарт-контракты обычно выполняют немного действий
Если в смарт-контракте есть ошибки, то это навсегда
А еще смарт-контракты могут зависнуть или вообще, работать не так

Ограничения смарт-контрактов


Слайд 21 Главное использование контрактов – удобная организация «пузырей»
Допустим, у

Главное использование контрактов – удобная организация «пузырей»Допустим, у вас отличная идея,

вас отличная идея, и вы хотите собрать денег на

ее реализацию
У KickStarter/IndieGoGo ряд недостатков
Вы создаете контракт
Когда на него приходят деньги, он зачисляет в своей памяти на адрес отправителя акции/монетки/токены/фантики
Когда ваш бизнес запустится, вы можете раздавать дивиденды/новую криптовалюту/товар в соответствии со вкладом
Можно запрограммировать голосование по решениям проекта и т.п.
Токены можно зарегистрировать на криптобиржах и торговать ими
Среднее ICO собирает $10-20 млн
Миллионы людей по всему миру получают возможность “швырять деньги в монитор”
«Криптоинвесторы» раздувают капитализацию пузырей до $1 млрд, при том, что у компании нет прибыли нет продукта, есть только план и концепция
Организатор получает весь эфир сразу и оставляет еще 10%+ токенов про запас
Организатор, получив эфир, может сделать pump and dump токенов
Если идея – альткойн, то организатор автоматом получает большую капитализацию новой валюты
Ничего общего с крахом доткомов 2000 года
Эфир – топливо для пузырей

Пузыри (ICO / initial coin offering / cryptoinvestment / crowdsale)


Слайд 22 Пишем типичный контракт

Пишем типичный контракт

Слайд 23 Пишем типичный контракт

Пишем типичный контракт

Слайд 24 Эксплуатируем контракт

Эксплуатируем контракт

Слайд 26 Contract ExploitStarDAO

Contract ExploitStarDAO

Слайд 28 Память в EVM бывает: storage, memory, code, calldata,

Память в EVM бывает: storage, memory, code, calldata, stackStorage – это

stack
Storage – это адресное пространство с длиной адреса 32

байта, разбитое на ячейки по 32 байта, хранится в блокчейне, в отличие от memory
Все глобальные переменные и все массивы хранятся в storage, если не указано иное
Все данные иннициализируются нулями по умолчанию
Массив res будет размещен по нулевому адресу, там же, где и переменная owner ☺
Модификатор constant пока не поддерживается компиляторами

Какая-то функция в StarDAO


Слайд 29 function payAll()
{ …
var ToPay

function payAll(){ …  var ToPay = TotalBonus / addresses.length;

= TotalBonus / addresses.length;
for (var

i = 0; i < addresses.length; i++)
{
If (!addresses[i].send(ToPay)) // can consume not more then 9040 gas, returns false on fail
break;
}
TotalBonus = 0; // bonus paid
}
Цикл дойдет до 255-го адреса и начнется сначала (высосет все деньги)
Цикл защищен от re-entrancy атаки, но это ничуть не помогает
Не раздавайте деньги вкладчикам. Пусть они сами приходят за деньгами (и платят за газ)
function withdraw()
{
uint amount = pendingWithdrawals[msg.sender];
pendingWithdrawals[msg.sender] = 0;
msg.sender.transfer(amount);
}

Как выдавать деньги вкладчикам


Слайд 30 The DAO robbery

The DAO robbery

Слайд 31 DAO (Decentralized Autonomous Organization) - организация, реализованная на

DAO (Decentralized Autonomous Organization) - организация, реализованная на смарт-контрактахThe DAO –

смарт-контрактах
The DAO – конкретная DAO, реализованная отчасти разработчиками Ethereum,

для коллективных инвестиций
Все автоматизировано, никаких издержек на управление. Прямая демократия.
На 06.06.2016 в нее 20000 «криптоинвесторов» вложили $150 млн, 13.6% всего эфира (11 млн ETH)
Инвесторы могут голосованием решать, в какой проект инвестировать
Инвесторы могут проголосовать «ногами» и вывести свои деньги в childDAO, происходит split
Апатия участников, социальные эксплоиты

17.06.2016 злоумышленник вывел на подконтрольную ему дочернюю DarkDAO 3.5 млн ETH ($60 млн по курсу на 17.06)
По правилам DAO эфир нельзя обналичить в течение месяца после split’а, что дало время разработчикам обдумать положение, в котором они оказались
«The terms of The DAO Creation are set forth in the smart contract» - любые операции, дозволенные самим кодом программы, должны признаваться законными

The DAO story


Слайд 32 DAO - Decentralized Autonomous Organization, организация, реализованная на

DAO - Decentralized Autonomous Organization, организация, реализованная на смарт-контрактахThe DAO –

смарт-контрактах
The DAO – конкретная DAO, реализованная отчасти разработчиками Ethereum,

для коллективных инвестиций
Все автоматизировано, никаких издержек на управление. Прямая демократия.
На 06.06.2016 в нее 20000 «криптоинвесторов» вложили $150 млн, 13.6% всего эфира (11 млн ETH)
Инвесторы могут голосованием решать, в какой проект инвестировать
Инвесторы могут вывести свои деньги в childDAO, происходит split
«The terms of The DAO Creation are set forth in the smart contract» - любые операции, дозволенные самим кодом программы, должны признаваться законными

17.06.2016 злоумышленник вывел на подконтрольную ему дочернюю DarkDAO 3.5 млн ETH ($60 млн по курсу на 17.06)
По правилам childDAO эфир нельзя обналичить в течение месяца после split’а, что дало время разработчикам обдумать положение, в котором они оказались
Думать пришлось быстро

The DAO story


Слайд 33 function splitDAO(uint _proposalID, address _newCurator) noEther onlyTokenholders returns

function splitDAO(uint _proposalID, address _newCurator) noEther onlyTokenholders returns (bool _success) {

(bool _success)
{
….

// Burn DAO Tokens
Transfer(msg.sender, 0, balances[msg.sender]);
withdrawRewardFor(msg.sender); // be nice, and get his rewards
totalSupply -= balances[msg.sender];
balances[msg.sender] = 0;
paidOut[msg.sender] = 0;
return true;
}

Transfer() just logs the event to blockchain, no real transfer. transfer() should be used instead
Дивиденды высылались даже если они равны 0
Так же уязвимы еще две функции


Real splitDAO code


Слайд 35 Атакующий вызывал splitDAO с глубиной стека 30, имея

Атакующий вызывал splitDAO с глубиной стека 30, имея на счету 258

на счету 258 ETH (~$5000)
Перед раскруткой стека атакующий
Переводил

свои токены на другой свой «инвест-счет»
Резолвил стек вызовов, его баланс обнулялся (многократно)
Переводил свои токены обратно на тот же аккаунт
Атакующий повторял атаку 50 раз, суммарно украв 3.5 млн ETH
Инвесторы смотрели, как едут деньги, но ничего не могли сделать
Курс эфира просел в два раза
Через пять дней другой атакующий повторил атаку и вывел еще $100 тысяч
Разработчики повторили атаку и вывели все оставшиеся деньги на подконтрольный им контракт
Атакующий написал открытое письмо, что он сделал все по правилам и ни в чем не виноват. Жизнь продолжается.

The DAO attack


Слайд 36 Parity MultiSig Hack

Parity MultiSig Hack

Слайд 37 MultiSig Wallet – контракт-кошелек, транзакции можно совершать с

MultiSig Wallet – контракт-кошелек, транзакции можно совершать с подтверждения нескольких владельцев19.07.2017

подтверждения нескольких владельцев
19.07.2017 хакер украл с трех multisig-кошельков 150

000 ETH (~$30 mln)
«Белые хакеры» быстро спасли еще $150 mln с других кошельков
Уязвимость внесена 7.03.2017











Просто добавить internal было нельзя из-за архитектурного решения (delegatecall(msg.data))


Parity MultiSig Hack


Слайд 38 CoinDash Hack

CoinDash Hack

Слайд 39 17.07.2017 началось ICO CoinDash
Хакер взломал сайт и подменил

17.07.2017 началось ICO CoinDashХакер взломал сайт и подменил адрес кошелькаЗа час

адрес кошелька
За час 2000 инвесторов накидали $7 mln
Адресу присвоили

имя FAKE_Coindash, в течение суток накидали еще $1 mln
Один счастливчик послал 1800 ETH (~$300 000)


CoinDash Hack


Слайд 40 SoftFork vs HardFork

SoftFork vs HardFork

Слайд 41 Fork – изменение правил корректности блоков. Следствие –

Fork – изменение правил корректности блоков. Следствие – возможное раздвоение блокчейнаSoft

возможное раздвоение блокчейна
Soft Fork – ужесточение правил (дополнительные условия)
Пример:

можно попросить майнеров не принимать транзакции с какого-то кошелька
Hard Fork – новые правила (блоки новых и старых майнеров несовместимы)

При помощи изменения правил можно откатить цепочку вместе со всеми транзакциями - вернуться назад во времени
В правила можно дописать «делаем вид, что на этом кошельке в два раза больше денег»
Примерно так и поступили в рамках The DAO recovery

Soft Fork vs Hard Fork


Слайд 42 Soft Fork – more restrictions





Пример: можно попросить майнеров

Soft Fork – more restrictionsПример: можно попросить майнеров не принимать транзакции

не принимать транзакции с какого-то кошелька
Hard Fork – new

rules






Пример: у разных версий клиента разные правила валидации блоков, нет консенсуса
Нельзя вывести деньги (откатить транзакцию) с «внешнего адреса», потому что нужен секретный ключ
Можно откатить цепочку вместе со всеми транзакциями - вернуться назад во времени

Soft Fork vs Hard Fork


Слайд 43 Short «forks» (up to five blocks) appear regularly

Short «forks» (up to five blocks) appear regularly if blocks mined

if blocks mined simultaneously or distributed slowly. Such forks

die quickly.
Bitcoin, hard fork 08.08.2010
Overflow leaded to creation of 92 bln BTC (CVE-2010-5139)
Rolled back all the transactions for day
You need to convince at least half of miners to update the client or you fail
Ethereum, hard fork 20.07.2016
The DAO recovery – returning ETH, contracts substitution, virtual machine “hack”
85% miners accepted
Categorical miners declined, Ethereum Classic (ETC) appeared
All the ether doubled. 16*ETC ~= ETH
Bitcoin, hard fork 01.08.2017
Some miners decided to increase block size 8 times to increase blockchain throughput
All bitcoin owners got also Bitcoin Cash (BCH)
20*BCH ~= BTC
Bitcoin, hard fork 24.10.2017
Some people decided to change mining algorithm decentralize network again
All bitcoin owners got also Bitcoin Gold (BTG)
There will be more in future

Important fork history


Слайд 44 Короткие форки (до пяти блоков) постоянно появляются, если

Короткие форки (до пяти блоков) постоянно появляются, если блоки создаются одновременно

блоки создаются одновременно или медленно распространяются. Они отмирают естественным

образом.
Bitcoin, hard fork 08.08.2010. Переполнение привело к появлению кошелька с 92 млрд BTC (CVE-2010-5139). Был реальный откат транзакций.
Надо убедить хотя бы половину майнеров обновить клиент, иначе ничего не выйдет
Bitcoin, unintentional hard fork 12.03.2013. Новая версия клиента (от 19.02.2013) создала «некорректный» блок, цепочка раздвоилась.
Попросили новых откатиться и забыть свою цепочку (потерять деньги, забыть транзакции)
Один специально продал BTC на $10000 в новой цепочке. Потестил double spend ☺
Выработали Alert System (Review who has access to the alert system keys, make sure they all have contact information for each other, and get good timezone overlap by people with access to the keys)
Добавили мониторинг хардфорков
Ethereum, hard fork 20.07.2016. TheDAO recovery – возврат ETH, замена контрактов.
85% майнеров переключилось. Радикалы остались, появился Ethereum Classic (ETC)
Количество эфира удвоилось. 16*ETC ~= ETH
Ethereum, hard fork 18.10.2016. Tuning opcode pricing
Некоторые операции были слишком дешевыми по газу, но слишком дорогими по вычислениям
Ethereum, hard fork 22.11.2016. Tuning opcode pricing to prevent future attacks on the network
Ethereum, unintentional hard fork 24.11.2016. One implementation was failing to revert empty account deletions when the transaction causing the deletions of empty accounts ended with an out-of-gas exception

История форков


  • Имя файла: ethereum-blockchain-20-basics-kak-rabotaet-blokcheyn-na-primere-bitkoyna.pptx
  • Количество просмотров: 144
  • Количество скачиваний: 0