Что такое хеш-функция и как работает блокчейн? Узнай про майнинг все! Что такое хэш в криптовалюте


Основы криптовалют: что такое хеширование?

Проверенные биржи:

История хеширования

Общая хеш-функция — это специальный тип функции программирования, который используется для сопоставления данных произвольного размера с данными фиксированного размера. Хеш-функции возникли из-за необходимости сжимать данные и уменьшать объем памяти, необходимый для хранения больших файлов.

Наиболее популярным вариантом использования хеш-функции является структура данных, называемая hash table. Она широко используется для быстрого поиска информации. Хеш-функции помогают ускорить поиск таблицы или базы данных, обнаруживая любые два точных хеша.

Они также помогают минимизировать теги для огромных файлов, таких как mp3, PDF или изображения, чтобы упростить работу с этими объёмными данными. Для быстрой идентификации ключевым требованием хеш-функций является то, что они выводят строку с фиксированной длиной буквенно-цифровых символов.

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

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

С точки зрения управления базой данных это означало бы, что два разных объекта в конечном итоге хранятся в одной и той же ячейке — это неудобно, если вы хотите определить уникальные идентификаторы.

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

Принцип Pigeonhole

В рамках криптографической математики существует понятие, называемое принципом Pigeonhole. Оно означает, что если мы поместим (n) элементы в (m) пространства, где n > m , то существует хотя бы одно пространство (m), занятое более чем двумя элементами (n).

Если вы хотите больше узнать о криптографии, читайте статью Криптография. Пособие для начинающих

Например, четверо человек ищут свои пальто в одной из трёх доступных секций для пальто. По принципу Pigeonhole, поскольку количество пальто (n) больше, чем секций (м), существует 100% вероятность, что по меньшей мере одна секция содержит больше одного пальто.

Обычно разработчики программного обеспечения заинтересованы в хеш-функциях с бесконечным доменом (то есть они принимают входные строки всех возможных длин) и конечным диапазоном.

Снова следуя принципу Pigeonhole: поскольку наш диапазон (n) меньше нашей области (m), должно существовать хотя бы одно столкновение.

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

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

В поле зрения вскоре появилась отдельная ветвь хеш-функций, которая обеспечивала конфиденциальность, безопасность и прозрачность. Данная ветвь находится в центре внимания нашей статьи — это криптографическая хеш-функция.

Криптографическое хеширование

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

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

Обозначения хеш-функций

Общая криптографическая хеш-функция имеет два входа: сообщение, которое она сжимает или хеш (x), и открытый ключ (s), который представляет собой выходной сигнал фиксированной длины нашего хеша в алфавитно-цифровых символах. Хешированный результат называется месседж-дайджестом или просто дайджестом (x *). Это выглядит так:

H (s,x) = x *.

Давайте изучим эту формулу на реальном примере хеш-строки, использующей предыдущий стандарт хеш-функции — MD5. Скажем, мы хотим применить MD5 для хеширования строки “Hello World!”. Мы также знаем, что по умолчанию MD5 всегда выводит строку из 128 бит (0 и 1). Обозначение будет выглядеть следующим образом:

H (128, x) = ed076287532e86365e841e92bfc50d8c.

На самом деле, если вы продолжите и попробуете составить хеш-функцию MD5 “Hello World!” самостоятельно, вы получите точно такой же результат. Потрясающе!

Теперь давайте перейдем к настройке обозначений для столкновения. В дополнение к предыдущим переменным H, s, x, и x * вводим второе сообщение (x ‘). Столкновение возникает, когда хеширование двух разных сообщений (x & x ‘) приводит к одинаковому месседж-дайджесту (x *):

Если H (128, x) = H (128, x ‘), наша хеш-функция (H) будет столкновением при x и x’.

Мы установили определение для текущего стандарта криптографической хеш-функции. Если происходит столкновение, хеш-функция больше не считается безопасной.

Заключительные мысли

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

PS. Мы уверены, что некоторые из вас заметили: в нашем примере с MD5 мы использовали хеш-функцию, которая возвращает строку длиной в 128 символов, но наш хеш “Hello World!” возвращает 32-символьную буквенно-числовую строку. Об этом парадоксе мы поговорим в следующей статье!

Проверенные биржи:

privatfinance.com

Что такое хеш-функция и как работает блокчейн? Узнай про майнинг все!

Процесс добычи биткоинов представляет собой майнинг. Несмотря на то, что в последнее время о майнинге говорят все без исключения слои населения, сам процесс майнинга остаётся чем-то таинственным и понятным только определённому числу «избранных». Сегодня мы попробует кратко разобраться в сути вопроса и немного прояснить суть майнинга.

Что такое хеш-функция?

Если не углубляться в строгие определения, то хеш-функция представляет собой набор символов, полученных из определённой последовательности данных.

Назначение хеш-функций достаточно легко понять из следуюшего примера практической направленности.

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

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

Таким образом, зная хеш-функцию определённого набора данных, можно с лёгкостью определить корректность их передачи.

Вы можете самостоятельно проверить работу хеш-функции, шифрующей любой набор текстовый набор данных с использованием алгоритма SHA-256.

Блокчейн биткоина

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

Несмотря на это, на самом деле, добыча биткоинов является следствием, а не причиной, и занятие майнингом можно определить также как поиск числа называемого nonce.

