?

Log in

No account? Create an account
Previous Entry Share Next Entry
Как работает блокчейн. Немного криптографии или что ищут майнеры.
crypto
zema52
Откуда вообще взялся этот термин "криптовалюта"? Что означает в нем приставка "крипто"? Несмотря на то, что существует несколько версий происхождения этого слова, я склоняюсь к версии, что происходит оно от слова "криптография", что является наукой о шифровании.
Предмет этот не самый простой, но, чтобы понять работу криптоденег, совсем не обязательно погружаться в дебри дискретной математики. Достаточно понять всего два приема, на которых все это держится: хэш и электронно-цифровая подпись.

Сегодня разберемся с тем, что такое хэширование.
Возьмем какой-нибудь текст. Например, из классики: "графиня изменившимся лицом бежит пруду".
Этот текст можно разбить на отдельные символы и разложить по блокам.
Например, вот так


Для надежности, в конце записываем длину фразы, а свободное место забиваем каким-то символом. Например, символом подчеркивания.

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

Теперь эти цифры можно перемешивать между собой, складывать, вычитать, умножать и смешивать с другими, заранее заготовленными цифрами (они называются "соль"), чтобы все было еще запутаннее.
Если это перемешивание делать каждый раз в одном и том же порядке, то каждый раз будет получаться один и тот же результат. Такой алгоритм шифрования называется хэш-функцией, а ее результат - хэшем (hash). В переводе с английского hashing означает "рубить, крошить, смешивать".

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

Существует много различных хэш-функций. Мы возьмем SHA-256. Именно на ней работает биткойн и некоторые другие монеты.
Данные здесь перемешиваются по такой схеме:

где каждый квадратик - это отдельная буква, и перемешиваются они 64 раза.

Все алгоритмы шифрования открыты и их можно реализовать на любом языке программирования. Можно даже считать хэш на листочке бумаги или палочкой на песке. Если вы думаете, что я шучу, то вот тут один приколист решил показать, как майнить биткойны ручкой на листе бумаги.

Для нас нет смысла делать это таким извращенным способом. В интернете есть куча сайтов, где можно посчитать хэш. Например, здесь


Итак, если вставить нашу фразу "графиня изменившимся лицом бежит пруду", то в качестве хэша мы получим число "948D5057AD525A54203159B72BB785883C2EE4910D8746FC85A4DD3D24F7D3E8". Буквы от A до F - это тоже цифры в 16-ричной системе счисления.
Длина хэша для SHA-256 всегда равна 256 бит, т.е. 64 символа. Мы можем взять хэш от одной буквы или от полного собрания сочинений Достоевского, но длина все равно будет 64 символа. Таким образом, по хэшу мы не можем понять даже какой длины было исходное сообщение.

Другой особенностью является то, что малейшее изменение исходной информации полностью меняет хэш без какой либо закономерности. Если в нашей фразе поменять первую букву на заглавную, то результат станет таким: "3ED86D8F4A780D480159FFC2376C80B12267B27A764F87210187C90F458AC1C7".
Никакой взаимосвязи с предыдущим хэшем нет, хоть мы поменяли всего одну букву.

Что же нам дает это несимметричное шифрование? Зачем оно вообще нужно?
Без хэширования интернет в нынешнем виде просто не мог бы существовать. Области применения самые разнообразные. Одна из них - хранение паролей.
Когда вы регистрируетесь на каком-либо интернет-сервисе, то ваш пароль никогда не хранится в чистом виде. Всегда хранится его хэш. Когда вы входите в систему и вводите в окошко пароль, от него считается хэш и сверяется с хэшем в базе. Если какие-то злоумышленники получат доступ к серверу, то получат не список паролей, а список хэшей, который ничего не даст, т.к. из хэша узнать исходный пароль нельзя.

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

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

Такая схема называется деревом хэшей или деревом Меркла, а самый верхний хэш - корнем Меркла. Любое изменение в транзакциях блока приведет к изменению корня Меркла, т.е., мы всего одним хэшем защищаем сразу все транзакции.

Для того, чтобы лучше понять устройство блока я решил сделать файлик в MS Excel, где считаются все хэши. Также из него можно подробно понять, как работает алгоритм SHA-256, там это делается в двоичном виде. Я не изобретал велосипед и нашел в сети готовый пример, где считается хэш блока биткойна, но для удобства понимания добавил лист, на котором отображаются все хэшируемые параметры и конечный результат.

Посмотрим, как это работает на конкретном примере.
Возьмем в bitcoin explorer самый последний блок. На данный момент это блок номер 515160


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



Version - версия блочной схемы. Определяется системой.
Previous block hash - хэш предыдущего блока. Нужен для связки блоков между собой, о чем я писал в прошлом посте.
Merkle Root - корень дерева Меркла. Тот самый хэш хэшей всех транзакций, о котором я упоминал выше.
Time stamp - время создания блока. Браузер показывает время в текущем часовом поясе, а в систему все заносится по Гринвичу. Так как мой часовой пояс GMT+2, то я вручную отнимаю два часа.
Bits - параметр, от которого зависит сложность расчета. По специальной формуле из него высчитывается максимально возможный хэш блока. Сеть принимает блок только если его хэш меньше этого значения. Bits автоматически пересчитывается системой каждые две недели, чтобы все майнеры сети паковали новый блок раз в 10 минут.

Ну и, наконец, самый интересный параметр nonce. Это именно то, что ищут все майнеры планеты, истребляя дикое количество электроэнергии.
Все параметры, указанные выше, берутся из данных, либо сразу из системы, и только параметр nonce дописывается вручную.
Параметры блока соединяются в единый текст, от которого потом дважды берется хэш по алгоритму SHA-256. Nonce должен быть таким, чтобы итоговый хэш блока начинался на определенное количество нулей. Сейчас это число равно 18. Единственный способ, которым этот правильный nonce можно получить - случайный перебор всех вариантов, пока не отыщется нужный. Тот майнер, который отыскивает это число, превращает хэш блока в "красивый" и получает награду 12,5 биткойнов плюс все комиссии блока.

Если кто-то хочет подробно узнать как это все работает, а также попробовать "смайнить" другой блок, файл с этим примером можно скачать здесь.

P.S. Как я уже писал ранее, я хочу развить свой отдельный криптовалютный проект и зарабатывать на этом, не вложив ни копейки своих средств.
В финансовом плане мой проект неожиданно сдвинулся с места. Читатель из Москвы по имени Эльхан решил задонатить мне 30 евро, за что ему большое человеческое спасибо. Когда наберется сумма на домен и хостинг, сделаю отдельный сайт.

Итого, на 26.03.2018
Сумма в фиате: 30 евро.
Сумма в криптовалюте: 0.

  • 1
Данная тема сложнее, чем предыдущая. Вроде бы всё понятно, но смутно.

А что именно непонятно?
Даже не представляю, как дальше объяснять криптографию на эллиптических кривых.
Возможно, это не настолько интересно, как вопросы торговли и обогащения, но некий теоретический минимум знать все же полезно.

зем, таки 30 евриков положил наличкой?

Да. Перевел на карточку.

(Deleted comment)
Все параметры блока (включая nonce) соединяются в единый текст, от которого потом дважды берется хэш.

Донат я сделаю уже на сайте. В журнале попрошайничать не хочу. Именно, чтобы не быть похожим на Бабченко.

Edited at 2018-03-26 07:57 am (UTC)

Отличное объяснение, сейчас такого не хватает, все пишут только про спекуляции, если опубликуете адрес в крипте для доната - пришлю немного.)

Сейчас O'Reilly бесплатно раздает последнее издание ссамой главной книги про биткйн - https://conferences.oreilly.com/oscon/oscon-or/public/content/mastering-bitcoin-second-edition. Там все очень подробно и качественно разобрано (включая последние темы типа сегвит и лайнинга), после прочтения уже можно идти работать программистом по соответствующей тематике.

интересно почитать и разобраться. спасибо
ни черта не понятно, но интересно)

Если интересно, скачайте файлик. Там все хэши считаются вживую средствами Excel.

Edited at 2018-03-27 06:14 pm (UTC)

>> Длина хэша для SHA-256 всегда равна 256 бит, т.е. 64 символа.
Не совсем так. В одном байте 8 бит, 256/8 = 32 байта.
То, что вы называете "64 символами" всего лишь отображение 32 байт в 16-ричном формате, когда один байт записывается как две цифры в 16-ричном формате (от 00 до FF).

Я же не сказал, что 64 байта. Ну и людям так понятнее, если в символах.

Спасибо за, наконец, внятное и доступное даже для меня, врача, а ни разу не математика и программиста, объяснение принципа блокчейна и вообще SHA256 шифрования.
Успокаивает сохранность паролей и вообще, передающейся открытым способом, но зашифрованной информации)

Спасибо за хороший отзыв

ну это не проблема)-
проблема почему эти вычисления стоят типоРЕАЛЬНЫХ денег?
- а не менее красивые вычисления шахматные... бесплатны?

Что значит "стоят денег"? Денег стоит электричество для вычислений. Шахматы не потребляют энергии, как небольшое государство.

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

Спасибо!
Все же многие не поняли, либо поняли не все. Чуть позже переделаю.
Пока ломаю голову как объяснить народу ЭЦП на эллиптических кривых.

Биткоины не интересуют, но вот за эту информацию спасибо: «Если какие-то злоумышленники получат доступ к серверу, то получат не список паролей, а список хэшей, который ничего не даст, т.к. из хэша узнать исходный пароль нельзя.» Успокоили. :)

А есть какое-то ТЗ? На основе чего собираетесь делать свою крипту?

Делать очередной говнокойн я не планирую. Просто, поскольку это новая индустрия, то еще не все велосипеды изобретены и можно куда-то пристроиться, отщипывая малюсенький ручеек от всех этих бурных финансовых потоков.
Что именно делать пока толком не решил, есть несколько идей. Главное - влезть, а там по ходу дела будет более понятно куда плыть.

Мда....интересно было почитать.

Юра, ты же не гуманитарий. Я думал, ты это все и так знаешь.

Че-то ты в этих... криптовалютах не на том акцент делаешь, мне кажется. То критерием их ценности оказывается количество сожженной электроэнергии, то... Теперь говоришь о защищенности информации. Я читал, что квантовый комп взломает любой код мгновенно. Я, конечно, чайник, но эти "электронные деньги" - надувательство, в любом случае, потенциальное. Тебе тут писали - проблема будет в обналичивании этих электронных сигналов, а уж то, что они в принципе ничем не обеспечены, должно бы быть понятно и ребенку. Испокон веков и тысячелетий деньгами служили драгметаллы - серебро и золото, а также медь как разменка. Все остальное - чистой воды жульничество, типа печатание банкнот в виде долговых обязатедьств государства или вообще хрен пойми кого, типа евро или доллара, печатаемого, оказывается, частной(!!!!) коммерческой компанией "ФРС". Золотой стандарт на бакс отменен в, кажется, 1971 или 73 году, т.е. официально заявлено, что доллар - ничем не обеспеченная бумажка. Про деревянный рубль и зимбабвийский доллар и говорить нечего. А по твоему блогу - начал банить комментаторов годных, и в комментах, как и предрекалось, пошло все больше бессмысленных бабских "Удачи!", "Желаю успехов!", бредятина бабская. Обещал жЫрного пидора забанить, он снова у тебя.

Золотой стандарт на бакс отменен в, кажется, 1971 или 73 году, т.е. официально заявлено, что доллар - ничем не обеспеченная бумажка.

-отчасти потому что Савок печатал их в Германии- сколько дали) и менял на золото

(Deleted comment)
(Deleted comment)
(Deleted comment)
Когда вернёшься и получишь года 2-3 условно, займись Делом:


Ужас какой.
Нах так жить?

(Deleted comment)
Да вроде все ровно и однообразно.
Стираю дома в стиральной машинке. Там же, дома, работаю над проектом, ем и сплю.
Зарабатываю кодописательством. Меньше, чем на стройке, но на жизнь хватает. Как будут ощутимые результаты, обязательно расскажу.

(Deleted comment)
(Deleted comment)
(Deleted comment)
(Deleted comment)
  • 1