В этой статье будет дана обзорная информация по криптографическим функциям микросхемы ATSHA204A и принципам её работы с информацией и данными. Без хорошего понимания принципов работы ATSHA204A невозможно её осмысленное использование в ваших проектах для защиты информации.
Также в этой статье будет дан перевод и пояснения некоторых специфических терминов (Key Values, Diversified Keys, Rolled Keys, Created Keys, Single-use Keys, Password Checking, Transport Keys и т. п.), которые используются в даташите ATSHA204A.
ATSHA204A и криптография
ATSHA204A имеет развитую внутреннюю структуру со специальными зонами в EEPROM памяти (см. предыдущие статьи цикла), специализированные регистры в оперативной памяти и множество криптографических функций для реализации различных сценариев использования алгоритма SHA-256 и его производных.
ATSHA204A поддерживает общение с микроконтроллером по стандартный схеме «вызов-ответ» («challenge-response»), то есть вы по определённым (в даташите) правилам формируете команды к крипточипу, а он отвечает вам какими-либо данными или выполняет какие-либо действия с ключами, случайными числами, хешами и т. д.
Сами криптографические сценарии и крипто-архитектура ваших проектов — это отдельная, выходящая за рамки этой статьи, тема, тянущая на научную диссертацию. Поэтому здесь мы только приведём обзор и рассмотрим назначение и смысл основных криптографических команд ATSHA204A.
Команда MAC
В базовом сценарии использования, хост-система посылает вызов (т. е. число) на устройство (микросхему ATSHA204A) в клиентской системе, которое объединяет вызов (challenge) c секретным ключом, используя команду MAC (Message Authentication Code) и отправляет ответ обратно в систему. Устройство использует криптографический хеш-алгоритм для создания этой комбинации (которая также известна как дайджест). Использование хеш-алгоритма не позволяет (злонамеренному) «наблюдателю на шине» получить значение секретного ключа, разрешая при этом (легитимному) получателю убедиться в правильности ответа путем выполнения одного и того же вычисления, объединяющего вызов с секретом для создания дайджеста (с использованием хранящейся в памяти ATSHA204A копии секрета).
Команда GenDig
Базовая операция (см. текст выше) может быть расширена многими способами благодаря гибкому набору команд ATSHA204A. С помощью команды GenDig можно включить значения (секретные ключи), хранящиеся в памяти ATSHA204A (слотах) в ответный дайджест, который обеспечивает эффективный способ доказательства того, что считанные данные действительно пришли от (легитимного) устройства, а не вставлены «атакующим по середине». Эту же команду можно использовать для объединения двух ключей с вызовом (challenge), что полезно, когда существует несколько уровней аутентификации.
Команда DeriveKey
Команда DeriveKey реализует схему «key rolling» использования ключей. В зависимости от настроек режима её работы, это может применяться, например, при открывании двери гаража с дистанционным управлением. Каждый раз, когда используется ключ, его текущее значение криптографически объединяется с данными, уникальными для системы, и этот результат затем формирует ключ для следующей криптографической операции. Даже если злоумышленник сможет перехватить ключ, то этот ключ будет бесполезен при следующем использовании.
DeriveKey также может использоваться для создания новых случайных ключей, которые могут быть действительны только для определенного хоста, для определенного периода времени или для какого-либо другого ограниченного условия. Каждый сгенерированный ключ отличается от любого другого ключа, когда-либо сгенерированного на любом (Atmel CryptoAuthentication) устройстве. При активации пары хост-клиент, клон клиента не будет работать ни на одном другом хосте.
Команда CheckMac
В конфигурации хост-клиент, где хост (например, мобильный телефон) должен проверить клиента (например, OEM-батарею), необходимо сохранить секрет на хосте, чтобы проверить ответ от клиента. Команда CheckMac позволяет хосту безопасно хранить секрет клиента и скрывать правильное значение ответа, возвращая системе только ответ «да» или «нет».
В тех случаях, когда требуется пароль, введенный пользователем, команда CheckMac также позволяет проверить пароль, не открывая его (не «засвечивая») на шине связи, и сопоставить пароль сохраненному значению, которое может иметь гораздо более высокую энтропию (степень защиты).
Зашифрованные чтение и запись
Хеш-комбинация (дайджест) вызова (challenge) и секретного ключа может храниться на устройстве и «XORed» (криптографически совмещаться) с содержимым слота (ключом) для реализации зашифрованного чтения, или может быть XORed с зашифрованными входными данными для реализации зашифрованной записи.
Команда Nonce
Каждая из вышеприведённых операций может быть защищена от атак воспроизведения путем включения в исходные данные случайного («одноразового») числа nonce.
Команда Nonce (опционально) комбинирует входные данные с сгенерированным случайным числом для создания nonce ( «одноразового» числа). Полученное число комбинируется с секретным ключом для любой из крипто-команд (MAC, HMAC, Read, Write или GenDig).
Стандарт SHA-256
Все функции безопасности (в ATSHA204A) реализуются с помощью отраслевого стандарта (алгоритма) SHA-256 «secure hash», который входит в набор современных криптографических алгоритмов высокой безопасности, рекомендованных различными государственными учреждениями и криптографическими экспертами. При необходимости, алгоритм SHA-256 также может быть включен в HMAC. В ATSHA204A используются полноразмерные 256-битные секретные ключи для противостояния любым попыткам взлома.
Команды ATSHA204A
Ниже приведёт полный список всех команд чипа ATSHA204A. Приведены название команды, её код (т. н. «код операции») и краткое описание назначения команды.
Перевод и пояснения по назначению команд ATSHA204A:
DeriveKey — получение целевого ключа из целевого (же) или «родительского» ключа.
DevRev — ревизия (версия) устройства (конкретного экземпляра ATSHA204A).
GenDig — создание дайджеста защиты данных из случайного числа или входного «seed» («посевного») значения (числа) и ключа.
HMAC — вычисление ответа из сочетания ключа и других внутренних данных с помощью HMAC/SHA-256.
CheckMac — проверка MAC, вычисленного на другом устройстве Atmel CryptoAuthentication (другом чипе ATSHA204A).
Lock — запрещение изменения данных в зонах EEPROM памяти ATSHA204A (см. предыдущие статьи).
MAC — вычисляет ответ из ключа и других внутренних данных с помощью SHA-256.
Nonce — генерирует 32-байтовое случайное число и внутренний («одноразовый») nonce.
Pause — выборочно переводит одно из устройств на общей шине в состояние ожидания.
Random — создаёт случайное (и «качественное») 32-байтовое число.
Read — считывайте с устройства 4 байта с аутентификацией и шифрованием или без них.
SHA — вычисляет SHA-256 дайджест для любой цели.
UpdateExtra — Обновляет байты с номерами 84 или 85 в зоне конфигурации после её блокировки (см. предыдущие статьи цикла).
Write — Записывает на устройство 4 или 32 байта информации с аутентификацией и шифрованием или без них.
SHA-256 в работе команд
Все тонкости работы с SHA-256 даются в описании каждой из команд, использующей этот алгоритм. Большинство команд, использующих алгоритм SHA-256, автоматически добавляют соответствующее количество битов и изменяют длину сообщения, чтобы соответствовать (их внутреннему) формату работы с данными.
ATSHA204A может также вычислять SHA-256 дайджест с помощью команды SHA (для данных, формируемых пользователем).
Алгоритм SHA-256 используется для шифрования, принимая выходной дайджест алгоритма хеширования и «ксоря» (XORing) его с данными текста для создания шифротекста. Дешифрование — это обратная операция, шифротекст ксорится с дайджестом, в результате чего получается обычный текст.
HMAC/SHA-256
Ответ на вызов также может быть вычислен с использованием алгоритма HMAC на основе SHA-256. Из-за повышенной сложности вычислений, команда HMAC не является такой гибкой, как команда MAC, и время вычисления для неё занимает несколько больше времени. Команда HMAC не является необходимой для создания безопасного дайджеста (хеша) и она включена в ATSHA204A для совместимости с различными программными задачами (криптографическими сценариями).
Key Values
Все ключи семейства устройств CryptoAuthentication имеют длину 256 бит. Эти ключи используются как часть сообщения, хешированного с помощью команд MAC, StartMac, HMAC и GenDig. Любой слот в зоне данных EEPROM может использоваться для хранения ключа, однако значение будет секретным, только если разрешения на чтение и запись правильно установлены в байтах SlotConfig (включая бит IsSecret).
Diversified Keys
Если хост используется для безопасного хранения секретных ключей, значения, хранящиеся в слотах EEPROM, можно дополнить с помощью (уникального) серийного номера, встроенного в устройство (микросхему ATSHA204A). Таким образом, каждое клиентское устройство может иметь уникальный ключ, который обеспечивает дополнительную защиту от атак и позволяет идентифицировать и вносить в чёрный список скомпрометированные серийные номера.
Для реализации этого «root» (корневой) секрет комбинируется с серийным номером устройства во время персонализации, используя некоторый криптографический алгоритм и результат, записанный в слот ATSHA204A.
Команда ATSHA204A CheckMac обеспечивает механизм безопасного создания и сравнения диверсифицированных ключей.
Rolled Keys
Чтобы предотвратить повторное использование одного и того же значения ключа, ATSHA204A поддерживает т. н. «Rolled Keys». После некоторого количества раз использований (возможно, всего одного) текущее ключевое значение заменяется SHA-256 дайджестом его текущего значения с некоторым дополнением (смещением), которое может быть либо константой, либо чем-то связанным с устройством (например, серийным номером или номером модели), либо случайным числом.
Эта возможность реализована с помощью команды DeriveKey. Перед выполнением команды DeriveKey необходимо выполнить команду Nonce для загрузки смещения («offset») в регистр TempKey. Каждый раз, когда эта операция выполняется с использованием слотов с номерами от 0 до 7, автоматически увеличивается значение в поле StartCount для этого слота.
Один из способов применения этой возможности является постоянное удаление исходного ключа с устройства и замена его ключом, пригодным для использования только в определенной среде. После этой операции невозможно извлечь старое значение ключа, что повышает безопасность системы.
Created Keys
ATSHA204A также поддерживает создание ключей. В этом механизме «родительский ключ» (заданный в slotConfig.writeKey) объединяется с фиксированным или случайным числом nonce для создания уникального ключа, который затем используется для любой криптографической цели.
Возможность создания уникальных ключей особенно полезна, если родительский ключ имеет ограничения по использованию. В этом режиме родительский ключ ограниченного использования может быть использован для создания дочернего ключа с неограниченным сроком использования. Поскольку созданный дочерний ключ полезен только для данной пары хост-клиент, то атаки на него менее опасны для системы в целом.
Single-use Keys
Для значений SlotID, соответствующих слотам 0-7 в Data зоне EEPROM, повторное использование ключа, сохраненного в слоте, может быть строго ограничено. Эта функция включена, если в поле SlotConfig установлен бит SingleUse. Бит SingleUse игнорируется для слотов 8-14. Количество оставшихся использований сохраняется в виде битовой карты в байте UseFlag, соответствующем рассматриваемому слоту.
На практике эта процедура позволяет использовать ключи SingleUse восемь раз между обновлениями («refreshes») с помощью Команда DeriveKey.
При обычных обстоятельствах все восемь байтов UseFlag должны быть инициализированы значениями 0xFF. Если предполагается разрешить менее восьми использований конкретного ключа, эти байты должны быть инициализированы значениями 0x7F (7 использований), 0x3F (6), 0x1F (5), 0x0F (4), 0x07 (3), 0x03 (2) или 0x01 (1). Инициализация любым другим значением, кроме этих или 0xFF, запрещена.
Password Checking
Многие приложения для различных целей требуют от пользователя ввода пароля. Обычно пароль храниться где-то в памяти (микроконтроллера) и поэтому может быть обнаружен и скомпрометирован. ATSHA204A может безопасно хранить пароли и выполнять различные операций с ними. Пароль никогда не передается открыто на устройство и он не может быть считан с устройства. Он хешируется случайным числом в системном программном окружении перед передачей на устройство (микроконтроллер).
Для работы с этой функциональностью ATSHA204A используется команда CheckMac (см. статьи цикла и подробности в даташите ATSHA204A).
Transport Keys
Микросхема ATSHA204A включает в себя внутренний аппаратный массив ключей (Transport Keys), которые предназначены для безопасной персонализации перед блокировкой Data зоны EEPROM. Значения аппаратных ключей хранятся в секрете и предоставляются квалифицированным клиентам по запросу в компанию Atmel. Эти ключи могут использоваться только с командой GenDig и обозначаются значением SlotID большим или равным 0x8000.
Для GenDig и всех других команд значения SlotID меньше 0x8000 всегда ссылаются на ключи, которые хранятся в Data зоне EEPROM ATSHA204A.
Заключение
Мы рассмотрели основные криптографические термины и команды, которые используются в работе микросхемы ATSHA204A, это тот минимум, который необходим для осмысленной работы с широким функционалом чипа ATSHA204A по реализации различных криптографических сценариев в ваших проектах.
Ссылки по теме
ATSHA204 - Библиотека и примеры
ATSHA204A - Чтение зоны конфигурации 1
ATSHA204A - Чтение зоны конфигурации 2
ATSHA204A - Чтение зоны конфигурации 3
ATSHA204A - Запись конфигурации 1
ATSHA204A - Запись конфигурации 2
ATSHA204A - Запись конфигурации 3
ATSHA204A - Запись конфигурации 4
ATSHA204A - Работа в режиме Config Lock
ATSHA204A - Работа с зонами памяти
ATSHA204A - Чтение Data и OTP зон памяти
ATSHA204A - Аутентификация. Базовый блок
ATSHA204A - Аутентификация. Датчик
ATSHA204A - Криптография и команды
ATSHA204A - nRF24 аутентификация. База
ATSHA204A - nRF24 аутентификация. Датчик