Поиск nonce очень похож на процесс подбора, например, паролей. Nonce как раз представляет из себя из себя пресловутый новый блок, поиском которого заняты майнеры.

Верное значение nonce, в совокупности с ранее вычисленными блоками, даёт искомое значение хеш-функции, которое рандомно определяется самим блокчейном.

Итак, применительно к процессу майнинга, блокчейн представляет собой децентрализованную систему, ведущую учёт вычисленных блоков.

Значения nonce ищутся всеми компьютерами майнеров одновременно. Компьютер, первым определивший верное значение nonce – нового блока блокчейна, получает право назначения нового блока и щедрую премию в размере 12,5 BTC. Понятно, что первым найдёт искомый блок наиболее производительная система.

Почему сегодня не получается майнить на обычном компьютере?

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

Кроме того, для дополнительного усложнения процесса вычисления нового nonce-блока, используются сложные значения хеш-функции. Например, в качестве новых значений задаются имеющие несколько нулей в начале хеш-последовательности.

Таким образом, достигается некоторый паритет между возможностями майнинговых систем.

Почему облачный майнинг выгоден?

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

На сегодняшний день, наилучшим решением для этого является сервис облачного майнинга.

Hashing24 позволяет добывать биткоины удобно и полностью удалённо с использованием любого количества мощностей.

rivaforex.ru

Что такое хеширование и цифровая подпись в блокчейне

Проверенные биржи:

Всем привет. Сегодня мы поговорим о понятии blockchain и подробно разберем его, чтобы понимать, что это значит. Мы рассмотрим две основные криптографические концепции, стоящие за технологией блокчейн. Одна из них — хеширование, вторая — цифровая подпись.

Что такое хеширование

Хеширование — это процесс преобразования произвольного объема данных по определенному алгоритму в строку фиксированного размера, которая называется хешем.

Если вы хотите узнать словарь блокчейна, читайте статью Словарь блокчейна: от А до Я

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

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

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

Для чего можно использовать такой хеш? Сегодня наиболее распространенное применение хешей — создание своего рода «отпечатков пальцев» файлов. Это означает, что хеш используется для подтверждения того, что файл не был заменен другим или изменен каким-то образом, не предназначенным для этого самим автором.

Например, WikiLeaks публикует набор файлов вместе с их хэшами MD5. Тот, кто скачивает эти файлы, может проверить, действительно ли они из WikiLeaks, если вычислит хэши MD5 этих скаченных файлов.

В том случае, если полученный хэш не соответствует тому, который был опубликован WikiLeaks, значит, этот файл был каким-то образом изменен.

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

Хеш здесь используется для того, чтобы любой участник мог убедиться, что состояние блокчейна остается неизменным. Но как эти хэши фактически вычисляются?

Первый хеш рассчитывается для первого блока, так называемого Genesis-блока. Последовательность транзакций, записанных внутри блока, используется для вычисления хеша Genesis-блока.

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

Именно так и образуется цепочка блоков или blockchain. Каждый хеш нового блока указывает на хеш предыдущего.

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

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

Например, длина блокчейна Ethereum’а в настоящее время составляет десятки гигабайт, но его текущее состояние, как записи, представляет собой шестнадцатеричный хеш, содержащий всего 256 бит.

Что такое цифровая подпись

Цифровые подписи, так же как и настоящие подписи, — это один из способов доказать, что кто-то является тем, за кого он себя выдает. С учетом того, что в этой ситуации используется криптография и математика, это значительно безопаснее, чем обычные рукописные подписи, которые можно легко подделать.

Цифровая подпись — это способ доказать, что сообщение исходит от конкретного человека, а не от хакера.

Цифровые подписи используются сегодня во всем Интернете. Всякий раз, когда вы посещаете сайт через ACTPS, вы используете SSL, который применяет цифровые подписи для установления соединения между вами и сервером.

Это означает, что когда вы посещаете Facebook.com, ваш браузер может проверить цифровую подпись, прилагаемую к веб-странице, чтобы убедиться, что она действительно принадлежит Facebook, а не какому-то хакеру.

В асимметричных системах шифрования пользователи генерируют по определенному алгоритму так называемые пары ключей, каждая из которых является открытым ключом (public key) и закрытым ключом (private key).

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

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

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

Это здорово! Более того, каждая транзакция, выполняемая в блокчейне, подписывается цифровой подписью отправителя, используя его закрытый ключ. Эта подпись гарантирует, что только владелец данной учетной записи может перевести из нее деньги.

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

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

Проверенные биржи:

privatfinance.com

Чтобы понять блокчейн, нужно понять, что такое хеш -

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

Очень краткая история цифровых денег

Биткойн – новый подход к предыдущим экспериментам с цифровыми деньгами. В 1990-х это была горячая, но спекулятивная тема. Даже Алан Гринспен в своей речи в 1996 г. сказал:

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

Таким образом, использование цифровой валюты истеблишментом было на повестке дня задолго до Биткойна. Для того чтобы освободить цифровую валюту от истеблишмента, требовалось ещё одно новшество. Этим новшеством стала криптография.

Когда Гринспен произносил свою речь, шифропанки уже экспериментировали с цифровыми валютами с явным намерением дестабилизировать банки. В числе их экспериментов, существовавших до Биткойна, были Hashcash Адама Бэка, BitGold Ника Сабо, B-Money Вэй Дая и RPOW Хэла Финни. Все они использовали возможности криптографических хеш-функций, и вместе они образуют гигантские плечи, на которых сегодня стоит Биткойн.

