В этой статье мы продолжим знакомство с маленьким гигантом большого крипто — микросхемой ATSHA204A, начатое в предыдущей статье и попробуем осознать, с чем мы имеем дело и насколько глубока эта кроличья нора.
Как я уже заметил в предыдущей статье, нельзя просто так взять и «забацать что-нибудь криптографическое» на ATSHA204A — всё намного сложнее и прежде чем вы сможете использовать этот чип в своих проектах, вам нужно будет изучить устройство, архитектуру и принципы работы, заложенные в него сумрачным американским гением компании Microchip. Без этого вы просто не сможете ничего сделать с ATSHA204A.
Итак, следуйте за мной.
Два аспекта проблемы
Проблема (практической) работы с ATSHA204A делится на две части: технологическую и криптографическую.
1. Технологический аспект. Технологическая проблема заключается в том, что ATSHA204A является изощрённо сложным устройством как с точки зрения архитектуры, так и с точки зрения алгоритмов (формальной) работы с ней. Вы чётко должны представлять себе организацию, свойства и назначение областей (CONFIG, DATA, OTP) памяти, регистров, слотов и т. д. Вы также должны представлять себе иерархию зависимостей тех же слотов, регистров, областей памяти и т. д. Отдельно стоит вопрос о том, что вы не должны ошибаться ни в последовательности действий, ни в областях записи данных, ни в назначении конфигурационных регистров и при этом не должны забывать об основной задаче, которую решаете — создание определённой криптоархитектуры вашего проекта.
2. Криптографический аспект. Это уже мета-проблема по отношению к самой ATSHA204A. Здесь, прежде всего, вы должны чётко представлять себе, что и зачем вы делаете с чисто криптографической точки зрения — какую криптоархитектуру проекта вы реализуете с помощью ATSHA204A. Какие ключи, данные, счётчики и т. п. вы храните в ATSHA204A (например, «датчика»), какие ключи, данные, счётчики и т. п. вы храните в ATSHA204A (например, «базы»), как всё это должно взаимодействовать, и какие криптографические алгоритмы должны быть задействованы, чтобы грамотно решалась задача обеспечения безопасности экосистемы вашего проекта.
Каждый из двух этих аспектов является серьёзной преградой для практического использования ATSHA204A — для работы с подобным устройством требуется серьёзная квалификация как в программировании, так и в собственно криптографии. А в совокупности эти два аспекта становятся непреодолимой преградой для большинства DIY энтузиастов и даже многих профессиональных разработчиков.
Но мы попробуем нарушить этот сложившийся статус-кво и сделать работу с ATSHA204A доступной всем.
План освоения ATSHA204A
Говорить о (криптографических) алгоритмах как, собственно, хешировании, так и на более высоком уровне — о самой криптоархитектуре взаимодействия между частями вашей системы не имеет смысла без понимания работы самого чипа ATSHA204A. Поэтому в этой и ближайших статьях мы будем уделять своё внимание устройству и работе самой микросхемы ATSHA204A.
И только после освоения «элементарных» операций с ATSHA204A, мы сможем перейти к собственно криптографии (алгоритмам, хешированию, аутентификации, обмену данными и т. п. операциям). Здесь как в школе — сначала таблица умножения, затем высшая математика (но никак не наоборот).
Начнём мы с основы основ — областей (зон) памяти ATSHA204A.
Зоны памяти
Частично этот вопрос мы уже затрагивали в предыдущей статье, напомним здесь основные моменты организации памяти ATSHA204A.
ATSHA204A содержит оперативную SRAM память, которая используется для работы криптографических функций (вычисления хешей, хранения промежуточных значений, передачи ключей и данных в функции и т. п. целей). В данном случае оперативная память нас не очень интересует, мы будем о ней говорить при рассмотрении работы конкретных функций. Здесь же мы уделим основное внимание организации долговременной EEPROM памяти ATSHA204A.
Микросхема ATSHA204A содержит три специализированные зоны (области) EEPROM памяти общим объёмом в 5312 бит (664 байта), это DATA, CONFIGURATION и OTP зоны:
1. Data Zone. Эта зона используется для безопасного хранения данных (ключей). Регламент доступа к зоне данных устанавливается при начальном программировании конфигурационной зоны.
2. Configuration Zone. Это, коротко говоря, область EEPROM памяти, предназначенная для хранения индивидуальных настроек вашего экземпляра микросхемы ATSHA204A.
3. OTP (One Time Programmable) Zone. Область установки и хранения «одноразовых» значений, которые можно считывать по определённым правилам.
Рассмотрим подробнее организацию, назначение и конфигурирование первой из трёх зон памяти — зоны данных.
Зона данных (Data Zone)
Как видно из названия, Data Zone предназначена для (безопасного) хранения данных. Это могут быть любые ваши абстрактные данные или криптографические ключи. Она состоит из 16-и 32-байтных слотов общим объёмом 4096 бит (512 байт).
Вот что говорит о Data Zone сам производитель чипа:
The Data zone is 512-bytes (4 kb), is part of the EEPROM array and can be used for secure storage purposes.
Prior to locking the configuration section using Lock(Config), the Data zone is inaccessible and can be neither read nor written. After configuration locking, the entire Data zone can be written using the Write command. If desired, the data to be written can be encrypted.
Зона данных имеет объём 512 байт (4 кб), является частью EEPROM памяти и может использоваться для целей безопасного хранения данных.
До блокировки раздела конфигурации с помощью Lock (Config) зона данных недоступна для чтения или записи. После блокировки конфигурации зона данных может быть записана с помощью команды Write. По желанию данные, подлежащие записи, могут быть зашифрованы.
In the following table, “Byte Address” is the byte address within the Data zone for the first byte in the respective slot. Because all Reads and Writes with the ATSHA204A are performed on a word (4-byte or 32-byte) basis and the word address in the table below should be used for the address parameter passed to the Read and Write commands.
В следующей таблице, в столбце «Byte Address» указаны байтовые адреса в зоне данных первого байта в соответствующем слоте. Поскольку все операции чтения и записи в ATSHA204A выполняются для 4-байтовых или 32-байтовых слов, то значения, указанные в столбце «Word Address» можно использовать для передачи параметра (адреса) для команд чтения и записи.
Теперь попытаемся объяснить всё это более простым языком. У нас есть 16 32-байтовых слотов, каждый из которых вы можете использовать по своему усмотрению для нужд своего проекта. Вы можете записать в эти слоты любые ваши данные или криптографические ключи (благо размер слота имеет размер 32 байта или 256 бит, что очень этому благоприятствует).
Запись ваших (секретных) данных и ключей в Data Zone является предпочтительным (по сравнению с другими местами их хранения) как минимум по двум причинам: во-первых, Data Zone микросхемы ATSHA204A защищена от попыток физического взлома и, во-вторых, доступ к хранимым в этой области данным (строго) регламентируется специальными битами в конфигурационной зоне (Configuration Zone) ATSHA204A. Другими словами, у вас есть возможность установить регламент доступа к данным, которые вы записали в слоты Data Zone (подробно мы разберём это чуть ниже).
Примечание. У ATSHA204A есть две промежуточные LOCK-операции: Lock Config и Lock Data. Смысл этих операций заключается в том, чтобы провести конфигурацию (вашего экземпляра) ATSHA204A, необратимым образом «залочить» все ваши настройки и придать (вашему экземпляру) ATSHA204A уникальные свойства (характеристики).
Сначала выполняется операция Lock Config, а затем Lock Data. Важно понимать, что само проведение LOCK-операций специфическим образом меняет функциональность ATSHA204A. Это мы тоже будем разбирать далее.
Операции чтения (Read) и записи (Write) в ATSHA204A выполняются 4-байтовыми или 32-байтовыми словами, поэтому для удобства в вышеприведённой таблице даны как (по)байтовые адреса слотов в Data Zone, так и 4-байтовые «Word Address». Видимо, чтобы (будущие) крипто-разработчики не расслаблялись, значения адресов даны не в десятичной, а в шестнадцатеричной форме и при первой попытке как-то всё это осмыслить, в голове образуется натуральная каша из слотов, смещений, 4-байтовых значений в шестнадцатеричной форме и тому подобной «мишуры».
Далее я привожу собственную таблицу, несколько более наглядно демонстрирующую устройство Data Zone микросхемы ATSHA204A. Нулевой слот разобран подробно, остальные слоты даны только своими первыми байтами. Как я уже замечал выше, разработчики ATSHA204A, то ли в насмешку (и чтобы жизнь не казалась малиной), то ли в силу своей окончательной «хексанутости» устроили невероятную кашу с разметкой областей памяти, нотаций, смещений, систем счислений и прочего, поэтому эта таблица вам очень пригодится, когда вы захотите что-то считать или записать в Data Zone ATSHA204A (а это, как и всё в ATSHA204A, далеко не тривиальные операции, несмотря на наличие соответствующих команд).
Теперь по поводу регламента записи и чтения слотов в Data Zone и что важно понимать в этой связи. Изначально, с «чистым» экземпляром ATSHA204A вы не можете ничего записать и прочитать в Data Zone. Соответственно, не будут работать ни команды Read и Write, ни ассоциированные с данными из этой области функции.
Для того чтобы получить возможность что-то записать в Data Zone ATSHA204A, нужно сначала залочить её процедурой Lock Config, а эта процедура предполагает, что перед её проведением вы уже произвели конфигурирование Configuration Zone (что логично). Само по себе конфигурирование Configuration Zone — это тоже весьма нетривиальная операция, разбор которой потребует отдельной статьи, здесь вам только нужно уяснить для себя общий порядок действий для записи и чтения слотов в Data Zone.
Итак, мы произвели операцию Lock Config и получили возможность что-то записать в Data Zone. Уже неплохо, но на этом этапе мы не можем не только протестировать заложенный нами в ATSHA204A функционал, но и даже просто прочитать из Data Zone записанные нами данные. Для того чтобы получить возможность что-то прочитать из Data Zone, нам нужно провести окончательную блокировку ATSHA204A командой Lock Data — и только после этого мы сможем что-то прочитать из области данных.
Примечание. И в этом заключается ещё одна из сложностей работы с ATSHA204A — на этапе конфигурирования и «сборки» ATSHA204A вы не можете проверить результат своих действий — вы сможете это сделать только после окончательной блокировки микросхемы, когда исправить уже ничего невозможно. При работе с ATSHA204A у вас нет права ни на формальную, ни на логическую, ни на системную (крипто-архитектурную) ошибку. Работая с ATSHA204A, вы должны быть безупречны.
Немного о Configuration Zone
Теперь затронем немного проблематику Configuration Zone, ассоциированную с Data Zone. Как вы уже знаете из предыдущего материала, доступ к слотам Data Zone (жёстко) регламентируется установками, содержащимися в Configuration Zone. Разберём это немного подробнее.
Для начала приведём таблицу Configuration Zone из даташита ATSHA204A. Хорошенько рассмотрите её, поскольку это «краеугольный камень» всей системы и нам придётся много раз обращаться к ней в наших статьях (тут вам уже может понадобиться «стакан», чтобы в ней разобраться).
В контексте этой статьи нас будут интересовать байты (биты), которые оказывают влияние на работу слотов зоны данных. Это CheckMacConfig, Slot Configuration 0–15, Use Flag 0–7, Update Count 0–7, Last Key Use 0–15. Мы здесь не будем подробно разбирать их работу, дадим только общее представление о конфигурации и управлении работой зоны данных ATSHA204A.
▍ Slot Configuration 0–15
Slot Configuration — это 16 блоков по 2 байта, которые определяют регламент работы и доступа к слотам Data Zone ATSHA204A. Эти правила вступают в силу после проведения процедуры блокировки Lock Data, до этого слоты могут быть свободно записаны, но не могут быть прочитаны.
Вот правила для битов Slot Configuration, которые определяют поведение слотов Data Zone, приведённые в даташите ATSHA204A:
Чтобы вы могли по достоинству оценить глубину проблемы, я набросал небольшую таблицу заводской конфигурации слотов Data Zone ATSHA204A. Мило, не правда ли? По крайней мере, инженерам компании Microchip не откажешь в креативности.
По-хорошему эта таблица должна присутствовать в даташите ATSHA204A, чтобы разработчики могли хоть что-то понять из официальной документации на этот чип. Поскольку этой таблицы нет в даташите, то «гоблины» из Microchip, видимо, предполагают, что вы, как разработчик, должны обладать такой мощью абстрактного мышления, что можете «развернуть» её в своей голове, исходя только из описания их правил для Slot Configuration.
Для тех, кто не понял, что означает эта таблица, поясню: по вертикали мы видим 16 слотов с развёрнутыми установками (правилами) для каждого слота. Здесь каждый слот имеет уникальный набор свойств, установленный на заводе-изготовителе. Вы можете подобрать из имеющихся наборов подходящий для вашего проекта или изменить свойства слотов в соответствии с вашими требованиями.
▍ Use Flag 0–7
Для слотов с «ограниченным использованием». Биты, установленные к «1» определяют количество раз, когда слоты 0–7 могут быть использованы перед отключением.
▍ Update Count 0–7
Значения байтов Update Count определяют сколько раз слоты 0–7 могут быть обновлены с помощью команды DeriveKey.
▍ Last Key Use 0–15
Значения байтов Last Key Use применяются для ограничения работы со слотами 0–15, где каждый единичный бит представляет оставшееся их использование. Применяется только в том случае, если 5-й бит SlotConfig (Single Use) установлен в единицу.
▍ CheckMacConfig
Значение байтов CheckMacConfig используется для изменения режима работы команд Read, Write и CheckMac со слотами в Data Zone. Для Read и Write зашифрованные команды чтения и записи не будут работать, если значение в TempKey.SourceFlag побитно не совпадёт с этим байтом (при чтении и записи открытого текста этот параметр игнорируется):
Бит 0 — слоты 0, 1
Бит 1 — слоты 2, 3
Бит 2 — слоты 4, 5
Бит 3 — слоты 6, 7
Бит 4 — слоты 8, 9
Бит 5 — слоты 10, 11
Бит 6 — слоты 12, 13
Бит 7 — слоты 14, 15
Для CheckMac копирование будет возможно, только если значение CheckMacSource целевого слота соответствует значению 2-го бита режима команды CheckMac. Команда не будет выполнена, если 2-й бит режима не соответствует TempKey.SourceFlag.
Бит 0 — слот 1
Бит 1 — слот 3
Бит 2 — слот 5
Бит 3 — слот 7
Бит 4 — слот 9
Бит 5 — слот 11
Бит 6 — слот 13
Бит 7 — слот 15
Примечание. Как вам такой ход мысли инженеров Microchip? Я в жизни не встречал ничего более замороченного, а ведь мы ещё даже близко не подступились к самой криптографии...
Здесь мы рассмотрели основные настройки в Configuration Zone, ассоциированные и влияющие на свойства и поведение слотов в Data Zone, более подробно обо всех нюансах конфигурации и работы со слотами Data Zone мы будем говорить в последующих статьях.
Заключение
В этой статье мы познакомились с общей проблематикой работы с ATSHA204A и получили представление о глубине кроличьей норы под названием «ATSHA204A». При ближайшем рассмотрении это, оказывается, даже не кроличьей норой, а прямо-таки подземельем гоблинов из самого Мордора, в мрачные глубины которого рискнёт спуститься не каждый разработчик.
Но нас это не остановит, и в следующей статье мы продолжим изучение работы ATSHA204A и познакомимся с устройством её OTP и Configuration зон памяти.