Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
Разместите свой проект бесплатно и начните получать предложения от фрилансеров-исполнителей уже спустя минуты после публикации!

Функция шифрования на языке “С” для платы Ардуино.


  1. 852    14  0
    2 дня800 UAH

    Здравствуйте.
    Могу выполнить данную работу.
    --
    Дополнительный текст.

  2. Еще 5 ставок скрыто
    1 ставка скрыта
  • Профиль удален
    2 сентября 2019, 11:46 |

    А есть мысли по поводу того, как шифровать? Вы хоть намекните про какие-нибудь рамки, ограничения, может нужен стндарт какой-то...

  • Юра Палаха
    2 сентября 2019, 17:18 |

    AES вполне устроит

  • Александр Александр
    2 сентября 2019, 12:11 |

    контроллер можно залочить от чтения и никто ваш eeprom не прочтет.

  • Юра Палаха
    2 сентября 2019, 17:19 |

    Хороший вариант. Что будет стоить такая работа ?

  • Профиль удален
    3 сентября 2019, 13:01 |

    Скорее всего, имеется в виду подход с установкой lock bits (см., напр., обсуждение). Но, по-моему, это действие обратимо при наличии необходимого оборудования (его стоимость в пределах $50).

  • Юра Палаха
    4 сентября 2019, 11:09 |

    Спасибо. За ссылку. Полезно.


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

  • Sergey Mironov
    2 сентября 2019, 17:33 |

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

  • Александр Л.
    3 сентября 2019, 23:54 |

    100% согласен. Шифрация  эта до Фени, ведь функция дешифрации будет на томже контроллере.
    Взлом займет минут 30, было б там чего важного.

  • Юра Палаха
    4 сентября 2019, 11:16 |

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

  • Александр Л.
    4 сентября 2019, 11:21 |

    Сами себе противоречите, если программа защищена Битом на чтение - и считать данные "как вы уверяете невозможно" - зачем их шифровать?

    Снять бит на чтения - дело 2 минут.

  • Александр Л.
    4 сентября 2019, 11:26 |

    А не вру)) высоковольтным программатором не получается снять блокировку - беру слова обратно.

  • Юра Палаха
    4 сентября 2019, 11:36 |

    Так все же, если мк защищен битом от чтения с него ПО, есть ли возможность прочесть содержимое мк чем либо (за адекватные деньги) ? 


    Кроме конечно бекдоров которые производитель может вставлять в свои мк.

  • Юра Палаха
    4 сентября 2019, 11:37 |

    >> Если он защищен битом

    Потому что данные в другой памяти, т.е. в отдельной с.

  • Александр Л.
    4 сентября 2019, 12:15 |

    FLASH память программы не получится считать - так что все нормально это я напутал. Спец  программатором для atmel овских чипов можно только сбросить фьюзы или затереть флешпамять.

  • Юра Палаха
    4 сентября 2019, 12:34 |

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

  • Александр Л.
    4 сентября 2019, 12:16 |

    ключи у вас во флешпамяти, данные в еепром - все ок.


  • Юра Палаха
    4 сентября 2019, 12:34 |

    )

  • Ігор Лозовський
    3 сентября 2019, 6:24 |

    Лучше это делать не так.

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

  • Профиль удален
    3 сентября 2019, 12:57 |

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

  • Юра Палаха
    4 сентября 2019, 11:53 |

    >> но вообще не факт, что заказчик хранит в EEPROM "пароли для входа".  

    А чем плохо хранить в EEPROM пароли для входа (если результат получен надежным алгоритмом шифрования например AES и доступа к ключу для шифрования нет) ?

  • Юра Палаха
    4 сентября 2019, 11:49 |

    Эта идея нам не подходит.

    Нам нужно из зашифрованной строки получить исходную строку. А из исходной зашифрованую. Применив ключ (синхронный) и прогнав строки через нужную нам функцию. 

  • Профиль удален
    3 сентября 2019, 13:17 |

    Функция принимает на вход параметры 

    1. указатель на адрес где храниться строка “ключ”

    2. количество символов которые будут использоваться. Если число больше длины строки, то длина строки.

    3. указатель на адрес где храниться обрабатываемая строка.

    4. Флаг (зашифровать или расшифровать строку)


    Обычно подобные алгоритмы работают с блоками, размер которых кратен какому-то числу (напр., для AES это может быть 16 байтов). Соответственно, в вашем случае целесообразно обрабатывать весь блок EEPROM (512 байтов?) за раз.

    И с шифрующим кодом не всё так просто - для него требуется "ключ" (если говорим про AES), который тоже надо где-то хранить...

    Варианты:

    1. пользователь вводит ключ при шифровании "вручную" (напр., через Web-страничку, если ваше устройство её предоставляет) или скачивает с какого-то локального сервера (если устройство поддерживает такую функциональность)
    2. EEPROM загружается в устройство в зашифрованном виде

    Если ключ для шифрования хранить в данных, то защищённость такой реализации очень низкая.

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

  • Юра Палаха
    4 сентября 2019, 12:22 |

    AES алгоритм устраивает.

    Единственное не совсем понятно с блоками.

    Нам нужно чтобы  строка длиной например 10 или 20 символов была зашифрована и результат тоже был такой же длины. Или шифровать возможно только блоками. т.е. следовательно изменив один символ придется перезаписать весь блоке зашифрованным результатом ?

  • Ігор Лозовський
    4 сентября 2019, 12:27 |

    Есть разные режимы шифрования. Есть такой, где шифрование выполняется блоками. Есть такой, где можно шифровать данные произвольной длины побайтно.

  • Юра Палаха
    4 сентября 2019, 12:40 |

    Ну отлично. Нам нужно побайтовый или блоками по 20 символов. В крайнем случае можно шифровать сразу по несколько строк каждая из которых до 20 символов (но может быть и увеличена в случае необходимости).


    Единственное алгоритм должен быть надежным AES устраивает.

  • Профиль удален
    4 сентября 2019, 15:58 |

    Единственное алгоритм должен быть надежным AES устраивает 

    В AES блоки по 16 байтов (см. https://ru.wikipedia.org/wiki/Advanced_Encryption_Standard).

    Соответственно ваши строки по 20 символов будут занимать по 32 байта в зашифрованном виде (в EEPROM).

  • Юра Палаха
    4 сентября 2019, 22:51 |

    Да спасибо. Я это уже понял, но теперь понимаю что понял верно. Но нет пока опыта. Нужно мне увидеть результаты работы шифрования и я тогда придумаю как извернуться чтобы память не тратить - маловато ее. 

    Пока в голову приходит самое простое.

    1. Расширить свой блок до 32 (или уменьшить до 16) - не очень мне нравиться, зато очень просто.

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

  • Профиль удален
    4 сентября 2019, 23:46 |

    как извернуться чтобы память не тратить - маловато ее. 

    Если имеете в виду EEPROM, то судя по официальной спецификации ATmega32U4 в этом чипе данной памяти 1024 байтов - немало, на мой взгляд.

    Для экономии памяти можно шифровать всю занятую EEPROM одним куском.

    Если этот вариант не подходит и памяти действительно окажется мало, то посмотрите в сторону других чипов, напр., esp8266 или esp32 - там данной памяти от 1 МБ, и можно даже организовать простую файловую систему (типа SPIFFS).

  • Юра Палаха
    5 сентября 2019, 10:04 |

    Дело в том что мне нужен аппаратный эмулятор клавиатуры.

  • Профиль удален
    5 сентября 2019, 11:51 |

    Эту задачу, наверное, стоит оформить отдельным проектом...

  • Sergey Mironov
    3 сентября 2019, 16:16 |

    Я думаю, не стоит изобретать велосипед. Все можно взломать при желании, особенно копеечный Ардуино. 100% защиту реализовать на копеечных платах невозможно априори. Таким образом, задача сводится к тому, чтобы для взломщика стоимость взлома превышала стоимость покупки. Достаточно использовать внешний ключ, к примеру, тот же RFID, который будет проверяться при каждом запуске программы. Разумеется, его можно скопировать, но для этого необходимо соответствующее оборудование, что существенно удорожает процесс.

  • Sergey Mironov
    3 сентября 2019, 16:18 |

    Альтернативный вариант - плата с Wifi или Ethernet, которая проверяет ключ на удаленном сервере и при его несоответствии просто не запускается.

  • Юра Палаха
    4 сентября 2019, 12:30 |

    Это другая история. Но чтобы получить этот ключ который храниться удаленно (через интернет) нужна защита. у нас все проще.


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

  • Профиль удален
    4 сентября 2019, 16:33 |

    для платы “ATmega32U4” Ардуино. 

    Поясните по поводу чипа - он у вас "пустой" или в нём уже есть какой-нибудь загрузчик (bootloader)? Т.е. как вы планируете прошивать его?

    И в каком виде вам нужна программа - только исходные коды на C/C++ или ещё файл проекта для какой-либо IDE?

  • Юра Палаха
    4 сентября 2019, 23:00 |

    Если я верно оцениваю ситуацию, то планирую это реализовать так.

    Есть скетч загружается посредством 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 ставки

Заказчик
Юра Палаха
Украина Киев  5  0
Проект опубликован
4 года назад
306 просмотров
Метки
  • безопасность
  • ардуино
  • шифрование
  • микропроцессор
  • язык си
  • ATmega32U4