Что такое криптографические хеш-функции?

Криптографическая хеш-функция берёт данные и, по сути, переводит их в строку букв и цифр. Вы когда-нибудь пользовались URL-сокращалками типа Bitly или TinyURL? Это нечто похожее. Вы вводите что-то длинное, а на выходе получается что-то короткое, олицетворяющее то длинное. Только в случае криптографических хеш-функций ввод не обязательно должен быть длинным. Это может быть что-то очень короткое (например, слово «пёс») или почти бесконечно длинное (например, весь текст «Повести о двух городах»), и на выходе вы получите уникальную строку установленной длины. Кроме того, в отличие от сокращателей ссылок, хеш-функции, применяемые в Биткойне, действуют только в одном направлении. Хотя одни и те же данные всегда дадут один и тот же хеш, воспроизвести изначальные данные по полученному из них хешу невозможно.

Итак, данные вводятся в хеш-функцию, функция выполняется и получается строка букв и цифр (можете попробовать самостоятельно здесь). Эта строка называется хешем. В блокчейне Биткойна хеши состоят из 256 бит или 64 символов.

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

Пример

Хеш фразы:

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

df0a199c7fef0a53d9a4144bc9122441b94510c13faf424ca26b65aa5035048f

Тогда как хеш слова «пёс»:

cd6357efdd966de8c0cb2f876cc89ec74ce35f0968e11743987084bd42fb8944

Как работают криптографические хеш-функции

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

Как хеш-функции применяются в блокчейне

Чтобы блокчейн работал, он должен обновляться. Подобно банку, он должен вести актуальные записи всех транзакций и активов (например, биткойнов), имеющихся у каждого участника сети. Именно при обновлении транзакционной информации любая аутентифицирующая система уязвима для атаки. Банк сглаживает этот риск благодаря наличию строгой централизованной иерархии, гарантирующей подлинность на свой собственный риск. Так как блокчейну удаётся обновляться, оставаясь децентрализованным? Он использует криптографическую вероятностную хеш-игру, называемую «доказательство выполнения работы» (Proof of Work).

Криптография обеспечивает консенсус

Чтобы продолжать функционировать, блокчейн должен создавать новые блоки. Так как блокчейны – это децентрализованные системы, новые блоки должны создаваться не единственным аутентифицирующим субъектом, а сетью в целом. Чтобы решить, каким будет новый блок, сеть должна достичь консенсуса. Чтобы достичь консенсуса, майнеры предлагают определённые блоки, блоки верифицируются, и, наконец, сеть выбирает единственный блок, который будет следующей частью реестра. Однако очень много майнеров предлагают идентичные блоки, проходящие верификацию. Так каким образом конкретный блок выбирается, чтобы стать следующим в цепи?

Компьютеры соревнуются в хеш-игре. Всё очень просто. По сути, чтобы выиграть игру, майнящий компьютер должен угадать число, называемое «нонс» (nonce), которое в комбинации со всеми предыдущими данными блокчейна даёт при вводе в хеш-функцию SHA-256 определённый хеш.

Помните хакеров из фильмов, использующих программу, угадывающую миллион паролей в минуту, чтобы взломать компьютер? Это что-то вроде этого. Все майнеры мира одновременно используют похожую программу-угадайку, ищущую правильный нонс, который при добавлении к данным блокчейна и вводе в хеш-функцию SHA-256 даст рандомный хеш, который сам блокчейн «определил» как «решение» задачи. Компьютеры, в каком-то смысле, работают совместно, так как каждый предложенный хеш не может быть предложен снова. Компьютер, первым отгадавший правильное число, выигрывает право на создание следующего блока и получает 12,5 биткойна, что сейчас равно примерно $50 000.

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

Тем не менее, поскольку постепенно всё больше людей выделяли всё больше компьютерной мощности на майнинг биткойнов, возникла новая проблема. Новаторы разработали мощные компьютеры, предназначенные исключительно для майнинга биткойнов. Эти компьютеры способны предлагать хеши намного чаще, чем средний компьютер, что позволяет им прийти к верной догадке намного быстрее и, как следствие, намайнить больше биткойнов.

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

10-минутное решение

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

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

Но теперь представьте, что вы задаёте определённые критерии того, в какое животное должна перевести ваши данные хеш-функция, чтобы работать. Это влияет на вероятность хеширования тех или иных данных в животное, удовлетворяющее вашим критериям. Например, данные «abc123» с большей вероятностью выдадут любое животное (на самом деле в данном примере вероятность 100%), чем любое двуногое, потому что существует намного больше потенциальных догадок, подходящих под любое животное, чем под любое двуногое. Ещё меньше вероятность получить любую обезьяну.

Блокчейн Биткойна работает так, что игра на отгадывание самокорректируется, чтобы всегда быть достаточно сложной, чтобы все компьютеры сети могли угадывать только каждые 10 минут, независимо от мощности отгадывающих компьютеров. Это значит, что угадывание хеша и майнинг блока сегодня теоретически намного сложнее, чем при запуске Биткойна в 2009 г., потому что в сети очень много сверхмощных компьютеров. И в самом деле, сегодня невозможно майнить биткойны с помощью обычного ноутбука, тогда как в ранние дни Биткойна все участники сети использовали стандартные компьютеры.

Так как же протокол Биткойна гарантирует, что игра на отгадывание будет становиться достаточно сложной, чтобы даже чрезвычайно мощным майнинговым компьютерам на отгадывание требовалось примерно 10 минут? Вспомните пример с обезьяной. Чем более конкретные критерии заданы для выхода хеш-функции, тем больше догадок нужно сделать, чтобы получить этот более конкретный выход. Вместо того чтобы «правильным» ответом было животное (легко), двуногое (сложно) или обезьяна (сложнее), для «правильной» строки хеша, выигрывающей игру, задаются всё более конкретные критерии. В частности, игра усложняется посредством требования наличия у правильного хеша в начале определённого количества нулей.

Представьте себе это следующим образом. Если я попрошу вас отгадать рандомное трёхзначное число, чтобы получить шоколадку, у вас больше шансов угадать, если правильное число – любое трёхзначное число, чем если это любое трёхзначное число, начинающееся с 0. Это сложно понять, но в основе лежит математический закон, говорящий, что достаточно квадратного корня N рандомных событий, чтобы вероятность их совпадения составляла 50%. Та же самая математика поддерживает парадокс дней рождения – если в комнате всего 23 человека, существует 50% вероятность, что у двух из них день рождения в один и тот же день.

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

Должен заметить, что я лишь (с трудом) понимаю, как работает блокчейн Биткойна.

Другие блокчейны могут использовать криптографию совершенно иначе, чем я здесь описал. Например, я не знаю, использует ли ту же систему доказательство доли владения (proof of stake) – как утверждается, более эффективное усовершенствование доказательства выполнения работы.

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

Источник

Поделиться ссылкой:

Related

‹ BitRent открывает новые горизонты для инвесторовAmbrosus в партнёрстве с Trek Therapeutics разработает метод, основанный на блокчейне, для отслеживания качества в фармацевтическом производстве ›

Categories: История, Криптоанархизм, Криптография, Криптофилософия

Tags: Блокчейн, История блокчейна, хеш

bitnovosti.com

Хеш — что это такое и как хэш-функция помогает решать вопросы безопасности в интернете | KtoNaNovenkogo.ru

Хеш — что это такое и как хэш-функция помогает решать вопросы безопасности в интернете

Обновлено: 21 сентября 2017

Здравствуйте, уважаемые читатели блога KtoNaNovenkogo.ru. Хочу продолжить серию статей посвященных различным терминам, которые не всегда могут быть понятны без дополнительных пояснений. Чуть ранее я рассказывал про то, что значит слово кликбейт и что такое хост, писал про IP и MAC адреса, фишинг и многое другое.

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

Все это (или почти все) вы узнаете из этой маленькой заметки. Поехали...

Что такое хеш и хэширование простыми словами

Слово хеш происходит от английского «hash», одно из значений которого трактуется как путаница или мешанина. Собственно, это довольно полно описывает реальное значение этого термина. Часто еще про такой процесс говорят «хеширование», что опять же является производным от английского hashing (рубить, крошить, спутывать и т.п.).

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

Для обычного человека это кажется белибердой, но как ни странно в наше время без хеширования практически невозможна работа в интернете. Так что же это такая за функция? На самом деле она может быть любой (приведенный выше пример это не есть реальная функция — он придуман мною чисто для вашего лучшего понимания принципа). Главное, чтобы результаты ее работы удовлетворяли приведенным ниже условиям.

Зачем нужен хэш

Смотрите, еще пример. Есть у вас текст в файле. Но на самом деле это ведь не текст, а массив цифровых символов (по сути число). Как вы знаете, в компьютерной логике используются двоичные числа (ноль и единица). Они запросто могут быть преобразованы в шестнадцатиричные цифры, над которыми можно проводить математические операции. Применив к ним хеш-функцию мы получим на выходе (после ряда итераций) число заданной длины (хеш-сумму).

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

Где и как используют хеширование

Например, простые хэш-функции (не надежные, но быстро рассчитываемые) применяются при проверке целостности передачи пакетов по протоколу TCP/IP (и ряду других протоколов и алгоритмов, для выявления аппаратных ошибок и сбоев — так называемое избыточное кодирование). Если рассчитанное значение хеша совпадает с отправленным вместе с пакетом (так называемой контрольной суммой), то значит потерь по пути не было (можно переходить к следующему пакету).

А это, ведь на минутку, основной протокол передачи данных в сети интернет. Без него никуда. Да, есть вероятность, что произойдет накладка — их называют коллизиями. Ведь для разных изначальных данных может получиться один и тот же хеш. Чем проще используется функция, тем выше такая вероятность. Но тут нужно просто выбирать между тем, что важнее в данный момент — надежность идентификации или скорость работы. В случае TCP/IP важна именно скорость. Но есть и другие области, где важнее именно надежность.

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

Более сложные хеш-функции используются в криптографии. Главное условие для них — невозможность по конечному результату (хэшу) вычислить начальный (массив данных, который обработали данной хеш-функцией). Второе главное условие — стойкость к коллизиями, т.е. низкая вероятность получения двух одинаковых хеш-сумм из двух разных массивов данных при обработке их этой функцией. Расчеты по таким алгоритмам более сложные, но тут уже главное не скорость, а надежность.

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

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

Какими свойствами должна обладать хеш-функция

Хочу систематизировать кое-что из уже сказанного и добавить новое.

  1. Как уже было сказано, функция эта должна уметь приводить любой объем данных (а все они цифровые, т.е. двоичные, как вы понимаете) к числу заданной длины (по сути это сжатие до битовой последовательности заданной длины хитрым способом).
  2. При этом малейшее изменение (хоть на один бит) входных данных должно приводить к полному изменению хеша.
  3. Она должна быть стойкой в обратной операции, т.е. вероятность восстановления исходных данных по хешу должна быть весьма низкой (хотя последнее сильно зависит от задействованных мощностей)
  4. В идеале она должна иметь как можно более низкую вероятность возникновения коллизий. Согласитесь, что не айс будет, если из разных массивов данных будут часто получаться одни и те же значения хэша.
  5. Хорошая хеш-функция не должна сильно нагружать железо при своем исполнении. От этого сильно зависит скорость работы системы на ней построенной. Как я уже говорил выше, всегда имеется компромисс между скорость работы и качеством получаемого результата.
  6. Алгоритм работы функции должен быть открытым, чтобы любой желающий мог бы оценить ее криптостойкость, т.е. вероятность восстановления начальных данных по выдаваемому хешу.

Хеш — это маркер целостности скачанных в сети файлов

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

CRC32: 7438E546 MD5: DE3BAC46D80E77ADCE8E379F682332EB SHA-1: 332B317FB97126B0F79F7AF5786EBC51E5CC82CF

Что это такое? И что вам с этим всем делать? Ну, как правило, на тех же сайтах можно найти пояснения по этому поводу, но я не буду вас утруждать и расскажу в двух словах. Это как раз и есть результаты работы различных хеш-функций (их названия приведены перед числами: CRC32, MD5 и SHA-1).

Зачем они вам нужны? Ну, если вам важно знать, что при скачивании все прошло нормально и ваша копия полностью соответствует оригиналу, то нужно будет поставить на свой компьютер программку, которая умеет вычислять хэш по этим алгоритмам (или хотя бы по некоторым их них).

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

Популярные хэш-алгоритмы сжатия
  1. CRC32 — используется именно для создания контрольных сумм (так называемое избыточное кодирование). Данная функция не является криптографической. Есть много вариаций этого алгоритма (число после CRC означает длину получаемого хеша в битах), в зависимости от нужной длины получаемого хеша. Функция очень простая и нересурсоемкая. В связи с этим используется для проверки целостности пакетов в различных протоколах передачи данных.
  2. MD5 — старая, но до сих пор очень популярная версия уже криптографического алгоритма, которая создает хеш длиной в 128 бит. Хотя стойкость этой версии на сегодняшний день и не очень высока, она все равно часто используется как еще один вариант контрольной суммы, например, при скачивании файлов из сети.
  3. SHA-1 — криптографическая функция формирующая хеш-суммы длиной в 160 байт. Сейчас идет активная миграция в сторону SHA-2, которая обладает более высокой устойчивостью, но SHA-1 по-прежнему активно используется хотя бы в качестве контрольных сумм. Но она так же по-прежнему используется и для хранения хешей паролей в базе данных сайта (об этом читайте выше).
  4. ГОСТ Р 34.11-2012 — текущий российский криптографический (стойкий к взлому) алгоритм введенный в работу в 2013 году (ранее использовался ГОСТ Р 34.11-94). Длина выходного хеша может быть 256 или 512 бит. Обладает высокой криптостойкостью и довольно хорошей скоростью работы. Используется для электронных цифровых подписей в системе государственного и другого документооборота.
HashTab — вычисление хеша для любых файлов на компьютере

Раз уж зашла речь о программе для проверки целостности файлов (расчета контрольных сумм по разным алгоритмам хеширования), то тут, наверное, самым популярным решением будет HashTab.

Она бесплатна для личного некоммерческого использования и покрывает с лихвой все, что вам может понадобиться от подобного рода софта. После ее скачивания и установки запускать ничего не надо. Просто кликаете правой кнопкой мыши по нужному файлу в Проводнике (или ТоталКомандере) и выбираете самый нижний пункт выпадающего меню «Свойства»:

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

Чтобы не сравнивать контрольные суммы визуально, можно числа по очереди вставить в рассположенное ниже поле (со знаком решетки) и нажать на кнопку «Сравнить файл».

Как видите, все очень просто и быстро. А главное эффективно.

Удачи вам! До скорых встреч на страницах блога KtoNaNovenkogo.ru

Твитнуть

Поделиться

Плюсануть

Поделиться

Отправить

Класснуть

Линкануть

Запинить

Подборки по теме:

Рубрика: Вопросы и ответы на любые темы

ktonanovenkogo.ru

Для чего необходима хэш функция

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

Алгоритм хеширования

Это математическая функция, которая конденсирует данные с фиксированным размером. Если в качестве примера взять предложение «Быстрая коричневая лиса перепрыгивает через ленивую собаку» и пропустить ее через специальный алгоритм хэширования, известный как CRC32, то на выходе получится «07606bb6». Этот результат называется хэш.

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

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

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

Уникальные особенности хэшей

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

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

Хэши в криптовалютах

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

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

Например, хэш для слова «привет» и хеш для предложения «Я иду в магазин» будут иметь одинаковую длину.

Обработка хэш-функций, необходимых для шифрования новых блоков, требует значительной вычислительной мощности, что является дорогостоящим процессом. Чтобы побудить отдельных лиц и компании, которых называют майнерами (от англ. miner — шахтер), инвестировать в требуемую технологию, сеть вознаграждает их новыми монетами и комиссией, которую пользователи платят при переводе средств.

