Глоссарий / Майнинг и консенсус
SHA-256
Другие названия: SHA256.
- Что такое SHA-256?
- SHA-256 принимает входные данные любой длины и возвращает отпечаток размером 32 байта, который одинаков при каждом вычислении, непредсказуем заранее и из которого невозможно восстановить исходные данные.
Биткоин опирается на эту одну функцию почти везде: хеши блоков, идентификаторы транзакций, деревья Меркла, контрольные суммы адресов и контрольная сумма в вашей сид-фразе. На выходе получаются 256 бит, напечатанных как 64 шестнадцатеричных символа, взятых из пространства объемом примерно 1,2 × 10 в 77-й степени значений. Именно эта арифметика выявляет адрес с опечаткой до того, как ваши биткоины куда-либо уйдут.
Как это работает
SHA-256 разбивает входные данные на куски по 512 бит и прогоняет каждый через 64 раунда сдвигов, поворотов и сложений.
Обрабатываемое состояние состоит из восьми слов по 32 бита, инициализированных константами, взятыми из дробных частей квадратных корней первых восьми простых чисел, а 64 раундовые константы происходят из кубических корней первых 64 простых чисел. Эти источники и есть суть: это числа, которые никто не мог выбрать по скрытой причине, и именно так устройство алгоритма доказывает отсутствие в нем бэкдора. Алгоритм был создан Агентством национальной безопасности США и опубликован NIST в 2001 году, а действующая спецификация является FIPS 180-4.
Биткоин на деле получает три свойства. Функция детерминирована, поэтому любая машина в любом месте выводит один и тот же дайджест из одних и тех же байтов. У нее есть лавинный эффект, поэтому изменение одного бита входных данных меняет примерно половину битов выхода, и между ними нет никакой связи. И она устойчива к обратному выполнению: никто не нашел способа восстановить входные данные из дайджеста или получить два входа с общим дайджестом быстрее, чем перебор. SHA-1 пал жертвой практической коллизии в феврале 2017 года, что стоило исследователям огромного объема вычислений и совершенно не переносится на SHA-2.
Биткоин редко вызывает ее один раз. Заголовки блоков, идентификаторы транзакций, узлы дерева Меркла и контрольная сумма однорангового сообщения используют двойной проход, при котором дайджест хешируется второй раз. Хеши адресов идут другим путем: RIPEMD-160 применяется к дайджесту SHA-256, и отсюда берется полезная нагрузка в 20 байт устаревшего адреса. Taproot снова нарушил схему: BIP340 определяет помеченные хеши, которые вызывают SHA-256 один раз с разделяющим префиксом домена, чтобы подписи для одной цели нельзя было повторить для другой.
Где это видно
Каждая шестнадцатеричная строка из 64 символов в обозревателе блоков является результатом SHA-256. Это касается идентификатора транзакции, который вы вставляете в обращения в поддержку, и хеша блока, начинающегося с длинной череды нулей: именно так выглядит заголовок, превзошедший целевую сложность.
Два места важны напрямую, когда вы держите биткоины. Сид-фраза несет контрольную сумму, построенную из этой функции: 12 слов кодируют 128 бит случайности плюс 4 бита контрольной суммы, взятых из дайджеста SHA-256 этой случайности, поэтому фраза с одним неверным словом отвергается примерно в 15 случаях из 16, а не молча открывает пустой кошелек. Устаревший адрес несет похожую защиту, контрольную сумму в 4 байта из двойного прохода SHA-256, из-за чего вероятность того, что случайная опечатка даст действительный адрес, составляет примерно 1 из 4,3 млрд.
Майнинговое оборудование не существует ни для чего другого. ASIC представляет собой чип, который вычисляет эту одну функцию и никакую другую, поэтому майнеры биткоина не могут быть перепрофилированы для сетей, построенных на другом алгоритме, и поэтому выражение «монета SHA-256» описывает целое семейство форков. Заметьте предел всего этого: контрольная сумма выявляет адрес, который вы набрали с ошибкой, но никогда не выявит адрес, который вредоносная программа подменила на вполне действительный и не ваш.