Одной из криптографических основ криптовалют являются хэш-функции.
Хэш-функция - детерминированная эффективно вычислимая функция, принимающая на вход строку произвольной длины и выдающая в качестве результата строку фиксированной длины.
где m называется хэшируемым значением(сообщением), а y - хэш-значением.
В свою очередь криптографическая хэш-функция обладает следующими свойствами.
- Стойкость к поиску первого прообраза. Восстановить исходное сообщение m по хэш-значению H(m) невозможно.
- Стойкость к поиску второго прообраза. То есть, зная сообщение m₁ и его хэш-значение H(m₁), вычислительно невозможно найти другое сообщение m₂, такое, что m₁≠m₂ и при этом H(m₁)=H(m₂).
- Стойкость к коллизиям. Вычислительно невозможно найти пару сообщений таких, что m₁≠m₂ и при этом H(m₁)=H(m₂).
Примеры хэш-функций:
- SHA256 (Используется в Bitcoin)
- RIPEMD160 (Используется в Bitcoin)
- Keccak (Используется в Ethereum)
Пример работы хэш-функции.
Сообщение:
Hello CryptoBobr!
Результат применения SHA256 к данному сообщению:
e25bfb1767607c6b537e50fe7fe5872fea4b641c295a32014da0616d125f9d4c
Хэш-функции в криптовалютах используются для:
- Майнинг. Алгоритм Proof-of-Work основан на поиске хэш-значения, удовлетворяющего заданному шаблону(заданное количество нулей в начале, полученного хэш-значения)
- Создание адресов. Так, например, чтобы получить адрес Биткоина необходимо взять открытый ключ пользователя(P2PKH адрес) или скрипт(P2SH адрес), согласно, которому будут тратится деньги, и использовать специальный алгоритм, основанный хэш-функциях(более подробно мы поговорим об этом в одном из следующих постах)
- SPV клиенты. В Биткоине используется специальная структура, бинарное хэш дерево - дерево Меркла. С помощью дерева Меркла данные о всех транзакциях, входящих в этот блок, объединятся в единый хэш(корень дерева Меркла). Этот корень дерева Меркла добавляется в заголовок блока.
Такая структура позволяет упростить проверку принадлежности транзакции определённому блоку.
- Для проверок выполнения условий траты средств в Биткоин скриптах: соответствие полученного хэш-значения открытому ключу пользователя, соответствие полученного хэш-значения данному скрипту и т.д.
Важность хэш-функций для криптовалют невозможно переоценить. Это один из столпов, на которых держатся и работают криптовалюты.