Решение хэша по существу представляет собой решение сложной математической задачи. Этот процесс начинается с данных, размещаемых в заголовке блока. Каждый заголовок блока содержит номер версии, временную метку, хэш, используемый в предыдущем блоке, хеш корня Merkle, nonce и целевой хэш. Майнер фокусируется на nonce, строке чисел, добавляемой к хэшированному содержимому предыдущего блока, который затем и сам хэшируется. Если новый хэш меньше или равен целевому, тогда он принимается в качестве решения. Затем майнер получает вознаграждение, а новый блок добавляется к блок-цепочке.

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

bitflix.ru

Что такое Хэширование? Под капотом блокчейна / Хабрахабр

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

Так что же такое хэширование?

Простыми словами, хэширование означает ввод информации любой длины и размера в исходной строке и выдачу результата фиксированной длины заданной алгоритмом функции хэширования. В контексте криптовалют, таких как Биткоин, транзакции после хэширования на выходе выглядят как набор символов определённой алгоритмом длины (Биткоин использует SHA-256).

Input- вводимые данные, hash- хэш

Посмотрим, как работает процесс хэширования. Мы собираемся внести определенные данные. Для этого, мы будем использовать SHA-256 (безопасный алгоритм хэширования из семейства SHA-2, размером 256 бит).

Как видите, в случае SHA-256, независимо от того, насколько объёмные ваши вводимые данные (input), вывод всегда будет иметь фиксированную 256-битную длину. Это крайне необходимо, когда вы имеете дело с огромным количеством данных и транзакций. Таким образом, вместо того, чтобы помнить вводимые данные, которые могут быть огромными, вы можете просто запомнить хэш и отслеживать его. Прежде чем продолжать, необходимо познакомиться с различными свойствами функций хэширования и тем, как они реализуются в блокчейн.

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

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

Свойство 2: Быстрое вычисление Хэш-функция должна быть способна быстро возвращать хэш-вход. Если процесс не достаточно быстрый, система просто не будет эффективна.

Свойство 3: Сложность обратного вычисления Сложность обратного вычисления означает, что с учетом H (A) невозможно определить A, где A – вводимые данные и H(А) – хэш. Обратите внимание на использование слова “невозможно” вместо слова “неосуществимо”. Мы уже знаем, что определить исходные данные по их хэш-значению можно. Возьмем пример.

Предположим, вы играете в кости, а итоговое число — это хэш числа, которое появляется из кости. Как вы сможете определить, что такое исходный номер? Просто все, что вам нужно сделать, — это найти хэши всех чисел от 1 до 6 и сравнить. Поскольку хэш-функции детерминированы, хэш конкретного номера всегда будет одним и тем же, поэтому вы можете просто сравнить хэши и узнать исходный номер.

Но это работает только тогда, когда данный объем данных очень мал. Что происходит, когда у вас есть огромный объем данных? Предположим, вы имеете дело с 128-битным хэшем. Единственный метод, с помощью которого вы должны найти исходные данные, — это метод «грубой силы». Метод «грубой силы» означает, что вам нужно выбрать случайный ввод, хэшировать его, а затем сравнить результат с исследуемым хэшем и повторить, пока не найдете совпадение.

Итак, что произойдет, если вы используете этот метод?

  • Лучший сценарий: вы получаете свой ответ при первой же попытке. Вы действительно должны быть самым счастливым человеком в мире, чтобы это произошло. Вероятность такого события ничтожна.
  • Худший сценарий: вы получаете ответ после 2 ^ 128 — 1 раз. Это означает, что вы найдете свой ответ в конце всех вычислений данных (один шанс из 340282366920938463463374607431768211456)
  • Средний сценарий: вы найдете его где-то посередине, поэтому в основном после 2 ^ 128/2 = 2 ^ 127 попыток. Иными словами, это огромное количество.
Таким образом, можно пробить функцию обратного вычисления с помощью метода «грубой силы», но потребуется очень много времени и вычислительных ресурсов, поэтому это бесполезно.

Свойство 4: Небольшие изменения в вводимых данных изменяют хэш Даже если вы внесете небольшие изменения в исходные данные, изменения, которые будут отражены в хэше, будут огромными. Давайте проверим с помощью SHA-256:

Видите? Даже если вы только что изменили регистр первой буквы, обратите внимание, насколько это повлияло на выходной хэш. Это необходимая функция, так как свойство хэширования приводит к одному из основных качеств блокчейна – его неизменности (подробнее об этом позже).

Свойство 5: Коллизионная устойчивость Учитывая два разных типа исходных данных A и B, где H (A) и H (B) являются их соответствующими хэшами, для H (A) не может быть равен H (B). Это означает, что, по большей части, каждый вход будет иметь свой собственный уникальный хэш. Почему мы сказали «по большей части»? Давайте поговорим об интересной концепции под названием «Парадокс дня рождения».

Что такое парадокс дня рождения? Если вы случайно встречаете незнакомца на улице, шанс, что у вас совпадут даты дней рождений, очень мал. Фактически, если предположить, что все дни года имеют такую же вероятность дня рождения, шансы другого человека, разделяющего ваш день рождения, составляют 1/365 или 0,27%. Другими словами, он действительно низкий.

Однако, к примеру, если собрать 20-30 человек в одной комнате, шансы двух людей, разделяющих тот же день, резко вырастает. На самом деле, шанс для 2 человек 50-50, разделяющих тот же день рождения при таком раскладе.

Как это применяется в хэшировании? Предположим, у вас есть 128-битный хэш, который имеет 2 ^ 128 различных вероятностей. Используя парадокс дня рождения, у вас есть 50% шанс разбить коллизионную устойчивость sqrt (2 ^ 128) = 2 ^ 64.

Как вы заметили, намного легче разрушить коллизионную устойчивость, нежели найти обратное вычисление хэша. Для этого обычно требуется много времени. Итак, если вы используете такую функцию, как SHA-256, можно с уверенностью предположить, что если H (A) = H (B), то A = B.

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

Для каждого выхода «Y», если k выбран из распределения с высокой мин-энтропией, невозможно найти вводные данные x такие, что H (k | x) = Y.

Вероятно, это, выше вашего понимания! Но все в порядке, давайте теперь разберемся с этим определением.

В чем смысл «высокой мин-энтропии»? Это означает, что распределение, из которого выбрано значение, рассредоточено так, что мы выбираем случайное значение, имеющее незначительную вероятность. В принципе, если вам сказали выбрать число от 1 до 5, это низкое распределение мин-энтропии. Однако, если бы вы выбрали число от 1 до бесконечности, это — высокое распределение мин-энтропии.

Что значит «к|х»? «|» обозначает конкатенацию. Конкатенация означает объединение двух строк. Например. Если бы я объединила «голубое» и «небо», то результатом было бы «голубоенебо». Итак, давайте вернемся к определению.

Предположим, у вас есть выходное значение «Y». Если вы выбираете случайное значение «К», невозможно найти значение X, такое, что хэш конкатенации из K и X, выдаст в результате Y.

Еще раз обратите внимание на слово «невозможно», но не исключено, потому что люди занимаются этим постоянно. На самом деле весь процесс майнинга работает на этом (подробнее позже).

Примеры криптографических хэш-функций:

  • MD 5: Он производит 128-битный хэш. Коллизионная устойчивость была взломана после ~2^21 хэша.
  • SHA 1: создает 160-битный хэш. Коллизионная устойчивость была взломана после ~2^61 хэша.
  • SHA 256: создает 256-битный хэш. В настоящее время используется в Биткоине.
  • Keccak-256: Создает 256-битный хэш и в настоящее время используется Эфириуме.
Хэширование и структуры данных. Структура данных — это специализированный способ хранения данных. Если вы хотите понять, как работает система «блокчейн», то есть два основных свойства структуры данных, которые могут помочь вам в этом:

1. Указатели 2. Связанные списки

Указатели В программировании указатели — это переменные, в которых хранится адрес другой переменной, независимо от используемого языка программирования.

Например, запись int a = 10 означает, что существует некая переменная «a», хранящая в себе целочисленное значение равное 10. Так выглядит стандартная переменная.

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

Связанные списки Связанный список является одним из наиболее важных элементов в структурах данных. Структура связанного списка выглядит следующим образом:

*Head – заголовок; Data – данные; Pointer – указатель; Record – запись; Null – ноль

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

Важно отметить, что указатель внутри каждого блока содержит адрес предыдущего. Так формируется цепочка. Возникает вопрос, что это значит для первого блока в списке и где находится его указатель?

Первый блок называется «блоком генезиса», а его указатель находится в самой системе. Выглядит это следующим образом:

*H ( ) – Хэшированные указатели изображаются таким образом

Если вам интересно, что означает «хэш-указатель», то мы с радостью поясним. Как вы уже поняли, именно на этом основана структура блокчейна. Цепочка блоков представляет собой связанный список. Рассмотрим, как устроена структура блокчейна:

* Hash of previous block header – хэш предыдущего заголовка блока; Merkle Root – Корень Меркла; Transactions – транзакции; Simplified Bitcoin Blockchain – Упрощенный блокчейн Биткоина.

Блокчейн представляет собой связанный список, содержащий данные, а так же указатель хэширования, указывающий на предыдущий блок, создавая таким образов связную цепочку. Что такое хэш-указатель? Он похож на обычный указатель, но вместо того, чтобы просто содержать адрес предыдущего блока, он также содержит хэш данных, находящихся внутри предыдущего блока. Именно эта небольшая настройка делает блокчейн настолько надежным. Представим на секунду, что хакер атакует блок 3 и пытается изменить данные. Из-за свойств хэш-функций даже небольшое изменение в данных сильно изменит хэш. Это означает, что любые незначительные изменения, произведенные в блоке 3, изменят хэш, хранящийся в блоке 2, что, в свою очередь, изменит данные и хэш блока 2, а это приведет к изменениям в блоке 1 и так далее. Цепочка будет полностью изменена, а это невозможно. Но как же выглядит заголовок блока?

* Prev_Hash – предыдущий хэш; Tx – транзакция; Tx_Root – корень транзакции; Timestamp – временная отметка; Nonce – уникальный символ.

Заголовок блока состоит из следующих компонентов:

· Версия: номер версии блока · Время: текущая временная метка · Текущая сложная цель (См. ниже) · Хэш предыдущего блока · Уникальный символ (См. ниже) · Хэш корня Меркла

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

Что такое Дерево Меркла?
Источник: Wikipedia

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

Листовой узел: Листовые узлы являются узлами в самом нижнем ярусе дерева. Поэтому, следуя приведенной выше схеме, листовыми будут считаться узлы L1, L2, L3 и L4.

