Схема работы биткоин: Bitcoin. Как это работает / Хабр
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_7",blockId:rtbBlockID,pageNumber:7,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_7").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_7");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
Bitcoin. Как это работает / Хабр
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_6",blockId:rtbBlockID,pageNumber:6,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_6").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_6");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true); О Bitcoin я узнал относительно недавно, но он меня сразу подкупил своей идеей p2p. Чем глубже я зарывался в их Wiki, тем больше проникался этой идеей. Ее реализация красива и элегантна с технической точки зрения.
Поиск хабра по Bitcoin выдает два топика. Но это скорее новости. По комментариям заметно, что у многих людей, особенно не знакомых с Bitcoin напрямую, возникает много вопросов насчет принципов его работы. Также много догадок, зачастую неверных. Чтобы как-то прояснить ситуацию, было решено написать эту статью.
Настоящие деньги?
Первое место в списке главных заблуждений насчет Bitcoin занимает идея о том, что Bitcoin это очередные «бумажки», пускай и электронные, которые лишь представляют «настоящие» деньги, являются эдакими долговыми расписками. Отсюда берет начало большинство остальных заблуждений: раз это бумажки, то они ничего не стоят; их можно напечатать или уничтожить сколько угодно; их можно подделать; их можно скопировать.
Повторюсь — все это не более, чем заблуждения. В основе идеи Bitcoin лежало желание создать не очередные «бумажки», которые представляют реальные деньги, такие как золото, а аналог самого золота. Взять те свойства золота, благодаря которым оно является идеальными деньгами, и сделать электронную валюту на их основе.
Сложность добычи
Золото нельзя скопировать — его можно только добыть. Но это очень затратный процесс как по времени, так и по ресурсам. Частично из-за этого золото ценится так высоко. Чтобы было понятнее, рассмотрим на примере.
Допустим человек весь день усердно добывал золото и добыл в итоге 1 кг. Для него стоимость добытого золота равна одному дню усердной работы. После тяжелого рабочего дня он решил отдохнуть и сходить в кинотеатр. По счастливому совпаденью кассир отдавал билеты в обмен на золото. Почему? Потому что кассиру нравится золото, но не нравится весь день работать с киркой. Поэтому он готов оказать услугу — отдать билет — в обмен на 1 кг золота. Фактически же он обменивает свою услугу на один день тяжелой работы.
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_5",blockId:rtbBlockID,pageNumber:5,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_5").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_5");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
Теперь представим другую ситуацию. Изобрели копир, который работает с золотом. И любой человек может за минуту из одного 1 кг золота сделать 10 кг. В данной ситуации кассир уже не будет обменивать билеты на золото, так как теперь он сам легко сможет его напечатать столько, сколько захочется. Золото перестанет иметь какую-либо ценность и его уже нельзя будет использовать в качестве денег.
В Bitcoin процесс добычи монеток тоже требует ресурсов и времени. Но в данном случае это не человеческие ресурсы, а компьютерные.
Условно ограниченный ресурс
Чем дольше добывается золото, тем труднее (затратнее по ресурсам) становится его добывать. Это гарантирует, что инфляция будет под контролем.
В Bitcoin похожее поведение достигается путем введения функции скорости суммарно добываемых монеток от времени. Эта функция обратно пропорциональная, т. е. скорость со временем падает и стремится к нулю. Если взять интеграл этой функции по времени, то получится экспонента. Приблизительно такая:
Здесь видно, что общее число монеток стремится к 21 000 000. Подробности работы Bitcoin будут рассмотрены далее. А пока нужно знать две вещи: монетки появляются в системе пачками приблизительно каждые 10 минут, количество монеток в одной пачке — 50, и оно уменьшается вдвое каждые 4 года.
Материальность
Это уже свойство не столько золота, сколько любой не электронной валюты. Один слиток золота нельзя дважды обменять на услугу или товар. Т. е. в один момент времени он может быть либо у продавца, либо у покупателя.
Такое поведение естесственно для материальной валюты, но не для электронной. Чтобы добиться такого поведения виртуальных денег, нужно приложить немало смекалки. В Bitcoin это поведение обеспечено механизмом транзакций. Все транзакции объеденяются в цепочки. Каждая транзакция берет монетки из одной или нескольких существующих транзакций и указывает, кому они предназначаются. Поэтому всегда можно проверить всю цепочку на валидность.
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_4",blockId:rtbBlockID,pageNumber:4,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_4").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_4");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
Сложность добычи, ограниченный ресурс, материальность — эти свойства, плюс использование криптографии для обеспечения безопасности, позволяют использовать Bitcoin в качестве денег. На них основано ядро Bitcoin. Это не просто договоренности. Все они заложены в системе by design, и по-другому она работать не будет. Настало время рассмотреть этот самый дизайн.
Цепочка блоков
Любая электронная платежная система должна где-то и как-то хранить транзакции. В Bitcoin вся информация хранится в цепочке блоков. Блоки передаются в формате JSON. Каждый блок содержит заголовок и список транзакций. Заголовок состоит из нескольких свойств, среди которых есть хэш предыдущего блока. Таким образом вся цепочка блоков хранит все транзакции за все время работы Bitcoin.
В текущих версиях программы Bitcoin цепочка блоков скачивается целиком каждым клиентом, что делает систему полностью децентрализованной. Данные никак не шифруются и любой может вручную проследить все транзакции. Существует даже специальный сайт — Bitcoin Block Explorer, на котором можно легко посмотреть всю информацию о блоках и транзакциях.
На момент написания статьи количество блоков в цепочке было равно 110 968, и, как я уже говорил ранее, это количество приблизительно через каждые 10 минут увеличивается на 1. Это значит, что кто-то из участников смог создать новый блок.
Кстати говоря, все участники делятся на две группы: на тех, кто работает над новым блоком и кто не работает. По статистике эти группы соотносятся как 1 к 3. Зачем вообще создавать блоки, да еще каждые 10 минут? В блоках записываются транзакции. Каждый блок содержит все транзакции, которые проходили во время его создания, т. е. за 10 минут.
Работает это следующим образом. Один из клиентов создает новую транзакцию и рассылает ее другим клиентам, которые заняты генерацией блока. Они добавляют эту транзакцию к своему блоку и продолжают генерацию. Рано или поздно у кого-то получится сгенерировать блок. Такой блок запечатывается (к нему больше не добавляются транзакции) и рассылается по сети. Далее клиенты проверяют блок и транзакции внутри него на валидность. Если никаких проблем нет, то транзакции считаются одобренными. К этому моменту свежий блок уже доехал до каждого клиента и добавлен в цепочку. После этого процесс повторяется — клиенты начинают генерировать очередной блок и собирать в него новые транзакции.
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_3",blockId:rtbBlockID,pageNumber:3,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_3").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_3");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
Блок
Рассмотрим содержимое блока и процесс его генерации более подробно. Пример блока можно найти на все том же Bitcoin Block Explorer. Блок состоит из заголовка и списка транцакций. Заголовок состоит из следующих свойств:
hash — SHA-256 хэш заголовка блока. Такой хэш является достаточно случайным, а время его вычисления предсказуемо. Хочу заметить, что хэшируется только заголовок, без транзакций. Так что число транзакций не будет сильно влиять на время вычисления хэша.
ver — Версия схемы блока. На данный момент у всех блоков одна версия — 1.
prev_block — Хэш предыдущего блока в цепочке. Благодаря этому свойству цепочку нельзя подделать, заменив в ней один из блоков, так как хэш блока всегда зависит от хэша предыдущего блока в цепочке. Изменив один из блоков, придется пересоздавать все последующие.
mrkl_root — Merkle root — список хэшей транзакций. Хэш блока должен обязательно зависеть от транзакций, чтобы их нельзя было подделать. Но вычислять его напрямую будет долго, если количество транзакций велико. Поэтому сначала хэшируются сами транзакции, а затем их хэши используются для вычисления хэша всего блока.
Может показаться абсурдным — зачем дважды вычислять хэш одного и того же. Но дело в том, что хэш транзакций обновляется только при добавлении к блоку новой транзакции, а хэш заголовка блока пересчитывается несколько тысяч раз в секунду. К тому же, чем ближе размер заголовка в константе, тем точнее можно предсказать время вычисления его хэша.
time — uint32_t представляющее время создания блока. Максимально допустимый год — 2106.
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_2",blockId:rtbBlockID,pageNumber:2,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_2").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_2");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true);
bits — Одно из самых важных свойств. Является сокращенной формой целевого значения хэша. Блок считается сгенерированным (валидным), когда его хэш меньше этого целевого значения. Целевое значение определяет сложность создания блока. Чем оно меньше, тем меньше вероятность подобрать подходящий хэш за одну итерацию. Это свойство обновляется каждые две недели.
Происходит это следующим образом. Подсчитывается число сгенерированных блоков за последние две недели и сравнивается с эталоном (1 блок каждые 10 минут). Если блоков слишком много, то сложность увеличивается. Если блоков слишком мало — уменьшается. Таким образом система адаптируется к увеличению числа пользователей и, как следствие, суммарной мощности их компьютеров.
nonce — Число, которое, начиная с нуля, инкрементируется после каждой итерации вычисления хэша. Собственно, так и происходит перебор, пока хэш не будет меньше целевого значения. Чтобы каждый новый хэш отличался от предыдущего, должно отличаться хотя бы одно из свойств заголовка блока.
Например, версия никогда не меняется. Хэш предыдущего блока обновляется тогда, когда кто-нибудь нас опередит и сгенерирует новый блок. Merkle root обновляется при добавлении транзакции. Время — каждые несколько секунд. Bits (целевое значение, сложность) — каждые две недели. Все это слишком долго. Чтобы не ждать, пока обновится одно из свойств и существует nonce.
Рассмотрим гипотетическую ситуацию. Все значения nonce были проверены и ни одно из них не подходит. За это время ни одно другое свойство не изменилось. Происходит переполнение nonce и оно снова начинается с нуля. Получается, что далее хэши будут повторяться. Чтобы избежать подобных ситуаций, после переполнения nonce, меняется специальное свойство одной из транзакций. После этого обновляется Merkle root и хэши заголовка блока уже не будут повторяться.
n_tx — Количество транзакций в списке.
size
if(rtbW>=960){var rtbBlockID="R-A-744041-3";} else{var rtbBlockID="R-A-744041-5";}
window.yaContextCb.push(()=>{Ya.Context.AdvManager.render({renderTo:"yandex_rtb_1",blockId:rtbBlockID,pageNumber:1,onError:(data)=>{var g=document.createElement("ins");g.className="adsbygoogle";g.style.display="inline";if(rtbW>=960){g.style.width="580px";g.style.height="400px";g.setAttribute("data-ad-slot","9935184599");}else{g.style.width="300px";g.style.height="600px";g.setAttribute("data-ad-slot","9935184599");} g.setAttribute("data-ad-client","ca-pub-1812626643144578");g.setAttribute("data-alternate-ad-url",stroke2);document.getElementById("yandex_rtb_1").appendChild(g);(adsbygoogle=window.adsbygoogle||[]).push({});}})});
window.addEventListener("load",()=>{
var ins=document.getElementById("yandex_rtb_1");if(ins.clientHeight =="0"){ins.innerHTML=stroke3;}},true); — Размер блока в байтах.
Транзакции
Транзакции содержатся в блоках в виде списка. Они, также как и блоки, выстраиваются в цепочки. Каждая транзакция должна указать, откуда она берет деньги (из какой существующей транзакции), и куда направляет.
Для указания адресата используется его публичный ключ. Чтобы адресат мог использовать полученные деньги, он должен создать новую транзакцию, которая будет брать деньги с предыдущей и перенаправлять их по другому адресу. Чтобы доказать, что человек использует для перевода именно свои деньги, а не чужие, он должен оставить в своей транзакции свою цифровую подпись. Тогда в любой момент времени можно удостоверится, что все транзакции в системе являются валидными.
На практике все это реализовано с помощью следующих свойств:
hash — Хэш всей транзакции. Получается, что транзакции хешируются дважды. Первый раз во время вычисления хэша транзакции. Второй раз во время вычисления хэша блока. Кроме того каждый блок ссылается на хэш предыдущего блока, а каждая транзакция — на хэш предыдущей транзакции (или транзакций). Если изменить транзакцию и каким-то чудом ее хэш не поломается, то поломаются все остальные хэши и измененная цепочка блоков будет отвергнута всеми клиентами.
ver — Версия схемы транзакции. Пока она ни разу не менялась, так что везде равна 1.
vin_sz — Количество предыдущих транзакций, из которых деньги переводятся на новые адреса. Одна или более.
vout_sz — Количество адресов, на которые переводятся деньги. Один или более.
lock_time — Пока не используется и везде равно 0. Идея в том, чтобы создавать отложенные транзакции, чтобы они добавлялись не в текущий генерируемый блок, а, например, в слещующий. Подразумевается, что в этом свойстве указано количество блоков, которые должна пропустить транзакция перед добавлением. Это дает возможность в течении некоторого времени изменить транзакцию и переподписать ее.
size — Размер транзакции в байтах. Подразумевается размер транзакции в формате JSON.
in — Содержит список входов (источников) транзакции. В качестве входов используются выходы предыдущих транзакций (prev_out). У каждого выхода есть следующие свойства:
hash — Хэш предыдущей транзакции.
n — Так как у транзакции может быть несколько выходов, то нужно указывать, из какого из них берутся деньги. Для этого и существует данное свойство. В нем содержится порядковый номер выхода предыдущей транзакции, начиная с 0.
scriptSig — В этом свойстве отправитель должен доказать, что он переводит именно свои деньги, а не чужие. Для этого он указавает публичный ключ получателя предыдущей транзакции, т. е. свой ключ, так как он должен быть получателем. Кроме того он добавляет ECDSA подпись этой же транзакции, которая сделана его приватным ключем. Это доказывает, что он распоряжается своими деньгами, а не чужими.
После списка входов транзакции (in) указывается список выходов (out), т. е. адресатов. Каждый выход имеет следующие свойства:
value — Содержит количество денег, которые будут переведены по новому адресу. Они берутся из предыдущих транзакций. Поэтому данное число не должно превышать их сумму. Например, мы хотим взять 10 монеток из одной транзакции и 20 из другой и направить 25 по новому адресу. Чтобы оставшися 5 монеток не пропали, мы посылаем их самим себе, как сдачу. Таким образом в нашей транзакции будет два адресата, одним из которых являемся мы сами. Value всегда указывается в наномонетах, чтобы избежать дробных чисел.
scriptPubKey — Это свойство, вместе с scriptSig составляют сценарий на модифицированном Forth-like языке. ScriptPubKey содержит операторы языка и хэш публичного ключа получателя транзакции. Сценарий проверяет транзакцию на валидность. Использование подобного сценария дает богатые возможности для описания условий получения денег адресатом. Например, можно заставить получателя указывать пароль вместо ECDSA.
Суммарное количество денег на входе транзакции всегда равно суммарному количеству на выходе. В противном случае деньги либо возникали из воздуха, либо исчезали из оборота. Но в самом начале был график, по которому видно, что число денег экспоненциально растет. Так откуда берутся новые деньги в системе?
На мой вкус, эмиссия денег реализовано просто и элегантно. В каждом блоке первая транзакция в списке является особой транзакцией. У нее всегда один вход, у которого вместо свойства scriptSig есть свойство coinbase. Это свойство может содержать что угодно.
Выход у транзакции также всегда один. Он перенаправляет 50 монеток тому, кто сгенерировал блок, в котором расположена эта транзакция. Это своего рода награда за потраченное время и ресурсы на генерацию блока. Создавая новый блок в цепочке, клиент вносит вклад в работу Bitcoin.
Каждые четыре года эта награда уменьшается вдвое, таким образом суммарное количество монеток в обороте стабилизируется. После этого даже если злоумышленник создаст блок с помощью модифицированной версии программы и припишет себе 50 монеток, этот блок не будет добавлен в цепочку, так как его отвергнут другие честные клиенты, которых должно быть большинство.
Стабильность работы системы основана на количестве пользователей, у которых запущен официальный клиент. Пока их большинство, Bitcoin ничего не угрожает.
Заключение
Proof of work (доказательство работы) — результат работы, которого трудно добиться, но легко проверить. Работа сети Bitcoin основана на этом принципе. Проверить хэш (результат работы) можно за доли секунды. А для того, чтобы его подобрать, требуется много работы.
Здесь можно вспомнить аналогию с золотом, на добычу которого уходит много времени и ресурсов. Но понять, что перед тобой золото, можно практически сразу. В этом смысле Bitcoin также имеет свою ценность. Но не надо понимать это как цену в долларах или в счетах за электричество, которое использовал компьютер во время подбора хэша.
Цена в долларах — это немного другое. Она никак не заложена в Bitcoin и определяется исключительно рынком. Ведь золото само по себе тоже не гарантирует вам определенную цену в долларах. Ее гарантирует лишь человек, который хочет обменять золото на доллары.
Изначальная стоимость золота определялась исключительно тем, кто его добывал. За добытое золото он просил столько, чтобы можно было компенсировать усилия на его добычу. А уже после этого на цену золота начинает влиять рынок.
Как только Bitcoin попал на рынок, его ценность определяется исключительно уровнем доверия к системе. Чем больше человек будут доверять, тем больше купят Bitcoin, тем больше долларов в него вложат и, как следствие, тем дороже будет Bitcoin.
Прежде чем люди смогут доверять Bitcoin, они должны узнать, обладает ли эта система достаточной степенью безопасности, а также можно ли ее использовать в качестве денег, т. е. обладает ли она свойствами денег, которые я перечислил в начале. Узнать это наверняка можно только разобравшить в принципах работы Bitcoin.
Надеюсь, что после этой статьи уровень доверия к Bitcoin хотя бы немного вырастет.
Алгоритм биткоина — как работает блокчейн BTC, генерируются блоки и создаются новые монеты
Все криптовалюты объединяет то, что они работают на базе блокчейн технологий. На этом их сходство заканчивается. Монеты различаются по цене, скорости обработки транзакций, сложности вычислений, а также алгоритмам хэширования, которые лежат в их основе. Алгоритм биткоина называется SHA256. Он был разработан АНБ США и используется не только для вычисления хэшей блоков криптовалют. Рассмотрим, какова его функция в сети биткоина.
Принцип работы блокчейна
В традиционных платежных системах между сторонами всегда есть посредник. Его роль заключается в контроле сделки и предотвращении ситуации, когда одни и те же средства могут быть потрачены несколько раз. Посредник ведет историю всех операций, поэтому он всегда может сказать, сколько было потрачено и сколько средств на счету каждой стороны.
В блокчейн технологии эту функцию выполняет сервер временных меток. Сервер хэширует поступившие данные о движениях средств, фиксирует время и публикует хэш. Хэш содержит предыдущую метку. Временная метка доказывает, что данные, поступившие на обработку, действительно существовали в зафиксированный момент времени.
Схема формирования транзакций и блоков на примере блокчейна BTC.
Независимо от того, какой алгоритм лежит в основе криптовалюты, блокчейн технология подразумевает уход от централизованного контроля. Сервер временных меток реализован децентрализованно. Вместо того, чтоб отправлять данные центральному серверу, участники отправляют узлам, которые их обрабатывают и сохраняют результаты работы в блокчейн в виде блоков. По алгоритму майнинга bitcoin новый блок выпускается через каждые 10 минут. Узлом может стать каждый, установивший на свой компьютер специальное ПО и загрузивший весь блокчейн.
Узел может отключаться от сети и какое-то время не работать. Когда он захочет вернуться, он просто загрузит обновившийся блокчейн и получит информацию, какие изменения произошли, пока его не было. Здесь же кроется причина бесперебойной работы такой системы. Если в традиционных системах центральный сервер может выйти из строя, и сеть встанет, функционирование блокчейна держится на множестве мелких серверов. Прекращение работы одного из них не повлияет на систему и алгоритм майнинга биткоинов.
Майнинг и вознаграждение
Какой смысл участникам сети брать на себя функции сервера — спросите вы. Конечно же, эта работа оплачивается:
- Участники могут заниматься поиском новых монет. Этот процесс называется майнингом;
- За то, что транзакция попадет в блокчейн, они берут с ее отправителя комиссию.
Генерация биткоинов заключается в поиске нового блока, который будет добавлен в блокчейн. Блокчейн принимает не все блоки, а только те, хэши которых начинаются с нулевых битов. Ищется такой методом перебора. Кто найдет его первым, тот получит награду в 25 BTC.
Согласно алгоритму биткоина победитель формирует новый блок, и первая транзакция, которую он запишет, будет транзакцией создания. Она означает, что майнеру начисляется 12.5 BTC. Далее добавляются все остальные транзакции. Проверить, что блок действительно соответствует правилам, можно, вычислив один хэш.
Количество участников сети может меняться, но вы могли заметить, что время нахождения нового блока всегда остается неизменным. Сети удается соблюдать его за счет регулировки сложности вычислений хэша. Чем больше требуется нулевых битов в начале хэша, тем больше растет время вычислений.
Биткоин — самая популярная криптовалюта на мировом рынке, следовательно, сложность вычислений для нее велика. Сегодня обычные компьютеры перестали справляться с такой сложностью вычислений, для майнинга на алгоритме bitcoin требуется мощное профессиональное оборудование для добычи криптовалюты.
Эмиссия биткоинов ограничена, всего планируется выпустить их 21 млн. Ожидается, что последняя монета будет выпущена в 2140 году. Тогда майнеры станут не нужны, и заработок узлов будет зависеть только от комиссий за проведение платежей.
Как работает сеть
Алгоритм работы сети bitcoin выглядит следующим образом:
- Когда возникает потребность выполнить перевод средств, всем узлам рассылается новая транзакция;
- Каждый узел добавляет ее в свой блок;
- Узел начинает поиск хэша, удовлетворяющего условиям сети;
- При успешном нахождении такого хэша узел рассылает свой блок всем остальным узлам;
- Если транзакции в блоке не просрочены, узлы принимают его. Блок считается принятым, если узел начнет генерировать новый на основе его хэша.
Для того, чтоб делить и комбинировать платежи, в транзакциях предусмотрены входы и выходы. Обычно у транзакции минимум один вход от предыдущей и минимум два выхода. Один — для платежа, второй — на случай, если будет сдача. Входов и выходов может быть больше.
Часто можно услышать, что криптовалюты используются для взаиморасчетов между преступниками, потому что анонимны. Возникает вопрос, каким же образом достигается анонимность, если децентрализация предполагает, что история всех движений средств есть у всех участников сети. Факт оплаты доступен всем, но личные публичные ключи участников анонимны.
Дополнительной защитой для каждой транзакции может стать применение новой пары ключей. Существует риск, что при анализе входов и выходов других транзакций существует угроза получения всех операций пользователя.
Особенности SHA256
Биткоин — самая первая криптовалюта в мире, а SHA256 достаточно стар. Есть алгоритмы, разработанные специально для криптовалют, но SHA256 существовал еще до появления биткоина и использовался в SSL, SSH, PGP и т.д. Он был разработан агентством национальной безопасности США в 2002 году. США законодательно разрешает его использование для защиты сведений, составляющих государственную тайну. Поэтому выбор этого алгоритма для биткоина не вызывает удивления.
SHA256 дробит входящую информацию по 512 бит или 64 байта, криптографически «смешивает» ее и выдает 256-битный хэш-код. Если разобрать его работу пошагово, он выполняет следующие операции:
- «and» — побитовая операция «И»;
- «shr» — перемещение значения на требуемое количество бит вправо;
- «rots» — команда, аналогичная предыдущей, но с осуществлением циклического сдвига;
- «||» (конкатенация) — операция соединения, чаще всего строк;
- «xor» — исключающее «ИЛИ»;
- «+» — сложение.
Каждый шаг достаточно примитивен, поэтому неудивительно, что для SHA256 быстро появились асики. ASIC — специальные устройства, разработанные для решения конкретной задачи. Они позволяют заниматься майнингом с производительностью, превышающей видеокарты и процессоры в несколько раз при меньших энергозатратах.
Засилье асиков вкупе с огромной сложностью вычислений по алгоритму биткоина убили смысл соло майнинга на обычных компьютерах. Асики негативно влияют на сеть, отбивая у участников желание заниматься майнингом. Узлами могут быть только крупные майнеры, способные купить дорогой асик, что ведет к централизации сети.
Разработчики новых криптовалют постарались защитить свои системы от асиков, используя более сложные методы добычи монет, чем алгоритм хэширования биткоина. В них заложена функция повышения сложности, используется запоминание промежуточных результатов. Поэтому для ряда монет производители до сих пор не могут изобрести подобные устройства, но майнинг биткоина имеет смысл только на дорогостоящих фермах, собранных из асиков.
Хотите быть в курсе свежайших новостей и получать бесплатные инсайды? Подписывайтесь на наш Instagram , Facebook , VKontakte и Telegram (crypto_state).
Если Вам понравилась статья, пожалуйста, поделитесь ей с друзьями в соцсетях и на форумах (кнопки ниже). Вы очень поможете расширить криптовалютное сообщество и развивать наш проект быстрее!
Разбираемся в устройстве Bitcoin
Вскоре биткоины отпразднуют свое десятилетие: Сатоши Накамото начал работать над их созданием еще в 2007 году. За это время криптовалюта превратилась из эфемерных фантиков, за 10 000 которых можно было купить пиццу, в инструмент для игр взрослых дядек с Уолл-стрит. Рассказываем о таинственной фигуре создателя биткоинов и том, как устроены эти «деньги из воздуха».
Что такое биткоин вкратце?
Bitcoin — это децентрализованная криптовалюта. Ее эмиссией не управляет ни одно государство, транзакции прозрачны и в то же время анонимны, система надежно защищена, она проста и в то же время крайне сложна. Bitcoin ничем не обеспечен, кроме проявляемого к нему интереса продавцов и покупателей. Всего за пару лет криптовалюта и майнинг прочно осели в заголовках СМИ.
История создания биткоина неоднозначна, интригует налетом таинственности. Если бы ее не было, ее стоило бы выдумать. И прежде чем переходить к объяснению майнинга и биткоин-системы, стоит напустить побольше тумана и рассказать о создателе биткоина, о котором практически ничего не известно, что делает его куда притягательнее.
Кто придумал биткоин?
У биткоина нет родителя, которому можно заглянуть в глаза и спросить: зачем вы это сделали и как вам сейчас живется с миллионом биткоинов на счету; ожидали ли вы такого успеха? Автором криптовалюты является эфемерный Сатоши Накамото — интернет-пользователь (или группа юзеров), который в конце 2008 года опубликовал статью в почтовой рассылке о криптографии, посвященную цифровой peer-to-peer валюте. Уже в начале следующего года Накамото выпустил первое программное обеспечение для работы с криптовалютой.
Вокруг личности Сатоши Накамото ходит множество слухов и предположений. Отец «биткоинов» активно работал над своим детищем до 2010 года, после чего отошел от дел и бесследно исчез из интернет-пространства. Его аккаунты замолкли, а почта не подает признаков жизни. Накамото сделал дело, запустил экспансию криптовалют и благополучно (или нет) исчез.
Известно лишь, что Накамото называл своей родиной Японию и ему может быть в районе 42 лет. В дискуссиях он никогда не делился персональной информацией, обсуждая исключительно технические моменты. Но отличные познания в британском английском языке, а также отсутствие онлайн-активности в определенное время суток вело к тому, что японское альтер-эго — всего лишь фикция.
За эти годы журналисты и блогеры успели приписать лавры Накамото едва ли не десятку различных человек. Доказательства всегда были косвенными, за руку создателя биткоинов так никому и не удалось поймать. Но в декабре 2015 года американские издания Wired и Gizmodo практически одновременно опубликовали статьи о том, что Сатоши — это австралийский предприниматель Крэйг Райт. Wired основывалась на ряде документов, полученных из анонимного источника, близкого к Райту. Тогда как c Gizmodo связался некий хакер, который утверждал, что ему удалось взломать Сатоши Накамото. Улики в обоих случаях были схожими и вели к австралийцу.
В мае 2016 года и сам Райт в своем персональном блоге провозгласил себя Сатоши. Но приведенные им технические доказательства были поставлены под сомнение bitcoin-комьюнити, криптографами и разработчиками. Некоторые же уверовали в явление создателя. Спустя два дня австралиец пообещал предоставить неопровержимые доказательства, переместив биткоин из наиболее раннего блока в цепочке, что можно было сделать только с помощью ключа Сатоши. Но вместо этого спустя сутки Райт почистил свой блог и оставил прощальную записку с заголовком «Простите». Райт пенял на недостаток мужества. «Я не хочу денег, славы, поклонения. Я просто хочу, чтобы меня оставили в покое», — говорил он позже в интервью BBC.
Чего же хотел Райт на самом деле? В СМИ позже появилась информация, что Райт активно подавал заявки в желании запатентовать блокчейн — корневую технологию, на которой работает криптовалюта. А имя Сатоши увеличило бы его шансы на одобрение заявок, ведь свято место пусто не бывает и деньги можно делать не только на майнинге, но и на патентах.
Что ощущал настоящий Сатоши Накамото, наблюдая за этим цирком с разоблачениями? Хотелось бы полагать, что этот седеющий японец с отеческой ухмылкой поглядывал на шалости детишек в интернет-песочнице, пока на его bitcoin-кошельке греется 1 миллион виртуальных монет ($2,3 млрд по нынешнему курсу), которыми за почти 10 лет ни разу не воспользовались.
Некоторые эксперты полагают, что первый год биткоины майнил только один Накамото. Тогда генерировать монеты было крайне просто, с вычислениями легко справлялся обычный процессор Pentium-класса, который обеспечивал приток 50 биткоинов каждые 10 минут. Почему это было просто и почему так много и так часто, читайте чуть ниже.
Что Сатоши собирается делать со всем этим богатством? Он может одномоментно обрушить курс и растоптать доверие к этой криптовалюте. А может, не он, а они… Но о создателе биткоинов мы по-прежнему ничего не знаем, а потому и прогноз его действий — дело исключительного «вангования».
Вся нынешняя финансовая система строится на посредниках, которые обладают той или иной степенью доверия своих клиентов. В случае с биткоином доверять не надо никому, потому как все участники сети знают обо всех транзакциях, проходящих в системе. Peer-to-peer — протокол без посредников, равноправная одноранговая децентрализованная сеть. Все знают обо всем, но вместе с тем все анонимно.
Столпы bitcoin
С помощью чего это реализуется? Биткоин стоит на нескольких базовых элементах, первый из которых — хэш-функция. Так называют математическое преобразование по некоему алгоритму, которое превращает любой набор информации в уникальное циферно-буквенное значение определенной фиксированной длины — хэш. Что-то наподобие шифра. Например, передавая другу видео в FullHD, мы хотим быть уверенными, что по дороге ничего не потерялось и никто не подменил видео на другое. К видео применяем хэш-функцию, получаем хэш и передаем его другу вместе с видео. Друг может применить к видео ту же функцию и посмотреть, совпадают наши хэши или нет.
Даже небольшое изменение в один символ, один кадр в изначальном наборе данных приводит к тому, что выходные данные (хэш) меняются кардинально. Но зная выходное значение хэш-функции, не получится восстановить изначальные данные, потому что она является необратимой.
Ключевой элемент системы биткоин — блокчейн. О нем мы подробно рассказывали в нашей предыдущей публикации. Применительно к биткоинам блокчейн — это цепочка блоков, в которых хранится информация о транзакциях в сети за все время ее существования. Копия этой своеобразной базы данных находится у каждого члена системы, постепенно и постоянно обновляясь из-за поступления новых блоков.
Блок и откуда берутся биткоины
Новый блок находят примерно каждые 10 минут. В нем записана информация о прошедших за это время транзакциях и хэш предыдущего блока. Это обеспечивает связность цепи. Каждый блок представляет собой не только данные о переводах денег, но и факт эмиссии новых биткоинов, и решение задачи. По сути майнинг и является решением задачи. По его окончании выдается награда в виде монеток.
Именно поэтому решение задач и постройку блоков называют майнингом по аналогии с добычей золота. На первоначальном этапе наградой служили 50 биткоинов, сейчас — 12,5. Каждые четыре года эта сумма сокращается вдвое. Всего к 2140 году будет «выкопан» 21 млн биткоинов, после чего эмиссия прекратится. Каждый биткоин можно делить вплоть до одной стомиллионной доли. Этим и пользуются пулы — сервера, объединяющие майнеров-одиночек и делящие между ними награду за обнаруженный хэш блока.
И все идет к тому, что в будущем одиночки вовсе исчезнут из майнинга. Останутся лишь довольно большие объединения ферм, которые будут задавать комиссию на рынке транзакций и косвенно влиять на курс криптовалюты на рынке.
Но раз майнеры, по сути, обслуживают всю работу bitcoin-системы, что будет, когда они не смогут выкопать новый биткоин? Кто будет запаковывать и перепроверять блоки? В системе существует возможность прикреплять своеобразную комиссию за обработку транзакций в блоках. Транзакции с чаевыми будут обрабатываться и подтверждаться в первую очередь.
Какую задачу решают майнеры?
Узлы должны построить блок таким образом, чтобы в его хэше присутствовало заданное количество нулей в начале. Чтобы получать разный хэш на выходе, в блоке, помимо хэша предыдущего блока и транзакций, имеется последовательность битов, которую можно свободно менять. Этим и занимаются майнинговые системы: они перебирают последовательность таким образом, чтобы в начале хэша получилось определенное количество нулей, чтобы хэш оказался меньше определенного значения, поставленного задачей.
Сложность задачи
Но чем больше майнеров в системе, чем круче и производительнее «железо», тем быстрее решаются эти задачи. Для того чтобы выдерживать 10-минутный интервал, и существует переменная сложность.
Каждые 2016 блоков (примерно 14 дней) в сети Bitcoin происходит изменение сложности задачи: увеличение или уменьшение количества нулей в начале хэша. Эта сложность зависит от того, насколько быстро сеть находила блоки по сравнению со стандартными значениями. Если быстрее — количество нулей, а значит и сложность растут. Изменение сложности необходимо для того, чтобы эмиссия новых биткоинов не происходила чересчур быстро.
Новый найденный блок принимают как следующий в цепи и передают другим участникам. Но что будет, если в разных точках сети примерно одновременно решат задачу? Тогда в системе появятся альтернативные ветви. Они исчезнут после нахождения следующего блока, ведь все участники системы договорились поддерживать самую длинную ветку, которая и является правильной. Таким образом система самостоятельно стабилизируется, и все участники вновь получают одинаковую цепь.
Почему это безопасно?
Что будет, если кто-то решит подменить транзакции в блоке и отменить перевод денег или поменять адресата? Он может это сделать, но тогда поменяется хэш блока. В цепи появится новая ветвь.
Чтобы закрепить свой мошеннический блок, злоумышленнику придется за 10 минут быстрее других решить новую задачу. А решить ее заранее, надстроив блоки, не получится, ведь решение зависит от хэша предыдущего блока. Таким образом злоумышленнику придется обладать хотя бы половиной мощности bitcoin-сети, чтобы с 50% вероятностью быстрее решить новую задачу и построить новые блоки. А это практически нереально и совершенно невыгодно.
Если кто-то решит подменить транзакцию в довольно старом блоке, ему придется пересчитывать все последующие блоки, что стоит неимоверных затрат вычислительной мощности. Именно поэтому в сети Bitcoin советуют подождать несколько блоков, прежде чем считать транзакцию безвозвратно состоявшейся. Ведь в 2013 году, когда мощности были меньше, пул BTC Guild сумел замайнить шесть блоков подряд своими «шахтерами».
Чем майнят биткоины?
Графики производительности сети явно демонстрируют, что видеокарты уже давным-давно не правят бал на поприще майнинга биткоинов. CPU покинули эту нишу в 2011 году, GPU — в 2013-м. Сейчас биткоины майнят на ASIC (интегральных схемах спецназначения), которые заточены исключительно под перебор и вычисление хэша.
На видеокартах тем не менее продолжают майнить другие менее популярные криптовалюты, коих в сети развелось больше, чем блох на плешивой собаке.
Еще один важный столп
Криптография играет одну из главных ролей в функционировании системы с точки зрения ее клиента. По сути, биткоинов не существует. Есть только записи (очень много записей) об их приходе-расходе от различных кошельков различным адресатам. Строчки с фамилией и балансом биткоинов не существует. Есть только биткоин-адрес и закрытый ключ из случайной последовательности цифр и букв. Адрес можно и нужно сообщать, тогда как ключ открывает доступ к передаче биткоинов.
Если вы хотите переслать монетки теще, то вам стоит создать заявку с указанием трех важных элементов: ссылки на транзакцию, по которой эти монеты к вам пришли, их количество и биткоин-адрес тещи. Эта заявка подписывается закрытым ключом. Майнеры ее получают и добавляют в блок, после попадания в цепь блоков можно считать, что транзакция была успешной и баланс тещи подрос. Но если мы получили от кого-то 2 биткоина, а теще отправляем 1,5, то система создаст новую запись о входящей транзакции, под которой будет скрываться сдача в половину монетки.
Статус в Беларуси
В одних странах биткоин запрещают, в других дают официальный статус платежного средства. В Беларуси же с криптовалютами пока не определились, и они находятся вне правового поля. Нацбанк и милиция два года назад посоветовали воздержаться от использования биткоинов, так как гарантий от распределенной сети не добьешься, да и в суд не сможешь ни на кого подать. Беларуси только предстоит вписать криптовалюты в соответствующие законы.
Пока же белорусы скупают видеокарты и майнят то, до чего могут дотянуться. Некоторые перестраховываются и выплачивают подоходный налог (13%) после обналичивания биткоинов (прогона через сетевые обменники Webmoney). Кто-то продолжает копить монетки, не расходуя их попусту на бытовые нужды в ожидании еще более сладких курсов обмена.
Читайте также:
Перепечатка текста и фотографий Onliner.by запрещена без разрешения редакции. [email protected]
Математические основы биткойн-блокчейна / Блог компании Bitfury Group / Хабр
Сегодня биткойн продолжает набирать популярность, а индустрия разрабатывать все новые приложения для работы с криптовалютой. Одной из причин такой популярности является строгая математическая база, на которой строится биткойн.
Благодаря этому система функционирует в условиях полного отсутствия доверия между участниками сети, исключая воздействие человеческого фактора.
Поэтому в сегодняшней статье мы бы хотели поговорить о математических основах биткойн-блокчейна — эллиптических кривых, ECDSA и ключах.
/ Изображение Hernán Piñera CC BY
Фундаментальной частью биткойна являются криптографические алгоритмы. В частности, алгоритм ECDSA — Elliptic Curve Digital Signature Algorithm, который использует эллиптические кривые (elliptic curve) и конечные поля (finite field) для подписи данных, чтобы третья сторона могла подтвердить аутентичность подписи, исключив возможность её подделки. В ECDSA для подписи и верификации используются разные процедуры, состоящие из нескольких арифметических операций.
Эллиптические кривые
Эллиптическая кривая над полем K — это кубическая кривая над алгебраическим замыканием поля K, задаваемая уравнением третьей степени с коэффициентами из поля K и «точкой на бесконечности». Одной из форм эллиптических кривых являются кривые Вейерштрасса.
y² = x³ + ax + b
Для коэффициентов a = 0 и b = 7 (используемых в биткойне), график функции принимает следующий вид:
Эллиптическая кривая
Эллиптические кривые имеют несколько интересных свойств, например, невертикальная линия, пересекающая две некасательные точки на кривой, пересечет третью точку на кривой. Суммой двух точек на кривой P + Q называется точка R, которая является отражением точки -R (построенной путем продолжения прямой (P; Q) до пересечения с кривой) относительно оси X.
Сумма двух точек на кривой (источник)
Если же провести прямую через две точки, имеющие координаты вида P (a, b) и Q (a, -b), то она будет параллельна оси ординат. В этом случае не будет третьей точки пересечения. Чтобы решить эту проблему, вводится так называемая точка на бесконечности (point of infinity), обозначаемая как O. Поэтому, если пересечение отсутствует, уравнение принимает следующий вид P + Q = O.
Если мы хотим сложить точку саму с собой (удвоить её), то в этом случае просто проводится касательная к точке Q. Полученная точка пересечения отражается симметрично относительно оси X.
Удвоение точки (источник)
Эти операции позволяют провести скалярное умножение точки R = k*P, складывая точку P саму с собой k раз. Однако отметим, что для работы с большими числами используются более быстрые методы.
Эллиптическая кривая над конечным полем
В эллиптической криптографии (ECC) используется такая же кривая, только рассматриваемая над некоторым конечным полем. Конечное поле в контексте ECC можно представить как предопределенный набор положительных чисел, в котором должен оказываться результат каждого вычисления.
y² = x³ + ax + b (mod p)
Например, 9 mod 7 = 2. Здесь мы имеем конечное поле от 0 до 6, и все операции по модулю 7, над каким бы числом они ни осуществлялись, дадут результат, попадающий в этот диапазон.
Все названные выше свойства (сложение, умножение, точка в бесконечности) для такой функции остаются в силе, хотя график этой кривой не будет походить на эллиптическую кривую. Эллиптическая кривая биткойна, y² = x³ + 7, определенная на конечном поле по модулю 67, выглядит следующим образом:
Эллиптическая кривая биткойна, определенная на конечном поле по модулю 67 (источник)
Это множество точек, в которых все значения х и у представляют собой целые числа между 0 и 66. Прямые линии, нарисованные на этом графике, теперь будут как бы «оборачиваться» вокруг поля, как только достигнут барьера 67, и продолжатся с другого его конца, сохраняя прежний наклон, но со сдвигом. Например, сложение точек (2, 22) и (6, 25) в этом конкретном случае выглядит так:
Сложение точек (2, 22) и (6, 25) (источник)
Если хотите посмотреть, как выглядят другие эллиптические кривые, то поэкспериментировать можно на этом сайте.
ECDSA в биткойне
В протоколе биткойна зафиксирован набор параметров для эллиптической кривой и её конечного поля, чтобы каждый пользователь использовал строго определенный набор уравнений. Среди зафиксированных параметров выделяют уравнение кривой (equation), значение модуля поля (prime modulo), базовую точку на кривой (base point) и порядок базовой точки (order). О вычислении порядка базовой точки вы можете почитать здесь. Этот параметр подбирается специально и является очень большим простым числом.
В случае биткойна используются следующие значения:
Уравнение эллиптической кривой: y² = x³ + 7
Простой модуль: 2256— 232 — 29 — 28 — 27 — 26 — 24 — 1 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
Базовая точка:
04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
Жирным шрифтом выделена координата X в шестнадцатеричной записи. За ней сразу следует координата Y.
Порядок: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
Этот набор параметров для эллиптической кривой известен как secp256k1 и является частью семейства стандартов SEC (Standards for Efficient Cryptography), предлагаемых для использования в криптографии. В биткойне кривая secp256k1 используется совместно с алгоритмом цифровой подписи ECDSA (elliptic curve digital signature algorithm). В ECDSA секретный ключ — это случайное число между единицей и значением порядка. Открытый ключ формируется на основании секретного: последний умножается на значение базовой точки. Уравнение имеет следующий вид:
Открытый ключ = секретный ключ * G
Это показывает, что максимальное количество секретных ключей (следовательно, биткойн-адресов) — конечно, и равняется порядку. Однако порядок является невероятно большим числом, так что случайно или намеренно подобрать секретный ключ другого пользователя нереально.
Вычисление открытого ключа выполняется с помощью тех же операций удвоения и сложения точек. Это тривиальная задача, которую обычный персональный компьютер или смартфон решает за миллисекунды. А вот обратная задача (получение секретного ключа по публичному) — является проблемой дискретного логарифмирования, которая считается вычислительно сложной (хотя строгого доказательства этому факту нет). Лучшие известные алгоритмы ее решения, вроде ро Полларда, имеют экспоненциальную сложность. Для secp256k1, чтобы решить задачу, нужно порядка 2128 операций, что потребует времени вычисления на обычном компьютере, сопоставимого со временем существования Вселенной.
Когда пара секретный/публичный ключ получена, её можно использовать для подписи данных. Эти данные могут быть любой длины. Обычно первым шагом выполняется хеширование данных с целью получения уникального значения с числом битов, равным битности порядка кривой (256). После хеширования, алгоритм подписи данных z выглядит следующим образом. Здесь, G — базовая точка, n — порядок, а d — секретный ключ.
- Выбирается некоторое целое k в пределах от 1 до n-1
- Рассчитывается точка (х, у) = k * G с использованием скалярного умножения
- Находится r = х mod n. Если r = 0, то возврат к шагу 1
- Находится s = (z + r * d) / k mod n. Если s = 0, то возврат к шагу 1
- Полученная пара (r, s) является нашей подписью
После получения данных и подписи к ним, третья сторона, зная публичный ключ, может их верифицировать. Шаги для проверки подписи такие (Q — открытый ключ):
- Проверка, что и r, и s находятся в диапазоне от 1 до n-1
- Рассчитывается w = s-1 mod n
- Рассчитывается u = z * w mod n
- Рассчитывается v = r * w mod n
- Рассчитывается точка (x, y) = uG + vQ
- Если r = x mod n, то подпись верна, иначе — недействительна
В самом деле,
uG + vQ = u + vdG = (u + vd)G = (zs-1 + rds-1)G = (z + rd) s-1G = kG
Последнее равенство использует определение s на этапе создания подписи.
Безопасность ECDSA связана со сложностью задачи поиска секретного ключа, описанной выше. Помимо этого, безопасность исходной схемы зависит от «случайности» выбора k при создании подписи. Если одно и то же значение k использовать более одного раза, то из подписей можно извлечь секретный ключ, что и произошло с PlayStation 3. Поэтому современные реализации ECDSA, в том числе используемые в большинстве биткойн-кошельков, генерируют k детерминировано на основе секретного ключа и подписываемого сообщения.
P.S. Bitfury Group Russia в Vk и Fb.
Всё что нужно знать о биткойне — простыми словами
Кошельки биткойн
Всё что нужно знать для выбора лучшего биткойн-кошелька
Если пропустили, пожалуйста, узнайте что такое биткойн-адрес перед изучением кошельков биткойн.
Биткойн-кошелёк — это программа, сервис или устройство, позволяющие получать, отправлять и хранить биткойны.
Биткойн-кошелёк создаёт публичные биткойн-адреса и хранит приватные ключи в безопасности.
Схема: Биткойн-кошелёк
Приватный ключ (или ключи) — это важный компонент биткойн-кошелька.
Приватный ключ представляет собой длинную строку символов. Эту строку создаёт и использует биткойн-кошелёк.
Приватные ключи должны находиться в безопасности. Кто владеет приватными ключами, тот и обладает связанными с ними биткойнами.
Биткойн-кошелёк генерирует приватные ключи и далее использует их:
- Кошелёк создаёт публичный биткойн-адрес, соответствующий приватному ключу.
- Кошелёк сканирует блокчейн биткойна, чтобы знать остатки на своих публичных адресах.
- Кошельку необходим приватный ключ для отправки исходящей транзакции от связанного с этим ключом публичного адреса.
- Кошелёк отправляет транзакцию в блокчейн биткойна.
Схема: Работа биткойн-кошелька
Технология сид-фразы (также известной как мнемоническая фраза) разработана для удобного резервирования кошелька.
Фраза состоит из 12-24 английских слов. К примеру:
hello vote spot power stem act pull only shy inner proof rate
Значительно удобнее занести в блокнот легкочитаемую seed-фразу из простых слов, чем записывать набор случайных символов приватного ключа.
Сид-фраза, поддерживаемая большинством кошельков, используется для генерации приватных ключей. Таким образом, фраза не менее
ценна, чем приватные ключи и должна храниться в секрете.
Если биткойн-кошелёк потерян, сид-фраза используется для восстановления кошелька.
Биткойн-кошельки можно условно разделить на три типа:
- Аппаратный кошелёк — электронное устройство, подключаемое к компьютеру, планшету или смартфону пользователя.
- Программный кошелёк представляет собой компьютерную программу, работающую на компьютере или мобильном устройстве пользователя.
- Онлайн-кошелёк — сторонний сервис, работающий удалённо через интернет-браузер.
- Горячими кошельками называют те, что подключены к интернету. К ним относятся программные (для компьютера и для смартфона) и онлайн-кошельки.
- Холодными кошельками называют аппаратные кошельки (небольшое электронное устройство), не подключаемые к интернету. Такие кошельки не
подвержены атакам хакеров.
Онлайн биткойн-кошелёк (также известный как веб-кошелёк) — это сторонний сервис,
доступный как любая интернет-страница через обычные веб-браузеры, такие как Opera, Chrome, Safari и другие.
Веб-кошелёк позволяет с компьютера или смартфона отправлять, получать и хранить биткойны.
Онлайн-кошельки бывают разные:
- Кошельки, которые предоставляют доступ к приватным ключам.
- Кошельки, которые предоставляют доступ лишь к публичным биткойн-адресам и средствам на них.
Второй тип кошельков обычно относится к онлайн-сервисам, позволяющим покупать и продавать биткойны.
Настоятельно рекомендуется хранить значительные суммы в биткойнах только на кошельках, предоставляющих
доступ к приватным ключам. В противном случае придётся надеяться на благонадёжность стороннего сервиса.
Проще говоря, если платформу взломают, ваши биткойны могут оказаться под угрозой.
Аппаратные кошельки — устройства, по размеру схожие с USB-флешкой. Обычно на устройстве расположен
дисплей для просмотра деталей транзакции.
Интерфейс программных и онлайн-кошельков может сильно отличаться и зависит от разработчика ПО.
Фото: Как выглядят аппаратные биткоин-кошельки
Каждый биткойн-кошелёк может создавать множество биткойн-адресов. Чтобы пополнить биткойн-кошелёк, нужно перевести биткойны на
любой адрес, принадлежащий данному кошельку.
Для каждого пополнения рекомендуется использовать новый биткойн-адрес для повышения
конфиденциальности. Биткойн-адрес можно использовать много раз, но нужно знать, что в блокчейне видна вся история транзакций любого биткойн-адреса.
Обычным способом пополнения кошелька биткойн является использование обменного сервиса.
Схема: Пополнение биткойн-кошелька
Аппаратные кошельки, являющиеся портативными электронными устройствами, являются наиболее защищёнными.
Даже при подключении их к заражённому вирусами компьютеру, им ничего не угрожает.
Такие кошельки отображают информацию о транзакции на собственном дисплее, где все детали можно внимательно проверить перед отправкой.
Безопасность кошельков
Несмотря на то, что аппаратные кошельки являются наиболее безопасным способом хранения биткойна, многие люди
используют другие типы кошельков. Во-первых, стоимость аппаратных кошельков начинается от 50 долларов, в то время как
большинство кошельков других типов бесплатны. Поэтому когда нужно использовать биткойн только для небольших платежей,
вполне допустимо применение бесплатных вариантов.
Во-вторых, некоторые ситуации требуют использование кошельков других типов. К примеру, когда нужно
купить биткойн,
может потребоваться обменная платформа или биржа, где предоставляется онлайн-кошелёк. При регистрации на таком
сервисе, всегда создавайте длинный сложный пароль, состоящий из набора букв и цифр. Важно, чтобы пароль был
новым, а не использовался где-то ещё, к примеру для доступа к электронной почте или социальной сети.
Двухуровневая аутентификация
Сейчас, пожалуй, каждая биржа или веб-кошелёк предложит использование так называемой 2FA (двух-факторной аутентификации).
Это замечательный способ значительно обезопасить доступ в аккаунт.
К примеру, если вы используете онлайн-кошелёк на персональном компьютере, установите небольшое 2FA-приложение (к примеру, Google Authenticator)
на свой смартфон и свяжите
его с аккаунтом онлайн-кошелька. Во время входа в кошелёк, помимо пароля будет запрашиваться короткий код, генерируемый 2FA приложением.
Таким образом, даже если хакер перехватит ваш пароль на компьютере, он не сможет получить доступ к онлайн-кошельку без кода 2FA.
Следует помнить, что 2FA с помощью приложения надёжнее, чем 2FA посредством СМС.
Если вы используете онлайн-кошелёк на своём смартфоне, приложение 2FA рекомендуется установить на другом устройстве, а не на том же
смартфоне. Основная идея создания дополнительного уровня безопасности 2FA состоит в том, чтобы отделить точку входа в аккаунт от
устройства с генератором кодов 2FA.
Использовать осторожно
Для тех, кто очень хорошо разбирается в компьютерной безопасности, может быть предпочтительным использование программного кошелька на
персональном компьютере. В противном случае лучше использовать мобильный или онлайн-кошельки для небольших транзакций и аппаратный
кошелёк для значительных сумм. Для повседневных платежей мобильные кошельки на смартфоне удобнее всего, большинство из них поддерживают
считывание QR-кодов.
Тщательное изучение
При серьёзном инвестировании в биткойн, аппаратный кошелёк просто необходим. Неоднократно случались хакерские атаки на различные
биржи, а также аккаунты и компьютеры пользователей. В случае отсутствия возможности приобретения аппаратного кошелька, настоятельно
рекомендуется использовать 2-факторную аутентификацию и детально изучить информацию касательно безопасности кошельков
биткойн, какие способы атаки применяют хакеры и какие меры этому препятствуют. Вместо того чтобы бояться, лучше тщательно изучить вопрос.
Рекомендованные кошельки
Далее приведены лучшие биткойн-кошельки в каждой категории:
Аппаратные кошельки
Существует два самых крупных производителя аппаратных кошельков биткойн — Trezor
и Ledger.
Компания Trezor работает с 2014 года и заслуживает высокую степень доверия пользователей. Открытый код её продуктов делает возможным
полный независимый аудит безопасности. Также, начальная модель Trezor дешевле бюджетной модели Ledger.
Сами устройства отличаются как внешне, так и своим интерфейсом, поэтому интересны кошельки обоих производителей.
Онлайн-кошелёк
Платформа обмена Локалбиткойнс предоставляет бесплатный онлайн-кошелёк, пожалуй, с самыми низкими комиссиями на отправку среди всех типов кошельков.
Это стало возможным благодаря тому, что сервис объединяет транзакции многих пользователей в одну, что позволяет экономить на общей комиссии.
Кроме этого, пользователи платформы Localbitcoins с 2013 года могут безопасно и просто производить покупку и продажу биткойнов между собой.
Программные кошельки
Компания Veriphi провела тщательное сравнительное исследование среди 25 программных кошельков для смартфонов и компьютеров.
В 48 параметров для сравнения вошли безопасность, программная среда, поддержка 2-факторной аутентификации,
поддерживаемые операционные системы, функционал и многое другое.
Подробный отчёт
представлен в понятной форме таблицы, которая может помочь выбрать лучший программный кошелёк биткойн.
Майним Bitcoin с помощью бумаги и ручки / Хабр
В один прекрасный момент мне захотелось прикинуть, насколько быстро можно майнить биткойны вручную. Оказалось, что для майнинга используется хеширование SHA-256, а оно достаточно простое и может быть вычислено даже без компьютера. Само собой, процесс очень небыстрый и совершенно непрактичный. Но, пройдя все шаги на бумажке, можно хорошо разобраться в деталях работы алгоритма.
Один криптографический раунд
Майнинг
Ключевая часть всей системы безопасности биткойна — майнинг. Основная идея заключается в том, что майнеры группируют биткойн-транзакции в один блок, который уже подвергают хэшированию неисчислимое число для нахождения очень редкого значения хэша, подпадающего под специальные условия. Когда такое значение находится, блок считается смайненным и попадает в цепочку блоков. Само по себе хэширование не несёт никакой полезной цели кроме увеличения сложности поиска правильного блока. Таким образом, это одна из гарантий того, что никто в одиночку с любым существующим набором ресурсов не сможет взять под контроль всю систему. Подробнее про майнинг можно почитать в моей прошлой статье.
Криптографическая функция хэширования на вход получает блок с данными, а выдаёт небольшой, но непредсказуемый, выход. Она спроектирована так, что не существует быстрого способа получить нужный выход, и вы должны продолжать перебор пока не найдёте подходящее значение. Биткойн использует SHA-256 в качестве такой функции. Причём для усиления стойкости SHA-256 применяется к блоку дважды и называется уже двойным SHA-256.
В биткойне критерием валидности хэша является достаточное число нулей в его начале. [1] Найти такой хэш так же сложно, как, к примеру, найти номер машины или телефона, заканчивающийся на несколько нулей. Но, конечно, для хэша это экспоненциально сложнее. На текущий момент, правильный хэш должен содержать примерно 17 стартовых нулей, чему удовлетворяет только 1 из 1.4×1020. Если провести аналогию, то найти такое значение сложнее, чем обнаружить конкретную частичку среди всего песка на Земле.
На схеме ниже показан типичный блок в цепочке и его хэш. Желтым выделены байты, которые и участвуют в процессе хэширования. В данном примере хэш валиден и имеет достаточное число нулей в своём начале. Однако это нечастый случай, и обычно майнеру приходится перебирать значение поля nonce или других доступных для изменения данных.
Структура биткойн-блока
SHA-256
Алгоритм работает с данными, разбитыми на куски по 512 бит (64 байт), криптографически их смешивает и выдаёт 256-битный (32 байта) хэш. SHA-256 состоит из относительно простого раунда, повторяющегося 64 раза. Снизу, как раз, и показан такой раунд, принимающий на вход 8 4-байтовых слов — от A до H.
Один раунд SHA-256 для восьми входных слов A-H. Схема нарисована kockmeyer, CC BY-SA 3.0.
Синие блоки нелинейно перемешивают биты для усложнения криптографического анализа. Причём для еще большей надежности используются разные функции перемешивания (если вы сможете найти математическую лазейку для быстрого генерирования валидных хэшей, то возьмёте под контроль весь процесс майнинга биткойнов).
Функция большинства (Ma блок) побитово работает со словами A, B и C. Для каждой битовой позиции она возвращает 0, если большинство входных битов в этой позиции — нули, иначе вернёт 1.
Блок Σ0 циклически сдвигает A на 2 бита, затем исходное слово A циклически сдвигается на 13 бит, и, аналогично, на 22 бита. Получившиеся три сдвинутые версии A побитово складываются по модулю 2 (обычный xor, (A ror 2) xor (A ror 13) xor (A ror 22)).
Ch реализует функцию выбора. На каждой битовой позиции проверяется бит из E, если он равен единице, то на выход идёт бит из F с этой позиции, иначе бит из G. Таким образом, биты из F и G перемешиваются, исходя из значения E.
Σ1 по структуре аналогичен Σ0, но работает со словом E, а соответствующие сдвиговые константы — 6, 11 и 25.
Красные блоки выполняют 32-битное сложение, формируя новые значения для выходных слов A и E. Значение Wt генерируется на основе входных данных (это происходит в том участке алгоритма, который получает и обрабатывает хэшируемые данные. Он вне нашего рассмотрения). Kt — своя константа для каждого раунда. [2]
На схеме сверху заметно, что только A и E меняются за один криптографический раунд. Остальные слова не меняются, но сдвигаются на выходе — старое A превращается в выходное B, старое B — в новое C, и так далее. Хотя отдельный раунд алгоритма не сильно изменяет данные, но после 64 раундов, входная информация будет полностью зашифрованной. [3]
Майним вручную
На видео я показываю как можно пройти все описанные шаги с помощью ручки и бумаги. Я выполнил первый раунд хэширования для майнинга блока. Заняло это у меня 16 минут, 45 секунд.
Немного поясню что происходит: я записал слова от A до H в шестнадцатеричной форме, и под каждым сделал перевод в двоичный вид. Результат выполнения блока Ma находится под словом C, а значения A после сдвигов и сам выход Σ0 располагаются над строкой с A. Функция выбора появляется под G, и, наконец, соответствующие сдвинутые версии E и значение после блока Σ1 идут над строкой с E. В нижнем правом углу произвёл сложение, результат которого участвует в вычислении и нового A, и нового E (первые три красных блока суммирования). Справа сверху я рассчитал новое значение A, а посерёдке располагается уже расчет нового значения E. Все эти шаги обсуждались выше и легко могут быть отслежены на схеме.
Кроме того раунда, что показан в видео, я провёл еще один — последний 64-ый хэшируюший раунд для конкретного биткойн-блока. На фотографии значение хэша выделено желтым. Количество нулей подтверждает, что это валидный биткойн-хэш. Заметьте, что нули располагаются в конце хэша, а не в начале, как я писал ранее. Причина заключается в том, что биткойн, просто-напросто, переворачивает байты полученные SHA-256. [4]
Последний раунд SHA-256, в результате которого виден успешно смайненный биткойн-блок
Что всё это значит для проектирования «железных» майнеров?
Каждый шаг в SHA-256 очень просто выглядит в цифровой логике — простые битовые операции и 32-битные суммирования (если вы когда-либо изучали схемотехнику, то, скорее всего, уже представили себе как это может выглядеть в железе). Поэтому ASIC-микросхемы реализуют SHA-256 очень эффективно, размещая параллельно сотни блоков исполнения SHA-256 раундов. Фотография ниже показывает микросхему для майнинга, которая может вычислять 2-3 миллиарда хэшей в секунду. На Zeptobars можно поглядеть больше фото.
Снимок кремниевого кристалла ASIC-микросхемы Bitfury, которая может майнить биткойны со скоростью в 2-3 гигахэшей в секунду. Картинка с Zeptobars. (CC BY 3.0)
В противоположность биткойну, Litecoin, Dogecoin и другие похожие альтернативные -coin системы используют алгоритм хэширования scrypt, в котором изначально заложена сложность реализации в железе. Этот алгоритм во время выполнения хранит в памяти 1024 разных значений хэша, а уже на выходе комбинирует их для получения конечного результата. Поэтому требуется куда больше памяти и схематики для вычисления scrypt-хэшей по сравнению с SHA-256-хэшами. Влияние изменения алгоритма хэширования наглядно видно при сравнении соответствующего аппаратного обеспечения для майнинга — версии под scrypt (Litecoin и прочие) в тысячи раз медленнее, чем версии под SHA-256 (биткойн).
Заключение
SHA-256 неожиданно оказался настолько простым, что может быть вычислен даже вручную (алгоритм на эллиптических кривых, который используется для подписи биткойн-транзакции, был бы куда более мучительным, так как содержит кучу перемножений 32-байтных чисел). Расчет одного раунда SHA-256 занял у меня 16 минут, 45 секунд. С такой производительностью хэширование всего биткойн-блока (128 раундов [3]) займёт 1,49 суток, то есть получаем скорость хэширования в 0,67 хэшей в день (на самом деле, конечно же, с практикой процесс бы ускорился). Для сравнения, текущее поколение биткойн-майнеров производит несколько терахэшей в секунду, что примерно в квинтиллион раз быстрее меня. Думаю, очевидно, что ручной майнинг биткойнов не очень практичен. [5]
Читатель с reddit’a спросил о моих затратах энергии. Так как я не прилагаю каких-то серьезных физических усилий, то можно предположить что скорость метаболизма будет 1500 килокалорий в день, тогда получаем, что ручное хэширование требует почти 10 мегаджоулей за хэш. Типичное потребление энергии для железного майнера — 1000 магехэшей за джоуль. Таким образом, я менее энергоэффективен чем специализированная железка в 10^16 раз (10 квадриллионов). Другой вопрос в стоимости энергии. Дешевым источником питания являются пончики по 23 цента за 200 килокалорий. Электроэнергия у меня стоит 15 центов за киловатт-час, что дешевле пончиков в 6.7 раз. В итоге, стоимость энергии в пересчете на хэш для меня, как человека-майнера, в 67 квадриллионов раз выше. Да-а-а, понятно, что я не ухвачу удачу за хвост ручным майнингом биткойнов, и это еще не учитывая стоимость бумаги и ручек!
Примечания и ссылки
1. На самом деле, важно не число лидирующих нулей в хэше, а то, что он должен быть меньше какого-то конкретного значения, которое зависит от текущего уровня сложности системы. ↑
2. Довольно занятно то, откуда пошли эти константы для SHA-256. Так как АНБ разрабатывало этот алгоритм и выбирало константы, то откуда нам знать, что они не подобрали специальные значения, чтобы быстрее ломать хэши? Дабы пресечь подобные спекуляции, начальные инициализирующие значения хэша взяты как квадратные корни из восьми первых простых чисел (первые 32 бита дробной части). А Kt получены из кубических корней первых 64 простых чисел. Как видите, константы сгенерированы с помощью простых формул, поэтому можно доверять тому, что АНБ не придумало ничего хитрого (по крайней мере, в отношении констант). ↑
3. К моему сожалению, SHA-256 работает с блоками из 512 бит, а заголовок биткойн-блока больше. Поэтому необходим второй проход из 64 раундов хэширования. Кроме того, в биткойне используется двойной SHA-256. Таким образом, хэширование одного блока требует 192 раунда. Тем не менее, мы можем сократить это число, потому что процесс майнинга заключается в повторном хэшировании одного и того же блока, с небольшими изменениями поля «nonce» во второй половине блока. И тут возникает оптимизация за счет того, что мы можем использовать результат вычисления первых 512 бит блока повторно. В итоге, нам требуется только 128 раундов хэширования. ↑
4. Само собой, я не настолько невероятно удачлив, что нашёл сразу валидный хэш. Я начал хэширование блока, уже ранее смайнененного. Конкретно того, который уже упоминался в статье — #286819. ↑
5. Еще одна проблема с ручным майнингом заключается в том, что новые блоки майнятся примерно каждые 10 минут, поэтому даже если я успешно намайню блок, то он будет безнадежно устаревшим (сиротой, в терминах биткойна). ↑
как он работает, и почему эта технология изменит мир / Блог компании ITI Capital / Хабр
Портал Spectrum, который освещает новости в мире технологий, опубликовал материал о блокчейн. В этой статье рассказано, какие есть подводные камни в работе технологии и почему её нельзя использовать повсеместно. Мы подготовили русскоязычную адаптацию этой статьи.
Развитие технологии
Биткоин был придуман как акт неповиновения. Криптовалюта появилась вскоре после мирового экономического кризиса и рекламировалась, как средство от несправедливости и коррумпированности традиционной финансовой системы. Создатели были уверены, что когда биткоин станет более популярным, он будет конкурировать с реальными деньгами и в конечном итоге вытеснит те институты, которые привели к кризису.
Неофициальный лозунг биткоина: «Верим в криптографию», прямо говорит о том, кто виноват в проблемах экономики: посредники, банкиры, «доверенные» третьи стороны, которым на самом деле нельзя доверять. Эти люди просто создают проблемы другим, уменьшая прибыль и усложняя транзакции.
Биткоин стремился заменить услуги, предоставляемые этими посредниками с помощью специального кода и криптографии. Когда человек оплачивает ипотеку, между его банком и другими финансовыми организациями в фоновом режиме происходит ряд операций, благодаря которым деньги снимаются со счёта пользователя. Банк может поручиться, что с деньгами всё хорошо, так как он хранит информацию о том, куда и как была потрачена каждая копейка со счета.
Биткоин и другие криптовалюты заменяют эти фоновые операции и транзакции при помощи программного обеспечения — распределенной и защищенной базы данных, называемой блокчейном. При этом процесс смены владельцев токена биткоина контролируют множество компьютеров. Право на использование криптовалюты может быть передано абсолютно любому человеку, независимо от его национальности и места проживания.
Спустя 8 лет после создания блокчейна, технологию пытаются применить к процедурам и процессам не связанным с передачей денежных средств.
Может ли блокчейн связать людей, которые сдают жильё, с путешественниками и предложить сторонам прозрачную платформу для оплаты? Может ли блокчейн выступать в качестве хранилища и площадки для воспроизведения фильмов, шоу и других цифровых средств массовой информации, сохраняя при этом отчисления и передавая их создателям контента? Может ли блокчейн автоматически проверять авиарейсы и выплачивать компенсации путешественникам, чьи самолёты не вылетели вовремя?
Если это так, то технология блокчейн поможет избавиться от Uber, Netflix и, например, страховых компаний.
Это не предположения, а лишь некоторые вещи, которые сейчас строятся на Ethereum — блокчейн-платформе, которая дистанционно размещает программное обеспечение на распределенной компьютерной системе, называемой Ethereum Virtual Machine. Блокчейн Ethereum, на котором работает криптовалюта эфир, на данный момент наиболее открыт для экспериментов.
Но эта открытость не всегда играет на руку. Новые схемы блокчейна создаются каждый день, в том числе и крупнейшими техническими корпорациями. Microsoft предлагает своим клиентам инструменты для экспериментов с криптовалютой в своем облаке Azure. IBM, Intel и другие сотрудничают с хабом Hyperledger — открытой платформой для разработки бизнес-ориентированных блокчейнов. Крупнейшие банки, — те самые, которых хотели вытеснить создатели криптовалюты, — придумали свою версию технологии, пытаясь опередить тенденции.
И даже биткоин, который работает на первом и самом успешном блокчейне, модернизируется для приложений, о которых его создатели никогда не мечтали.
Но ни один блокчейн не может похвастаться массовым использованием. Никакая концепция или стратегия еще не привела к революции ни в одной отрасли. Биткоином пользуется не более чем 375 000 человек в мире в день.
Какие блокчейн-платформы сохранятся, а какие начнут медленно опускаться на дно? Чтобы сделать какой-либо прогноз, нужно понять, что такое блокчейн и логически соотнести его с биткоином.
Как работает блокчейн
В 2009 году анонимный хакер (или группа хакеров), под псевдонимом Сатоши Накамото, создал первую цифровую валюту. В этой системе деньги были лишь инструментом учета, методом абстрагирования стоимости, назначения собственности и предоставления средств для совершения сделок.
Для выполнения этих функций исторически использовались денежные средства. Обладание физическими токенами — монетами, позволяет людям лично заключать сделки между собой. Наличные деньги достаточно трудно скопировать, поэтому нет необходимости в полном учете того, кому принадлежит определенная часть денежной массы.
Тем не менее, если создать таблицу, в которой указано, кому и сколько принадлежит денег, монеты и купюры станут ненужными. Банки и обработчики платежей уже частично сублимировали физическую валюту в цифровые записи, отслеживая и обрабатывая транзакции в своих закрытых системах.
Биткоин завершил преобразование, создав единый универсальный цифровой регистр, называемый блокчейном. Эта технология получила такое название, потому что похожа на цепь — внести в неё изменения можно только в конец блоков. Каждое новое дополнение содержит набор новых транзакций. Например, если Саша заплатит Юле за биткоин, эта транзакция появится в конце цепи. А в блоках до этого будет указано, что Саше заплатил Миша, а Мише Оля.
Блокчейн для биткоина, в отличие от книг бухгалтерского учёта, которые ведут традиционные финансовые учреждения, расположен на компьютерах по всему миру. Эти данные доступны для всех, у кого есть подключение к интернету. Майнеры, — владельцы компьютеров, на которых хранится информация блокчейна, — отвечают за обнаружение запросов транзакций от пользователей, их объединение, проверку и добавление в блокчейн в виде новых блоков.
Процесс валидации устанавливает, что человек фактически владеет биткоинами после транзакции, и что он еще не потратил их в другом месте. Собственность в блокчейне определяется двумя криптографическими ключами. Первый ключ находится в блокчейне в открытом доступе. Второй доступен только его владельцу. Такие ключи используются для шифрования электронных сообщений. Когда кто-то отправляет зашифрованное сообщение, он использует открытый ключ. Получатель при открытии письма использует закрытый ключ и расшифровывает сообщение.
В технологии блокчейн транзакции подписываются при помощи закрытых ключей, соответствующих открытым ключам, присвоенным монетам, которые хотят потратить. И когда транзакция обрабатывается, этим монетам присваивается новый открытый ключ.
Когда в оформлении операции участвует несколько лиц, становится важен вопрос необратимости. Если бы блокчейн управлялся одним банком с набором известных валидаторов, работающих в рамках одной юрисдикции, то выполнение транзакций было бы простым делом.
Но для биткоина нет центрального банка, обеспечивающего соблюдение правил. Майнеры работают анонимно во всем мире, несмотря на разнообразие культур, различие правовых систем и нормативных обязательств. Поэтому нет способа привлечь их к ответственности. Необратимость операции обеспечивает код биткоина. Он использует схему, которая называется доказательством работы.
Как доказательство работы делает технологию блокчейн надёжной
Для того чтобы создавать новые блоки, майнерам необходимо владеть всей информацией о транзакциях. Они конкурируют между собой, так как майнер, первым создавший блок, получает оплату за эту услугу. Вопрос в том, что мешает майнеру удалить предыдущие транзакции в блокчейне. Хотя он и не сможет таким образом украсть монеты, зато сможет совершить одну и ту же транзакцию несколько раз. Например, оплатить товар, а после этого удалить информацию о транзакции.
Чтобы это избежать, у всех майнеров в сети должна быть одинаковая копия блокчейна.
Когда майнер, добавляет новый блок, он должен предоставить криптографическое доказательство транзакции. Чтобы получить доказательство, майнер проводит блок через несколько раундов хэш-функции — вычисления, которое берет часть данных произвольного размера и переводит их в бессмысленную буквенно-цифровую строку с фиксированной длиной, которая называется хешем. Чтобы сделать процесс более надёжным, алгоритм блокчейн требует, чтобы полученный хеш начинался с определенного количества нулей. Невозможно заранее предсказать, какой хеш будет выдавать заданный набор данных, поэтому майнеры запускают вычисления снова и снова, каждый раз вставляя случайное число в набор данных. Когда это число изменяется, возникает новый хэш. В итоге майнеры получают правильное количество нулей.
Майнер, который находит правильный хеш, отправляет блок другим майнерам. Они его проверяют и добавляют к полной версии блокчейн, содержащуюся на их компьютерах.
Это можно сравнить с закрыванием двери. Предположим, у человека есть замок, и набор ключей, один из которых может его закрыть. Он должен попробовать все ключи, прежде чем найдёт правильный. И после этого оставить его в замке, чтобы другие могли проверить, что ключ подходит.
Майнеры тратят свои средства на поддержку сети — покупают оборудование и платят за электроэнергию. Чтобы изменить блок в блокчейне и провести одну и ту же транзакцию дважды, им придётся потратить в два раза больше своих денег, поэтому обманывать становится невыгодно.
Кроме того, с каждым новым блоком возрастает стоимость изменения предыдущих. Новые блоки хранят хеш стоящего перед ними блока. Любые изменения в старых блоках приведут к недействительным хэшам для всех последующих блоков. Следовательно, невозможно вставить фиктивные модификации в предыдущий блок без повторения всей работы, которая была выполнена после этого блока. Если провести аналогию с замками, получится, что замок в конце цепи связан со всеми предыдущими. Если изменить замок в середине цепи, придётся искать новые ключи для каждого замка после него.
Получается, что майнеры предоставляют дорогостоящие доказательства, а затем получают деньги за свою работу. Таким образом Сатоши создал первую жизнеспособную одноранговую цифровую валюту. Но он также решил более общую проблему, которая на протяжении десятилетий беспокоила ученых. Биткоин, который за 8 лет ни разу не отключался от сети на длительный период, надежно стимулирует майнеров выполнять работу добросовестно, обеспечивая единую сеть. В итоге получается защищённая, постоянно растущая цепочка данных, которую любой, у кого есть подключение к интернету, может проверять и дополнять.
Как использовать блокчейн в других сферах
Технология блокчейн может быть полезна не только для совершения транзакций. Практически сразу после появления биткоина, люди начали думать, как применить эту технологию в других сферах. Когда майнеры проверяют транзакции, они запускают небольшие программы, которые обрабатывают и предоставляют необходимые для транзакции данные. Но что, если запустить более сложные программы, например, программное обеспечение для социальных сетей? Или использовать блокчейн для предоставления данных для онлайн-форумов?
Эти идеи появились сразу после создания биткоина, но только спустя несколько лет, девятнадцатилетний студент из Торонто внёс вклад в их развитие. В 2013 году Виталик Бутерин разработал совершенно новую технологию под названием Ethereum. Благодаря ей блокчейн можно было использовать не только для совершения транзакций.
В отличие от биткоина, Ethereum использует мини-программы, называемыми смарт-контрактами. Они могут быть написаны с неограниченной степенью сложности. Пользователи могут взаимодействовать с программами, отправляя им транзакции с инструкциями, которые затем обрабатывают майнеры.
Это означает, что любой может встроить программу в транзакцию и быть уверенным в том, что она останется неизменной и доступной для цепочки блоков. Теоретически, с Ethereum можно заменить Facebook, Twitter, Uber или любую другую цифровую службу новыми версиями, которые были бы прозрачны, неуязвимы для цензоров и не требовали вмешательства человека.
Что такое распределённый реестр
Параллельно с попытками Бутерина использовать технологию для создания компьютера, охватывающего весь мир, развивалась идея закрытой и контролируемой версии блокчейна. В сентябре 2014 года группа финансовых институтов, в том числе Barclays, Goldman Sachs и JP Morgan сформировала консорциум под названием R3 для изучения того, как блокировки могут повысить эффективность расчётов между банками.
Открытая структура блокчейнов, таких как биткоин и Ethereum, противоречит потребностям этих организаций. В первую очередь вызывает вопросы анонимность пользователей, данные которых представлены буквенно-цифровыми общедоступными адресами, без указаний их реальной идентичности. Банковское законодательство в США и других странах запрещает такую анонимность. «Мы должны знать, кто участники и контрагенты находящиеся на этих платформах», — говорит Тим Свансон, директор по исследованиям рынка в R3.
Финансовые учреждения также юридически обязаны защищать данные о клиентах и контролировать их экспорт по национальным или региональным линиям. Учитывая, что публичные блокчейны содержат всю информацию о транзакциях на многих компьютерах в сети, невозможно ограничить цепочку хранения при их использовании.
Таким образом, появился подход распределённого реестра к технологии блокчейн. В распределённом реестре известна идентификация людей, добавляющих блоки, а данные в системе доступны только для избранных сторон. Поскольку право создавать новые блоки назначается людьми, которые запускают код, а не лотереей, нет необходимости проверки работы майнеров.
Такая система предназначена для ситуаций, когда все участники блочной цепи уже имеют небольшую степень доверия, но хотят выполнить услуги для нейтральной третьей стороны, как это может быть в случае с банками при урегулировании международных банковских переводов.
В прошлом году проект R3, который недавно привлек $107 млн из более чем 40 учреждений, выпустил свой первый распределённый реестр Corda. И у него уже появился конкурент: JP Morgan, который покинул консорциум R3 прошлой весной, выпустил свой собственный реестр, получивший название Quorum.
Подход работы с распределённым реестром также распространяется в другие отрасли, которые хранят конфиденциальные данные клиентов. Многие из этих проектов построены с помощью инструментов, предоставляемых Hyperledger. Он создает продукты для компаний, которые хотят работать со смарт-контрактами, но не решаются использовать открытые блокчейны, такие как Ethereum и биткоин.
«Люди должны понимать фактические проблемы и нормативные требования, которых должны придерживаться такие организации, как банки, страховые компании и отрасли здравоохранения. Они не могут позволить себе риск и неопределенность, которые внедряются некоторыми открытыми системами», — говорит Джонатан Леви, создатель системы управления доступом к блокчейнам Hacera.
Как будут работать смарт-контракты
Независимо от того, какой вариант блокчейна победит, смарт-контракты потребуют целого ряда поддерживающих технологий. Эти дополнительные технологии в настоящее время разрабатываются. И они будут очень важны для расширения технологии блокчейн.
«Как только у нас появятся смарт-контракты, возникнет целый ряд проблем», — говорит Ари Джуэлс, содиректор IC3 Корнеллского университета. Эти проблемы делятся на несколько категорий.
Во-первых, блокчейны не смогут хранить много данных. Это будет проблемой для многих проектов, которые, например, предлагают хранить и передавать потоковое видео. Им просто напросто не хватит места для хранения.
Технология блокчейн записывает входы и выходы каждой монеты в сеть, а также содержимое дополнительного поля, которое позволяет провести до 40 байтов метаданных для каждой транзакции. Это все.
Еще одна проблема блокчейна заключается в том, что технология сама по себе не знает, что происходит в реальном мире. Это важно в случае, если смарт-контракт — это система страхования авиабилетов. Блокчейн должен знать, когда самолет взлетает или приземляется, а для этого нужно запрашивать данные веб-сайтов.
В идеале разработчики будут создавать блокчейны для хранения и доступа к данным с учётом слабых сторон — уязвимости к цензуре и возможности отмены блокировок. Для этого нужно тщательно рассмотреть, каким «доверенным сторонам» можно фактически доверять.
Проблема хранения данных может быть решена с помощью распределенных служб обмена файлами, таких как децентрализованная система облачных хранилищ, протоколов Labs Interplanetary Database или Storj Labs. Это системы, которые позволят людям во всем мире получить дополнительное пространство на своих жестких дисках. Такие схемы будут работать для системы смарт-контрактов на основе блокчейна, поскольку данные будут храниться на нескольких компьютерах по всему миру и всегда будут доступны.
Импортировать данные в режиме реального времени можно будет при помощи «оракулов». Это службы, которые получают оплату за надежный запрос данных в реальном времени и подачу их на смарт-контракты блокчейн.
В IC3 Джелус разработал систему обеспечения защищенного датафида для смарт-контрактов Town Crier. Она защищает вводимые в блокчейн данные от подделки. Процесс работы построен на использовании доверенного программного обеспечения на процессорах Intel.
Финансирование
Чтобы перевести все современные услуги на технологию блокчейн, нужны большие деньги на технику и исследования
Вопрос в том, как получить финансирование на проект, который уничтожит многие крупные корпорации. В идеале нужно создать открытые блокчейны, как Ethereum, и доверить хранение данных тем людям, которые его создали. В таких условиях компания не может выжить из бизнес-модели, которая собирает и продает поведение браузера, историю покупок или данные о местоположении. Также компании блокчейн не могут полагаться на ограниченное владение своей интеллектуальной собственностью, поскольку программы находятся в открытом доступе.
Тем не менее, уже появился потенциальный механизм финансирования для блокчейнов — Initial coin offering или ICO. Он оказался чрезвычайно прибыльным, хотя и юридически сомнительным.
Например, человек решил использовать приложение. Но он не может расплатиться обычной валютой, ему нужно купить специальные монеты для этого приложения, которые заранее выпустили на рынок, и расплатиться ими.
В реальном мире это бы работало так: кто-то открыл прачечную и выпустил билеты, которыми можно оплатить стирку. Владелец заранее продаёт все билеты людям, а они потом, при необходимости, перепродают их другим.
На сегодняшний день более полумиллиарда долларов вложено в продажу токенов, и в последнии месяцы эти цифры только растут. Например, блокчейн Tezos в июле установил рекорд, собрав более 200 миллионов долларов через ICO.
Из-за таких огромных инвестиций появились жалобы пользователей на лицемерие создателей биткоинов. «Создатели блокчейнов, которые продвигают эти схемы, на самом деле демонстрируют всю скупость и алчность, приписываемую ими стандартным финансовым услугам и поддерживаемым правительством валютам, — говорит Престон Бирн, соучредитель Monax Industries — открытой платформы для разработчиков блокчейнов, — когда деньги начинают течь в их направлении, они становятся такими же небрежными в отношении общественности, которой они когда-то были».
Другие утверждают, что ICO, как новый класс инвестиционных инструментов, столь же разрушителен, как и финансируемые приложения.
«Деньги не являются корнем зла. Равенство является корнем зла», — говорит Джоэл Монегро — создатель Placeholder — нового фонда, посвященного технологиям блокчейн.
Он считает, что предоставление основателям и сотрудникам капитала компании побуждает их накапливать богатство, а не использовать его для улучшения своих продуктов.
С другой стороны ICO — не только финансовый инструмент, но и средство доступа к технологии блокчейн. Из этого следует, что чем больше людей используют услугу, тем больше будет спрос на токен, необходимый для доступа.
«Мой стимул заключается не в том, чтобы извлечь больше прибыли, а в том, чтобы больше людей использовали приложение, потому что стоимость токена зависит от стоимости использования услуги. Вы полностью переворачиваете стимулы», — говорит Монегро.
В Соединенных Штатах использование ICO, вероятно, подходит к концу. В конце июля Комиссия по ценным бумагам и биржам США предупредила о том, что многие ICO попадают в категорию ценных бумаг и поэтому должны работать по определённым правилам.
«Времена изменились и очень быстро. Некоторые из ранних последователей биткоина испытывали трудности с финансами три и четыре года назад, но держались за свои убеждения и свои монеты и очень хорошо сейчас себя чувствуют, — говорит Джонатан Леви, создатель Hacera, — нам по-прежнему необходимо, чтобы биткоин и Ethereum работали в более крупных масштабах, поэтому предприятиям необходимо децентрализовать данные и обеспечить их конфиденциальность. Сейчас мы сталкиваемся с новой задачей: учитывая огромные суммы вложенных денег, еще предстоит выяснить, сколько старожилов и новичков останется верными делу и продолжат работать, чтобы изменить мир с помощью технологий, которые уже изменили их».
Другие материалы по теме финансов и фондового рынка от ITI Capital:
Как работает биткойн?
Биткойн — это электронная платежная система , созданная в 2009 году . Он позволяет отправлять деньги кому угодно в мире, без необходимости в центральном органе для открытия счетов или обработки платежей.
Он был создан как решение современной финансовой системы, при которой небольшое количество крупных банков контролируют открытие счетов и обработку транзакций. Этот централизует управление деньгами и заставляет пользователей доверять банкам в их ответственных действиях.
Банкам нужно доверять, что они хранят наши деньги и переводят их в электронном виде, но они ссужают их волнами кредитных пузырей с небольшой долей резерва. — Сатоши Накамото
Злоупотребление этим доверием и возникший в результате финансовый кризис 2007 года вдохновили на разработку Биткойн, который работает как платежная система без центральной точки контроля. Биткойн был разработан анонимно под псевдонимом Сатоши Накамото и выпущен в январе 2009 года.
Ниже приводится простое объяснение того, как это работает.
Что такое биткойн?
Биткойн — это просто компьютерная программа . Вы можете скачать его и запустить на своем компьютере.
Давай, попробуй.
Когда вы запустите программу, она подключится к другим компьютерам, на которых также запущена эта программа, и они начнут делиться с вами файлом . Этот файл называется цепочкой блоков , и в основном это большой список транзакций .
Когда новая транзакция входит в сеть, она передает с компьютера на компьютер, пока все не получат копию транзакции. Примерно с 10-минутными интервалами случайный компьютер (узел) в сети будет добавлять последние полученные транзакции в цепочку блоков и делиться обновлениями со всеми остальными в сети.
В результате программа Биткойн создает большую сеть компьютеров , которые взаимодействуют друг с другом, чтобы совместно использовать файл и обновлять его с помощью новых транзакций .
Какую проблему решает биткойн?
До Биткойна было возможно ретранслировать транзакции через сеть компьютеров. Однако проблема в том, что вы можете вставить конфликтующие транзакции в сеть . Например, вы можете создать две отдельные транзакции, которые расходуют один и тот же биткойн, и одновременно отправить обе эти транзакции в сеть.
Это известно как « двойной траты ».
Это означает, что у вас есть проблема с определением, какая из этих транзакций пришла «первой», что сложно сделать, когда у вас есть сеть компьютеров, которые действуют независимо.Некоторые компьютеры сначала получат зеленую транзакцию, а некоторые компьютеры — красную транзакцию; кто скажет, какой из них «правильный» и должен быть записан в файл?
Биткойн решает эту проблему, заставляя узлы хранить все транзакции, которые они получают , в памяти перед их записью в файл. Затем, с 10-минутными интервалами, случайный узел в сети добавит транзакции из своей памяти в файл.
Затем этот обновленный файл передается в сеть, и узлы будут принимать транзакции в обновленном файле как «правильные», удаляя любые конфликтующие транзакции из своей памяти.В результате в файл никогда не будут записаны транзакции с двойным расходом, и все узлы могут обновлять свои файлы в соответствии друг с другом.
Процесс добавления транзакций в файл называется mining , и в основном это общесетевое соревнование , которое не может контролироваться одним узлом в сети.
Как работает майнинг?
Начнем с того, что каждый узел сохраняет последние полученные транзакции в своем пуле памяти , который является просто временной памятью на их компьютере.Затем любой узел может попытаться извлечь транзакций из своего пула памяти в файл (цепочка блоков ).
Для этого узел соберет транзакции из своего пула памяти в контейнер, называемый блоком , а затем использует мощность обработки , чтобы попытаться добавить этот блок транзакций в цепочку блоков.
Так что же тут за вычислительная мощность? Что ж, чтобы добавить этот блок в цепочку блоков, вы должны передать свой блок транзакций так называемой хэш-функции .Хеш-функция — это, по сути, мини-компьютерная программа, которая принимает любой объем данных, скремблирует их и выдаёт совершенно случайное (но уникальное) число.
Чтобы ваш блок был успешно добавлен в цепочку блоков, это число (хэш блока ) должно быть ниже целевого , что является пороговым числом, с которым согласны все в сети.
Если полученный хэш блока на , а не на ниже целевого, вы можете внести небольшую корректировку в данные внутри блока и снова пропустить их через хеш-функцию.Это даст совершенно другое число , которое, будем надеяться, будет ниже целевого. Если нет, вы отрегулируете блок и попробуйте снова.
Таким образом, процесс майнинга использует вычислительную мощность для выполнения хеш-вычислений настолько быстро, насколько это возможно, чтобы попытаться стать первым компьютером в сети, который получит хеш-значение блока ниже целевого. В случае успеха вы можете добавить свой блок транзакций в цепочку блоков и поделиться им с остальной частью сети.
ПРИМЕЧАНИЕ: Хотя любой желающий все еще может попытаться добыть блоки, делать это на домашнем компьютере уже неконкурентоспособно. В настоящее время существует специализированное оборудование, которое было разработано для максимально быстрого (и максимально эффективного) выполнения хеш-вычислений, а это означает, что майнинг теперь в основном выполняется теми, кто имеет доступ к специализированному оборудованию и дешевой электроэнергии.
Откуда берутся биткойны?
В качестве стимула к использованию вычислительной мощности для попытки добавления новых блоков транзакций в цепочку блоков каждый новый блок предоставляет фиксированное количество биткойнов, которых раньше не было.Следовательно, если вы можете успешно добыть блок, вы можете «отправить» себе эти новые биткойны в качестве награды за свои усилия.
Это вознаграждение в виде новых биткойнов называется вознаграждением за блок , и по этой причине процесс называется «майнинг».
Почему файл называется «цепочкой блоков»?
Как мы видели, транзакции не добавляются в файл по отдельности — они собираются вместе и складываются блоками. Каждый из этих новых блоков строится поверх существующего, и поэтому файл состоит из цепочки из блоков ; следовательно, блокчейн .
Кроме того, каждый узел в сети всегда будет использовать самую длинную цепочку блоков, которую они получают , как «официальную» версию цепочки блоков. Это означает, что майнеры всегда будут пытаться строить на вершине самой длинной известной цепочки блоков, поскольку любые блоки, не являющиеся частью самой длинной цепочки, не будут считаться действительными другими узлами.
Таким образом, если кто-то захочет переписать историю транзакций, ему потребуется перестроить более длинную цепочку блоков, чтобы создать новую самую длинную цепочку, которую могут принять другие узлы.Однако для этого одному майнеру потребуется больше вычислительной мощности компьютера, чем остальной части сети вместе взятой.
В результате объединенные усилия сети мешают любому человеку «обогнать» сеть и переписать блокчейн.
Как работают транзакции?
Вы можете думать о блокчейне как о хранилище для сейфов , которые мы называем , выходы . Эти выходные данные представляют собой просто контейнеры, в которых хранится различное количество биткойнов.
Когда вы выполняете транзакцию для биткойнов , вы выбираете несколько выходов и разблокируете их, затем создаете новые выходы и устанавливаете на них новые блокировки.
Итак, когда вы «отправляете» кому-то биткойны, вы фактически кладете определенное количество биткойнов в новый сейф и устанавливаете на нем блокировку, которую может разблокировать только человек, которому вы «отправляете» биткойны.
Например, если бы я хотел отправить вам несколько биткойнов, я бы выбрал некоторые выходы из цепочки блоков, которые я могу разблокировать, и создать из них новый выход, который можно разблокировать только , который вы, .Кроме того, если бы я не хотел отправлять вам все биткойны, которые я разблокировал, я бы создал дополнительный вывод как свое «изменение» и заблокировал бы его для себя.
В дальнейшем, если вы хотите отправить свои биткойны кому-то еще, вы должны повторить процесс выбора существующих выходов (которые вы можете разблокировать) и создания из них новых. В результате транзакции с биткойнами образуют графоподобную структуру, в которой движение биткойнов связано с серией транзакций.
Наконец, когда транзакция добывается в блокчейне, выходные данные, которые были использованы (потрачены) в транзакции, не могут быть использованы в другой транзакции, а вновь созданные выходы будут доступны для перемещения в будущей транзакции.
Как у вас есть биткойны?
Чтобы иметь возможность «получать» биткойны, вам необходимо иметь собственный набор из ключей . Этот набор ключей похож на ваш номер учетной записи и пароль , за исключением того, что в биткойне они называются вашим открытым ключом и вашим личным ключом .
Например, если бы я хотел отправить вам несколько биткойнов, вам сначала нужно было бы дать мне свой открытый ключ . Когда я создаю транзакцию, я помещаю ваш открытый ключ внутри замка на выходе (сейф). Затем вы можете использовать свой закрытый ключ , чтобы разблокировать этот вывод, когда вы хотите отправить биткойны кому-то другому.
Итак, где взять открытый и закрытый ключ? Что ж, с помощью криптографии вы можете на самом деле сгенерировать их сами .
Короче говоря, ваш закрытый ключ — это просто большое случайное число , а ваш открытый ключ — это число , вычисленное из этого закрытого ключа. Но умная часть; вы можете передать свой открытый ключ кому-то другому, но они не могут получить из него закрытый ключ.
Теперь, когда вы хотите разблокировать биткойны, назначенные вашему открытому ключу, вы используете свой закрытый ключ для создания так называемой цифровой подписи . Эта цифровая подпись доказывает, что вы являетесь владельцем открытого ключа (и, следовательно, можете разблокировать биткойны) без необходимости раскрывать свой закрытый ключ .Эта цифровая подпись также действительна только для транзакции, для которой она была создана, поэтому ее нельзя использовать для разблокировки других биткойнов, заблокированных тем же открытым ключом.
Эта система известна как «Криптография с открытым ключом» и доступна с 1978 года. Биткойн использует эту систему, чтобы позволить любому человеку создавать ключи для безопасной отправки и получения биткойнов без необходимости центрального органа для выдачи учетных записей и паролей. .
Собираем все вместе.
Чтобы начать работу с биткойнами, вы создаете свой собственный закрытый ключ и открытый ключ . Ваш закрытый ключ — это просто очень большое случайное число, и ваш открытый ключ рассчитывается на его основе. Эти ключи можно легко сгенерировать на вашем компьютере или даже на таком простом устройстве, как калькулятор. Большинство людей используют биткойн-кошелек для создания своих ключей и управления ими.
Чтобы получать биткойны, вам нужно передать свой открытый ключ тому, кто хочет его вам отправить.Этот человек создаст транзакцию , в которой он разблокирует биткойны, которыми он владеет, и создаст новую «сейфовую ячейку» биткойнов и поместит ваш открытый ключ внутрь замка.
Эта транзакция затем отправляется на любой узел в сети биткойнов, где она ретранслируется с компьютера на компьютер до тех пор, пока каждый узел в сети не получит копию транзакции. Отсюда у каждого узла есть возможность попробовать и извлечь последних транзакций, которые они получили в цепочке блоков.
Этот процесс добычи включает в себя узел, собирающий транзакции из своего пула памяти в блок и многократно помещающий данные этого блока через хэш-функцию (с незначительной корректировкой каждый раз), чтобы попытаться получить хэш блока ниже целевого значения .
Первый майнер, который найдет хэш блока ниже целевого, добавит блок в свою цепочку блоков и транслирует этот блок на другие узлы в сети. Каждый узел также добавит этот блок в свою цепочку блоков (удалив все конфликтующие транзакции из своего пула памяти) и перезапустит процесс майнинга, чтобы попытаться построить поверх этого нового блока в цепочке.
Наконец, майнер, который добыл этот блок, разместит внутри блока свою собственную специальную транзакцию, которая позволяет им собирать заданное количество биткойнов, которых еще не было. Это вознаграждение за блок действует как стимул для узлов продолжать строить блокчейн, одновременно распределяя новые монеты по сети биткойнов.
Заключение.
Биткойн — это компьютерная программа, которая делится безопасным файлом с другими компьютерами по всему миру.Этот безопасный файл состоит из транзакций, и в этих транзакциях используется криптография, чтобы люди могли отправлять и получать цифровые сейфы. В результате создается электронная платежная система, которая может использоваться кем угодно и работать без централизованного управления.
Сеть Биткойн работает без перебоев с момента ее выпуска в январе 2009 года. В 2019 году сеть Биткойн обработала более 119 миллионов транзакций , на общую сумму 3 730 419 825 286 долларов.93 .
Сама программа Биткойн также находится в стадии активной разработки, более 600 человек внесли свой вклад в код с момента его выпуска. Это связано с тем, что программное обеспечение имеет «открытый исходный код», что означает, что любой может просматривать код и вносить свой вклад в его улучшение.
https://bitcoin.org/bitcoin.pdf (технический документ)
https://github.com/bitcoin/bitcoin/ (исходный код)
Хотите узнать больше?
Хорошая штука. Вы попали в нужное место.
Этот веб-сайт полон простых объяснений из , как работает биткойн .
- Руководство для начинающих — Иногда вам просто нужно полное пошаговое руководство по основам. Это самое короткое и простое руководство, которое я мог написать; Я написал его в 2015 году, когда впервые узнал, как работает Биткойн.
- Техническое руководство — Более полное и подробное руководство о том, как работает Биткойн. Подходит для программистов.
- Blockchain Explorer — вы можете почувствовать, как работает биткойн, просто просмотрев данные и увидев, как все они связаны друг с другом.Это все равно, что открыть капот машины и заглянуть внутрь.
- Видео (YouTube) — Это подробных объяснений механики биткойна с точки зрения программиста. Эти видеоуроки помогут вам начать работу, если вы хотите кодировать код с помощью биткойнов.
- Код (GitHub) — Примеры фрагментов кода для распространенных биткойнов.
Почему я должен тебе доверять?
У меня нет официальной квалификации в биткойнах.Я только что прочитал много кода, написал много кода и задал много вопросов. Все, что я знаю о биткойнах, я получил на практике.
Кроме того, я крут.
Почему вся эта информация бесплатна?
Потому что:
Так почему бы не бесплатное образование?
Тем не менее, пожертвования приветствуются: 3Beer3irc1vgs76ENA4coqsEQpGZeM5CTd
Почему вы сделали этот сайт?
Потому что я хочу, чтобы другие люди тоже понимали, как работает биткойн.
Биткойн позволяет передавать ценность кому-либо еще в мире, и я думаю, что это важно. Если вы понимаете, как работает биткойн, вы можете создать свое собственное крутое программное обеспечение, которое будет иметь значение.
.
Как работает биткойн — Bitcoin Wiki
Эта статья требует очистки, чтобы соответствовать стандартам качества Bitcoin Wiki. |
На этой странице объясняется базовая структура функциональности Биткойна.
Криптография
Есть несколько криптографических технологий, которые составляют суть Биткойна.
Во-первых, это криптография с открытым ключом. Каждая монета связана с открытым ключом ECDSA ее текущего владельца. Когда вы отправляете кому-то несколько биткойнов, вы создаете сообщение (транзакцию), прикрепляя открытый ключ нового владельца к этому количеству монет и подписывая его своим закрытым ключом.Когда эта транзакция транслируется в сеть биткойнов, это позволяет всем узнать, что новый владелец этих монет является владельцем нового ключа. Ваша подпись на сообщении подтверждает для всех подлинность сообщения. Полная история транзакций хранится у всех, поэтому любой может проверить, кто является текущим владельцем той или иной группы монет.
Эта полная запись транзакций хранится в цепочке блоков, которая представляет собой последовательность записей, называемых блоками. Все компьютеры в сети имеют копию цепочки блоков, которую они обновляют, передавая друг другу новые блоки.Каждый блок содержит группу транзакций, которые были отправлены с момента предыдущего блока. Чтобы сохранить целостность цепочки блоков, каждый блок в цепочке подтверждает целостность предыдущего, вплоть до первого, блока генезиса. Вставка записи требует больших затрат, поскольку каждый блок должен соответствовать определенным требованиям, которые затрудняют создание действительного блока. Таким образом, ни одна из сторон не может перезаписать предыдущие записи, просто разветвив цепочку.
Чтобы затруднить создание биткойнов, используется функция стоимости Hashcash.Hashcash — это первая безопасная, эффективно проверяемая функция затрат или функция доказательства работы. Прелесть хэш-кеша в том, что он не интерактивен и не имеет секретных ключей, которыми должен управлять центральный сервер или полагающаяся сторона; В результате hashcash является полностью распределенным и бесконечно масштабируемым. (Hashcash использует криптографию с симметричным ключом, а именно одностороннюю хэш-функцию — обычно SHA1 или SHA-256).
В биткойне целостность, цепочка блоков и функция стоимости хэш-кеша используют SHA256 в качестве базовой криптографической хеш-функции.
Криптографическая хеш-функция по существу принимает входные данные, которые могут иметь практически любой размер, и преобразует их практически невозможным способом обратного или предсказуемого в относительно компактную строку (в случае SHA-256 хеш 32 байта). Малейшее изменение входных данных приводит к непредсказуемому изменению их хеш-кода, поэтому никто не может создать другой блок данных, который дает точно такой же хеш-код. Следовательно, получая компактный хэш, вы можете подтвердить, что он соответствует только определенным входным данным, а в биткойне входные данные, являющиеся цепочкой блоков, значительно больше, чем хеш SHA-256.Таким образом, биткойн-блоки не обязательно должны содержать серийные номера, так как блоки можно идентифицировать по их хэшу, что служит двойной цели идентификации, а также проверки целостности. Строка идентификации, которая также обеспечивает собственную целостность, называется идентификатором самосертификации.
Фактор сложности хэш-кеширования достигается за счет требования, чтобы в выходных данных хеш-функции было несколько ведущих нулей. Технически, чтобы обеспечить более детальный контроль, чем метод Hashcash для ведущих 0-битов, Биткойн расширяет определение решения hashcash, обрабатывая хеш как большое целое число с прямым порядком байтов и проверяя, что целое число ниже определенного порога.Функция стоимости хэш-кеша выполняет итерацию, изменяя данные в блоке значением nonce до тех пор, пока данные в блоке не хешируются для получения целого числа ниже порога, что требует большой вычислительной мощности. Это низкое значение хеш-функции для блока служит легко проверяемым доказательством работы — каждый узел в сети может мгновенно проверить, соответствует ли блок требуемым критериям.
С помощью этой структуры мы можем выполнять основные функции системы Биткойн. У нас есть проверяемое право собственности на биткойны и распределенная база данных всех транзакций, что предотвращает двойные траты.
В предыдущем разделе мы упоминали, что добавление блока в цепочку блоков является сложной задачей, требующей времени и вычислительной мощности для выполнения. Стимул потратить на это время и электричество состоит в том, что человек, которому удается произвести блок, получает вознаграждение. Эта награда двойная. Во-первых, производитель блоков получает вознаграждение в виде некоторого количества биткойнов, которое согласовывается с сетью. (В настоящее время эта награда составляет 25 биткойнов; эта сумма будет уменьшаться вдвое каждые 210 000 блоков.) Во-вторых, любые комиссии за транзакции, которые могут присутствовать в транзакциях, включенных в блок, требуются производителем блока.
Это приводит к активности, известной как «добыча биткойнов» — использование вычислительной мощности для попытки создания действительного блока и, как следствие, «добычи» некоторых биткойнов. Сетевые правила таковы, что сложность регулируется таким образом, чтобы производство блоков составляло примерно 1 блок за 10 минут. Таким образом, чем больше майнеров участвует в майнинге, тем сложнее становится каждому отдельному майнеру создать блок. Чем выше общая сложность, тем сложнее злоумышленнику перезаписать верхушку цепочки блоков своими собственными блоками (что позволяет ему дважды потратить свои монеты.Смотрите страницу слабых мест для более подробной информации).
Помимо того, что майнинг важен для поддержки базы данных транзакций, он также является механизмом, с помощью которого биткойны создаются и распределяются среди людей в биткойн-экономике. Сетевые правила таковы, что в течение следующих ста лет, плюс-минус несколько десятилетий, в общей сложности будет создано 21 миллион биткойнов. См. Контролируемое предложение валюты. Вместо того, чтобы ронять деньги из вертолета, биткойны присуждаются тем, кто вносит свой вклад в сеть, создавая блоки в цепочке блоков.
Двойные расходы
Цепочка блоков — это общая бухгалтерская книга, разделяемая всеми узлами Биткойн, в которой указывается владелец каждого биткойна или его часть. В отличие от обычных банковских систем, здесь нет центрального места, где хранится этот реестр транзакций. Это достигается путем передачи небольших фрагментов («блоков»), каждый из которых утверждает, что является продолжением предыдущего блока. Возможно разделение цепочки блоков; то есть два блока могут указывать на один и тот же родительский блок и содержать некоторые, но не все одинаковые транзакции.Когда это происходит, каждый компьютер в сети должен решить для себя, какая ветвь является «правильной», которую следует принять и расширить.
Правило в этом случае — принять «самую длинную» допустимую ветвь. Выберите из полученных вами веток блоков путь, общая «сложность» которого самая высокая. Предполагается, что это последовательность блоков, для создания которой потребовалось больше всего работы (процессорного времени). Для Биткойна это будет «истинный» порядок событий, и это то, что он будет учитывать при расчете баланса, который будет отображаться пользователю.
По-прежнему возможно, что, поскольку новые блоки постоянно генерируются, через некоторое время какая-то другая ветвь станет самой длинной ветвью. Однако для расширения ветки требуются значительные усилия, и узлы работают над расширением ветки, которую они получили и приняли (которая обычно является самой длинной). Таким образом, чем длиннее эта ветвь по сравнению со второй по длине ветвью, тем больше усилий потребуется второй самой длинной ветке, чтобы догнать и преодолеть первую по длине.Кроме того, чем больше узлов в сети узнают о самой длинной ветви, тем более маловероятно, что другие ветви будут расширены в следующий раз, когда будет сгенерирован блок, поскольку узлы примут самую длинную цепочку.
Следовательно, чем больше времени транзакция была частью самой длинной цепочки блоков, тем больше вероятность, что она останется частью цепочки на неопределенный срок. Это то, что делает транзакции необратимыми, и это то, что не позволяет людям дважды тратить свои монеты. Что делает получатель каждой транзакции после того, как деньги предположительно были переведены ему / ей, — это проверить, насколько длинной стала цепочка блоков, следующая за указанной транзакцией, потому что чем больше блоков добавляется в самую длинную ветвь после транзакции, тем меньше вероятность это то, что какая-то другая ветвь преодолеет это.
Когда цепочка блоков после транзакции становится достаточно длинной, для другой ветви становится практически невозможно ее преодолеть, и люди могут начать принимать транзакцию как истинную. Вот почему «блоки» также служат «подтверждениями» транзакции. Даже если другая ветка преодолеет ветвь с транзакцией, большинство блоков будет создано людьми, не имеющими отношения к отправителю монет, так как большое количество людей работает над созданием блоков.Поскольку транзакции транслируются на все узлы в сети, эти блоки с такой же вероятностью будут содержать транзакцию, как и блоки в ранее принятой ветви.
Биткойн полагается на тот факт, что ни один объект не может контролировать большую часть мощности процессора в сети в течение значительного периода времени, поскольку, если бы они могли, они могли бы расширить любую ветвь дерева по своему выбору и быстрее чем любая другая ветвь, которую можно расширить, сделав ее самой длинной ветвью, а затем постоянно контролируя, какие транзакции в ней появляются.
См. Также
.
Proof of work — Bitcoin Wiki
Proof of work — это часть данных, которую сложно (дорого, требует много времени) произвести, но которую легко проверить другими и которая удовлетворяет определенным требованиям. Создание доказательства работы может быть случайным процессом с низкой вероятностью, поэтому требуется много проб и ошибок в среднем , прежде чем будет создано действительное доказательство работы. Биткойн использует систему подтверждения работы Hashcash.
Одним из применений этой идеи является использование Hashcash в качестве метода предотвращения спама в электронной почте, требующего подтверждения работы над содержимым электронной почты (включая адрес «Кому») в каждом электронном письме.Законные электронные письма смогут легко выполнить работу по созданию доказательства (для одного электронного письма требуется не так уж много работы), но массовые рассылки спама будут испытывать трудности с созданием необходимых доказательств (что потребует огромных вычислительных ресурсов).
Доказательства работы Hashcash используются в Биткойне для генерации блоков. Чтобы блок был принят участниками сети, майнеры должны заполнить доказательство работы, которое охватывает все данные в блоке. Сложность этой работы регулируется таким образом, чтобы ограничить скорость, с которой новые блоки могут генерироваться сетью, до одного каждые 10 минут.Из-за очень низкой вероятности успешной генерации это делает непредсказуемым, какой рабочий компьютер в сети сможет сгенерировать следующий блок.
Для того, чтобы блок был действительным, он должен иметь значение, меньшее, чем текущая цель; это означает, что каждый блок указывает, что работа по его созданию была проделана. Каждый блок содержит хэш предыдущего блока, поэтому каждый блок имеет цепочку блоков, которые вместе содержат большой объем работы. Изменение блока (которое может быть выполнено только путем создания нового блока, содержащего того же предшественника) требует регенерации всех преемников и повторения работы, которую они содержат.Это защищает цепочку блоков от взлома.
Наиболее широко используемая схема доказательства работы основана на SHA-256 и была введена как часть Биткойна. Некоторые другие алгоритмы хеширования, которые используются для доказательства работы, включают Scrypt, Blake-256, CryptoNight, HEFTY1, Quark, SHA-3, scrypt-jane, scrypt-n и их комбинации.
Пример
Допустим, основная строка, над которой мы собираемся работать, — это «Hello, world!». Наша цель — найти такой вариант, при котором SHA-256 хеширует значение меньше 2 ^ 240.239,61238653
4251 хэшей на современном компьютере — это не очень много работы (большинство компьютеров могут достигать не менее 4 миллионов хэшей в секунду). Биткойн автоматически изменяет цель (и, следовательно, объем работы, необходимый для генерации блока), чтобы поддерживать примерно постоянную скорость генерации блоков.
В Биткойне хеш-значение также используется в качестве ссылки на сам блок, поэтому кто-то может сказать, что их транзакция была залита в блок с хешем 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9
.Заголовок блока содержит дерево Меркла, которое зависит от включенных транзакций. Это включает в себя транзакцию генерации, транзакцию «из ниоткуда» на наш собственный адрес, которая, помимо того, что дает майнеру стимул выполнять работу, также гарантирует, что каждый майнер хеширует уникальный набор данных.
Список алгоритмов
Традиционное подтверждение работы
- hashcash с двойной итерацией SHA256
- hashcash с внутренним хешем scrypt
- Momentum день рождения столкновение
- Cuckoo Cycle proof of work https: // github.com / tromp / cuckoo
- Различные другие функции подтверждения работ
Доказательство X
- Подтверждение ставки
- Доказательство ожога
Список литературы
Распределение одноразовых номеров и хэшей
.Документация по протоколу
— Bitcoin Wiki
На этой странице описывается поведение эталонного клиента. Протокол Биткойн определяется поведением ссылочного клиента, а не этой страницей. В частности, хотя эта страница довольно полно описывает сетевой протокол, на ней не делается попытки перечислить все правила для проверки действительности блока или транзакции.
Имена типов, используемые в этой документации, взяты из стандарта C99.
Протокол, используемый в майнинге, см. В getblocktemplate.
Общие стандарты
Хеши
Обычно, когда хэш вычисляется в биткойне, он вычисляется дважды. В большинстве случаев используются хеши SHA-256, однако RIPEMD-160 также используется, когда желателен более короткий хеш (например, при создании адреса биткойнов).
Пример двойного SHA-256-кодирования строки «hello»:
привет 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (первый раунд ша-256) 9595c9df148eb06860365df33584b75bff782a510c6cd4883a419833d50 (второй раунд ша-256)
Для адресов биткойнов (RIPEMD-160) это даст:
привет 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (первый раунд - sha-256) b6a9c8c230722b7c748331a8b450f05566dc7d0f (с ripemd-160)
Деревья Меркла
Деревья Меркла — это бинарные деревья хешей.Деревья Меркла в биткойне используют double SHA-256, хеш SHA-256 хеша SHA-256 чего-то.
Если при формировании строки в дереве (кроме корня дерева) она будет иметь нечетное количество элементов, последний двойной хеш дублируется, чтобы гарантировать, что строка имеет четное количество хешей.
Сначала сформируйте нижнюю строку дерева с помощью упорядоченных хэшей с двойным SHA-256 байтовых потоков транзакций в блоке.
Тогда строка над ней состоит из половины этого количества хешей.Каждая запись представляет собой двойной SHA-256 из 64-байтовой конкатенации соответствующих двух хешей под ней в дереве.
Эта процедура повторяется рекурсивно, пока мы не дойдем до строки, состоящей только из одного двойного хеша. Это корень Меркла дерева.
Например, представьте себе блок с тремя транзакциями a , b и c . Дерево Меркла:
d1 = дхаш (а) d2 = дхаш (б) d3 = дхаш (с) d4 = dhash (c) # a, b, c равны 3.это нечетное число, поэтому мы берем c дважды d5 = dhash (d1 concat d2) d6 = dhash (d3 concat d4) d7 = dhash (d5 concat d6)
где
дхаш (а) = ша256 (ша256 (а))
d7 — корень Меркла из 3 транзакций в этом блоке.
Примечание. Хэши в дереве Меркла, отображаемые в проводнике блоков, имеют прямой порядок байтов. Для некоторых реализаций и вычислений байты необходимо поменять местами перед хешированием и снова после операции хеширования.
Подписи
Биткойн использует алгоритм цифровой подписи с эллиптической кривой (ECDSA) для подписи транзакций.
Для ECDSA используется кривая secp256k1 из http://www.secg.org/sec2-v2.pdf.
Открытые ключи (в скриптах) задаются как 04
подписи используют кодировку DER для упаковки компонентов r и s в один поток байтов (это также то, что OpenSSL производит по умолчанию).
Подтверждение транзакции
Транзакции — это записи с криптографической подписью, которые передают право владения биткойнами новым адресам. Транзакции имеют входных данных, — записи, которые ссылаются на средства от других предыдущих транзакций — и выходных данных — записи, которые определяют нового владельца переданных биткойнов и которые будут использоваться в качестве входных данных в будущих транзакциях по мере поступления этих средств.
Каждый вход должен иметь криптографическую цифровую подпись, которая разблокирует средства от предыдущей транзакции. Только человек, обладающий соответствующим закрытым ключом, может создать удовлетворительную подпись; это фактически гарантирует, что средства могут быть потрачены только их владельцами.
Каждый выход определяет, какой биткойн-адрес (или другие критерии, см. Скрипт) является получателем средств.
В транзакции сумма всех входов должна быть равна или больше суммы всех выходов.Если входы превышают выходы, разница считается комиссией за транзакцию и подлежит выкупу тем, кто первым включит транзакцию в цепочку блоков.
Особый вид транзакции, называемый транзакцией с базой монет, не имеет входных данных. Он создается майнерами, и на каждый блок приходится одна транзакция. Потому что каждый блок имеет вознаграждение в размере
.