Хеш-функции в блокчейне

Хеш-функции в блокчейне

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

Существует множество типов криптографических хеш-функций, таких как MD5, BLAKE2, SHA-1, SHA-256 и т.д. Secure Hashing Algorithm 256, обычно называемый SHA-256, является одной из самых известных криптографических хеш-функций, широко используемых в технологии блокчейн и алгоритме консенсуса Proof of Work. Он был разработан Агентством национальной безопасности (АНБ) в 2001 году.

Хеширование или вывод фиксированной длины для любых входных данных
Хеширование или вывод фиксированной длины для любых входных данных

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

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

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

Свойства хеш-функции

Лавинный эффект

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

При небольшом изменении входных данных генерируется другой хеш
При небольшом изменении входных данных генерируется другой хеш

Эффективность вычислений

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

Детерминированность

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

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

Устойчивость к нахождению прообраза

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

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

Устойчивость к нахождению прообраза хеш-функции
Устойчивость к нахождению прообраза хеш-функции

Устойчивость к коллизии

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

Устойчивость к коллизии хеш-функции
Устойчивость к коллизии хеш-функции

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

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

Односторонние функции

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

Односторонние хеш-функции
Односторонние хеш-функции

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

Примеры хеш-функции

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

SHA-256("hello") = "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"

Приведенный выше расчет SHA-256 может быть закодирован в Python следующим образом:

import hashlib, binascii

sha256hash = hashlib.sha256(b'hello').digest()
print("SHA-256('hello') = ", binascii.hexlify(sha256hash))

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

В качестве другого примера можно взять криптографическую хеш-функцию SHA3-512 и вычислить хеш-значение того же текстового сообщения hello:

SHA3-512("hello") = "75d527c368f2efe848ecf6b073a36767800805e9eef2b1857d5f984f036eb6df891d75f72d9b154518c1cd58835286d1da9a38deba3de98b5a53e5ed78a84976"

Применение хеш-функции

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

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

Понравилась статья? Поделитесь в соцсетях

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *