Закрыть

Алгоритм хеширования SHA-256 — что это такое простыми словами и как работает, функции и примеры?

В закладки
Аудио
Алгоритм хеширования SHA-256 — что это такое простыми словами и как работает, функции и примеры?
Содержание

SHA-256 – алгоритм шифрования хэш-функции из семейства SHA-2 (Secure Hash Algorithm, с англ. – Алгоритм безопасного хэширования). Приставка 256 обозначает размер вывода – 256 бит. Существуют и другие форматы: 224, 384, 512.

Разработана для Агентства Национальной Безопасности США (АНБ) в 2001 году. Запатентована под номером 6829355 в США и распространяется свободно по бесплатной лицензии (RF). 

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

Предшественник (SHA-1) был успешно атакован. В 2011 году Марк Стивенс доказал возможность коллизионной атаки, а в 2017 Google опубликовал отчёт об успешном её проведении. С тех пор браузеры отказались от SSL-сертификатов на SHA-1, и Windows прекратил поддержку закодированных алгоритмом подписей в 2020 году.

В SHA-256 атаки с нахождением прообраза могут вычислить 52, а при коллизионной атаке пока что удаётся раскрыть 46 раундов из 64.

Что такое алгоритм хэширования и шифрования sha256 (sha 256 algorithm)?

Задача хэширования – превратить информацию в строку. Функция может принять данные неограниченного размера, даже 10 мегабайт текста из 1000 книг. Процесс хеширования происходит раундами (кругами) – так можно уместить в строку любой объем. Но расшифровать обратно уже не получится. Если кому-то удастся это сделать, то алгоритм автоматически потеряет смысл.

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

Биткоин не использует шифрование. Приставка «крипто» (crypto – encrypt – шифровать) в его обозначении «криптовалюта», была присвоена ему только потому, что его алгоритм цифровой подписи использует методы, основанные на эллиптических кривых, что применяются в шифровании.

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

В блокчейне у всех транзакций есть неизрасходованные выходы (UTXO), а проще говоря – балансы. Они связаны с биткоин-адресами и мы можем просматривать их в сети публично. Имея на балансе 1 BTC, у вас есть закрытый ключ от открытого ключа с этим UTXO, а значит вы сможете подписать транзакцию и будет создан новый UTXO с передачей права на открытый ключ получателя.

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

Алгоритм удовлетворяет 4 ключевым требованиям:

  • Детерминированный (для любого ввода вывод будет одинаковым)
  • Уникальный (невозможно, чтобы 2 ввода привели к одинаковому выводу)
  • Быстрый (в протоколе Bitcoin скорость примерно 140 Мбит/сек)
  • Необратимый (исходное значение не может быть получено из полученного хэша)

Как работает майнинг на кодировке SHA-256?

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

Например, слово «Hello»: 185f8db32271fe25f561a...a518007d1764826381969.

Выходная строка неизменна, это отличает хэширование от шифрования. Если другой человек с другого устройства введёт «Hello», он получит ту же строку.

Bitcoin использует двойное хеширование. Полученный хэш, он пропускает повторно через SHA-256. Это нужно во избежание атаки «дней рождения», хотя вероятность её невелика.

Например, вводим полученный хэш от «Hello»: 185f8db32271fe25f561a...da518007d1764826381969 = 52c87cd40ccfbd78...d4c3684ed60f6513e8d16077e5b8e.

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

Древо Меркла

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

Корень Меркла добавляется в функцию наоборот. Например: b7a0c5014ae6ecb...707a42516e94899073 вместо 37099849e61524...019efbce6ea4105c0a7b.

Версия клиента

Актуальная версия, одобренная сетью. Например: 02000000. 

Часть строк принимается в формате 4-byte «little-endian», и это одна из них.

Хэш предыдущего блока

Скрепляет блокчейн, гарантируя, что следующий блок будет ссылаться на прежде подтверждённый.

Вводится наоборот. Например: 05c2ddc616d1b90...0000000000000000 вместо оригинального 000000000000000...346f13a009b1d616cdd2c50. 

Зеркальное отражение строки избавляет алгоритм от потери детализации. Чем больше значений, тем меньше вероятность того, что сложность окажется слишком трудной или слишком лёгкой.

Метка времени (Timestamp)

В формате системы Unix, количество секунд от начала эпохи (1 января 1970, 00:00).

Принимается сетью, только если число больше медианы временных штампов последних 11 блоков, и меньше медианы штампов, что возвращают подключённые ноды (скорректированное сетью время) + 2 часа. 

Биткоин использует беззнаковое целое число для метки времени, поэтому «проблема 2038 года» откладывается еще на 68 лет.

Пример: c6f5d64b.

Таргет (Target)

Сложность следующей цели. Пересчитывается каждые 2016 блоков (примерно 2 недели). Если хэшрейт в сети будет расти, увеличится и количество нулей в таргете искомого хеша, что потребует перебора большего количества хэшей при майнинге криптовалюты. И наоборот, уменьшение желающих участвовать в добыче BTC и валидации блоков, уменьшает сложность и «снижает» таргет. За 1 цикл не может быть изменён более чем в х4 раза.

Например таргет генезис блока был 00000000ffff00000000000000...00000, в 2013 уже 0000000000000529b10000000...00000, в 2018 – 00000000000000000049500d0...00000, а в 2021 – 0000000000000000000cdf6f00...00000. Судя по количеству нулей, можно легко наблюдать рост сложности.

Помещается в функцию тоже в компактном 4-байтном формате вида: f2c9749a.

Нонс (Nonce)

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

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

1, 2, 3… 40348, 40349… 168437213, 168437214, 168437215…

Когда нонс подойдёт, и мы получим хэш-значение меньше таргета, установленного сетью, новый блок будет найден. Майнер может добавить в него избранные транзакции (не превышая допустимый размер блока: 1,5 МБ) забетонировать их в нём и получить за это комиссию.

          

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

Особенности SHA-256

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

Далее её можно использовать в своих целях, наделяя особенностями. Например Bitcoin сделал двойное SHA-256.

Оборудование для майнинга

В сравнении с алгоритмом RandomX Monero (только CPU), SHA-256 майнинг не может быть устойчив к ASIC или GPU.

Для добычи BTC может использоваться любой процессор. В гонке за скоростью перебора хэшей выигрывают ASIC майнеры (интегральные схемы особого назначения), спроектированные специально под задачу добычи Bitcoin. Самые популярные производители: Bitmain, MicroBT.

SHA-256 – что можно майнить

Все форки Bitcoin пошли по простому пути и используют тот же алгоритм хэширования. Сюда входят известные «альткоины»: Bitcoin Cash, Namecoin, Peercoin, Emercoin и сотни других, менее популярных.

Ethereum разработал собственную функцию Ethash, чтобы допустить к добыче только видеокарты (до момента полного переключения на Ethereum 2.0). Litecoin – Scrypt (в попытках быть резистентным к асикам). Современные криптовалюты предпочитают алгоритм Proof-of-Stake, в которых добыча криптовалют называется стейкингом. Традиционные Proof-of-Work вычисления становятся инвесторам всё менее интересными.

Список криптовалют на SHA-256

Отсортированы по размеру капитализации.

  • Bitcoin
  • Bitcoin Cash
  • Bitcoin SV
  • Bitcoin Diamond
  • BitcoinV
  • Namecoin
  • ILCoin
  • EmerCoin
  • Unobtanium
  • Litecoin Cash
  • Amoveo
  • Freicoin
  • Bean Cash
  • I0Coin
  • ADAMANT Messenger
  • Internet Of People
  • IXCoin
  • Sakura Bloom
  • Ultimate Secure Cash
  • Qbao
  • TerraCoin
  • Swing
  • PRISM
  • Sprouts
  • Neutron
  • Incakoin
  • ZetaCoin
  • Nubits
  • BitTokens
  • TRBO
  • И ещё сотни с капитализацией менее 100 тыс. $
Предыдущая статья Понравилась статья? 0 Следующая статья
Комментарии: 0
Оставить комментарий
Сервис подписки в данный момент находится в завершающей стадии разработки. Регулярная отправка новостных материалов на Ваш email начнется в ближайшее время. Повторная подписка не потребуется.
Добавить еще