Понимание алгоритмов безопасного хеширования (SHA-256)

Алгоритмы безопасного хеширования (SHA-256)

В транзакциях, связанных с криптовалютами, такими как биткойны, транзакции принимаются в качестве входных данных и выполняются через безопасный алгоритм хеширования («SHA»). SHA состоит из четырех алгоритмов SHA:SHA-0, SHA-1, SHA-2 и SHA-3.

SHA-1 — наиболее широко используемая из текущих хэш-функций SHA, используемая во многих приложениях и протоколах, включая безопасность Secure Socket Layer (SSL).

SHA-2 — другой наиболее распространенный метод, состоящий из SHA-224, SHA-256, SHA-384 и SHA-512, в зависимости от количества бит в хеш-значении.

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

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

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

Хранение паролей

Вместо открытого хранения пароля все процессы входа в систему сохраняют хеш-значения паролей в самом файле. Файл паролей состоит из таблицы пар, которые имеют вид (идентификатор пользователя, h(P)).

Процесс изображен на рисунке ниже:

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

Целостность данных

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

Понимание алгоритмов безопасного хеширования (SHA-256)

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

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

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

Таким образом, проверка целостности полезна только в том случае, если пользователь уверен в оригинальности файла.

Криптографические характеристики/свойства

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

Детерминированный

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

Быстрый расчет

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

Сопротивление предварительного изображения

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

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

Второе сопротивление предварительного изображения

Это свойство означает, что будет сложно найти другой ввод с тем же хешем.

Пример:если хэш-функция (h) для входных данных (x) дает хеш-значение h(x), то должно быть сложно найти какое-либо другое входное значение (y), чтобы h(y) =h(x).

Это защищает от любой угрозы, которая имеет входное значение и его хэш и хочет заменить другое значение h(x) в качестве законного значения вместо этого исходного входного значения.

Устойчивость к столкновениям

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

Пример:для хеш-функции h должно быть сложно найти какие-либо два разных результата, x и y, чтобы хакер смог соединить h(x) =h(y).

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

Удобство для решения головоломок

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

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

Помните игру «выбери число от 1 до 100»? Это высокая минимальная энтропия.

| означает объединение, другими словами, k|x означает kx.

Структура данных

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

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

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

Понимание алгоритмов безопасного хеширования (SHA-256)

Внутри каждого блока вы увидите указатель, содержащий адрес следующего блока. Первый блок, на котором вы видите указатель, называется Genesis Block

Понимание алгоритмов безопасного хеширования (SHA-256)

Дерево Меркла

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

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

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

Понимание алгоритмов безопасного хеширования (SHA-256)

Всякий раз, когда вы смотрите на дерево Меркла, лучше всего начинать с самого низа, с конечных узлов (L1, L2, L3, L4). Двигаясь вверх, вы увидите нелистовые узлы, которые служат хешем значений (хеш(L1)), (хеш(L2)), (хэш(L3)) и (хэш(L4)) их дочерних узлов (хеш 0-0, 0-1, 1-0, 1-1).

«Дочерний узел» — это узлы, входящие в хэш. Для Хэша 0 дочерними узлами являются Хэш 0-0 и Хэш 0-1. Для Хэша 1 дочерними узлами являются Хэш 1-0 и Хэш 1-1.

Понимание алгоритмов безопасного хеширования (SHA-256)

Поднимаясь по диаграмме на самый высокий уровень, помеченный как «Top Hash», это корневой узел.

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

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

Понимание алгоритмов безопасного хеширования (SHA-256)

Применение хеширования к процессу майнинга

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

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

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

Скорость хеширования

Скорость хеширования описывает, насколько быстро выполняются операции хеширования в процессе майнинга.

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

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

Итак, подведем итог:

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

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

Как только он будет добавлен в блокчейн, сообщество будет проинформировано

Майнеры, ответственные за этот процесс, награждаются биткойнами.


Информация о фонде
  1. Информация о фонде
  2. Государственный инвестиционный фонд
  3. Частные инвестиционные фонды
  4. Хедж-фонд
  5. Инвестиционный фонд
  6. Индексный фонд