Эта статья расскажет новичкам в криптовалютах, ИТ и криптографии о том, как появились и как работают механизмы, которые защищают сеть Биткоина от взлома и обеспечивают целостность и уникальность транзакций, передающих биткойны между пользователями сети. Специалисты, вероятно, не найдут в ней ничего нового.
Криптография – наука о шифровании – занимает особое место в современной вычислительной инфраструктуре. Криптографические алгоритмы широко применяются для защиты личной информации пользователей, хранения паролей, обнаружения ошибок в массивах данных, тестирования логических устройств, а также используются для решения других задач.
Из множества алгоритмов самыми распространенными являются хэш-функции. Они необходимы для «сжатия» информации в образы, которые представляют собой битовые комбинации фиксированной длины. Хэш-функции семейства SHA-2 пользуются высокой популярностью в приложениях, связанных с систематизацией, поиском и защитой информации.
SHA-2 – это аббревиатура от Secure Hash Algorithm version 2 – или, по-русски, безопасный алгоритм хэширования. Цифра «2» означает вторую версию стандарта. Существует и первая версия - SHA-1. Она была разработана в 1995 году, а в 2002-м включена в SHA-2. Оба стандарта созданы Агентством Национальной Безопасности США и предназначены для общественного использования: SHA-2 выпущен под лицензией Royalty Free, которая не предполагает авторских отчислений создателю.
В 2012 году под эгидой Национального института стандартов и технологий США разработана новая версия алгоритма - SHA-3. Ожидается, что в ближайшие годы она заменит стандарты первой и второй версий.
Любая информация может иметь… «отпечатки пальцев»
Главная задача хэш-функций – получение кратких сведений о файле, сообщении или блоке данных. На языке специалистов такие сведения называются «отпечатками пальцев» (fingerprints), поскольку образ любой информации уникален. Как на Земле нет двух людей, чьи отпечатки пальцев совпадают, так и в системе не должно быть ни одного файла, сведения о котором совпадали бы со сведениями о другом файле. То же касается и сообщений, и блоков данных. Конечно, бывают исключения, но о них мы поговорим ниже.
Пользуясь уникальностью «отпечатков» можно не только осуществлять поиск нужной информации, но и выполнять множество других операций. Любой образ, созданный хэш-функциями SHA-2, является неповторимым идентификатором массива информации и содержит краткие сведения о нем.
Создание образов с помощью функций SHA-2
В основе криптографических хэш-функций SHA-2 лежит метод Меркла – Дамгарда. Исходная информация разбивается на части одинакового размера, каждая из которых подвергается обработке односторонней функцией сжатия. После такой операции длина входящего сообщения уменьшается.
Сформированный хэш-функцией код имеет фиксированную длину, независимо от размера входной информации. Размер полученных образов варьируется в диапазоне от 30 до 512 бит.
Надежная хэш-функция обладает двумя качествами:
- быстро вычисляется и очень долго расшифровывается без наличия ключей;
- минимизирует риск появления коллизий.
Коллизии – это одинаковые образы, возникающие из-за обработки одинаковых входных блоков данных. Для борьбы с коллизиями разработаны специальные методы. Например, при работе с хэш-таблицами применяются методы открытой адресации либо прямого связывания. Если же стоит задача защитить от фальсификации пароли и электронные подписи, применяется метод «криптографической соли», когда в создании хэша участвует свободно изменяемая последовательность битов. Он используется в том числе и в криптовалютах.
Важно, чтобы содержимое образа менялось вслед за оригиналом. Это является первым и главным требованием к хэш-функциям любых семейств. Если изменения не будут отслеживаться, то образ перестанет соответствовать оригиналу, и работа с данными окажется невозможной.
Второе требование – уникальность каждого образа. Конечно, существует вероятность того, что образы двух файлов или баз данных совпадут, но она чрезвычайно мала. Чем выше надежность алгоритма, тем эта вероятность меньше. К счастью, хэш-функции семейства SHA-2 достаточно защищены от коллизий, поэтому сбои в работе систем практически исключены.
Третье требование –однонаправленность функции. Алгоритм работает только в одну сторону, то есть сжимает, перемешивает и рассеивает информацию, но восстановить ее на основании полученного результата он не способен без наличия ключей. Это служит дополнительной защитой при шифровании данных.
Четвертое требование – невозможность подделки: необходимо, чтобы подбор сообщения с правильным значением образа обладал высокой сложностью. Если значение одного из сообщений все же станет достоверно известным, то подбор остальных сообщений должен быть максимально сложен.
SHA-2 и криптовалюты
Пример практического использования хэш-функций – сеть Bitcoin и других криптовалют, созданных на его основе. Процесс генерации биткойнов представляет собой перебор решений криптографических задач, формируемых программой для майнинга на основе предыдущих блоков, с целью появления новых блоков. Каждый блок содержит хэш предыдущего блока, некоторое количество транзакций пользователей сети и так называемую «соль» – свободно изменяемую последовательность битов, усложняющую процесс поиска хэша для нового блока.
Где же в генерации биткойнов отведено место хэш-функции? Она позволяет идентифицировать уже существующие блоки данных и вызвать их для сборки новых блоков. Для этого используется один из алгоритмов, входящих в семейство SHA-2 - двойной SHA-256. Генерация блоков Bitcoin называется майнингом, так как создающие блоки устройства не только обеспечивают работу системы, но и получают в награду биткойны.