Дочерние узлы: Для узла все узлы, находящиеся ниже его уровня и которые входят в него, являются его дочерними узлами. На диаграмме узлы с надписью «Hash 0-0» и «Hash 0-1» являются дочерними узлами узла с надписью «Hash 0».

Корневой узел: единственный узел, находящийся на самом высоком уровне, с надписью «Top Hash» является корневым.

Так какое же отношение Дерево Меркла имеет к блокчейну? Каждый блок содержит большое количество транзакций. Будет очень неэффективно хранить все данные внутри каждого блока в виде серии. Это сделает поиск какой-либо конкретной операции крайне громоздким и займет много времени. Но время, необходимое для выяснения, на принадлежность конкретной транзакции к этому блоку или нет, значительно сокращается, если Вы используете дерево Меркла.

Давайте посмотрим на пример на следующем Хэш-дереве:

Изображение предоставлено проектом: Coursera

Теперь предположим, я хочу узнать, принадлежат ли эти данные блоку или нет:

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

Это значительно сокращает время.

Хэширование в майнинге: крипто-головоломки. Когда мы говорим «майнинг», в основном, это означает поиск нового блока, который будет добавлен в блокчейн. Майнеры всего мира постоянно работают над тем, чтобы убедиться, что цепочка продолжает расти. Раньше людям было проще работать, используя для майнинга лишь свои ноутбуки, но со временем они начали формировать «пулы», объединяя при этом мощность компьютеров и майнеров, что может стать проблемой. Существуют ограничения для каждой криптовалюты, например, для биткоина они составляют 21 миллион. Между созданием каждого блока должен быть определенный временной интервал заданный протоколом. Для биткоина время между созданием блока занимает всего 10 минут. Если бы блокам было разрешено создаваться быстрее, это привело бы к:

  • Большому количеству коллизий: будет создано больше хэш-функций, которые неизбежно вызовут больше коллизий.
  • Большому количеству брошенных блоков: Если много майнеров пойдут впереди протокола, они будут одновременно хаотично создавать новые блоки без сохранения целостности основной цепочки, что приведет к «осиротевшим» блокам.
Таким образом, чтобы ограничить создание блоков, устанавливается определенный уровень сложности. Майнинг чем-то напоминает игру: решаешь задачу – получаешь награду. Усиление сложности делает решение задачи намного сложнее и, следовательно, на нее затрачивается большее количество времени.WRT, которая начинается с множества нулей. При увеличении уровня сложности, увеличивается количество нулей. Уровень сложности изменяется после каждого 2016-го блока.
Процесс Майнинга
Примечание: в этом разделе мы будем говорить о выработке биткоинов. Когда протокол Биткоина хочет добавить новый блок в цепочку, майнинг – это процедура, которой он следует. Всякий раз, когда появляется новый блок, все их содержимое сначала хэшируется. Если подобранный хэш больше или равен, установленному протоколом уровню сложности, он добавляется в блокчейн, а все в сообществе признают новый блок.

Однако, это не так просто. Вам должно очень повезти, чтобы получить новый блок таким образом. Так как, именно здесь присваивается уникальный символ. Уникальный символ (nonce) — это одноразовый код, который объединен с хэшем блока. Затем эта строка вновь меняется и сравнивается с уровнем сложности. Если она соответствует уровню сложности, то случайный код изменяется. Это повторяется миллион раз до тех пор, пока требования не будут наконец выполнены. Когда же это происходит, то блок добавляется в цепочку блоков.

Подводя итоги:

• Выполняется хэш содержимого нового блока. • К хэшу добавляется nonce (специальный символ). • Новая строка снова хэшируется. • Конечный хэш сравнивается с уровнем сложности, чтобы проверить меньше он его или нет • Если нет, то nonce изменяется, и процесс повторяется снова. • Если да, то блок добавляется в цепочку, а общедоступная книга (блокчейн) обновляется и сообщает нодам о присоединении нового блока. • Майнеры, ответственные за данный процесс, награждаются биткоинами.

Помните номер свойства 6 хэш-функций? Удобство использования задачи? Для каждого выхода «Y», если k выбран из распределения с высокой мин-энтропией, невозможно найти вход x таким образом, H (k | x) = Y.

Так что, когда дело доходит до майнинга биткоинов:

• К = Уникальный символ • x = хэш блока • Y = цель проблемы

Весь процесс абсолютно случайный, основанный на генерации случайных чисел, следующий протоколу Proof Of Work и означающий:

  • Решение задач должно быть сложным.
  • Однако проверка ответа должна быть простой для всех. Это делается для того, чтобы убедиться, что для решения проблемы не использовались недозволенные методы.
Что такое скорость хэширования? Скорость хэширования в основном означает, насколько быстро эти операции хэширования происходят во время майнинга. Высокий уровень хэширования означает, что в процессе майнинга участвуют всё большее количество людей и майнеров, и в результате система функционирует нормально. Если скорость хэширования слишком высокая, уровень сложности пропорционально увеличивается. Если скорость хэша слишком медленная, то соответственно, уровень сложности уменьшается.
Вывод
Хэширование действительно является основополагающим в создании технологии блокчейн. Если кто-то хочет понять, что такое блокчейн, он должен начать с того, чтобы понять, что означает хэширование.

habrahabr.ru


Смотрите также