Бутлоадеры предназначены для самостоятельного обновления пользователями программного обеспечения аппаратуры (firmware). Однако поставляемая в незащищённом виде прошивка может стать причиной взлома, нелегального копирования, кражи секретов компании-разработчика firmware. В этом случае может помочь шифрование кода прошивки. В даташите "AVR230: DES Bootloader" подробно описан пример такого решения, и его можно довольно просто адаптировать под свои нужды.
[Возможности защищённого бутлоадера AVR DES bootloader]
• Работает со всеми микроконтроллерами AVR, у которых есть встроенная поддержка бутлоадера. • Организует защищенную передачу скомпилированного firmware и/или чувствительных данных в любой микроконтроллер AVR, у которого есть встроенная поддержка бутлоадера. • Апноут поставляется с конфигурируемыми примерами программ, простыми для использования: – шифрование двоичных файлов и данных. – создание бутлоадеров для целевых AVR. – загрузка зашифрованных файлов в память целевого AVR. • Алгоритм шифрования соответствует стандарту Data Encryption Standard (DES). • Для улучшения защиты может использоваться тройной DES (Triple Data Encryption Standard, 3DES). • DES Bootloader умещается в секцию бутлоадера 2 килобайта, имеющуюся на всех микроконтроллерах AVR с поддержкой технологии бутлоадера. • 3DES Bootloader умещается в секцию бутлоадера 2 килобайта, имеющуюся на всех микроконтроллерах AVR с поддержкой технологии бутлоадера, за исключением ATmega128. • Примеры типичного времени передачи данных, расшифровки и программирования памяти для 16 килобайтного приложения. – DES, 115200 бод, тактовая частота 16 МГц: 20 секунд. – 3DES, 115200 бод, тактовая частота 16 МГц: 50 секунд.
[Введение]
Этот апноут показывает, как можно защищённо обновлять firmware микроконтроллера AVR, который имеет поддержку технологии бутлоадера. Этот метод включает использование Data Encryption Standard (DES) для шифрования firmware. Этот апноут также поддерживает Triple Data Encryption Standard (3DES).
Разработки электроники с использованием микроконтроллера всегда должны быть снабжены соответствующим программным обеспечением - firmware, будь это музыкальный плеер, фен для волос или швейная машина. Многие электронные разработки развиваются быстро, и они нуждаются в возможности обновления продукции, которая уже была отгружена или продана. Изменение аппаратуры может быть очень сложным, особенно если продукт уже находится у конечного потребителя. Однако firmware можно довольно просто обновить в продуктах, где применяются микроконтроллеры с памятью на FLASH, как это реализовано в микроконтроллерах семейства AVR.
Многие микроконтроллеры AVR могут быть сконфигурированы так, что можно создать бутлоадер, который может принять обновление firmware и перепрограммировать собственную память FLASH по внешнему запросу. Область памяти программ (память FLASH) делится на 2 секции: секция бутлоадера Bootloader Section (BLS) и секция приложения Application Section (AS). Каждая из секций снабжена отдельными битами защиты (lock bits) для защиты от чтения и записи, так что код бутлоадера может защищённо находиться в BLS, и в то же время бутлоадер может обновлять код секции AS. Следовательно, алгоритм обновления в BLS может быть просто защищен от внешнего нежелательного доступа.
Остается проблема с firmware, которое обычно не защищено до того момента, когда оно записано во FLASH и установлены биты защиты. Это значит, что если firmware нужно обновить "в поле", т. е. у конечного пользователя или у дистрибьютора, то оно будет открыто для неавторизованного доступа с того момента, как firmware выйдет из стен лаборатории разработки производителя. Этот аптноут показывает, как данные, предназначенные для передачи во FLASH или EEPROM, могут быть защищены в течение всего процесса обновления с помощью методов криптографии. Идея состоит в том, чтобы зашифровать данные перед тем, как они покинут лабораторию разработки, и расшифровать их только после того, как они будут загружены в целевой AVR. Эта процедура не защитит от неавторизованного копирования firmware, но копия (как и оригинал, конечно) будет бесполезна без подходящих ключей дешифровки. Ключи дешифровки сохранены в месте, недоступном из окружения обновления firmware: внутри целевого AVR. С правильно установленными битами защиты ключи не могут быть прочитаны из целевого AVR. Кроме того, ключи не могут быть восстановлены из зашифрованных данных. Есть только один способ получить доступ к данным - использование правильных ключей.
На рисунке 1 показан пример, как продукт сначала произведен, загружен начальной версией firmware, продан и позже обновлен новой ревизией firmware.
Рис. 1. Пример производства и процедуры обновления продукта, основанного на микроконтроллере AVR
Примечания к рисунку:
1. Во время производства микроконтроллер сначала оборудуется бутлоадером, ключами дешифровки и рабочим приложением. Бутлоадер отвечает за прием обновляемого приложения и программирование его в память FLASH микроконтроллера, в то время как ключи нужны для дешифровки приходящих данных. Биты защиты устанавливаются, чтобы защитить незашифрованный код firmware, который записан внутри AVR. 2. Затем готовое запрограммированное изделие поставляется дистрибьютору или продается конечному потребителю. Биты защиты продолжают защищать незашифрованный код firmware, который записан внутри AVR. 3. Завершен новый релиз firmware, и в этот момент нужно обновить готовые изделия, которые уже были распространены. Поэтому новое firmware шифруется и поставляется дистрибьютору. Зашифрованное firmware бесполезно без ключей дешифровки, и поэтому каждая локальная копия программного обеспечения (например, на жестком диске компьютера дистрибьютора) не представляет никакой угрозы для безопасности. 4. Дистрибьютор обновляет все изделия в магазине, и все те изделия, которые были возвращены пользователями (например, для ремонта). Зашифрованное firmware загружается в AVR и дешифрируется уже внутри микроконтроллера. Биты защиты продолжают защищать незашифрованный код обновленного firmware, который записан внутри AVR.
[Что такое криптография]
Криптография является искусством или наукой держать информацию в секрете, и она основывается на скрытии методов криптографии или на защите с помощью криптографических ключей. Алгоритмы, основанные на секрете метода шифрования сейчас представляют только исторический интерес, и не соответствуют потребностям реального мира. Современные алгоритмы шифрования используют ключ для управления шифрованием и дешифровкой. Без подходящего ключа зашифрованное сообщение или данные не могут быть преобразованы в открытый текст.
Шифрование является методом кодирования сообщения или данных, так что их реальное содержимое становится скрытым для неавторизованного доступа. Открытое сообщение или данные в своей оригинальной форме могут содержать информацию, которую автор или дистрибьютор хотели бы держать в секрете - как например, код firmware микроконтроллера. Например, когда микроконтроллер обновляется "в поле", то без применения методов шифрования очень сложно защитить firmware от попыток незаконного копирования и реверс-инжиниринга. Шифрование firmware сделает его бесполезным, пока оно не будет расшифровано.
Дешифровка является методом получения оригинального сообщения или данных, и дешифровка обычно не может быть произведена без знания правильного ключа дешифровки. Ключи могут быть сохранены в бутлоадере микроконтроллера, так что обновляемое устройство может принять зашифрованные данные, расшифровать их и перепрограммировать выбранные части памяти FLASH или EEPROM. Ключи дешифровки не могут быть получены из зашифрованных данных и не могут быть прочитаны из микроконтроллеров AVR, если запрограммированы соответствующие биты защиты.
Алгоритмы шифрования делятся на два класса - симметричные и асимметричные. Симметричные алгоритмы используют тот же самый ключ как для шифрования, так и для дешифровки, в то время как асимметричные алгоритмы используют разные ключи. Наиболее изученным и вероятно, самым широко распространенным является DES, относящийся к симметричным алгоритмам.
[Data Encryption Standard – DES]
Алгоритм DES был разработан в 1970 году и позже был стандартизован Стендфодским Национальным Институтом Стандартов США (US National Institute of Standards, NIST). DES является симметричным криптографическим алгоритмом, использующим 56-битный ключ. Этот алгоритм на практике показал свою силу и пережил многие другие методы шифрования.
Алгоритм DES использует 56-битный ключ, который дает следующее количество возможных комбинаций:
256 = 72057594037927936 = 7.206 x 1016
Алгоритм DES является блочным, работающим с блоками данных из 64 бит. Обработка каждого блока показана на рисунке 2.
Рис. 2. Поток шифрования в алгоритме DES.
Сначала порядок бит во входном блоке данных меняется функцией пермутации. Далее младшие 32 бита (R0) обрабатываются отдельно от старших 32 бит (L0) за 16 шагов. Каждый шаг использует различные подчасти (Kn) ключа шифрования (на рисунке 2 показаны только шаги 1, 2 и 16). В завершении порядок бит снова меняется инверсной функцией пермутации.
Алгоритм дешифровки применяется тот же, что и для шифрования, меняется на обратную только последовательность выбора подчастей ключа Kn.
[Triple Data Encryption Standard – 3DES]
Алгоритм тройного DES (3DES) базируется на применении DES трижды (как определено в ANSI x9.52), чем увеличивается длина ключа с 56 до 168 бит. 3DES намного надежнее, чем DES, однако не очень хорошо подходит для приложений реалтайма (из-за большого количества вычислений), и проигрывает по быстродействию некоторым более новым алгоритмам. Для этого апноута время вычислений не является критичным, так что 3DES является вполне подходящим решением.
Алгоритм 3DES использует три отдельных 56-битных ключа, так что количество возможных комбинаций ключа увеличивается (по сравнению с одиночным DES):
2168 = 3.741 x 1050
Рис. 3. Алгоритм потока шифрования 3DES
Во время шифрования данные входного блока сначала шифруются первым ключом, потом дешифруются вторым, и в конце опять шифруются третьим ключом. Во время дешифровки ключевая последовательность и последовательность шифрования/дешифровки блока меняется на обратные, как показано на рисунке 4.
Рис. 4. Алгоритм потока дешифровки 3DES
В стандарте определены следующие опции для ключей, см. таблицу 1.
Таблица 1. Опции ключей 3DES
Вариант опции |
Количество независимых ключей |
Связанные ключи |
Keying Option 1 |
3 ключа (KEY1, KEY2 и KEY3) |
нет |
Keying Option 2 |
2 ключа (KEY1 и KEY2) |
KEY3 = KEY1 |
Keying Option 3 |
1 ключ (KEY1) |
KEY1 = KEY2 = KEY3 |
Следует иметь в виду, что только первая из опций (keying option 1) реализует в полную длину ключа шифрования 3DES. Третий вариант (keying option 3) по размеру ключа аналогичен одиночному DES.
[Cipher block chaining – CBC (выстраивание шифрованных блоков в цепочку)]
Алгоритмы DES и 3DES являются блоковыми, т. е. они работают с блоками данных фиксированного размера. 56-битный ключ используется для шифрования данных блоками по 64 бита. Для известных блоков данных и постоянного (однако неизвестного) ключа шифрования выходной блок получится тот же самым. Эта информация может помочь потенциальному взломщику системы шифрования.
Есть несколько методов, которые обычно используются для того, чтобы блоки с одинаковым открытым текстом были зашифрованы в блоки, отличающиеся друг от друга по содержанию. Один из методов называется Cipher Block Chaining (CBC).
По методу CBC шифрованные блоки соединяются друг с другом так, что начальные блоки влияют на все последующие блоки. Это достигается путем первоначальной операции XOR текущего еще не зашифрованного блока и предыдущего зашифрованного блока. Результат XOR затем шифруется вместо открытых исходных данных.
Как обеспечить защиту системы?
Важно понимать, что теоретически можно взломать основанные на ключе методы криптографии простым последовательным тестированием всех возможных комбинаций ключей. При рассмотрении идеальной системы, которая не может быть взломана никаким другим способом, уровень защищённости данных экспоненциально пропорционален длине криптографического ключа. Общим методом незаконных попыток дешифровки является метод грубой силы (brute force), т. е. пошаговый перебор всех возможных комбинаций ключей, пока не получится получить расшифрованные данные. Никакой человек-оператор не может выполнить вручную этот процесс, однако его можно автоматизировать применением специальных программ и аппаратуры. Однако все еще требуется человек, который может правильно настроить распознавание понятного вывода процесса дешифровки от непонятного. В атаках brute force требуемая для вычислений мощность растет экспоненциально с увеличением длины ключа. Так как вычислительная мощность также приблизительно экспоненциально растет с течением времени, то взлом, который нельзя реализовать сейчас, может быть проведен в будущем. В таблице 2 показан эффект длины ключа, влияющий на стойкость шифрования. Нужно иметь в виду, что приведенные примеры могут использоваться только как общее руководство, и в реальности могут иметь место различные вариации условий, влияющие на оценку. Информация была собрана из источников, упомянутых в секции Литература.
Таблица 2. Время, требуемое для взлома, в зависимости от длины ключа (см. раздел Литература).
Длина ключа |
Алгоритм |
Частные лица, маленькие компании |
Организованная преступность, крупные компании, правительство
|
Обычный компьютер PC |
Вычислительная сеть |
Специальное оборудование для взлома |
32 бита |
|
минуты, часы |
|
|
40 бит |
|
дни, недели |
минуты, часы |
|
56 бит |
DES |
В настоящее время взлом невозможен |
недели, месяцы |
часы, дни |
64 бита |
|
очень долго |
довольно быстро |
80 бит |
|
В настоящее время взлом невозможен |
долго |
128 бит |
|
В настоящее время взлом невозможен |
168 бит |
3DES |
Другие методы атаки направлены на аппаратуру, а не на зашифрованную информацию. В этом апноуте аппаратура защищена архитектурой Atmel микроконтроллеров AVR, основанной на памяти FLASH. Бутлоадер DES/3DES, включая ключи дешифровки, загружен в память FLASH и защищен битами защиты (lock bits). Теперь firmware может быть обновлено "в поле", с использованием зашифрованных патчей, но ключи дешифровки не могут быть считаны из AVR.
Когда биты защиты установлены, то запрещен доступ на внешнюю запись и внешнее чтение. Можно получить доступ к памяти микроконтроллера AVR только путем полного стирания. Если это сделать, то будут уничтожены как сам бутлоадер, так и ключи дешифровки.
Рекомендации по улучшению защиты системы
Этот апноут представляет техники, которые можно использовать для защиты разрабатываемого устройства от несанкционированного внешнего доступа. Несмотря на то, что ни одна разработка не может быть выполнена полностью защищённой, можно сделать её так, что взлом защиты будет максимально сложным, насколько это возможно. Это коренное отличие незащищённого дизайна, с которым взломщик с минимальными техническими знаниями может скопировать разработку, от защищённого, который может взломать только человек с высокой квалификацией. В случае незащищённой разработки она может быть просто скопирована и даже подвергнута реверс-инжинирингу, нарушая интеллектуальную собственность производителя и создавая опасную для него ситуацию на рынке. В случае применения защиты усилия, которые потребуются для взлома, окажутся настолько высоки, что могут заставить потенциального взломщика сосредоточиться на разработке собственных продуктов.
Есть только одно правило для создания защищённой системы: она должна быть разработана так, чтобы максимально, как это только возможно, затруднить взлом. Для взлома могут использоваться любые способы обойти защиту, даже самые экзотические. Далее приведено несколько примеров таких способов (уязвимостей), которые стоит рассмотреть.
Что произойдет, когда отключается питание во время процедуры обновления? Какое будет состояние у микроконтроллера, когда питание снова восстановится? Биты защиты и вектора сброса будут все время установлены правильно?
Могут ли быть сделаны какие-либо предположения относительно исходного кода на основе незашифрованной информации? В приложении к DES для взлома методом грубой силы такие данные могут помочь для поиска известных паттернов информации. Атакующий не сможет перепробовать все возможные комбинации ключа, не ожидая получить определенный код firmware. Атакующее программное обеспечение может быть сконфигурировано для поиска известных паттернов, как например таблицы векторов прерываний, с которой начинается память программ, а также областей памяти, заполненных нулями или единицами, и так далее.
Можно ли получить какую-нибудь обратную связь от процесса дешифровки? Любая такая связь может помочь атакующему. Например, если алгоритм дешифровки внутри бутлоадера будет выдавать OK / Not OK на каждый обработанный блок, то этот сигнал может быть использован как обратная связь для платформы атаки.
Должны ли защищенные фреймы быть отправленными в другом порядке? Если первый фрейм, отправленный бутлоадеру, всегда включает в себя первый блок зашифрованного файла, то атакующий на основе этого может сделать некоторые предположения об исходном (незашифрованном) содержании отправленного блока. Например, он может предположить, что первый фрейм содержит данные программы, начинающиеся с нулевого адреса, и там будет находиться таблица векторов прерываний. Эти данные помогут уточнить исходные данные для поиска/подбора ключа. Для увеличения защищённости системы нужно посылать фреймы в случайном порядке (во всяком случае декодированные фреймы все равно будут отображены на свой правильный исходный адрес).
[Реализация программного обеспечения и описание его применения]
Эта секция описывает, как использовать и конфигурировать программы, реализующие защиту. Процесс показан на рисунке 5.
Рис. 5. Обзор процесса применения защиты.
Пояснения к рисунку:
Application note апноут, указания по применению (эта статья, AVR230). Bootloader Source компилируемый исходный код бутлоадера DES, см. [5]. Header File файл заголовка, который подключается к компилируемому проекту бутлоадера. Key File файл ключа DES для дешифровки. IAR Embedded Workbench система разработки программ для микроконтроллера AVR, в среде которой компилируется DES бутлоадер. Text editor любой текстовый редактор, в котором можно подготовить конфигурационный файл. GenTemp специальная программа для создания шаблона конфигурационного файла, который может быть впоследствии отредактирован в текстовом редакторе. Configuration File конфигурационный файл для системы создания шифрованного firmware, описанной в этом апноуте. Miscellaneous Editor произвольный редактор данных, в которых подготавливается незашифрованный дамп для EEPROM. Это может быть и HEX-редактор типа WinHEX, или среда разработки AVR Studio вместе с WinAVR. Application Builder система разработки приложения firmware, которое работает в секции приложения Application Section (AS). Именно это приложение защищённо обновляется с применением шифрования DES. Система разработки может быть любой (IAR Embedded Workbench, AVR Studio). Create специальная программа, которая подготавливает шифрованное firmware и файлы заголовка (Header File) и ключа (Key File) для бутлоадера. Encrypted Firmware шифрованный блок данных, в котором находится обновление - как само firmware, так и возможно данные для EEPROM. Bootloader двоичный код бутлоадера, который прошивается в секцию BLS микроконтроллера AVR (Target AVR) с помощью внешнего программатора (обычно ISP или JTAG). Update специальная программа, которая передает шифрованный блок данных бутлоадера для обновления firmware. Target AVR целевой микроконтроллер AVR, на котором работает бутлоадер, и программное обеспечение которого обновляется.
На рисунке 5 показаны следующие основные шаги (далее эти шаги будут рассмотрены более подробно):
1. Создание приложения (firmware) для целевого микроконтроллера AVR (прошивка FLASH). Если это необходимо, также в отдельном файле создаются данные и для энергонезависимой памяти (прошивка EEPROM). 2. Создается конфигурационный файл, содержащий информацию о проекте. Приложение, называемое gentemp, может использоваться для создания файла фрейма. 3. Запуск приложения, которое называется create. Это создаст заголовочный файл, файл ключа и зашифрованный файл. 4. Используя IAR Embedded Workbench®, сконфигурируйте (configure) и сделайте сборку (build) для бутлоадера (bootloader) целевого AVR. 5. С помощью программатора загрузите бутлоадер в целевой микроконтроллер AVR, установите биты защиты (lock bits) и биты конфигурационных перемычек (фьюзы, fuse bits). 6. Теперь в любое удобное время зашифрованное firmware может быть загружено в AVR (с помощью бутлоадера).
Configuration File - конфигурационный файл
Файл конфигурации содержит список параметров, которые используются для конфигурирования проекта. Параметры описаны в таблице 3.
Таблица 3. Общий обзор опций конфигурационного файла.
Параметр |
Описание |
Значение по умолчанию |
Параметр обязателен? |
PAGE_SIZE |
Размер страницы FLASH AVR, указанное в десятичном виде. Этот параметр зависит от типа применяемого AVR, обращайтесь к его даташиту |
- |
ДА |
KEY1 |
Первый ключ шифрования в шестнадцатеричном виде. Должно быть указано 8 случайных байт, у каждого из которых 8-й бит используется в качестве бита нечетности (odd-parity). |
не указан: нет шифрования |
нет, но очень рекомендуется его указать |
KEY2 |
Второй ключ шифрования. Указывается так же, как и первый, однако используется для двухключевого 3DES. Если этот параметр не указан, то будет использоваться одиночный DES. |
не указан: используется одиночный DES |
нет, но рекомендуется |
KEY3 |
Третий ключ шифрования. Указывается так же, как и первый, однако используется для полного 3DES. Если этот параметр не указан, то будет использоваться одиночный DES или двухключевой 3DES. |
не указан: простой DES или 2-key 3DES |
нет |
INITIAL_VECTOR |
Используется для выстраивания шифрованных блоков в цепочку (chaining cipher blocks, CBC). Здесь должны быть указаны 8 случайных байт в шестнадцатеричном виде. |
0000000000000000 |
нет, но очень рекомендуется его указать |
SIGNATURE |
Данные проверки фрейма. Здесь могут быть указаны любые 4 байта, однако рекомендуется выбрать эти байты либо специально, либо случайным образом. |
00000000 |
ДА |
ENABLE_CRC |
Разрешить проверку CRC: Yes или No. Если разрешено (Yes), то все секции памяти приложения (AS) будут перезаписаны, и приложение должно пройти проверку на правильность CRC перед тем, как оно может быть запущено. |
No |
нет, но рекомендуется |
MEM_SIZE |
Размер секции приложения (Application Section, AS) целевого AVR, указанное в байтах, десятичным числом. |
нет |
ДА, если используется проверка CRC |
Примечание: алгоритм DES использует 56-битные ключи, однако ключи в конфигурационном файле предоставлены в виде 8 байт (64 бита). Причина в том, что 8-й бит используется как бит нечетности (odd-parity).
Конфигурационному файлу можно дать любое допустимое имя. Это имя позже будет предоставлено как параметр для приложения, которое создает файлы проекта. Ниже приведен пример конфигурационного файла для микроконтроллера Atmel ATmega16.
PAGE_SIZE = 128 MEM_SIZE = 14336 KEY1 = 0123456789ABCDEF KEY2 = FEDCBA9876543210 KEY3 = 89ABCDEF01234567 INITIAL_VECTOR = 0011223344556677 SIGNATURE = 89ABCDEF ENABLE_CRC = YES
Некоторые параметры не могут быть установлены без знания специфики целевого AVR. Таблица 4-2 суммирует опции конфигурации по применению бутлоадера DES с некоторыми имеющимися в настоящий момент микроконтроллерами AVR, в которых предусмотрена поддержка секции бутлоадера. Для чипов микроконтроллеров, не указанных в этой таблице, пожалуйста обратитесь к его даташиту.
Таблица 4. Сводная таблица параметров AVR, которые используются для бутлоадера DES.
|
ATmega8 |
ATmega8515 |
ATmega8535 |
ATmega16 |
ATmega162 |
ATmega169 |
ATmega32 |
ATmega64 |
ATmega128 |
Размер FLASH, байт |
8K |
16K |
32K |
64K |
128K |
Размер страницы FLASH, байт |
64 |
128 |
256 |
Количество страниц FLASH |
128 |
256 |
512 |
BLS (max), байт |
2048 |
4096 |
8192 |
Количество страниц BLS |
32 |
16 |
32 |
MEM_SIZE, байт |
6144 |
14336 |
28672 |
57344 |
122880 |
PAGE_SIZE, байт |
64 |
128 |
256 |
Программа для компьютера (PC application) – GenTemp
Это маленькая консольная программа PC, которая генерирует шаблон для файла конфигурации. Программа генерирует случайные ключи шифрования и начальные векторы, оставляя другие параметры для заполнения пользователем (как например размер страницы FLASH). Рекомендуется всегда начинать с создания шаблона, используя эту программу. Программа используется следующим образом:
GenTemp FileName.Ext
В этом примере FileName.Ext - имя генерируемого шаблона конфигурационного файла. После того, как шаблон FileName.Ext сгенерирован, он может быть отредактирован любым текстовым редактором.
Программа для компьютера (PC application) – Create
Эта программа PC была создана с помощью Microsoft® Visual C++, version 6.0 (однако может быть скомпилирована и под любой другой версией). Она читает информацию из конфигурационного файла и генерирует файл ключа и заголовочный файл для бутлоадера. Эта программа также шифрует firmware. Обычно эту программу нужно запустить 2 раза: (1) чтобы сгенерировать файлы ключа и заголовка для DES-бутлоадера, и (2) для шифрования нового firmware.
Внимание: очень важно, чтобы использовалась одинаковая информация шифрования (из конфигурационного файла), когда генерируются файлы проекта DES-бутлоадера и когда шифруется firmware. Иначе бутлоадер может получить неправильные ключи шифрования и не сможет расшифровать данные.
Нужно также принимать во внимание, что можно использовать конфигурационный файл для того, чтобы расшифровать зашифрованное firmware. Поэтому конфигурационный файл нужно хранить в защищённом, недоступном для потенциального взломщика месте, и он не должен модифицироваться после того, как был использован в первый раз для шифрования firmware.
Аргументы командной строки для программы create
Программа Create принимает следующие допустимые аргументы для командной строки.
Таблица 5. Обзор опций командной строки программы create.
Аргумент |
Описание |
-c |
Путь до файла конфигурации. |
-d |
Если эта опция указана, то содержимое каждой страницы памяти FLASH будет удалено перед записью. Иначе иначе ранее имеющиеся там данные будут сохранены, если они специально не перезаписываются. |
-e < filename.ext > |
Путь до файла для содержимого EEPROM (данные, которые попадут в память EEPROM). |
-f < filename.ext > |
Путь до файла содержимого памяти FLASH (код программы, который попадет в секцию приложения Application Section, AS). |
-h < filename.ext > |
Имя для выходного файла заголовка. Этот файл позже будет подключен к проекту бутлоадера при его компиляции. |
-k < filename.ext > |
Имя выходного файла ключа. Этот файл позже будет подключен к проекту бутлоадера при его компиляции. |
-l [BLB12] [BLB11] [BLB02] [BLB01] |
Значения битов защиты (Lock bits) для их установки. Эти биты защиты будут установлены после того, как все данные буду переданы и перед тем, как управление (выполнение кода) будет передано обновленному приложению (в секцию AS). |
-n |
Nonsense (бессмыслица). Добавляется случайное количество бессмысленных записей в зашифрованный файл. Все "бессмысленные" записи будут игнорированы бутлоадером, так что эта опция никак не повлияет на работу приложения. Она влияет только на предсказуемость содержимого шифрованного файла (затрудняет взлом AES). |
-o < filename.ext > |
Имя выходного файла. Это защищенный (зашифрованный) файл, который может быть распространен и направлен в целевое перепрограммируемое устройство, когда его нужно обновить. |
Первый запуск программы Create
При первом запуске обычно генерируются только файлы ключа и заголовка для бутлоадера. Генерация ключа и заголовка запрашивается через аргументы командной строки:
Create –c Config.txt –h BootLdr.h –k DESKeys.inc
Файл ключа и файл заголовка должны быть скопированы в директорию проекта бутлоадера, и они будут подключены к коду бутлоадера при компиляции.
Внимание: файлы проекта бутлоадера сконфигурированы для использования вышеупомянутых файлов BootLdr.h and DESKeys.inc. Для простоты рекомендуется не менять эти имена.
Последующие запуски Create
В последующих запусках программа create используется для шифрования кода firmware. Перед шифрованием исходный файл должен быть скомпилирован, собран и слинкованы в один кодовый сегмент и/или один сегмент EEPROM. Полученные файлы должны быть в формате Intel® hex. Файловые имена (EEPROM.hex, Flash.hex) подставляются в командную строку, и зашифрованный файл (Update.enc) будет сгенерирован в соответствии с файлом конфигурации (Config.txt). Например:
Create –c Config.txt –e EEPROM.hex –f Flash.hex –o Update.enc –l BLB11 BLB12
Код приложения микроконтроллера (firmware Flash.hex) и данные EEPROM (EEPROM.hex) будут скомбинированы в один шифрованный файл.
Рис. 6. Алгоритм работы программы create
Шифрованный выходной файл
Входные файлы FLASH и EEPROM шифруются и сохраняются в один целевой файл. Однако перед шифрованием данные организуются в записи. Имеется 7 типов записей, как показано на рисунке 7.
Рис. 7. Типы записей выходного зашифрованного файла.
Тип записи определяется по первому байту в записи. Данные приложения разбиваются на записи типов 1, 2, 3 и 4 - это erase (очистка), prepare (подготовка), load (загрузка) и write (запись страницы буфера во FLASH). Данные секции EEPROM форматируются в запись типа 5. Биты защиты передаются через запись типа 6. Записи с типами 0 и 7 относятся к окончанию фрейма и окончанию передачи соответственно.
Все другие записи, которые имеют идентификаторы выше 7, являются бессмысленными (nonsense), и они нужны только для запутывания взломщика. Когда опция -n активирована (см. опции командной строки утилиты create), то случайное количество бессмысленных записей будет помещено в случайные места выходного файла. Выходной файл создается, как показано на рисунке 8.
Рис. 8. Создание шифрованного файла.
Шаги, которые показаны на рисунке 8, выполняют следующие действия:
Шаг 1. Данные форматируются в записи, которые выстроены друг за другом после фрейма сигнатуры (SIG). Нуль (Z) добавляется как метка окончания, и фрейм дополняется случайными данными (F) для создания размера фрейма, который равен всегда 64 битам. Шаг 2. Начальный вектор присоединяется к фрейму. В первом фрейме вектор равен указанному в конфигурационном файле. Во всех последующих фреймах начальный вектор равен последнему шифрованному блоку от предыдущего фрейма. Шаг 3. Начальный вектор и шифрованные блоки выстраиваются в цепочку и шифруются. Начальный вектор удаляется из фрейма. Шаг 4. Контрольная сумма (C) вычисляется по алгоритму CRC-16 и добавляется к фрейму. Шаг 5. Длина фрейма (L), исключая информацию о длине, вычисляется и сохраняется в начале фрейма.
Фрейм записывается в выходной файл и процедура повторяется, пока не будут обработаны все данные.
[AVR bootloader DES]
Бутлоадер должен находится в целевом AVR перед тем, как устройство будет обновляться шифрованным firmware. Бутлоадер обменивается данными с компьютером PC, и может программировать EEPROM и область кода обновляемой программы (секция приложения AS) FLASH. Бутлоадер, который поставляется с этим апноутом, создается с использованием IAR™ Embedded Workbench, version 2.28a, и может быть портирован на любые другие компиляторы C. Алгоритм работы бутлоадера иллюстрируется на рисунке 9.
Рис. 9. Блок-схема алгоритма работы DES bootloader.
Файлы ключа и заголовка
Перед тем, как бутлоадер может быть скомпилирован, нужно настроить несколько параметров. Для этого в папку бутлоадера нужно скопировать файлы ключа шифрования и заголовка (сгенерированные программой create). Эти файлы будут подключены при компиляции (директивой #include) к исходному коду бутлоадера. Например (это копия начальных строк исходного файла des.c бутлоадера):
...
#include "des.h"
#include "bootldr.h"
#include "loader.h"
#if KEY_COUNT > 0
#include "deskeys.inc"
...
Файлы проекта
Этот апноут поставляется со специальными файлами проекта, предназначенными для использования со следующими микроконтроллерами:
• ATmega8 • ATmega8515 • ATmega16 • ATmega169 • ATmega32 • ATmega64 • ATmega128
Используйте файлы проекта, которые соответствуют Вашему используемому AVR. Для микроконтроллеров AVR, которых нет в списке, используйте файл проекта, который максимально подходит к нужному AVR, и подправьте его, как описано ниже.
Linker file (файл настройки линкера)
Компилятор IAR требует модифицированного файла линкера, потому что код бутлоадера должен размещаться в верхней области памяти, в специальной секции бутлоадера (Boot Loader Section, BLS). Файлы линкера имеют расширение .xcl и распространяются с компилятором IAR отдельно для каждого микроконтроллера AVR. Этот апноут поставляется с двумя файлами линкера, для линковки должен использоваться один из этих файлов (в зависимости от выбранной организации таблицы векторов прерываний).
Таблица 6. Выбор файла линкера
Имя файла настроек для линкера |
Назначение файла |
bootldr.xcl |
Используйте для всех микроконтроллеров AVR, таблица векторов прерываний выделена в коде (что экономит память). |
bootldr_interrupts.xcl |
Используйте для всех микроконтроллеров AVR, таблица векторов прерываний дополнена командами RETI. |
Файл для линкера настраивается в свойствах проекта через меню Project –> Options, категория XLINK, закладка Include, поле "XCL file name". Имейте в виду, что в поставляемых с этим проектом файлах проекта (относящихся к специфичному микроконтроллеру) уже настроен файл линкера.
Другие настройки компилятора
В окне Project установите Targets в значение Release. Это задаст отсутствие отладочного кода в результатах компиляции, и минимизирует размер получающегося кода бутлоадера. Размер кода критичен только для тех AVR, у которых размер секции BLS не превышает 2 кбайта.
Внимание: если Target не установлен в Release. то проект не будет правильно слинкован.
Следующие настройки нужно задать в окне диалога, который открывается также через меню Project –> Options. Имейте в виду, что все установки уже заданы в файлах проекта, относящихся к специфичному микроконтроллеру.
Таблица 7. Необходимые настройки компилятора.
Категория |
Закладка |
Установить в значение |
Пример |
General |
Target |
В поле "Processor configuration" установите тип используемого Вами целевого AVR. |
-cpu=m8, AT90mega8 |
Установите "Memory model" в значение Small. |
|
Снимите галочку "Configure system using dialogs (not in .XCL file)". |
|
Library configuration |
Поставьте галочку "Enable bit definitions in I/O-include files" |
|
AAVR |
Preprocessor |
Задайте символ "INCLUDE_FILE", соответствующий используемому Вами целевому AVR. |
INCLUDE_FILE="iom8.h" |
Задайте символ SPMREG, соответствующий цели. |
SPMREG=SPMCR |
XLINK |
Output |
Задайте такой тип выходного файла, который Вы можете запрограммировать в целевой AVR с помощью внешнего программатора (обычно ISP или JTAG). Чаще всего можно установить формат Intel-Extended. |
|
#define |
Задайте символ BOOT_SIZE, который соответствует размеру секции бутлоадера (BLS) целевого AVR. Значение указывается в hex-виде, в байтах. |
BOOT_SIZE=800 |
Задайте символ FLASH_SIZE, который соответствует размеру памяти FLASH целевого AVR. Значение указывается в hex-виде, в байтах. |
FLASH_SIZE=2000 |
Задайте символ IVT_SIZE, который соответствует размеру таблицы векторов прерываний (interrupt vector table) целевого AVR. Значение указывается в hex-виде, в байтах. |
IVT_SIZE=26 |
Задайте символ RAM_SIZE, который соответствует размеру памяти RAM целевого AVR. Значение указывается в hex-виде, в байтах. |
RAM_SIZE=400 |
Задайте символ RAM_BASE, который соответствует началу SRAM (сразу за областью ввода/вывода I/O). Значение указывается в hex-виде, в байтах. |
RAM_BASE=60
|
Includes |
Под секцией "XCL file name" поставьте галочку "Override default". |
|
Под секцией "XCL file name", введите имя в текстовое поле. |
$PROJ_DIR$\bootldr.xcl |
В следующей таблице приведены некоторые опции компилятора для поддерживаемых в настоящее время микроконтроллеров AVR. Имейте в виду, что адрес начала бутлоадера зависит от установок фьюзов (fuse), как будет показано далее (см. таблицы 8 и 9).
Таблица 8. Настройки компилятора для различных поддерживаемых микроконтроллеров AVR.
|
ATmega8 |
ATmega8515 |
ATmega16 |
ATmega169 |
ATmega32 |
ATmega64 |
ATmega128 |
Имя конфигурационного файла для линкера (Linker file name) |
bootldr.xcl |
BOOT_SIZE |
800 |
800 |
1000 |
FLASH_SIZE |
2000 |
4000 |
8000 |
10000 |
20000 |
IVT_SIZE |
26 |
22 |
54 |
5С |
58 |
8С |
8С |
RAM_SIZE |
400 |
200 |
400 |
800 |
1000 |
1000 |
RAM_BASE |
60 |
100 |
60 |
100 |
100 |
Установка бутлоадера
Скомпилируйте бутлоадер и загрузите его в Ваш микроконтроллер AVR с использованием утилиты программирования Atmel AVR Studio® (или другой утилиты для программатора [4]). Перед тем, как запустить бутлоадер, должны быть сконфигурированы следующие биты фьюзов (fuse bits):
• Размер секции бутлоадера (Boot Loader Section). Установите фьюзы так, чтобы размер секции соответствовал установке BOOT_SIZE, как было описано ранее. Имейте в виду, что BLS обычно указывается в словах (в единицах по 2 байта), но параметр BOOT_SIZE указывается в байтах. • Вектор сброса бутлоадера (Boot reset vector). Должен быть разрешен boot reset vector (включена поддержка бутлоадера). • Опции генератора тактовой частоты. Фьюзы, настраивающие параметры генератора, зависят от конкретного типа микроконтроллера AVR. Они могут потребовать конфигурирования (влияют на USART).
Внимание: пожалуйста уделите особое внимание правильной установке опций тактового генератора. Даже самая незначительная ошибка может привести к тому, что бутлоадер не сможет связаться с программой загрузки на компьютере PC. Программное обеспечение firmware бутлоадера разработано для использования тактовой частоты 8 МГц.
В таблице 9 показаны рекомендуемые установки для фьюзов. См. даташит на микроконтроллер для подробного описания бит фьюзов.
Таблица 9. Рекомендованные настройки fuse bits (0 означает "запрограммировано", 1 означает "не запрограммировано").
|
ATmega8 |
ATmega8515 |
ATmega16 |
ATmega169 |
ATmega32 |
ATmega64 |
ATmega128 |
BOOTSZ1 |
0 |
0 |
BOOTSZ0 |
0 |
1 |
BOOTRST |
0 |
0 |
Рекомендуется запрограммировать биты защиты, чтобы защитить код как приложения, так и код бутлоадера (они оба находятся памяти FLASH), однако только после того, как будут установлены биты фьюзов. Биты защиты могут быть запрограммированы с помощью утилиты AVR Studio и подходящего ISP программатора. Биты защиты BLS будут также установлены во время обновления firmware в значение, которое было предоставлено в качестве аргументов командной строки, когда шифровалось firmware. Рекомендуемые установки бит защиты:
• Memory lock bits (биты защиты памяти): они должны быть установлены для предотвращения доступа к памяти. Имейте в виду, что после того, как память будет заблокирована, к ней нельзя будет получить доступ через системы программирования (это обычно ISP и JTAG). Для получения доступа придется полностью стереть содержимое памяти микроконтроллера. • Защищенный режим для секции бутлоадера (Boot Loader Section, BLS): SPM и LPM не должны быть разрешены для записи в BLS или чтения из BLS. Это предотвратит случайную порчу кода бутлоадера из firmware приложения, а также предотвратит компрометацию ключей дешифровки. • Защищенный режим для секции приложения (AS): не должно быть установлено ограничений по доступу к AS через команды SPM или LPM; в противном случае бутлоадер не сможет обновить код firmware приложения (AS).
Внимание: важно понимать, что если неправильно закрыть доступ к памяти, то к её содержимому может быть получен доступ через интерфейс программирования ISP (или JTAG, или через параллельный высоковольтный интерфейс), и вся описываемая в этом апноуте защита с применением шифрования окажется бесполезной.
В следующей таблице приведены рекомендованные установки бит защиты (lock bit) для имеющихся на сегодняшний день микроконтроллеров AVR. Для получения подробностей см. детальное описание бит защиты в даташите на микроконтроллер.
Таблица 10. Рекомендуемые значения бит защиты.
|
ATmega8 |
ATmega8515 |
ATmega16 |
ATmega169 |
ATmega32 |
ATmega128 |
BLB12 : BLB11 |
0 0 |
BLB02 : BLB01 |
1 1 |
Программа для компьютера PC – Update (для обновления firmware)
Приложение update было создано с помощью Microsoft Visual C++, version 6.0 (однако может использоваться для компиляции и более поздняя версия). Программа update используется для отправки шифрованного файла (в котором могут находиться данные EEPROM, FLASH, Lock Bit) в обновляемое целевое устройство. Данные могут быть отправлены через последовательный порт PC напрямую в USART микроконтроллера AVR, установленного в целевом устройстве. Алгоритм работы программы показан на рисунке 10.
Рис. 10. Алгоритм работы программы update.
Программа Update читает файлы, сгенерированные программой Create. Файл состоит из одного или большего количества соединенных друг с другом фреймов зашифрованных данных. Приложение передает данные фрейм за фреймом, делая паузы при ожидании ответа от бутлоадера. Следующий фрейм будет передан только после приема подтверждения, иначе приложение update будет либо отправлять фрейм заново, либо завершит обмен данными.
Приложение update запускается из командной строки. Опции командной строки перечислены в таблице 11.
Таблица 11. Аргументы командной строки программы update.
Аргумент |
Описание |
< filename.ext > |
Путь до шифрованного файла, который нужно передать бутлоадеру (в обновляемое устройство). |
-COMn |
Последовательный порт, где n номер последовательного порта. |
Нужно иметь в виду, что программа update будет обновлять только те части FLASH и EEPROM, которые указаны в файлах приложения firmware и EEPROM. Если в утилите create была разрешена проверка CRC в секции приложения, или выбрана опция очистки (erase), то перед программированием вся память секции приложения (AS) будет очищена.
Hardware setup (настройка аппаратуры)
Перед тем, как зашифрованное firmware может быть отправлена бутлоадеру, необходимо правильно настроить аппаратуру целевого устройства. В этом апноуте предполагается, что в качестве целевой платформы используется Atmel STK500. STK500 должен быть сконфигурирован следующим образом:
1. Подключите STK500 (через коннектор, помеченный как "RS232 CTRL") к компьютеру PC, используя кабель для последовательной передачи данных (serial cable). Подайте питание на STK500. 2. С помощью Atmel AVR Studio загрузите bootloader и установите биты фьюзов и биты защиты, как было описано ранее. Отключите питание от STK500. 3. Переключите serial cable на коннектор, помеченный как "RS232 SPARE". 4. Подключите ножки USART устройства (RXD и TXD) к соответствующим выводам коннектора, помеченного как "RS232 SPARE". PD0 должен приходить на RXD, и PD1 должен приходить на TXD. 5. Соедините PD7 (ножка 8 порта PORTD) с SW7 (вывод 8 блока SWITCHES). 6. Нажмите и удерживайте кнопку SW7 в момент подачи питания на STK500. Это запустит код бутлоадера и переведет его в режим ожидания загрузки обновления (update mode). 7. Отпустите кнопку SW7. 8. Теперь Вы можете использовать программу update на компьютере PC для отправки зашифрованных данных на целевое устройство (в нашем примере это микроконтроллер AVR, установленный на STK500).
Performance (эффективность)
В следующих секциях рассматривается скорость работы системы и её эффективность (system performance) по критериям времени выполнения и размеру кода.
Скорость
Время, которое нужно потратить целевому обновляемому устройству для приема, декодирования и программирования данных, зависит от следующих факторов:
• Размер шифрованного входного файла. Чем больше данных, тем дольше длится процесс обновления. • Скорость обмена данными (baudrate). Чем будет выше скорость передачи, тем будет короче время передачи. • Скорость целевого AVR. Чем выше тактовая частота AVR, тем короче время декодирования. • Время программирования страницы FLASH. Это константа, определяемая используемым микроконтроллером AVR, и изменить её никак нельзя. • Количество ключей. Одиночный DES (у которого один ключ) быстрее дешифрирует код, чем 3DES (у него три ключа). • Различные другие установки. Например, проверка CRC секции приложения занимает дополнительное время, хотя и небольшое.
Для простого DES с одним ключом общее время дешифрирования может быть вычислено по следующему уравнению.
Здесь FS размер файла в байтах, BR скорость обмена данными, и f тактовая частота AVR в мегагерцах. Пожалуйста имейте в виду, что это уравнение дает только приблизительную оценку, и например для ATmega128 время вычисления отличается значительно (нужно в уравнении константу 60 заменить на 54).
Установка по умолчанию: скорость передачи 9600 бод, и тактовая частота 8 МГц. Это упростит уравнение:
Для 3DES общее время дешифрирования может быть вычислено по следующему уравнению.
Для установок по умолчанию уравнение упрощается:
Дешифровка DES сама по себе занимает 245k циклов на блок, и 724k цикла на блок для 3DES. Это предоставляет скорость обработки 32 байта/сек/МГц для DES и 10 байт/сек/МГц для 3DES.
Размер кода
Следующая таблица показывает размер кода бутлоадера в зависимости от типа AVR и установленных опций компиляции. Можно отметить, что все варианты компиляции бутлоадера укладываются в 2 килобайта, за исключением бутлоадера 3DES для ATmega128.
Таблица 12. Размер бутлоадера DES в байтах.
|
Проверка CRC выключена |
Проверка CRC для секции AS включена |
|
Без DES |
DES, 56 бит |
DES, 56 бит |
3DES, 112 бит |
3DES, 168 бит |
ATmega8 |
436 |
1684 |
1716 |
1818 |
1914 |
ATmega8515 |
436 |
1684 |
1716 |
1818 |
1914 |
ATmega16 |
476 |
1752 |
1786 |
1888 |
1984 |
ATmega169 |
500 |
1776 |
1810 |
1910 |
2008 |
ATmega32 |
476 |
1752 |
1786 |
1888 |
1984 |
ATmega64 |
504 |
1810 |
1844 |
1946 |
2042 |
ATmega128 |
588 |
1897 |
1945 |
2049 |
2143 |
Следует отметить, что если при конфигурировании не предоставлены ключи шифрования, то бутлоадер будет собран без поддержки DES/3DES. При этом будет реализована обычная система бутлоадера, которая может использоваться на любом AVR, который имеет секцию BLS и аппаратную поддержку бутлоадера.
[Общие выводы]
Этот апноут представляет метод защищённой передачи данных в микроконтроллер Atmel AVR, у которого есть поддержка технологии бутлоадера (boot loader support, имеется секция BLS). Этот документ также выделил методы, которые должны быть реализованы при создании защищённой (от взлома) системы. Для увеличения защиты разработки на AVR должны быть рассмотрены следующие проблемы.
• Реализуйте bootloader, который поддерживает загрузку данных в зашифрованном виде. Когда бутлоадер устанавливается в систему первый раз (во время производства), он должен быть оснащен ключами дешифровки, которые потребуются для последующих обновлений firmware. В этом случае firmware может быть распространено открыто, так как оно зашифровано, и его реальное содержимое недоступно для посторонних глаз. • Используйте биты защиты AVR (lock bits), чтобы скрыть содержимое секции приложения (AS) и секции бутлоадера (BLS). Когда биты защиты установлены для запрета чтения из устройства, то содержимое памяти не может быть получено. Если же биты защиты не установлены, то использование шифрования для обновления firmware бессмысленно, как как содержимое памяти можно свободно прочитать. • Шифруйте firmware перед тем, как его распространять. Зашифрованное программное обеспечение не представляет никакой ценности для посторонних, если у них нет подходящего ключа расшифровки. • Храните ключи шифрования в надежном, недоступном месте. Ключи шифрования должны находиться только в двух местах: в теле булоадера, которое защищено битами защиты, и в лаборатории разработки производителя. • Применяйте цепочечное построение шифрованных данных (Chain encrypt data, CBC). когда шифруемые данные соединены в цепочку, то каждый содержимое каждого зашифрованного блока зависит от результатов шифрования предыдущего блока. Как следствие из этого - одинаковые нешифрованные блоки данных в разных местах будут зашифрованы по-разному. Это значительно затрудняет взлом шифрованных данных, так как очень трудно найти закономерность, которая позволит разгадать ключи шифрования. • Избегайте стандартных, предсказуемых частей кода в firmware. У большинства программ есть общая платформа разработки, и есть любые предсказуемые куски кода. Так, например, таблица векторов прерываний (interrupt vector table) начинается с перехода на малый адрес, что может только помочь взломщику. Также избегайте заполнения неиспользуемых областей памяти одинаковым значением (например, пустые, незаполненные области памяти часто заполняют байтом 0xFF, что делать не рекомендуется). • Прячьте данные о методе шифрования. Нет нужды публично упоминать о том, какой используется алгоритм и какая длина ключа шифрования. Чем меньше взломщик знает о системе, тем лучше. Некоторые могут возразить, что знание метода шифрования может отсеять некоторых атакующих, однако сохранение в секрете данных о методе шифрования не требует больших усилий, и принесет больше пользы. • Бутлоадер также может быть использован для очистки секции приложения (AS), если это необходимо. Множество попыток атаки включают извлечение микроконтроллера из рабочего окружения, и включение его в лаборатории взлома. Это можно использовать в бутлоадере для увеличения защищённости - если было детектировано, что LCD не подключен или есть ошибки CRC в памяти, то бутлоадер может начать полное стирание всей памяти (включая секцию бутлоадера и ключи дешифровки). • В приложениях, где нельзя или невозможно использовать внешние коммуникации для обновления, то firmware может быть сохранено в чипах памяти Atmel CryptoMemory®. Память может упакована в виде извлекаемой смарт-карты, которую можно просто вставить в слот устройства, когда нужно провести обновление. Микроконтроллер при старте может проверить наличие CryptoMemory, и получить обновление, если это необходимо. • Используйте только защищенную аппаратуру. Протокол устойчивого шифрования бесполезен, если аппаратные средства имеют структурные дефекты. В настоящее время нет никаких проблем безопасности с микроконтроллерами AVR, о которых было сообщено. Прим. переводчика: однако существуют компании, которые предоставляют услуги по считыванию памяти защищённого чипа AVR (у которого установлены биты защиты), см. [1]. Чип при этом становится неработоспособным, но это часто не важно, так как программа считана.
Этот список вопросов безопасности может показаться слишком длинным, но его цель состоит в том, чтобы направить разработчика защиты в нужном направлении. Не нужно недооценивать находчивость и терпение противника.
[Литература]
1. Douglas Stinson: Cryptography: Theory and Practice, CRC Press, second edition, 1996 2. Electronic Frontier Foundation: Cracking DES, 1998. 3. Electronic Privacy Information Center site:privacy.org. 4. International Association for Cryptologic Research site:iacr.org. 5. Man Young Rhee: Cryptography and Secure Data Communications, McGraw-Hill, 1994. 6. SSH Communications Security site:ssh.com.
[Ссылки]
1. Снятие битов защиты кода с памяти микроконтроллеров - ARM, AVR и других, а также чтение кода программы firmware, дизассемблирование site:russiansemiresearch.com. 3. Загрузчики (bootloader) для микроконтроллеров AVR. 4. Программаторы для AVR. 5. Исходный код программ AVR230: DES Bootloader, документация. 6. Бутлоадер USBasp с XOR-шифрованием. 7. Atmel AVR231: AES Bootloader. |
Комментарии
microsin: версия IAR не имеет особого значения, и в принципе можно использовать любой компилятор, если внести в код минимальные правки. Я обычно стараюсь использовать GCC, но иногда использую IAR 6.50.
RSS лента комментариев этой записи