Bitcoin алгоритм sha 256
Если вы интересуетесь технической стороной криптовалют, то эта статья вам точно будет интересна. В ней мы рассмотрим классический алгоритм SHA-2 и хеш-функцию SHA-256.
Именно на этом алгоритме построен майнинг самой популярной криптовалюты — биткоина, а так же и других альтернативных валют, называемых альткоинами.
Содержание
- Что такое SHA-256?
- Общее описание алгоритма SHA-2
- Технические характеристики хеш-функции SHA-256
- Псевдокод хеш-функции SHA-256
- Пример хеширования
- Криптоанализ алгоритма SHA-256
- Применение и сертификация хеширования SHA-256
Что такое SHA-256?
Итак, SHA-256 представляет из себя криптографическую функцию хеширования, которую разработали в Америке сотрудники Агентства Национальной Безопасности (АНБ).
Хеш-функция SHA-256 является однонаправленной функцией алгоритма SHA-2 (Secure Hash Algorithm Version 2). Основное применение — защита информации.
Общее описание алгоритма SHA-2
На рисунке ниже приведена схема 1 итерации алгоритма SHA-2.
В основе хеш-функции лежит структура Меркла-Дамгарда, согласно которой исходное значение после дополнения разбивается на блоки, а каждый блок в свою очередь на 16 слов.
Каждый блок сообщения пропускается алгоритмом через цикл с 80 или 64 интерациями, или раундами. На каждом раунде задается функция преобразования из входящих в состав блока слов. Два слова из сообщения преобразуются этой функцией. Полученные результаты суммируются, а в результате получается значение хеш-функции. Для обработки следующего блока используются результаты обработки предыдущего блока. Независимо друг от друга блоки обрабатывать нельзя.
В работе алгоритма SHA-2 используются битовые операции:
- || — конкатенация — операция склеивания объектов линейной структуры, строк
- + — операция сложение
- and (&, &&) — побитовая операция «И»
- xor — операция, исключающая «ИЛИ»
- shr (shift right) — логический сдвиг вправо
- rots (rotate right) — циклический сдвиг вправо
Технические характеристики хеш-функции SHA-256
- Длина дайджеста сообщения (бит) — 256
- Длина внутреннего состояния (бит) — 256 (8×32)
- Длина блока (бит) — 512
- Максимальная длина сообщения (бит) — 264-1
- Длина слова (бит) — 32
- Количество интераций в цикле — 64
- Скорость (MiB/s) — 139
Псевдокод хеш-функции SHA-256
Для любителей сломать себе мозг и для более глубокого понимания хеш-функции SHA-256 читайте информацию под спойлером.
Пояснения: Все переменные беззнаковые, имеют размер 32 бита и при вычислениях суммируются по модулю 232 message — исходное двоичное сообщение m — преобразованное сообщение
Инициализация переменных (первые 32 бита дробных частей квадратных корней первых восьми простых чисел [от 2 до 19]): h0 := 0×6A09E667 h1 := 0xBB67AE85 h2 := 0×3C6EF372 h3 := 0xA54FF53A h4 := 0×510E527F h5 := 0×9B05688C h6 := 0×1F83D9AB h7 := 0×5BE0CD19
Таблица констант (первые 32 бита дробных частей кубических корней первых 64-х простых чисел [от 2 до 311]): k[0..63] := 0×428A2F98, 0×71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0×3956C25B, 0×59F111F1, 0×923F82A4, 0xAB1C5ED5, 0xD807AA98, 0×12835B01, 0×243185BE, 0×550C7DC3, 0×72BE5D74, 0×80DEB1FE, 0×9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0×0FC19DC6, 0×240CA1CC, 0×2DE92C6F, 0×4A7484AA, 0×5CB0A9DC, 0×76F988DA, 0×983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0×06CA6351, 0×14292967, 0×27B70A85, 0×2E1B2138, 0×4D2C6DFC, 0×53380D13, 0×650A7354, 0×766A0ABB, 0×81C2C92E, 0×92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0×106AA070, 0×19A4C116, 0×1E376C08, 0×2748774C, 0×34B0BCB5, 0×391C0CB3, 0×4ED8AA4A, 0×5B9CCA4F, 0×682E6FF3, 0×748F82EE, 0×78A5636F, 0×84C87814, 0×8CC70208, 0×90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
Предварительная обработка: m := message ǁ [единичный бит] m := m ǁ [k нулевых бит], где k — наименьшее неотрицательное число такое, что битовая длина итогового сообщения будет ≡ 448 (mod 512) (сравнима по модулю 512 c 448) m := m ǁ Длина(message) — длина исходного сообщения в битах в виде 64-битного числа с порядком байтов от старшего к младшему
Далее сообщения обрабатывается последовательными порциями по 512 бит: разбить сообщение на куски по 512 бит для каждого куска разбить кусок на 16 слов длиной 32 бита: w[0..15]
Инициализация вспомогательных переменных: a := h0 b := h1 c := h2 d := h3 e := h4 f := h5 g := h6 h := h7
Основной цикл: для i от 0 до 63 Σ0 := (a rotr 2) xor (a rotr 13) xor (a rotr 22) Ma := (a and b) xor (a and c) xor (b and c) t2 := Σ0 + Ma Σ1 := (e rotr 6) xor (e rotr 11) xor (e rotr 25) Ch := (e and f) xor ((not e) and g) t1 := h + Σ1 + Ch + k[i] + w[i]
Добавить полученные значения к ранее вычисленному результату: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d h4 := h4 + e h5 := h5 + f h6 := h6 + g h7 := h7 + h
Получить итоговое значения хеша: digest = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7
Пример хеширования
Вот пример использования функции хеширования SHA-256. Результатом хеширования фразы «Bitcoin is the most popular cryptocurrency» будет выражение: 6810abc7 27b7e113 c8aa73f6 15bdb2ba adb1aa9c f30e177c 16c4df1a 82caf226
При малейшем изменении текста сообщения, результат хеширования изменяется кардинально. Это являетя следствием «лавинного эффекта» — важного криптографического свойства для шифрования.
Стоит изменить в вышеуказанном примере первую букву «B» на маленькую «b», получим следующий результат: aa5415b4 cf0808fe 04457075 f5749564 9b45ca3a be9e9d11 bbb9fdae eab233ee
Криптоанализ алгоритма SHA-256
Криптоанализ — наука о способах и методах дешифрования зашифрованных данных без использования специального ключа.
Криптоанализ алгоритма SHA-2 проводился многими исследователями начиная с 2003 года — тогда не были найдены какие-либо уязвимости.
Но уже в 2008 году результатом исследования индийских ученых были опубликованы найденные коллизии для 22 итераций SHA-512 и SHA-256. Чуть позже в сентябре того же года был предоставлен метод создания коллизий для усеченного алгоритма SHA-2 (21 итерация), а позднее для 31 итерации хеш-функции SHA-256 и для 27 итераций SHA-512.
При криптоанализе хеш-функций проверяется устойчивость алгоритма как минимум к двум видам атак:
1. Нахождение коллизий — одинаковый хеш при разных входных параметрах. От устойчивости к этому виду атак зависит безопасность цифровой подписи с применением текущего алгоритма.
2. Нахождение прообраза — расшифровка исходного сообщения по его хешу. Устойчивость к этому виду атак обеспечивает безопасность хранения хешей аутентификационных паролей.
Разработчики алгоритма SHA-2 приняли решение, что новый алгоритм SHA-3 будет работать совершенно по иному принципу. Таким образом в октябре 2012 года в качестве SHA-3 был утвержден алгоритм Keccak.
Применение и сертификация хеширования SHA-256
Законом США допускается применение SHA-256 и других схожих хеш-функций в некоторых федеральных приложениях для защиты информации в рамках других алгоритмов и протоколов, не имеющих грифа «Секретно». Так же допускается применение SHA-2 частными и коммерческими организациями.
Вот мы и добрались до платежной системы Bitcoin, где используется хеш-функция SHA-256 для выпуска новой валюты. В данном случае выпуск новой валюты Биткоинов осуществляется поиском строк по их заданной структуре хеша SHA-256.
Сертификация SHA-2, необходимая для использования в специальных приложениях, проводится в рамках процедуры Cryptographic Module Validation Program (CMVP).
На ноябрь 2008 года сертификации было подвергнуто более 250 вариаций алгоритма SHA-2, в 4 из которых можно производить операции с сообщениями, длиной в битах не кратной 8.
Надеюсь эта информация была полезной и познавательной для вас! Дальше будет еще интереснее!