Я использую микропроцессор - PIC32MZ2048efm144 MCU, который получает команды, зашифрованные с определенным ключом , расшифровывает их и выполняет команду. Зашифрованные команды хранятся в автономном режиме , поэтому я не могу просто изменить ключ, когда захочу. Ключ ИСПРАВЛЕН . Команды зашифрованы сервером и загружены по телефону . Телефон отправляет зашифрованные команды на MCU позже, когда он не в сети . Команды шифруются до того, как телефон сообщит их MCU, поэтому сеансовый ключ невозможен.
Мне разрешено подключать внешний модуль шифрования / дешифрования к PIC, но тогда данные будут проходить расшифрованные как минимум в одном направлении.
Предлагаемое решение: хранение защищенного ключа в памяти встроенного устройства
использует одноразовые ключи для шифрования, но мне нужно хранить один суперсекретный ключ
Мой работодатель требует, чтобы ключи были недоступны, поэтому физическая защита, помимо защиты, предоставляемой защищенными модулями памяти и MCU, не рассматривается.
Предполагая, что военное оборудование не используется, есть ли какие-нибудь известные решения, которые вы, ребята, знаете и можете порекомендовать?
Заранее спасибо!
Ответы:
Извините, этот ответ на самом деле не решит вашу проблему. Но это слишком долго, чтобы уместиться в комментарии, и это позволит вам правильно переосмыслить вашу проблему (потому что, как я думаю, она ошибочна).
Проблемы такого рода должны решаться с учетом всех компонентов системы и разумных предположений о том, что может или не может сделать потенциальный хакер.
Например:
Вы говорите: «PIC32MZ2048efm144 (MCU) получает команды, зашифрованные с определенным ключом, расшифровывает их и выполняет команду». Я полагаю, что результатом выполнения команды является переключение некоторых GPIO для активации чего-либо.
Тогда почему вы боитесь, что, возможно, некоторые данные будут расшифрованы между MCU и модулем шифрования / дешифрования? Хакер, имеющий доступ к аппаратному обеспечению для просмотра расшифрованных команд, в любом случае сможет напрямую воздействовать на GPIO на MCU и так же легко «приводить в действие».
Второй пример:
Использование своевременных ключей является идеей. Но, как вы говорите, где вы храните главный мастер-ключ, используемый для генерации одноразовых ключей? Вы столкнетесь с теми же вопросами, что и в исходной задаче.
На самом деле, невозможно обезопасить вашу систему, если вы предполагаете, что хакер может проникнуть в нее в любом месте вашей системы (что, как мне кажется, вы сейчас и предполагаете).
Что делает систему безопасной?
Смарт-карта защищена, потому что нецелесообразно предполагать, что хакер может исследовать внутренние маршруты внутри ИС, между памятью и блоком ЦП.
Электрический дверной замок надежно защищен, потому что нецелесообразно предполагать, что хакер может добраться до проводов, которые приводят в действие замок.
И так далее. По сути, вы должны начать с определения того, что хакер не сможет сделать, и отработать все ваше решение оттуда. Например, можно ли поместить всю вашу систему в надежную, физически защищенную коробку? В этом случае вы можете свободно иметь дешифрованные команды, проходящие через внутреннюю шину.
Вы не можете создать безопасную систему, не зная, что это не может сделать хакер. Вы не сказали нам это. Поэтому мы не можем предложить полное решение.
источник
Это похоже на классический случай, когда было бы полезно шифрование асимметричным ключом. При асимметричном шифровании ключей у вас есть два ключа: закрытый и открытый. Вы хотите полностью защитить закрытый ключ, но открытый ключ можно сделать открытым и не нуждается в защите. Вы можете сохранить закрытый ключ в защищенной системе и открытый ключ во встроенном устройстве.
источник
Вы не объясняете, почему вы хотите зашифровать команды (другими словами, какова ваша модель угроз). Ваша цель - не дать злоумышленнику, владеющему устройством на основе PIC, определить, какие команды ему отправлены? Или вы пытаетесь запретить устройству на основе PIC выполнять набор команд, замененных злоумышленником, и разрешать ему выполнять только команды, исходящие с вашего сервера?
Если первое, вы сталкиваетесь с почти невозможной задачей: ваше устройство должно расшифровать команды для их выполнения - владение устройством PIC означает владение ключом дешифрования. Злоумышленник может либо извлечь ключ (хранящийся в устройстве PIC, которым он обладает), либо просто подождать, пока ваша прошивка не расшифрует команды, а затем перехватить их из памяти.
Если, с другой стороны, вы только пытаетесь убедиться, что ваше устройство будет выполнять только команды, исходящие с вашего сервера, вам повезло. В этом случае вы можете использовать шифрование с открытым ключом (например, RSA) или схему цифровой подписи с открытым ключом (например, DSS). В них ваше устройство хранит только открытый ключ: этого достаточно для расшифровки команд (или проверки цифровой подписи), но его нельзя использовать для шифрования команд (или создания цифровой подписи), которые будет принимать устройство. Для этого требуется закрытый ключ, который вы используете для шифрования (или подписи) команд перед их отправкой. Закрытый ключ никогда не должен покидать ваш сервер. Более того, шифруйте подписывать команды на компьютере, который не взаимодействует извне, и только копируйте их на сервер, чтобы личный ключ никогда не находился на внешне доступном сервере.
источник