Сейчас очень много информации на тему блокчейн, криптовалют, NFT, ICO, smart контрактов и т.д. У многих до сих пор возникают вопросы, что такое блокчейн. Попробуем дать пояснения, что такое блокчейн простыми словами.
В основе блокчейна лежит три основных понятия:
- p2p (peer—to—peer, равный к равному) – одноранговая, децентрализованная или пиринговая сеть, основанная на равноправии участников.
Каждый компьютер, подключенный в сеть, одновременно осуществляет функции и сервера, и клиента, то есть каждый компьютер и хранит информацию, и отправляет ее другому компьютеру (клиенту) по его запросу. Компьютеры «общаются» между собой, передают друг другу информацию без центрального элемента.
Существует также многоранговая, централизованная сеть, в которой центральный сервер хранит информацию и остальные компьютеры обращаются к этому серверу за информацией.
В блокчейн чаще всего используется p2p сеть, то есть вся информация хранится сразу у всех участников сети, отсюда и название — децентрализованная. Такая организация сети позволяет сохранять работоспособность при любом количестве и сочетании узлов, даже если часть отключится.
Защищенность сети обусловлена тем, что информация хранится у всех одновременно, и, если кто-то захочет информацию заменить, все поймут и не примут это изменение. Есть децентрализованные блокчейн системы – Bitcoin, Ethereum, Litecoin и другие.
В отличие от централизованной системы хранения, например, банк (центральный сервер) хранит инфо сколько у каждого клиента денег на счете, остальные такой информацией не обладают. Есть централизованные блокчейн системы – UST, DAI и другие.
- Hash (криптографическое хеширование)
Криптография – наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним), целостности данных (невозможности незаметного изменения информации), аутентификации (проверки подлинности авторства или иных свойств объекта), шифрования (кодировка данных).
Симметричное шифрование – используется один ключ
На протяжении всей истории у человечества возникала проблема передавать друг другу секретную информацию, чтоб она не была известна третьим лицам.
Изначально была придумана симметричная криптография (шифрование) – способ шифрования, при котором для шифрования и дешифрования применяется один и тот же криптографический ключ (один и тот же секрет, как расшифровать сообщение).
Например, буквы в тексте сообщения переставлялись в определенном порядке. Получателю информации заранее сообщался ключ, как расшифровать сообщение – буквы нужно записать в таблицу и прочитать столбцы, или все буквы передвинуты на определенное значение в алфавите (шифр Цезаря) и т.д.
Например:
Текст – Брут
Ключ – все буквы переставлены на 3
Шифр — ДУЦХ
Симметричное шифрование, т.к. у получателя и отправителя должен быть один секретный ключ, которым они должна заранее обменяться, чтоб расшифровать сообщение.
Далее стал развиваться телеграф (оптический, электрический, фототелеграф, беспроводной телеграф, аппарат Бордо, телекс и т.д.), информация стала передаваться по открытым каналам связи.
Стала возникать необходимость, особенно для военных, изобретать более надежные средства шифрования. В 1946 году английским математиком и криптографом Аланом Тюрингом была предложено вычислительная «Машина Тюринга», являющаяся моделью компьютера, сформировавшая понятие алгоритма.
В годы Второй мировой войны Алан Тюринг занимался взломов шифров немецкого шифратора (см. фильм «Игра в имитацию»). В 1948 году американский математик и криптограф Клод Шенон предложил для обозначения наименьшей единицы информации использовать слово «бит».
Клод Шенон сформировал два основных свойства хорошего шифра:
- рассеивание (диффузия) — если единственный бит в исходном тексте измен, несколько или все биты в зашифрованном тексте будут также изменены
- перемешивание (конфузия) – если единственный бит в ключе изменен, несколько или все биты в зашифрованном тексте будут также изменены.
То есть при хорошем шифре практически невозможно вычислить закономерность шифра, чтоб понять исходный текст. Все зависит друг от друга, при любом изменении или ключа, или исходного текста, или шифра, все данные очень сильно меняются.
Хеш-функция (hash function, «превращать в фарш») — функция, которая преобразовывает любые исходные данные (любой длины) в выходную битовую строку, установленной длины. Преобразование, производимое хеш-функцией, называется хешированием. Исходные данные называются сообщением. Результат преобразования называется hash «хешем». Формулы хеширования могут быть разные.
Например, когда вы вводите пароль на сайте, то сам сайт получает не пароль, а его хеш. Преобразовать через хеш обратно пароль крайне сложно.
Можно попробовать хешировать любые данные Хэш-функции — Онлайн Генераторы Хэш- (convertstring.com), и потом попробовать их обратно дешифровать.
После появления интернета, электронных ключей появилась проблема как передать секретный ключ.
- Электронно-цифровая подпись (ЭЦП)
Ассиметричное шифрование – используется два ключа
Криптографы Уитфилд Диффи и Мартинн Хеллман предложили криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный канал связи.
Знаменитый пример криптографии Алиса и Боб отправляют друг дугу информацию.
Алиса сообщает Бобу по открытой связи числа p (например, 23) и g (будет 5, преобразованный корень по модулю p), которые могут быть известны всем.
Генерация секретного и публичных ключей
Алиса придумывает себе (генерирует случайным образом) число a (например 6), это число будет ее секретным ключом a, известным только ей.
Алиса рассчитывает свой публичный ключ A (получается 8) по формуле:
A = ga mod p
56 mod 23 = 8
15 625 = 23 х 679 + 8
8 – это остаток от деления 56 на 23. Иными словами «если 56 разделить на 23, то получится 679 и остаток 8» записывается обозначением «56 mod 23 = 8». Значение 8 высчитывает компьютер.
Боб делает то же самое. Он генерирует себе случайным образом секретный ключ b (например, 15). И по той же самой формуле рассчитывает свой публичный ключ B (получается 19).
B = gb mod p
515 mod 23 = 19
30 517 578 125 mod 23 = 19
30 517 578 125 = 23 x 30 517 578 106 + 19
Обмен публичными ключами
Алиса свой публичный ключ А (8) сообщает Бобу – по публичному каналу связи.
Боб свой публичный ключ В (19) сообщает Алисе – по публичному каналу связи.
Вычисляют общий секретный ключ K:
K = Ba mod p
К = Аb mod p
Алиса высчитывает: К = 196 mod 23 = 2 или 47 045 881 = 2 045 473 x 23 + 2
Боб высчитывает: К = 815 mod 23 = 2 или 35 184 372 088 832 = 1 529 755 308 210 х 23 + 2
Общий секретный ключ K = 2, рассчитывается компьютером.
Сложность обратных расчетов
Компьютеру, зная a и b (секретные ключи), вычислить A и B (публичные ключи) – легко. Наоборот, зная A и B (публичные ключи), вычислить a и b (секретные ключи) компьютеру очень и очень сложно, практически невозможно. Считается, что такие обратные расчеты сможет вести квартовый компьютер, который пока является гипотетическим устройством.
Если Алиса хочет получить что-то от Боба, она отправляет ему свой публичный ключ (A), Боб шифрует информацию с помощью ее публичного ключа. Алиса получает зашифрованную информацию и расшифровывает ее с помощью своего секретного ключа.
Как подписывают электронно-цифровой подписью?
Алиса берет любой файл, преобразовывает его в хеш, затем шифрует его своим секретным ключом. Этот зашифрованный хеш и свой публичный ключ она отправляет Бобу. Боб публичным ключом Алисы расшифровывает файл и получает его хеш. Боб сам создает хеш этого же документа, сравнивает их, и, если они одинаковые, то Боб уверен, что у них с Алисой одинаковый файл
Это и есть электронно-цифровая подпись. У всех есть пара ключей: секретный и публичный.
Как работает платежная система в блокчейне?
Блокчейн (от англ. block chain, цепочка блоков) — выстроенная по определённым правилам непрерывная последовательная цепочка блоков, содержащих информацию.
Биткоин (от англ. bitcoin, от bit — бит и coin — монета) — пиринговая (p2p) платежная система, использующая одноимённую единицу для учёта операций. Учет операций в этой платежной системе производится условными единицами, которые также называются биткоин (биткоин – это просто номер).
В децентрализованной сети находятся компьютеры, у всех есть публичный и секретный ключ.
Публичный ключ – это фактически адрес пользователя (как номер банковского счета). На этом адресе можно хранить информацию об имеющихся активах (биткоинах). Публичный ключ знают все, и сколько у кого активов на этом адресе, тоже знают все.
Пользователи сети могут делать друг другу переводы (транзакции), списывать активы со своего адреса и переводить на другой. Пользователь подписывает информацию о транзакции своей ЭПЦ, поэтому все участники сети уверены, что именно сам пользователь совершает данную транзакцию.
Информацию о транзакции пользователь направляет на любой компьютер сети, по сети распространяется информация. В сети есть пул транзакций (как доска объявлений), куда пользователи отправляют информацию о совершаемых транзакциях. Сообщение о транзакции должно содержать ряд определенных параметрах, а также сумму комиссии за обработку этой транзакции.
В сети есть специализированные участники – майнеры, которые обладают компьютерами с большой мощностью. Майнеры создают блоки.
В каждой сети есть свой протокол (инструкция, спецификация) из чего должен состоять блок. Каждому блоку присваивается имя – хеш. В блоках содержится информация о транзакциях, перепроверенная майнерами, и хеш предыдущего блока.
Когда блок создан он отправляется в сеть, каждый блок следует друг за другом, по цепочке. У всех участников сети появляется новый блок, откуда они получают информацию о проведенных транзакциях, обновляют данные у себя. Алгоритм биткоина построен таким образом, что новый блок появляется каждые 10 минут, чтоб он успел распространиться по сети и у всех была одинаковая информация.
На рисунке упрощенный состав блока, также в блок входит время включения блока в блокчейн и nonce – доказательства вычислительной работы (поиска хеша, начинающегося нулями), проведенной для того, чтобы блок был включен в блокчейн.
В чем сложность майнинга (он же хеширование)?
По протоколу Биткоина все хеши блоков должны начинаться с нулей. В блокчейне Биткоина майнеры пытаются найти требуемую хеш-сумму путём хэширования случайных чисел. Процесс поиска похож на лотерею. Когда они находят решение определенной математической задачи – находят число, хеш от которого начинается с определенного количества нулей (и тем самым создают новый блок), в качестве вознаграждения за вновь созданный блок майнеры получают новые биткоины.
Необходимое количество нулей в начале хеша меняется алгоритмом биткоина. Если в сети много майнеров, то количество нулей прибавляется, чтоб блок все равно появляется каждые 10 минут.
Награда за создание блока регулируется автоматически, чтобы, в идеале, за каждые четыре года работы сети создавалась половина биткоинов, созданных за предыдущие четыре года. За первые 4 года (с января 2009 года по ноябрь 2012 года) было создано (примерно) 10,499,889.80231183 биткоинов.
Каждые четыре года эта сумма будет делиться надвое, она будет равна 5,250,000 в течение следующих четырех лет, потом 2,625,000 и так далее. Таким образом, общее число биткоинов никогда не превысит 20,999,839.77085749.
Таким образом работает пиринговая платежная система: все участники сети обладают одинаковой информацией, постоянно ей обмениваются, отправляют в сеть данные о транзакциях. Майнеры собирают информацию о транзакциях в блоки, которые в сети формируют цепочку. Все данные цепочки связаны между собой.