В этой статье описаны четыре примера использования криптографических методов при разработке микропрограмм для защиты устройства от злонамеренных действий.

Что вы узнаете:

* Как безопасно выполнять обновления по беспроводной сети (OTA).
* Лучшие методы шифрования связи в хост-сети.
* Безопасный обмен ключами и асимметричная криптография.
* Реализация аутентификации.

Прошивка — постоянное программное обеспечение, хранящееся в постоянном запоминающем устройстве, обеспечивающее низкоуровневое управление аппаратным обеспечением устройства — это факт жизни каждого встроенного электронного устройства.

Реальностью является возможность того, что устройство окажется целью злонамеренного посягательства. Принципы криптографии часто играют важную роль в защите устройства от злоумышленников при рассмотрении основ его прошивки. В этой статье будут рассмотрены четыре примера того, как встроенную микропрограмму можно сделать более безопасной с помощью криптографических методов: безопасное выполнение обновлений по беспроводной сети (OTA); зашифрованная связь в хост-сети; безопасный обмен ключами; и аутентификация.

Безопасные обновления OTA

После разработки и серийного производства OEM-производителям требуется возможность обновлять микропрограммное обеспечение разработанного устройства с целью исправления ошибок и добавления новых функций продукта. Наиболее практичный способ выполнить такое обновление, особенно когда необходимо обновить большое количество устройств, — это загрузить новое микропрограммное обеспечение для каждого устройства по беспроводной сети, чаще всего с сервера в Интернете.

При обмене в Интернете целостность и подлинность данных являются широко распространенными проблемами. Потенциальные опасности, такие как атаки типа «злоумышленник посередине» (MITM), требуют проверки того, что устройство действительно загружает легитимную прошивку. Если он загружает и устанавливает то, что злоумышленник выдает за законную прошивку, то злоумышленнику удастся захватить устройство.

Таким образом, устройство должно иметь возможность удостовериться, что загруженный образ микропрограммы получен из надежного источника, и что это именно тот, который предоставлен этим источником и никоим образом не изменен. Один из распространенных подходов — использование цифровой подписи. Цифровая подпись и проверка подписи — это криптографические алгоритмы, используемые для проверки подлинности данных, в данном случае файла образа прошивки.

Процесс, основанный на асимметричной криптографии, использует пару криптографических ключей, один из которых обозначен как открытый ключ, а другой — как закрытый ключ. Доверенный источник использует закрытый ключ для подписи законного файла образа микропрограммы и делает подпись доступной для загрузки вместе с файлом образа. Устройство загружает файл изображения и подпись и использует открытый ключ для проверки подписи. Если файл изображения — это именно тот файл, который был подписан закрытым ключом, то подпись будет успешно проверена. Однако, если файл изображения отличается от файла, подписанного закрытым ключом, даже на один байт, проверка подписи завершится неудачно.

Если говорить кратко о технических деталях, цифровая подпись создается путем вычисления хэша (или дайджеста) для всего файла изображения и шифрования этого хэша с помощью закрытого ключа. Загруженная подпись проверяется путем ее дешифрования с помощью открытого ключа и сравнения результата с хешем, вычисленным для всего загруженного файла изображения. Проверка подписи успешна, если эти два сравниваемых элемента равны.

Открытый ключ находится в устройстве с целью выполнения такой проверки подписи, когда это необходимо. Очевидно, поскольку любой файл, имеющий цифровую подпись закрытым ключом, будет аутентифицирован как законный, закрытый ключ должен храниться в надежном месте, чтобы он не попал в чужие руки.

Таким образом, у нас есть средства, позволяющие устройству проверить, что загруженный ими образ прошивки идентичен образу из нашего надежного источника и, следовательно, безопасен для установки, или это подделка и, конечно, не должна устанавливаться. Без такого механизма обновления OTA могут быть уязвимы для хакеров, стремящихся внедрить свой собственный код во встроенное устройство (рис. 1).

Рис. 1. Безопасное обновление микропрограммы по беспроводной сети с помощью цифровой подписи и проверки образа микропрограммы.

 

Зашифрованный обмен в хост-сети

Как OTA-обновления должны выполняться безопасно, так и сетевое взаимодействие в целом. Это особенно актуально в общедоступной сети, такой как Интернет, потому что доступность для потенциальных хакеров становится намного больше — либо путем прямого подключения к устройству, либо путем перехвата трафика, идущего к устройству и от него.

