Алгоритм 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 ключевым требованиям:
Как работает майнинг на кодировке 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 лет.
Таргет (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
Отсортированы по размеру капитализации.
Алгоритм хеширования SHA-2 (SHA-256) — разбираем на примере
SHA-2 (Secure Hash Algorithm 2) — одно из самых популярных семейств алгоритмов хеширования. В статье «How SHA-2 Works Step-By-Step (SHA-256)» разобран каждый шаг алгоритма SHA-256, принадлежащего к SHA-2, и показано, как он работает на реальном примере. Перевод статьи опубликовал сайт tproger.ru.
Что такое хеш-функция?
Если вы хотите узнать больше о хеш-функциях, можете почитать Википедию. Но чтобы понять, о чём пойдёт речь, давайте вспомним три основные цели хеш-функции:
SHA-2 и SHA-256
SHA-2 — это семейство алгоритмов с общей идеей хеширования данных. SHA-256 устанавливает дополнительные константы, которые определяют поведение алгоритма SHA-2. Одной из таких констант является размер вывода. «256» и «512» относятся к соответствующим размерам выходных данных в битах.
Мы рассмотрим пример работы SHA-256.
SHA-256 «hello world». Шаг 1. Предварительная обработка
1. Преобразуем «hello world» в двоичный вид:
2. Добавим одну единицу:
3. Заполняем нулями до тех пор, пока данные не станут кратны 512 без последних 64 бит (в нашем случае 448 бит):
4. Добавим 64 бита в конец, где 64 бита — целое число с порядком байтов big-endian, обозначающее длину входных данных в двоичном виде. В нашем случае 88, в двоичном виде — «1011000».
Теперь у нас есть ввод, который всегда будет без остатка делиться на 512.
Шаг 2. Инициализация значений хеша (h)
Создадим 8 значений хеша. Это константы, представляющие первые 32 бита дробных частей квадратных корней первых 8 простых чисел: 2, 3, 5, 7, 11, 13, 17, 19.
Шаг 3. Инициализация округлённых констант (k)
Создадим ещё немного констант, на этот раз их 64. Каждое значение — это первые 32 бита дробных частей кубических корней первых 64 простых чисел (2–311).
Шаг 4. Основной цикл
Шаг 5. Создаём очередь сообщений (w)
1. Копируем входные данные из шага 1 в новый массив, где каждая запись является 32-битным словом:
2. Добавляем ещё 48 слов, инициализированных нулями, чтобы получить массив w[0…63] :
3. Изменяем нулевые индексы в конце массива, используя следующий алгоритм:
Давайте посмотрим, как это работает для w[16] :
Это оставляет нам 64 слова в нашей очереди сообщений ( w ):
Шаг 6. Цикл сжатия
Давайте пройдём первую итерацию. Сложение рассчитывается по модулю 2^32:
Шаг 7. Изменяем окончательные значения
Шаг 8. Получаем финальный хеш
И последний важный шаг — собираем всё вместе.
Готово! Мы выполнили каждый шаг SHA-2 (SHA-256) (без некоторых итераций).
Алгоритм SHA-2 в виде псевдокода
Если вы хотите посмотреть на все шаги, которые мы только что сделали, в виде псевдокода, то вот пример:
Хэш алгоритм SHA256
Если вы когда-либо интересовались майнингом криптовалют, то скорее всего встречали буквенно-цифровую аббревиатуру SHA256. Разберемся, что она обозначает, как работает, какими особенностями обладает?
SHA – это сокращение от Secure Hashing Algorithm (Безопасный алгоритм хеширования).
Алгоритм был создан National Security Agency – Агентством национальной безопасности США. Его задача заключается в том, чтобы преобразовывать случайный набор данных в определенные значения с фиксированной длиной.
Алгоритм SHA256 является одной из хеш-функций алгоритма SHA-2, который используется для создания протоколов передачи данных в Глобальной сети (TCP/IP).
Разнообразие хэшей SHA-2 часто приводит к путанице, поскольку авторы текстов на сайтах и блогах используют их по-разному. Если вы видите «SHA-2», «SHA-256» или «SHA-256 бит», эти термины относятся к одному и тому же.
Что такое алгоритм шифрования SHA-256
Алгоритм SHA-2, подвидом которого является SHA-256, был разработан в 2002 году Агентством Национальной Безопасности США. Число 256 обозначает количество фрагментов, из которых состоит данный криптографический код.
Особенности протокола SHA-256
В протоколе SHA-256 в каждой из 256 долей содержится 512 бит (64 байта). Доли перемешивают по определенной криптографической схеме, которая заложена в алгоритме, и в результате образуется специальный хеш-код объемом 256 бит. Смешивание информации повторяется 64 раза.
Технические параметры SHA-256:
Список всех монет алгоритма SHA-256
Помимо этого, есть сотни альтернативных криптовалют, которые можно добывать с помощью АСИКов. Но большая часть этих альткоинов не торгуется на биржах или торгуется на малом их количестве. Поэтому мы перечислим только известные монеты и монеты с приличным объемом торгов. Они ранжированы по популярности и хешрейту сети.
Чтобы посчитать прибыльность монет, можно воспользоваться калькуляторами майнинга.
«Привет, мир»: разбираем каждый шаг хэш-алгоритма SHA-256
Что такое хэш-функция?
Три основных цели хэш-функций:
SHA-256 «Привет, мир»
Шаг 1 — Предварительная работа
Преобразуем «Привет, мир» в двоичный код:
Дополните код нулями, пока данные не станут равны 512 бит, минус 64 бита (в результате 448 бит):
Добавьте 64 бита в конец в виде целого числа с порядком байтов от старшего к младшему (big-endian), представляющего длину входного сообщения в двоичном формате. В нашем случае это 88, или «1011000».
Теперь у нас есть ввод, который будет делиться на 512 без остатка.
Шаг 2 — Инициализируйте значения хэша (h)
Теперь мы создаем 8 хэш-значений. Это жестко запрограммированные константы, которые представляют собой первые 32 бита дробных частей квадратных корней из первых восьми простых чисел: 2, 3, 5, 7, 11, 13, 17, 19.
Шаг 3 — Инициализация округленных констант (k)
Как и в предыдущем шаге, мы создадим еще несколько констант. На этот раз их будет 64. Каждое значение (0—63) представляет собой первые 32 бита дробных частей кубических корней первых 64 простых чисел (2—311).
Шаг 4 — Цикл фрагментов
Следующие шаги будут выполняться для каждого 512-битного «фрагмента» из наших входных данных. Поскольку фаза «Привет, мир» короткая, у нас есть только один фрагмент. В каждой итерации цикла мы будем изменять хэш-значения h0-h7, что приведет нас к конечному результату.
Шаг 5 — Созданием расписание сообщений (w)
Скопируйте входные данные из шага 1 в новый массив, где каждая запись представляет собой 32-битное слово:
Добавьте еще 48 слов, инициализированных нулем, чтобы у нас получился массив w [0… 63]
Измените обнуленные индексы в конце массива, используя следующий алгоритм:
Для i из w[16…63]:
В расписании сообщений осталось 64 слова (w):
Шаг 6 — Сжатие
Инициализируйте переменные a, b, c, d, e, f, g, h и установите их равными текущим значениям хэш-функции соответственно h0, h1, h2, h3, h4, h5, h6, h7.
Запустите цикл сжатия, который изменит значения a… h. Выглядит он следующим образом:
Все вычисления выполняются еще 63 раза, меняя переменные a-h. К счастью, мы не делаем это вручную. В итоге мы получили:
Шаг 7 — Измените окончательные значения
После цикла сжатия, во время цикла фрагментов, мы изменяем хеш-значения, добавляя к ним соответствующие переменные a-h. Как и ранее, все сложение производится по модулю 2 ^ 32:
Шаг 8 — Финальный хэш
Наконец, соединяем все вместе.
Мы прошли каждый шаг (за исключением нескольких итераций) SHA-256 в подробностях. Если хотите увидеть весь путь, что мы совершили, в форме псевдокода, заходите на WikiPedia.
Пошагово объясняем, как работает алгоритм хеширования SHA-2 (SHA-256)
Автор Мария Багулина
SHA-2 (Secure Hash Algorithm 2) — одно из самых популярных семейств алгоритмов хеширования. В этой статье мы разберём каждый шаг алгоритма SHA-256, принадлежащего к SHA-2, и покажем, как он работает на реальном примере.
Что такое хеш-функция?
Если вы хотите узнать больше о хеш-функциях, можете почитать Википедию. Но чтобы понять, о чём пойдёт речь, давайте вспомним три основные цели хеш-функции:
SHA-2 и SHA-256
SHA-2 — это семейство алгоритмов с общей идеей хеширования данных. SHA-256 устанавливает дополнительные константы, которые определяют поведение алгоритма SHA-2. Одной из таких констант является размер вывода. «256» и «512» относятся к соответствующим размерам выходных данных в битах.
Мы рассмотрим пример работы SHA-256.
SHA-256 «hello world». Шаг 1. Предварительная обработка
1. Преобразуем «hello world» в двоичный вид:
2. Добавим одну единицу:
3. Заполняем нулями до тех пор, пока данные не станут кратны 512 без последних 64 бит (в нашем случае 448 бит):
4. Добавим 64 бита в конец, где 64 бита — целое число с порядком байтов big-endian, обозначающее длину входных данных в двоичном виде. В нашем случае 88, в двоичном виде — «1011000».
Теперь у нас есть ввод, который всегда будет без остатка делиться на 512.
Шаг 2. Инициализация значений хеша (h)
Создадим 8 значений хеша. Это константы, представляющие первые 32 бита дробных частей квадратных корней первых 8 простых чисел: 2, 3, 5, 7, 11, 13, 17, 19.
Шаг 3. Инициализация округлённых констант (k)
Создадим ещё немного констант, на этот раз их 64. Каждое значение — это первые 32 бита дробных частей кубических корней первых 64 простых чисел (2–311).
Шаг 4. Основной цикл
Шаг 5. Создаём очередь сообщений (w)
1. Копируем входные данные из шага 1 в новый массив, где каждая запись является 32-битным словом:
2. Добавляем ещё 48 слов, инициализированных нулями, чтобы получить массив w[0…63] :
3. Изменяем нулевые индексы в конце массива, используя следующий алгоритм:
Давайте посмотрим, как это работает для w[16] :
Это оставляет нам 64 слова в нашей очереди сообщений ( w ):
Шаг 6. Цикл сжатия
Давайте пройдём первую итерацию. Сложение рассчитывается по модулю 2^32:
Шаг 7. Изменяем окончательные значения
Шаг 8. Получаем финальный хеш
И последний важный шаг — собираем всё вместе.
Готово! Мы выполнили каждый шаг SHA-2 (SHA-256) (без некоторых итераций).
Алгоритм SHA-2 в виде псевдокода
Если вы хотите посмотреть на все шаги, которые мы только что сделали, в виде псевдокода, то вот пример: