Перейти к содержанию

Криптографическая хеш-функция (SHA)

Чтобы убедиться, что прошивка не испорчена, хватает CRC. Чтобы убедиться, что её никто не подменил, нужна криптографическая хеш-функция: у неё нельзя подобрать другое сообщение с тем же результатом. Самая распространённая из них — SHA-256.

Обновлено Редакция GAW

Криптографическая хеш-функция — алгоритм, который превращает сообщение любой длины в дайджест (message digest) фиксированного размера так, что по дайджесту нельзя восстановить сообщение и нельзя найти два разных сообщения с одинаковым дайджестом. Стандартные функции семейства SHA (Secure Hash Algorithm) описаны в NIST FIPS 180-4: по нему такие алгоритмы называют безопасными, потому что обе задачи вычислительно невыполнимы, а любое изменение сообщения с очень высокой вероятностью меняет дайджест.

Семейство SHA (FIPS 180-4, рис. 1)

АлгоритмСообщениеБлокСловоДайджест
SHA-1меньше 2⁶⁴ бит512 бит32 бита160 бит
SHA-224меньше 2⁶⁴ бит512 бит32 бита224 бита
SHA-256меньше 2⁶⁴ бит512 бит32 бита256 бит
SHA-384меньше 2¹²⁸ бит1024 бита64 бита384 бита
SHA-512меньше 2¹²⁸ бит1024 бита64 бита512 бит

Вычисление идёт в две стадии: предобработка — дополнение сообщения, разбиение на блоки и начальные значения — и итеративное сжатие блок за блоком.

Хеш, CRC и контрольная сумма

CRC и контрольная сумма ловят случайные ошибки, но подобрать данные с нужным CRC легко. Хеш-функция защищает от умышленной подмены — поэтому её применяют в защищённой загрузке: загрузчик считает SHA-256 образа и проверяет подпись дайджеста. По FIPS 180-4 хеш-функции используют вместе с цифровой подписью, кодами аутентификации HMAC и при генерации случайных чисел. Шифрование, например AES, решает другую задачу — скрыть содержимое.

Аппаратный хеш в STM32

Блок HASH в STM32H7 (в исполнениях с криптографией) считает SHA-1, SHA-224, SHA-256, MD5 и HMAC по FIPS 180-4: 82 такта на 512-битный блок для SHA-1 и 66 — для SHA-256 (RM0433, разд. 36). Как хеш и контрольные суммы хранятся в файлах прошивки — в статье «Файлы прошивки».

Частые вопросы

Чем хеш-функция отличается от CRC?

CRC обнаруживает случайные ошибки — сбой бита, пачку ошибок при передаче, — но для него легко рассчитать данные с нужным значением, так что от подделки он не защищает. У криптографической хеш-функции по FIPS 180-4 вычислительно невозможно найти другое сообщение с тем же дайджестом. Поэтому CRC проверяет целостность канала, а SHA-256 — подлинность прошивки вместе с подписью.

Какой длины дайджест у SHA-256?

256 бит, то есть 32 байта или 64 шестнадцатеричных символа. Сообщение обрабатывается блоками по 512 бит словами по 32 бита и должно быть короче 2⁶⁴ бит. У SHA-512 блок 1024 бита, слово 64 бита, дайджест 512 бит (FIPS 180-4, рис. 1).

Можно ли считать SHA-256 аппаратно на микроконтроллере?

Да, в микроконтроллерах с криптоблоком. Например, блок HASH в STM32H7 считает SHA-1, SHA-224, SHA-256 и MD5: по RM0433 на 512-битный блок уходит 82 такта для SHA-1 и 66 тактов для SHA-256. Без такого блока SHA-256 считают программно.

Источники

  1. NIST. FIPS PUB 180-4: Secure Hash Standard (SHS), August 2015 — Explanation: на вход хеш-алгоритма подаётся сообщение, результат — дайджест длиной от 160 до 512 бит; алгоритмы называют безопасными, потому что вычислительно невозможно 1) найти сообщение по дайджесту и 2) найти два разных сообщения с одним дайджестом; любое изменение сообщения с очень высокой вероятностью меняет дайджест; применяются с цифровой подписью, HMAC и для генерации случайных чисел; разд. 1: SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256 — итеративные односторонние хеш-функции; две стадии — предобработка (дополнение, разбиение на блоки, начальные значения) и вычисление; рис. 1: SHA-1 и SHA-224/256 — сообщение меньше 2⁶⁴ бит, блок 512, слово 32 бита, дайджест 160/224/256; SHA-384, SHA-512 и SHA-512/t — сообщение меньше 2¹²⁸ бит, блок 1024, слово 64 бита, дайджест 384/512/224/256
  2. STMicroelectronics. RM0433: STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — разд. 36.1–36.2: блок HASH — SHA-1, SHA2-224, SHA2-256, MD5 и HMAC; дайджесты 160, 224, 256 бит для сообщений до 2⁶⁴ − 1 бит, 128 бит для MD5; соответствие FIPS PUB 180-4, FIPS PUB 186-4, RFC 1321 (MD5), RFC 2104 и FIPS PUB 198-1 (HMAC); 82 такта на 512-битный блок для SHA-1 и 66 тактов для SHA2-256 и MD5; блок есть в исполнениях с криптографией: в заголовках CMSIS cmsis-device-h7 v1.10.7 HASH и CRYP описаны в stm32h753xx.h и отсутствуют в stm32h743xx.h

Нашли ошибку?