Устройство и все подключающиеся одноранговые узлы должны шифровать свой обмен друг с другом. Хакеры могут легко проанализировать открытый текстовый трафик, чтобы украсть конфиденциальную информацию или понять, как имитировать обмен. Хакер может отправлять вредоносные команды для управления устройством, и устройство отвечает на них, полагая, что они исходят от легального партнера.

Самый простой способ реализовать шифрование и дешифрование между двумя взаимодействующими узлами — это использовать такой алгоритм, как AES, который шифрует исходящий трафик и дешифрует входящий трафик с использованием одного и того же криптографического ключа на обоих узлах. AES — это пример симметричного шифра.

Такая базовая схема имеет преимущества простоты и скорости. Это просто реализовать в прошивке. Кроме того, AES работает быстро и требует относительно невысокой вычислительной мощности, что делает его привлекательным вариантом для встраиваемых устройств. Однако его главная слабость — подверженность взлому. Поскольку один и тот же ключ предустановлен на устройстве и на всех легитимных узлах — и он не меняется — хакерам предоставляется больше возможностей для его взлома. У них больше носителей ключа, и нет ограничений по времени, чтобы найти ключ.

Можно периодически менять ключ. Тогда, даже если хакеру удастся получить ключ, он не нарушит взаимодействие с устройством или расшифровку будущего трафика, если срок его действия истек и новый ключ стал активным.

Но когда происходит изменение ключа, как можно безопасно передать новый ключ всем одноранговым узлам? Помните, что они находятся в общедоступной сети, где подслушивание является серьезной проблемой. Ответ снова заключается во внедрении методов, связанных с асимметричной криптографией. Уместно упомянуть, что асимметричные алгоритмы относительно более сложны и, следовательно, требуют большей вычислительной мощности, чем их симметричные аналоги.

Преимущество совместного использования как симметричных, так и асимметричных алгоритмов заключается в том, что они позволяют использовать сильные стороны каждого из них, в то же время не подвергаясь негативному влиянию его ограничений. Защита трафика данных должна происходить постоянно. Следовательно, имеет смысл шифровать и дешифровать симметрично для экономии энергии.

Ключ шифрования следует периодически менять, потому что статический ключ может быть уязвимым, но симметричный метод для этого не применим. Другок дело — асимметричный подход; однако он не очень энергоэффективен. К счастью, это будет случайное событие, и его энергоэффективность не будет критичной. Следовательно, уместно менять ключ асимметрично.

В оставшейся части статьи подробно рассказывается об ограничении системы, которая защищает трафик данных только с помощью симметричного шифра, и о том, как механизм совместного использования ключей будет работать в модернизированной системе, использующей асимметричный подход. Кроме того, будет продемонстрировано, что асимметричный алгоритм может использоваться для аутентификации защиты от типов атак, при которых хакер пытается выдать себя за встроенное устройство или взаимодействующего партнера.

Но сначала замечание об использовании стандартизованных сетевых протоколов …

Мы описываем метод, с помощью которого сетевое взаимодействие через произвольную среду можно сделать более безопасным с помощью принципов асимметричной криптографии.

Если ваше устройство будет общаться с одноранговыми узлами в сети TCP/IP через Wi-Fi, то, скорее всего, вам следует использовать протокол TLS для его защиты. Если ваше устройство будет обмениваться данными через Bluetooth Low Energy, тогда LE Secure Connections может быть лучшим подходом, по крайней мере, на момент написания этой статьи.

Более того, коммерчески доступные модули, обычно поставляются со стабильными и протестированными сетевыми стеками. Они позволяют разработчику поддерживать стандартизованные протоколы при реализации относительно небольшого количества настраиваемого кода и, следовательно, с меньшей вероятностью появления ошибок. Безопасность одновременно сложна и важна, поэтому вы не захотите подвергать риску обнаружение уязвимостей в своем устройстве с помощью специальной реализации, которая не дает точных результатов.

Если ваша технология связи не поддерживает стандартизированные средства обеспечения безопасности, тогда протоколы могут быть разработаны с использованием подхода, подобного обсуждаемому здесь. Например, любому количеству имеющихся на рынке радиомодулей sub-GHz диапазона потребовался бы специальный протокол, если вы использовали один из них в своем устройстве.

А теперь вернемся к ограничению симметричных шифров …

Ранее мы упоминали, что алгоритм симметричного шифрования, такой как AES, идеально подходит для защиты связи встроенных устройств, поскольку он выполняет быстрые вычисления и требует относительно низкой вычислительной мощности. Это особенно важно для устройств с батарейным питанием, которые должны работать в течение длительного времени, прежде чем потребуется подзарядка или замена батареи.

