Budget: 800 UAH Deadline: 2 days
Здравствуйте.
Могу выполнить данную работу.
--
Дополнительный текст.
Задача.
Нужна функция шифрования/дешифрирования на языке “С” для платы “ATmega32U4” Ардуино.
Нужно подготовить на языке “С” функцию для шифрование и дешифрования строки.
Она будет выполняться в микроконтроллера “ATmega32U4”
Его скорости должно хватить чтобы за период до 10 сек пароль расшифровать или зашифровать. Пароль храниться в еепром которую как я понимаю не сложно прочесть поэтому нужно шифрование.
Функция должна быть на базе существующих надежных протоколов шифрования.
Предложите свой вариант.
Я вижу это например так.
Функция принимает на вход параметры
указатель на адрес где храниться строка “ключ”
количество символов которые будут использоваться. Если число больше длины строки, то длина строки.
указатель на адрес где храниться обрабатываемая строка.
Флаг (зашифровать или расшифровать строку)
Возможно есть другие варианты как закрыть еепром от чтения, что позволило бы хранить там данные в открытом виде.
Budget: 800 UAH Deadline: 2 days
Здравствуйте.
Могу выполнить данную работу.
--
Дополнительный текст.
А есть мысли по поводу того, как шифровать? Вы хоть намекните про какие-нибудь рамки, ограничения, может нужен стндарт какой-то...
контроллер можно залочить от чтения и никто ваш eeprom не прочтет.
Скорее всего, имеется в виду подход с установкой lock bits (см., напр., обсуждение). Но, по-моему, это действие обратимо при наличии необходимого оборудования (его стоимость в пределах $50).
Спасибо. За ссылку. Полезно.
Я понял так что если нужно шифровать еепром (или другую память которую можно прочитать), то обязательно придется защищать мк от чтения, поскольку в программе будет ключи, то прочитав программу можно найти ключ и дешифровать информацию, а это не приемлемо.
Не совсем понятно, что надо получить на выходе.
Если код в МК должен читать ключ прежде, чем он запустится, то никакого способа его защитить нет. Потому что ключ у вас храниться в EEPROM. Если поставить защиту на запись, чтобы злоумышленник не смог поменять ваш ключ на свой, то ничто не мешает ему просто тупо скопировать содержимое EEPROM на другую ардуинку.
100% согласен. Шифрация эта до Фени, ведь функция дешифрации будет на томже контроллере.
Взлом займет минут 30, было б там чего важного.
в мк программа которая содержит в том числе ключ для шифрования. мк защищен битом запрещающим чтение с мк. Посредством ключа (к которому не смогут добраться), функция шифрует и дешифрует данные которые находятся на еепром (или в любой другой памяти).
Сами себе противоречите, если программа защищена Битом на чтение - и считать данные "как вы уверяете невозможно" - зачем их шифровать?
Снять бит на чтения - дело 2 минут.
А не вру)) высоковольтным программатором не получается снять блокировку - беру слова обратно.
Так все же, если мк защищен битом от чтения с него ПО, есть ли возможность прочесть содержимое мк чем либо (за адекватные деньги) ?
Кроме конечно бекдоров которые производитель может вставлять в свои мк.
>> Если он защищен битом
Потому что данные в другой памяти, т.е. в отдельной с.
FLASH память программы не получится считать - так что все нормально это я напутал. Спец программатором для atmel овских чипов можно только сбросить фьюзы или затереть флешпамять.
Спасибо за ваш текст. Вы подтвердили, что я правильно понимаю ситуацию с защитой мк. А следовательно мой план для реализации нашей задачи можно реализовать.
Лучше это делать не так.
Есть такое понятие, как односторонняя функция. Это функция, которая вычисляется относительно легко, а вот вычисление обратной к ней требует очень больших усилий. Поступающий пароль прогоняется через такую функцию и результат сравнивается с тем, который был получен из правильного пароля. Если они совпадают -- значит был введён правильный пароль. Пароли при этом не хранятся ни в открытом, ни в зашифрованном виде. Хранятся результаты их обработки такой односторонней функцией. Что здесь хорошо -- ни исполняемый код, ни исходные тексты, ни знания о том, какая именно одностороння функция была применена не помогут злоумышленнику. Защищает именно математическая сложность обратных вычислений.
Теорию-то вы изложили верно, но вообще не факт, что заказчик хранит в EEPROM "пароли для входа". Там могут храниться данные, которые нужны для работы зашитого алгоритма - естественно, "хеши" от них не подойдут.
>> но вообще не факт, что заказчик хранит в EEPROM "пароли для входа".
А чем плохо хранить в EEPROM пароли для входа (если результат получен надежным алгоритмом шифрования например AES и доступа к ключу для шифрования нет) ?
Эта идея нам не подходит.
Нам нужно из зашифрованной строки получить исходную строку. А из исходной зашифрованую. Применив ключ (синхронный) и прогнав строки через нужную нам функцию.
Функция принимает на вход параметры
указатель на адрес где храниться строка “ключ”
количество символов которые будут использоваться. Если число больше длины строки, то длина строки.
указатель на адрес где храниться обрабатываемая строка.
Флаг (зашифровать или расшифровать строку)
Обычно подобные алгоритмы работают с блоками, размер которых кратен какому-то числу (напр., для AES это может быть 16 байтов). Соответственно, в вашем случае целесообразно обрабатывать весь блок EEPROM (512 байтов?) за раз.
И с шифрующим кодом не всё так просто - для него требуется "ключ" (если говорим про AES), который тоже надо где-то хранить...
Варианты:
- пользователь вводит ключ при шифровании "вручную" (напр., через Web-страничку, если ваше устройство её предоставляет) или скачивает с какого-то локального сервера (если устройство поддерживает такую функциональность)
- EEPROM загружается в устройство в зашифрованном виде
Если ключ для шифрования хранить в данных, то защищённость такой реализации очень низкая.
Общедоступных библиотек, реализующих AES для микроконтроллеров, достаточно - есть из чего выбрать.
AES алгоритм устраивает.
Единственное не совсем понятно с блоками.
Нам нужно чтобы строка длиной например 10 или 20 символов была зашифрована и результат тоже был такой же длины. Или шифровать возможно только блоками. т.е. следовательно изменив один символ придется перезаписать весь блоке зашифрованным результатом ?
Есть разные режимы шифрования. Есть такой, где шифрование выполняется блоками. Есть такой, где можно шифровать данные произвольной длины побайтно.
Ну отлично. Нам нужно побайтовый или блоками по 20 символов. В крайнем случае можно шифровать сразу по несколько строк каждая из которых до 20 символов (но может быть и увеличена в случае необходимости).
Единственное алгоритм должен быть надежным AES устраивает.
Единственное алгоритм должен быть надежным AES устраивает
В AES блоки по 16 байтов (см. https://ru.wikipedia.org/wiki/Advanced_Encryption_Standard).
Соответственно ваши строки по 20 символов будут занимать по 32 байта в зашифрованном виде (в EEPROM).
Да спасибо. Я это уже понял, но теперь понимаю что понял верно. Но нет пока опыта. Нужно мне увидеть результаты работы шифрования и я тогда придумаю как извернуться чтобы память не тратить - маловато ее.
Пока в голову приходит самое простое.
1. Расширить свой блок до 32 (или уменьшить до 16) - не очень мне нравиться, зато очень просто.
2. Оставшихся 4 байта в четырех блоках шифровать отдельно - вариант динамичный поскольку блоки можно делать любого мне нужного размера, но нужно заморачиватся с реализацией в моем скетче.
как извернуться чтобы память не тратить - маловато ее.
Если имеете в виду EEPROM, то судя по официальной спецификации ATmega32U4 в этом чипе данной памяти 1024 байтов - немало, на мой взгляд.
Для экономии памяти можно шифровать всю занятую EEPROM одним куском.
Если этот вариант не подходит и памяти действительно окажется мало, то посмотрите в сторону других чипов, напр., esp8266 или esp32 - там данной памяти от 1 МБ, и можно даже организовать простую файловую систему (типа SPIFFS).
Я думаю, не стоит изобретать велосипед. Все можно взломать при желании, особенно копеечный Ардуино. 100% защиту реализовать на копеечных платах невозможно априори. Таким образом, задача сводится к тому, чтобы для взломщика стоимость взлома превышала стоимость покупки. Достаточно использовать внешний ключ, к примеру, тот же RFID, который будет проверяться при каждом запуске программы. Разумеется, его можно скопировать, но для этого необходимо соответствующее оборудование, что существенно удорожает процесс.
Альтернативный вариант - плата с Wifi или Ethernet, которая проверяет ключ на удаленном сервере и при его несоответствии просто не запускается.
Это другая история. Но чтобы получить этот ключ который храниться удаленно (через интернет) нужна защита. у нас все проще.
В мк (микроконтроллере) программа которая содержит в том числе ключ для шифрования. мк защищен битом запрещающим чтение с мк. Посредством ключа (к которому не смогут добраться поскольку данные с мк прочитать нельзя, т.к. он защищен от чтения), функция шифрует и дешифрует данные которые находятся на еепром (или в любой другой памяти, т.е. за пределами мк где храниться ключ и функция шифрования/дешифрования).
для платы “ATmega32U4” Ардуино.
Поясните по поводу чипа - он у вас "пустой" или в нём уже есть какой-нибудь загрузчик (bootloader)? Т.е. как вы планируете прошивать его?
И в каком виде вам нужна программа - только исходные коды на C/C++ или ещё файл проекта для какой-либо IDE?
Если я верно оцениваю ситуацию, то планирую это реализовать так.
Есть скетч загружается посредством IDE Ардуины.
Туда нужно добавить шифрование текста который сейчас без шифрования записывается во внешний ЕЕПРОМ.
Поскольку функции которую и нужно реализовать будет также ключ для шифрования, то нужно скетч загружать программатором и при этом устанавливать бит с защитой от чтения мк, чтобы этот ключ не смогли прочесть.
Looking for an experienced TrinityCore 3.3.5a developer who has a good understanding of the core architecture, Battleground system, C++, SQL, and the WoW 3.3.5 client. A custom Battleground “Slavery Valley” has already been integrated into the project, transferred from AzerothCore to TrinityCore. The main part of the work has already been completed, but it needs to be brought up to Blizzard's standards.What has been done TrinityCore 3.3.5a + Eluna. The server is fully configured. The Battleground is integrated into the core. Entry into the BG works. Client UI works (partially). Most SQL and DBC have been transferred. Builds without errors.What needs to be done Fix remaining Battleground bugs. Bring the mechanics up to the level of official Blizzard Battlegrounds. Fix the match start phase. Implement correct starting gates/fire walls. Fix point capture mechanics. Fix match completion. Check score allocation and WorldState functionality. Fix remaining C++ and SQL issues. Conduct a full gameplay test.Requirements Mandatory experience: TrinityCore 3.3.5a; C++; SQL (MariaDB/MySQL); DBC; MPQ; Visual Studio; CMake; Git. Would be a big plus: AzerothCore; Eluna; experience in Battleground development; understanding of the client side of WoW 3.3.5a.Work format Work is staged. Mandatory testing after each stage. Each stage is accepted only after in-game verification. Clear reports on changes are required.In the future This is a long-term project. After completing the Battleground, the following is planned: transfer of new Battlegrounds; transfer of new arenas; new races; new classes; new game systems; further development of a custom World of Warcraft 3.3.5a server. Looking for a developer who has already worked with TrinityCore and can not only write code but also bring the system to a fully operational state.no server from 0 as I want If you are looking for a developer not just for one Battleground, but for creating a server from scratch, then the announcement should look something like this.Project Title Development of a World of Warcraft 3.3.5a server from scratch (TrinityCore / C++ / SQL / Eluna)Project Description Looking for an experienced TrinityCore 3.3.5a developer for long-term collaboration. I need a person who can develop a fully ready World of Warcraft 3.3.5a game server from scratch based on TrinityCore with further project development. The project is large and is expected to take several months of development.Project Foundation TrinityCore 3.3.5a. Maximally stable and close to Blizzard base. Eluna Lua Engine. MariaDB. Visual Studio + CMake. Git.What is planned to be implemented Fully operational server 3.3.5a. Fixing core bugs. Development of new game systems. Integration of custom Battlegrounds. Integration of new arenas. Transfer of useful modules from AzerothCore to TrinityCore. Development of custom modules. New PvP and PvE systems. New game events. Class balancing. Additional progression systems. Improvement of server performance.In the future After completing the basic part, the following is planned: new races; new classes; new zones; new dungeons; new raids; new Battlegrounds; new professions; new game mechanics; integration of modern systems into the 3.3.5a client.Developer Requirements Mandatory: Excellent knowledge of TrinityCore 3.3.5a. Confident knowledge of C++. SQL (MariaDB/MySQL). Git. Visual Studio. CMake. Understanding of TrinityCore architecture. Experience with Battleground, PvP, and game mechanics. Would be a big plus: Experience with AzerothCore. Eluna Lua Engine. Working with DBC and MPQ. Experience in creating custom game systems.Work format Work is staged. Each task is documented as a separate technical assignment. Mandatory testing after each stage. Work is accepted only after verification directly in the game. A developer is needed who can bring functionality to a fully operational state, not just write code.
Create compatibility between the ground control station, automatic start system (SAS), radar, and the aircraft.
Need an MTA:SA developer. I need help assembling a clean MTA:SA 1.6 mtasa-blue source on Windows. What needs to be done: 1. Set up the build environment: Visual Studio, Git, DirectX SDK, CEF, DLL, and other dependencies. 2. Build a clean mtasa-blue client/server. 3. Ensure the client runs without errors. 4. Explain which files/dependencies are needed. 5. Provide a brief guide on how I can rebuild the client myself. 6. Or help further via AnyDesk/Discord/Telegram. Important: - No bypassing anti-cheat. - No cheats. - No malicious code. - Only a legal build of the source and environment setup is needed. The result I want to achieve: - a built clean MTA:SA 1.6 client; - a built server or an explanation of how to build it; - a list of all dependencies; - a brief guide for rebuilding; - an explanation of what exactly was fixed. Or propose your price!
A program needs to be developed for Windows that allows connecting a jailbroken iPhone via USB cable and controlling it from a computer. Main functionality: Connecting the iPhone via USB. The program should quickly recognize the connected iPhone and operate through the cable to minimize delays and lags. Screen mirroring of the iPhone to the computer. (The phone's screen should be displayed on the computer in real-time) Controlling the phone using the mouse. The user should be able to click, swipe, scroll, and control the iPhone screen using the mouse from the computer. Text input from the computer. There should be a shared clipboard between the computer and the iPhone. File transfer from the computer to the iPhone. A function for uploading files from the computer to the phone's memory or to specific folders/apps needs to be added. Stable operation. The program should run smoothly, without significant delays, freezes, or connection drops. Compatibility: support for jailbroken iPhone, rootless jailbreak, iOS 16.7.12, connection via USB.