Функция шифрования на языке “С” для платы Ардуино.
Задача.
Нужна функция шифрования/дешифрирования на языке “С” для платы “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?
-
Current freelance projects in the category C and C++
Script that will interact based on the imageI need a script that will interact based on the image + text (product name on the screen) + price. In other words, the script should click on the platform logo (white text in the top left) to update the range of products (every 3-5 seconds), then there should be a search by… C and C++, Python ∙ 8 proposals |
Create a bot telegram with GPT integration
306 USD
The technical task: 1) Create a bot telegram for example, When you start asking the language: The Russian The English The rest is the example of the first bot: to propose to send a photo from which the face will be taken, the second - to ask for a video on which the face… C and C++, Python ∙ 12 proposals |
Configurate the data exchange between Jetson nano and another device by can shiSet the data exchange between the jetson nano and other device on the can band using the RS485 CAN documentation and examples here: https://www.waveshare.com/wiki/RS485_CAN_for_Jetson_Nano The data package that is transmitted is broken down on the frame size of 8 bytes, the… C and C++, Linux and Unix ∙ 2 proposals |
Infrared temperature sensor ZigBeeRequired an infrared temperature sensor with data transmission through the ZigBee protocol to the Home Assistants server in MQTT Equipment of : Module ESP32-C6-WROOM-1-N8 Infrared thermometer MLX90614 + Add LED laser to indicate where the temperature is scored C and C++, Embedded systems and microcontrollers ∙ 1 proposal |
Create a bot in telegram by parsing messages
20 USD
You need to copy the functionality of this bot - t. me /lead_observer_bot The functional: 1. to put the keywords 2. to kill groups from which the parsing of messages will occur Possibility of adding and deleting words and groups Obtaining notifications of new messages by… C and C++, Python ∙ 14 proposals |