Однако мы также выявили недостаток, заключающийся в том, что с помощью простого метода, использующего только такой алгоритм, как AES, оба взаимодействующих узла используют один и тот же неизменный секретный ключ, что может указывать на возможную уязвимость для хакеров. Если хакеру удастся обнаружить этот секретный ключ, он сможет расшифровать все захваченные сообщения, зашифрованные с его помощью — прошлые, настоящие и будущие, — а также злонамеренно взаимодействовать со скомпрометированным узлом. Это будет серьезной проблемой и потенциально катастрофической в ​​зависимости от важности данных, передаваемых между устройством и законным одноранговым узлом, или последствий того, что хакер сможет с ними взаимодействовать.

Поэтому возможность периодически изменять секретный ключ была бы очень полезной. Если один ключ действительно будет скомпрометирован, хакер сможет расшифровать только сетевой трафик, зашифрованный этим одним ключом, до того, как следующий ключ станет активным, а также взаимодействовать с устройством только до тех пор, пока этот следующий ключ не станет активным.

Но как можно безопасно изменить секретный ключ по сети связи? Это та самая сеть, которую мы подозреваем в подслушивании хакеров, и которую мы стремимся защитить с помощью шифрования. Передача нового ключа в виде открытого текста по сети была бы проблематичной, поскольку он был бы явно видим для подслушивающего хакера. Передача нового ключа, зашифрованного с помощью предыдущего ключа, была бы столь же проблематичной, потому что возникает вопрос: «Как передается самый первый ключ, когда два узла впервые начинают общаться?» Более того, вся причина активации нового ключа заключается в том, что мы подозреваем, что предыдущий ключ мог быть скомпрометирован.

 

Безопасный обмен ключами

Здесь могут помочь принципы асимметричной криптографии. Эффективность асимметричной криптографии зависит от так называемых trapdoor one-way functions. Такие функции легко вычисляются в прямом направлении, но чрезвычайно трудно вычислять в обратном направлении без некоторой части секретной информации.

Например, шифрование RSA, которое широко используется для защиты интернет-трафика, работает с открытым текстом, который является входом для такой trapdoor one-way function, а зашифрованный текст является выходом из него. То есть (прямое) шифрование легко, тогда как (обратное) дешифрование чрезвычайно сложно, если у нас нет закрытого ключа (части секретной информации).

Безопасное совместное использование ключей может быть решено за счет использования преимущества этого свойства в другой односторонней trapdoor function для выполнения так называемого обмена ключами Диффи-Хеллмана (Diffie-Hellman key exchange). Каждый из двух узлов, выполняющих такой обмен ключами, вводит свой собственный частный номер, а также общий общедоступный номер в функцию trapdoor и публично передает свой выходной результат другому узлу.

Эта конкретная trapdoor function имеет дополнительное специальное свойство: когда каждый узел вычисляет функцию во второй раз, с выходным результатом, полученным от другого узла в качестве входных данных вместо общего публично разделяемого числа, результатом этого второго вычисления для обоих узлов будет тоже самое. Этот общий результат — новый секретный ключ.

Этот механизм сводится к безопасному совместному использованию ключа, поскольку сам новый секретный ключ фактически не передается по сети, чтобы его мог увидеть перехватчик (рис. 2). Для получения нового ключа потребуются частные номера двух узлов. Выходные данные trapdoor function, которые совместно используются по сети, бесполезны для перехватчика для вычисления этих частных номеров из-за одностороннего характера trapdoor function (т.е. чрезвычайной сложности вычисления в обратном направлении).

Рис. 2. Безопасное совместное использование ключей с помощью односторонней trapdoor function для выполнения обмена ключами Диффи-Хеллмана

В любой момень и с любой переодичностью у нас есть средства для встроенного устройства и любого однорангового узла, с которым ему необходимо связаться, чтобы согласовать новый секретный ключ безопасным способом. Этот новый ключ впоследствии можно использовать для симметричного шифрования и дешифрования, пока ключ снова не изменится. Если какой-либо секретный ключ обнаружен, то объем передаваемых данных, который хакер может надеяться расшифровать с его помощью, будет зависеть от того, как часто будет задействован этот новый механизм согласования ключей.

Однако следует отметить, что период смены ключа следует выбирать осторожно. Как мы уже упоминали, операции симметричной криптографии менее затратны в вычислительном отношении и потребляют меньше ресурсов, чем асимметричные. Вот почему мы выбрали симметричный шифр, такой как AES, для выполнения всего шифрования и дешифрования. Мы должны помнить о том, существенно влияет добавление механизма изменения секретного ключа с выбранной нами частотой на время автономной работы встроенного устройства.

 

