Функция шифрования на языке “С” для платы Ардуино.
Задача.
Нужна функция шифрования/дешифрирования на языке “С” для платы “ATmega32U4” Ардуино.
Нужно подготовить на языке “С” функцию для шифрование и дешифрования строки.
Она будет выполняться в микроконтроллера “ATmega32U4”
Его скорости должно хватить чтобы за период до 10 сек пароль расшифровать или зашифровать. Пароль храниться в еепром которую как я понимаю не сложно прочесть поэтому нужно шифрование.
Функция должна быть на базе существующих надежных протоколов шифрования.
Предложите свой вариант.
Я вижу это например так.
Функция принимает на вход параметры
указатель на адрес где храниться строка “ключ”
количество символов которые будут использоваться. Если число больше длины строки, то длина строки.
указатель на адрес где храниться обрабатываемая строка.
Флаг (зашифровать или расшифровать строку)
Возможно есть другие варианты как закрыть еепром от чтения, что позволило бы хранить там данные в открытом виде.
https://drive.google.com/open?id=1WOmPisMempL6DJ1FK4vU0_BRkrlirOTdFHKn6MD6fOU
Для начала нужен скетч с простым примером шифрования/дешифрования на
базе существующий библиотек.
Данные выводятся в монитор порта, а вводятся прямо в переменные скетча.
Ключ синхронный.
протокол AES CBC
Библиотека:
https://github.com/kokke/tiny-AES-c
-
852 14 0 Здравствуйте.
Могу выполнить данную работу.
--
Дополнительный текст.
-
контроллер можно залочить от чтения и никто ваш eeprom не прочтет.
-
Не совсем понятно, что надо получить на выходе.
Если код в МК должен читать ключ прежде, чем он запустится, то никакого способа его защитить нет. Потому что ключ у вас храниться в EEPROM. Если поставить защиту на запись, чтобы злоумышленник не смог поменять ваш ключ на свой, то ничто не мешает ему просто тупо скопировать содержимое EEPROM на другую ардуинку. -
Лучше это делать не так.
Есть такое понятие, как односторонняя функция. Это функция, которая вычисляется относительно легко, а вот вычисление обратной к ней требует очень больших усилий. Поступающий пароль прогоняется через такую функцию и результат сравнивается с тем, который был получен из правильного пароля. Если они совпадают -- значит был введён правильный пароль. Пароли при этом не хранятся ни в открытом, ни в зашифрованном виде. Хранятся результаты их обработки такой односторонней функцией. Что здесь хорошо -- ни исполняемый код, ни исходные тексты, ни знания о том, какая именно одностороння функция была применена не помогут злоумышленнику. Защищает именно математическая сложность обратных вычислений.
-
Функция принимает на вход параметры
указатель на адрес где храниться строка “ключ”
количество символов которые будут использоваться. Если число больше длины строки, то длина строки.
указатель на адрес где храниться обрабатываемая строка.
Флаг (зашифровать или расшифровать строку)
Обычно подобные алгоритмы работают с блоками, размер которых кратен какому-то числу (напр., для AES это может быть 16 байтов). Соответственно, в вашем случае целесообразно обрабатывать весь блок EEPROM (512 байтов?) за раз.
И с шифрующим кодом не всё так просто - для него требуется "ключ" (если говорим про AES), который тоже надо где-то хранить...
Варианты:
- пользователь вводит ключ при шифровании "вручную" (напр., через Web-страничку, если ваше устройство её предоставляет) или скачивает с какого-то локального сервера (если устройство поддерживает такую функциональность)
- EEPROM загружается в устройство в зашифрованном виде
Если ключ для шифрования хранить в данных, то защищённость такой реализации очень низкая.
Общедоступных библиотек, реализующих AES для микроконтроллеров, достаточно - есть из чего выбрать.
-
Я думаю, не стоит изобретать велосипед. Все можно взломать при желании, особенно копеечный Ардуино. 100% защиту реализовать на копеечных платах невозможно априори. Таким образом, задача сводится к тому, чтобы для взломщика стоимость взлома превышала стоимость покупки. Достаточно использовать внешний ключ, к примеру, тот же RFID, который будет проверяться при каждом запуске программы. Разумеется, его можно скопировать, но для этого необходимо соответствующее оборудование, что существенно удорожает процесс.
-
Альтернативный вариант - плата с Wifi или Ethernet, которая проверяет ключ на удаленном сервере и при его несоответствии просто не запускается.
-
Это другая история. Но чтобы получить этот ключ который храниться удаленно (через интернет) нужна защита. у нас все проще.
В мк (микроконтроллере) программа которая содержит в том числе ключ для шифрования. мк защищен битом запрещающим чтение с мк. Посредством ключа (к которому не смогут добраться поскольку данные с мк прочитать нельзя, т.к. он защищен от чтения), функция шифрует и дешифрует данные которые находятся на еепром (или в любой другой памяти, т.е. за пределами мк где храниться ключ и функция шифрования/дешифрования).
-
для платы “ATmega32U4” Ардуино.
Поясните по поводу чипа - он у вас "пустой" или в нём уже есть какой-нибудь загрузчик (bootloader)? Т.е. как вы планируете прошивать его?
И в каком виде вам нужна программа - только исходные коды на C/C++ или ещё файл проекта для какой-либо IDE?
-
Актуальные фриланс-проекты в категории C и C++
Программа для показа MS PowerPoint внутри окна
785 UAH
Нужно разработать программу для ПК на Windows, внутри окна которой будет открываться окно PowerPoint с показом MS PowerPoint файлы-демонстрации (расширение ppsx). Важно, чтобы при нажатии ESC во время просмотра, выходило окно программы с кнопками подтверждения желания закончить… C и C++, Python ∙ 1 ставка |
Project for the development of software for microcontrollersПриветствую уважаемые! Ищу специалиста или команду, которая сможет разработать программную часть для распространенных микроконтроллеров типа Arduino, ESP или Raspberry-Pi. Ключевые моменты: - контроллер должен получать на вход 5 аналоговых сигналов, - на выходе должен… C и C++, Системное программирование ∙ 2 ставки |
Скрипт который будет взаимодействовать по картинкеНужен скрипт который будет взаимодействовать по картинке + тексту )названию товара на экране) + цене. Проще говоря, скрипт должен нажимать на логотип площадки (слева сверху белый текст) для обновления ассортимента товаров (каждые секунды 3-5), затем должен быть поиск по картинке… C и C++, Python ∙ 8 ставок |
Создать телеграмм бота с интеграцией GPT
12 000 UAH
Техническое задание: 1) Создать телеграм бота по примеру, При старте спрашивать язык: - русский -английский Все остальное по примеру первого бота: предложить отправить фото с которого будет взято лицо, второе - попросить видео на которое будет накладываться лицо. Затем в… C и C++, Python ∙ 12 ставок |
Настройка обмена данными между jetson nano и другим устройством по can шиНастроить обмен данными между jetson nano и другим устройством по can шине с помощью RS485 CAN документации и примера здесь: https://www.waveshare.com/wiki/RS485_CAN_for_Jetson_Nano Пакет передаемых данных разбит на фремах размером по 8 байтов, кодирование первых 7 байтов… C и C++, Linux и Unix ∙ 2 ставки |