sha 256 что это такое простыми словами
Пошагово объясняем, как работает алгоритм хеширования SHA-2 (SHA-256)
Авторизуйтесь
Пошагово объясняем, как работает алгоритм хеширования 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 в виде псевдокода
Если вы хотите посмотреть на все шаги, которые мы только что сделали, в виде псевдокода, то вот пример:
«Привет, мир»: разбираем каждый шаг хэш-алгоритма 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.
Одним из ключевых слов, которые новички слышат, когда узнают о блокчейне, являются понятия хэша и алгоритма хэширования, которые кажутся распространёнными для безопасности. Запуск децентрализованной сети и консенсуса, такой как биткойн или сеть эфириум с десятками тысяч узлов, соединенных через p2p, требует, как “надежности”, так и эффективности проверки. То есть, эти системы нуждаются в способах кодирования информации в компактном формате, позволяющем обеспечить безопасную и быструю проверку ее участниками
Основным примитивом, обрабатываемым как Биткойном, так и Эфириумом, является понятие блока, который представляет собой структуру данных, включающую транзакции, временную метку и другие важные метаданные. Критическая часть их безопасности включает в себя возможность сжимать большие куски информации о глобальном состоянии сети в короткий стандарт сообщений, который может быть эффективно проверен, если это необходимо, известный как хэш.
Напомним, что «хорошие» алгоритмы хэширования имеют следующие свойства:
Одним из первых стандартов алгоритма хэширования был MD5 hash, который широко использовался для проверки целостности файлов (контрольных сумм) и хранения хэшированных паролей в базах данных веб-приложений. Его функциональность довольно проста, так как она выводит фиксированную 128-битную строку для каждого входа и использует тривиальные однонаправленные операции в нескольких раундах для вычисления детерминированного результата. Его короткая выходная длина и простота операций сделали MD5 очень легким для взлома и восприимчивым к атаке «дня рождения».
Вы когда-нибудь слышали о том, что если вы поместите 23 человека в комнату, есть 50% шанс, что у двух из них будет один и тот же день рождения? Доведение числа до 70 человек в комнате дает вам 99,9% шанс. Если голуби рассажены в коробки, причем число голубей больше числа коробок, то хотя бы в одной из клеток находится более одного голубя. То есть фиксированные ограничения на выход означают, что существует фиксированная степень перестановок, на которых можно найти коллизию.
На самом деле MD5 настолько слаб к сопротивлению к коллизиям, что простой бытовой Процессор Pentium 2,4 ГГц может вычислить искусственные хэш-коллизии в течение нескольких секунд. Кроме того, его широкое использование в более ранние дни текущей сети создало тонны утечек MD5 предварительных прообразов в интернете, которые можно найти с помощью простого поиска Google их хэша.
NSA (Агентство национальной безопасности) уже давно является пионером стандартов алгоритмов хэширования, с их первоначальным предложением алгоритма Secure Hashing Algorithm или SHA1, создающий 160-битные выходы фиксированной длины. К сожалению, SHA1 просто улучшил MD5, увеличив длину вывода, количество однонаправленных операций и сложность этих односторонних операций, но не дает каких-либо фундаментальных улучшений против более мощных машин, пытающихся использовать различные атаки. Так как мы можем сделать что-то лучше?
В 2006 году Национальный институт стандартов и технологий (NIST) запустил конкурс, чтобы найти альтернативу SHA2, которая будет принципиально отличаться в своей архитектуре, чтобы стать стандартом. Таким образом, SHA3 появился как часть большой схемы алгоритмов хэширования, известной как KECCAK (произносится Кетч-Ак). Несмотря на название, SHA3 сильно отличается своим внутренним механизмом, известным как «конструкция губки», которая использует случайные перестановки для «Впитывания» и «Выжимания» данных, работая в качестве источника случайности для будущих входов, которые входят в алгоритм хэширования.
SHA3 не был единственным прорывом, который вышел из конкурса хеширования NIST в 2006 году. Несмотря на то, что SHA3 выиграл, алгоритм, известный как BLAKE, занял второе место. Для реализации шардинга Ethereum 2.0 использует более эффективное. Алгоритм хэширования BLAKE2b, который является высокоразвитой версией BLAKE от конкурентов, интенсивно изучается за его фантастическую эффективность по сравнению с KECCAK256 при сохранении высокой степени безопасности. Вычисление BLAKE2b фактически в 3 раза быстрее, чем KECCAK на современном процессоре.
Русские Блоги
Подробное объяснение принципа алгоритма SHA256
1. Введение в SHA256
В соответствии с SHA-2 его можно разделить на шесть различных стандартов алгоритмов.
В том числе: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256.
За исключением некоторых незначительных различий в длине сводки и количестве циклов, базовая структура алгоритма последовательна.
Возвращаясь к SHA256, прямо скажем, это хеш-функция.
Хеш-функции, также известные как алгоритмы хеширования, представляют собой метод создания небольших цифровых «отпечатков пальцев» из любых данных. Хеш-функция сжимает сообщение или данные в дайджест, уменьшая объем данных и фиксируя формат данных. Эта функция перемешивает данные и воссоздает отпечаток пальца, называемый хэш-значением (или хэш-значением). Значение хеша обычно представлено короткой цепочкой случайных букв и цифр.
Для сообщений любой длины SHA256 генерирует 256-битное хеш-значение, называемое дайджестом сообщения.
Это резюме эквивалентно массиву длиной 32 байта, обычно представленному шестнадцатеричной строкой длиной 64
Давайте посмотрим на пример:
Станьте программистом блокчейна на 100 дней, и дядя Красной Армии ведет нас, сражаясь!
В этом предложении значение хеш-функции, полученное после хеш-функции SHA256:
Нашел один здесьSHA256 онлайн-инструмент проверки, Может использоваться для проверки результата хеширования SHA256, а также для проверки правильности кода SHA256. Это очень удобно для использования, вы можете почувствовать это.
2. Подробное объяснение принципа SHA256
Чтобы лучше понять принцип SHA256, вот модули, которые можно извлечь отдельно от алгоритма, в том числе Постоянная инициализация 、 Предварительная обработка информации 、 Используемые логические операции Введем отдельно, после того, как избавимся от этих барьеров в понимании, давайте рассмотрим основную часть алгоритма SHA256, то есть как вычисляется дайджест сообщения.
2.1 Постоянная инициализация
8 начальных хеш-значений и 64 хеш-константы используются в алгоритме SHA256
Среди них алгоритм SHA2568 начальных хеш-значенийследующее:
Эти начальные значения получают, взяв первые 32 бита дробной части квадратного корня из первых 8 простых чисел (2, 3, 5, 7, 11, 11, 13, 17 и 19) в натуральные числа
Например, 2 » role=»presentation» style=»position: relative;»> 2 Дробная часть составляет около 0,414213562373095048, и
В алгоритме SHA256 используется64 константыследующее:
2.2 Предварительная обработка информации (предварительная обработка)
Предварительная обработка в алгоритме SHA256 заключается в добавлении необходимой информации после сообщения, которое вы хотите хэшировать, чтобы все сообщение соответствовало заданной структуре.
Предварительная обработка информации делится на два этапа: Дополнительные биты заполнения с Дополнительная длина
STEP1: дополнительные биты заполнения
Заполните конец сообщения, чтобы оставшаяся часть длины сообщения после модуля 512 составляла 448
Заполнение выполняется таким образом, что первый бит заполняется 1, а затем оба заполняются 0, пока длина не соответствует модулю 512, а остаток равен 448.
Следует отметить, что информация должна быть дополнена, то есть, даже если длина удовлетворяла остатку после того, как по модулю 512 было 448, биты дополнения также должны выполняться, чтобы заполнить 512 бит.
Следовательно, заполнение должно заполнять как минимум один бит и до 512 бит.
пример: Используйте сообщение «abc» в качестве примера, чтобы показать процесс заполнения.
соответствует а, б, вКод ASCII97, 98, 99 соответственно
Итак, двоичный код исходной информации: 01100001 01100010 01100011
Первый шаг для заполнения позиции, сначала заполните «1»: 0110000101100010 01100011 1
На втором этапе заполнения заполняется 423 «0»: 01100001 01100010 01100011 10000000 00000000… 00000000
Данные после завершения битового дополнения выглядят следующим образом (в шестнадцатеричном формате для ознакомления):
Поскольку после первого этапа предварительной обработки, на втором этапе будут добавлены 64-разрядные данные, указывающие длину исходного сообщения. И 448 + 64 = 512, что просто является полной структурой.
STEP2: дополнительное значение длины
Дополнительное значение длины заключается в добавлении информации о длине исходных данных (сообщение перед первым этапом заполнения) к сообщению после выполнения операции заполнения.
Оригинальный текст, данный в Википедии:append length of message (before pre-processing), in bits, as 64-bit big-endian integer
SHA256 использует 64-битные данные для представления длины исходного сообщения.
Следовательно, длина сообщения, рассчитанная SHA256, должна быть меньше 2 6 4 » role=»presentation» style=»position: relative;»> 2 6 4 Конечно, в большинстве случаев это достаточно велико.
наBig endianЗначение дано в конце статьи
Теперь вернемся к примеру, сообщение «abc», 3 символа, занимает 24 бита.
Поэтому после операции дополнения длины все сообщение становится следующим (шестнадцатеричный формат)
2.3 Логические операции
Все операции, выполняемые в хэш-функции SHA256, являются логическими битовыми операциями.
Включая следующие логические функции:
логическая операция | смысл |
---|---|
∧ » role=»presentation» style=»position: relative;»> ∧ | Побитовое И |
¬ » role=»presentation» style=»position: relative;»> ¬ | Побитовое «дополнение» |
⊕ » role=»presentation» style=»position: relative;»> ⊕ | Побитовый XOR |
S n » role=»presentation» style=»position: relative;»> S n | Сдвиг вправо n бит |
R n » role=»presentation» style=»position: relative;»> R n | Повернуть вправо на n бит |
2.4 Рассчитать дайджест сообщения
Теперь давайте познакомимся с основной частью алгоритма SHA256, то есть с тем, как рассчитывается дайджест сообщения.
Первое: разбить сообщение на 512-битные блоки
(break message into 512-bit chunks)
Начальное значение 256-битного дайджеста, H0, вычисляется через первый блок данных, чтобы получить H1, который является первой итерацией.
Используйте отображение для каждой итерации M a p ( H i − 1 ) = H i » role=»presentation» style=»position: relative;»> M a p ( H i − 1 ) = H i Означает, что итерация может быть отображена более ярко как:
256 бит на картинке Hi Описано 8 маленьких блоков, это потому, что наименьшая арифметическая единица в алгоритме SHA256 называется «Слово» (Word), слово составляет 32 бита.
Кроме того, в первой итерации начальное значение карты устанавливается равным 8 начальным значениям введенного ранее хеша, как показано на следующем рисунке:
Следующее начинает вводить содержание каждой итерации, то есть отображение M a p ( H i − 1 ) = H i » role=»presentation» style=»position: relative;»> M a p ( H i − 1 ) = H i Конкретный алгоритм
ШАГ 1: Построить 64 слова
break chunk into sixteen 32-bit big-endian words w[0], …, w[15]
Для каждого блока разложите блок на 16 32-битных слов с прямым порядком байтов, обозначаемых как w [0],…, w [15]
Другими словами, первые 16 слов непосредственно разлагаются из i-го блока сообщения.
Остальные слова получаются по следующей итерационной формуле:
ШАГ 2: 64 цикла
карта M a p ( H i − 1 ) = H i » role=»presentation» style=»position: relative;»> M a p ( H i − 1 ) = H i Содержит 64 цикла шифрования
То есть 64 цикла шифрования могут быть выполнены для завершения одной итерации
Каждый цикл шифрования может быть описан следующим рисунком:
На рисунке 8 слов ABCDEFGH обновлены в соответствии с определенными правилами, среди которых
Восемь символов, сгенерированных последним циклом, являются хеш-строкой, соответствующей i-му блоку. H i » role=»presentation» style=»position: relative;»> H i
Это изменение завершает все введения в алгоритм SHA256
3. SHA256 алгоритм псевдокода
Теперь мы можем объединить псевдокод алгоритма SHA256 и прочесать все вышеперечисленные шаги:
4. Ссылки
Это примечание в основном относится к интегрированной информации следующим образом:
Заполнение знаний
Big endian и Little endian
Для типов данных, таких как целые и длинные целые, существуют проблемы с порядком старшего и младшего порядка расположения байтов.
Big endian считает, что первый байт является самым значимым байтом (для того, чтобы от младшего адреса к старшему адресу сохранялись данные от старшего байта до младшего байта)
Напротив, Little Endian считает, что первый байт является наименее значимым байтом (младший байт старшего байта данных хранится в порядке от младшего адреса к старшему адресу).
Например, предположим, что следующие данные начинаются с адреса памяти 0x0000:
адрес | данные |
---|---|
… | … |
0x0000 | 0x12 |
0x0001 | 0x34 |
0x0002 | 0xab |
0x0003 | 0xcd |
… | … |
Предположим, мы собираемся прочитать четырехбайтовую переменную с адресом 0x0000.
Если порядок байтов имеет порядок байтов, результат чтения равен 0x1234abcd;
Если порядок байтов является прямым порядком байтов, результатом чтения будет 0xcdab3412.
Если мы запишем 0x1234abcd в память, начиная с 0x0000, результаты хранения режимов Little Endian и Big Endian будут следующими:
Алгоритм хеширования SHA-256: Как работает? Где используется? Список монет
Содержание статьи:
Если у вас есть Bitmain Antminer или любой другой Биткойн Асик и вы хотите добывать монеты, отличные от Биткойна, то далее в статье мы расскажем Вам о самых выгодных монетах алгоритма SHA-256.
Список всех монет алгоритма SHA-256
Помимо этого, есть сотни альткойнов, которые вы можете добывать с помощью своего Асика. Однако учтите, что большинство проектов заброшено.
Добывать такие монеты совершенно бессмысленно. Потому что их сложно продать, так как они редко торгуются на биржах. Поэтому мы решили перечислить только известные монеты и те, у которых есть разумный объем торгов.
Прибыльность будет одинаковой для всех монет. Предлагаем вам воспользоваться калькуляторами майнинга, чтобы узнать, какой из них более прибыльный на данный момент.
Монеты SHA256
Вот список популярных криптовалют для майнинга SHA256. Мы оценили их по популярности и хешрейту сети.
Другие монеты на основе SHA-256
Примечание: монеты ниже имеют очень низкий 24-часовой объем торгов. Они редко торгуются на биржах и их сложно продать.
Алгоритм SHA-256
SHA расшифровывается как безопасный хэш-алгоритм. Это одна из многих криптографических хэш-функций. SHA-256 является членом семейства SHA-2 (Secure Hash Algorithm 2).
То есть он принимает любой вход и производит выход (хэш) фиксированной длины. Не имеет значения, является ли ввод одной буквой, словом, предложением или целой книгой. Выходные данные алгоритма хэширования SHA256 всегда будут одинаковой длины.
Выходы SHA-256 представляют собой 256-битный (32 байта) хэш, который отображается как 64 буквенно-цифровых символов. Этот сгенерированный 256-битный хэш почти уникален.
Кроме того, это односторонняя хэш-функция, которую нельзя расшифровать до исходного состояния. То есть хеш может быть сгенерирован из любого фрагмента данных. Но данные из хеша получить нельзя. Это делает SHA-256 одним из самых надежных доступных алгоритмов хеширования.
Другой важной характеристикой SHA 256 является его детерминированность. То есть сгенерированный хеш-вывод всегда будет одинаковым, если заданный вход такой же. Эта функция делает SHA256 идеальным для применения в протоколе Биткойн.
Где используется SHA256?
Алгоритм хеширования SHA256 генерирует уникальный 256-битный хэш фиксированного размера. Эта функция позволяет проверять целостность данных.
Он используется в различных приложениях, таких как: цифровые подписи, проверка пароля, проверка подлинности хеш-кода, защита от взлома и блокчейн.
По этому алгоритму можно определить целостность данных. То есть пользователь может убедиться, что загруженные данные не изменяются и находятся в исходном состоянии.
Допустим, вы скачали Биткойн-кошелек. Вы хотите убедиться в его оригинальности. Для этого вы можете просто сравнить хэши своего кошелька с исходным, предоставленным разработчиком.
SHA-256 в Биткоине
Биткойн использует алгоритм хеширования SHA-256 в основном для проверки транзакций через механизм консенсуса Proof of Work. Кроме того, он используется для создания адресов Биткойна.
Все эти монеты используют SHA-256 в качестве алгоритма Proof of Work для майнинга.
Алгоритм майнинга SHA-256
Биткойн использует SHA-256 в качестве алгоритма майнинга Proof of Work с момента его запуска в 2009 году. Первоначально алгоритм майнился только с использованием CPU и GPU.
Но постепенно оборудование для майнинга эволюционировало, делая процессоры и GPU менее жизнеспособными для майнинга BTC. Сегодня в сети Биткойн доминируют только ASIC (специализированные интегральные схемы).
Есть много ASIC, которые добывают алгоритм SHA-256, но большинство из них устарели и больше не приносят прибыли. Каждое новое поколение ASIC способно производить более высокую хеш-мощность, делая предыдущие слабыми и ненужными. Вот почему разумно инвестировать в монеты напрямую, а затем покупать эти ASIC.
В настоящее время существует только несколько популярных майнеров, и, согласно Asicminervalue.com, это единственные майнеры, которые приносят прибыль при добыче BTC и монет SHA256.
Если у вас есть какой-либо из этих Асиков, присоединитесь к любому майнинг пулу и начните добычу BTC. Вы также можете направить свои Асики SHA256 на NiceHash.
- к чему снится кабан дикий женщине в доме
- oled дисплей что это такое в телефоне