Аутентификация

Хотя теперь у нас есть метод безопасного обмена секретными ключами, это помогает защитить встроенное устройство только от взломов, когда каким-то образом обнаруживается ключ, используемый для связи с законным партнером. Мы также должны учитывать возможность того, что хакер может выдать себя за встроенное устройство законному партнеру или наоборот и попытаться получить свой собственный ключ!

Для этого имитатор должен безопасно согласовать ключи, как описано в предыдущем разделе, а затем вести полностью зашифрованный обмен с устройством или одноранговым узлом, не зная, что оно на самом деле обменивается со злоумышленником. Обратите внимание: если хакер выдает себя за другого одновременно, это называется атакой MITM.

Если хакер знает, как участвовать в обмене ключами Диффи-Хеллмана, тогда в самом обмене ключами нет ничего, что могло бы помешать хакеру осуществить взлом обмена. Для этого нам понадобится другой механизм асимметричной криптографии, известный как аутентификация.

Аутентификация — это фактически тот же процесс, что и проверка цифровой подписи, о которой мы говорили ранее в этой статье. Напомним, что файл обновления микропрограммы по беспроводной связи должен быть проверен на предмет того, что он не был изменен из надежного источника, и что распространенный метод для поставщика файлов заключается в применении цифровой подписи к файлу, а встроенное устройство — для проверки этой подписи при загрузке. Тот же самый процесс проверки полезен в данном сценарии, за исключением того, что теперь необходимо проверить легитимность не файла образа микропрограммы, а скорее сообщение при обмене ключами Диффи-Хеллмана.

Для каждого встроенного устройства и его законного партнера должна быть создана отдельная пара ключей RSA. Закрытый ключ устройства установлен на устройстве, а его открытый ключ — на одноранговом узле. В целях безопасности это следует делать через надежный канал связи, а не через сеть, к которой может получить доступ хакер. Обычно это происходит во время производства или при первом включении устройства. Надежным каналом связи может быть, например, USB-порт для локально подключенного портативного компьютера. Точно так же закрытый ключ однорангового узла устанавливается на одноранговом узле, а его открытый ключ — в устройстве, также по доверенному каналу.

Когда устройство отправляет свои сообщения одноранговому узлу в процессе согласования ключей, оно подписывает эти сообщения, используя свой закрытый ключ. Когда одноранговый узел получает сообщения, он проверяет сопровождающую подпись, используя открытый ключ устройства, тем самым подтверждая, что сообщения действительно были отправлены устройством. Точно так же одноранговый узел подписывает свои сообщения о согласовании ключей, используя свой закрытый ключ, а устройство аутентифицирует однорангового узла, используя открытый ключ однорангового узла. В частности, цифровая подпись использует одностороннюю trapdoor function, такую ​​как функция шифрования RSA, упомянутая ранее (рис. 3).

Рис. 3. Асимметричная аутентификация на основе шифра, реализованная с помощью цифровой подписи и проверки сообщения

Хакеру не известен закрытый ключ встроенного устройства или его легитимного партнера. Более того, хакер не может получить ни один закрытый ключ из подписей, захваченных перехватом сообщений обмена ключами, отправленных между ними. Это потому, что, trapdoor function с цифровой подписью чрезвычайно сложно вычислить в обратном направлении. Без какого-либо закрытого ключа хакер не может подписывать свои собственные сообщения об обмене ключами способом, который устройство или одноранговый узел сочтет приемлемым, и, следовательно, не может выдать себя за одно из них для успешного выполнения вредоносного обмена ключами.

Таким образом, мы можем обеспечить безопасные беспроводные обновления с помощью цифровой подписи и проверки образов микропрограмм и, возможно, реализовать собственный метод для встроенного устройства для безопасного взаимодействия в сети. Хотя на самом деле было бы нецелесообразно реализовывать такой метод, когда подходит популярный и стандартизированный, тем не менее мы надеемся, что читатели сочли объяснение полезным.

Мы показали уязвимость схемы, основанной исключительно на симметричном шифре. Затем мы описали, как такую ​​схему можно улучшить, введя функцию безопасного совместного использования ключей, которая использует принципы асимметричной криптографии. И, наконец, мы показали, как асимметричная аутентификация на основе шифров может еще больше помочь в защите от MITM и других атак.