Криптографическая хеш-функция (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 считают программно.
Источники
- 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
- 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
Нашли ошибку?
Смотрите также
- CRCЦиклический избыточный код для обнаружения ошибок
- Контрольная суммаПроверочное значение по данным: простая сумма, LRC, Internet checksum, CRC
- Безопасная загрузкаЗапуск только подписанной прошивки: подпись, ключи в OTP, откат версий
- AES (Advanced Encryption Standard)Стандартный блочный шифр с блоком 128 бит и ключами 128, 192 или 256 бит
- TLSШифрованный канал поверх TCP: рукопожатие, сертификаты, буферы и время на МК
- Файлы прошивки: HEX, BIN, ELFELF, Intel HEX, S-record, BIN и UF2: адреса, секции, objcopy, size
- Калькулятор CRCCRC-8, CRC-16, CRC-32, Modbus, блок CRC STM32, код на C