Ruslan
#blog #security #ntp Защитился от подмены времени.
Ruslan
Теперь надо заморочиться защитой самой прошивки, это надо структуру сделать для хранения ключей для каждого устройства, защитить их в самой базе, короче, надо порисовать на бумажке и подумать...
Ruslan
ну и в общем, всё готово )
Slava
ну и в общем, всё готово )
А что готово-то? О чём речь?
Ruslan
ну я же с замочками вожусь
Slava
ну я же с замочками вожусь
Типа электромеханический замок с управлением по вайфаю или 2g-модем ?
Ruslan
у электромеханического управление по WiFi/BLE, у зашёлки (на дверь, ворота, шлагбаум) там WiFi/Eth/BLE/2G
Slava
есть кто не спит?
Slava
char in[10][20] это ведь значит массив 10 штук по 20 байт? чето я туплю.
Алексей Кузнецов 🦔
Да.
Serjio
Как будто
Slava
а так char in[10] == просто 10 байт?
Slava
пойду температуру померяю, кажется мне не хорошо
Serjio
Вроде того. Не пойму, вопросы с подвохом?
Serjio
Чего тут, биржи задач еще не открыли?
Slava
нет подвоха, свой говнокод оптимизирую. и чето туплю. пойду лучше спать, смотреть кошмары. всем спок ночи.
Quiero vivir en España
Народ, доброе утро. Кто знает, как по прерыванию таймера захватить звук с аналогового входа (хотя, тут всё просто - с частотой 44100 записывай в массив и всё) и конвертировать в OPUS или CODEC2? Само кодирование интересует.
Михаил
не думаю что еспшка потянет сжатие в реальном времени
Михаил
максимум просто wav писать
Quiero vivir en España
Мне ж не видео 4K сжимать.
Михаил
Не ну с опус ты загнул
Михаил
Вроде для mp3 были реализации какие то
Yuriy
char in[10][20] это ведь значит массив 10 штук по 20 байт? чето я туплю.
лучше uint8_t если речь о байтах и [10][20] "выравниваются" в char ты можешь получить не байт ну и char - намекает читателю на нультерминированность строки, что может ввести в заблуждение char может приводится как к unsigned char так и signed char что тоже может не внести путаницы если будет арифметика с переполнением
Yuriy
Народ, доброе утро. Кто знает, как по прерыванию таймера захватить звук с аналогового входа (хотя, тут всё просто - с частотой 44100 записывай в массив и всё) и конвертировать в OPUS или CODEC2? Само кодирование интересует.
Для домофона сойдет :) Encoding however is much more intensive. 16kHz samplerate at encoding complexity 1 will use 70% CPU. 24kHz samplerate at anything above complexity 4 will not be able to run at realtime. 48kHz can only run at realtime with complexity 1, and even then it uses 85% CPU. It still sounds understandable at 16kHz if you just need basic VoIP or voice recognition though, but don't expect to encode high quality music. на гите есть несколько проектов-кодеков для esp32 - попробуй расскажешь как они https://github.com/XasWorks/esp-libopus
Yuriy
А так вот крутой кодек в сорцах google опубликовал... с нейронкой все дела... но не каждый смартфон потянет :) https://github.com/google/lyra
Quiero vivir en España
Благодарю.
Алексей
Это называется двумерный массив
Да, но реально это одномерный массив.
Да, но реально это одномерный массив.
Мне не надо. Славе объясняй
Ruslan
Да, но реально это одномерный массив.
Черт, я думал память в МК многомерна, как теперь 3d векторы считать)
ok-home
где то в глубине заголовков uint8_t превращается в unsigned char, int8_t соответственно в char.
int8_t соответственно в char - неправда ваша - в signed char. а со знаком char или не со знаком - зависит от реализации ( чаще unsigned )
Кому-то очень хочется поумничать. Человек просто спросил про массив... Причем тут "реально он одномерный" и причем тут 3д нанд?
Slava
С добрым утром люди. Я в массиве храню входящиее текстовые команды. Сначала туда записываю, потом читаю и удаляю-записываю нули. В каком виде мне их лучше хранить. Сигнед-унсигнед-int8 ? Может просто кто-нибудь скажет, какой вариант лучший? ❤️
ok-home
Посмотри в сторону std list какого нибудь и не ебись
ну если сюда еще и плюсы пристегнуть )) - пятница
ну если сюда еще и плюсы пристегнуть )) - пятница
Блядь люди петухоны притягивают им значит можно. А нам человеческие плюсы притягивать нельзя?
Slava
Спасибо, т.е. у меня всё норм сделано через чар.
Ruslan
Спасибо, т.е. у меня всё норм сделано через чар.
Если работает стабильно - значит нормально
Если работает стабильно - значит нормально
Бывало такое что с выходом за границы массива у меня прога работала годами, но потом вносились изменение и все стало крешится к хуям непредсказуемым образом...
А ты логически не понимал что в новых изменениях не так
Алексей
Посмотри в сторону std list какого нибудь и не ебись
В данном случае, лучше std::deque или std::stack
Ruslan
А ты логически не понимал что в новых изменениях не так
Он и щас на грани понимания, для него нормально будет
Leonid
не надо на МК стринги и прочее фиксированный массив байтов - самое то
Ruslan
#blog #security #firmware Мысли об организации процесса защиты прошивки 1. Создать специальную прошивку с минимальным функционалом: MQTT, OTA, которая генерирует ID устройства, регистрирует его через MQTT в облаке и запрашивает обновление по воздуху. Действие происходит в доверенной сети. 2. Для устройства генерируется ECDSA ключ, сохраняется в БД. 3. Генерируется загрузчик с открытым ключом для конкретного устройства. Поддержка безопасной загрузки активирована. 4. Образ разделов подписывается ключом конкретного устройства. 5. Образ приложения подписывается ключом конкретного устройства. 6. Собирается архив прошивки для OTA и размещается на S3 облака. 7. По MQTT на устройство подаётся команда на обновление по воздуху с указанием идентификатора собранной прошивки. Прочитать: 1. Обновление загрузчика по воздуху и таблицы разделов. Сделать: 1. Сервис хранения ключей, в БД они должны быть зашифрованы, в качестве параметра для поиска ключа логично использовать идентификатор устройства. 2. Сервис подписи прошивки. Он знает где лежат версии прошивки, знает как получить нужный ключ и формирует защищенную прошивку. Два режима: полная защита (с загрузчиком) и только приложение (для обычного обновления)
EL84 💡
#blog #security #firmware Мысли об организации процесса защиты прошивки 1. Создать специальную прошивку с минимальным функционалом: MQTT, OTA, которая генерирует ID устройства, регистрирует его через MQTT в облаке и запрашивает обновление по воздуху. Действие происходит в доверенной сети. 2. Для устройства генерируется ECDSA ключ, сохраняется в БД. 3. Генерируется загрузчик с открытым ключом для конкретного устройства. Поддержка безопасной загрузки активирована. 4. Образ разделов подписывается ключом конкретного устройства. 5. Образ приложения подписывается ключом конкретного устройства. 6. Собирается архив прошивки для OTA и размещается на S3 облака. 7. По MQTT на устройство подаётся команда на обновление по воздуху с указанием идентификатора собранной прошивки. Прочитать: 1. Обновление загрузчика по воздуху и таблицы разделов. Сделать: 1. Сервис хранения ключей, в БД они должны быть зашифрованы, в качестве параметра для поиска ключа логично использовать идентификатор устройства. 2. Сервис подписи прошивки. Он знает где лежат версии прошивки, знает как получить нужный ключ и формирует защищенную прошивку. Два режима: полная защита (с загрузчиком) и только приложение (для обычного обновления)
а девайс не имеет никаких уникальных ид изначально ?
EL84 💡
чтобы зашить в него прошивку, которая работала бы только не нём
Ruslan
Мак адрес можно, но мне не подошло
Алексей
а девайс не имеет никаких уникальных ид изначально ?
Должен быть. Процессоры x86 имеют, stm имеет.
EL84 💡
Мак адрес можно, но мне не подошло
мак адрес плохая идея, он виден юзеру)
Ruslan
Да пусть виден, смысл не в этом,)
Slava
Да пусть виден, смысл не в этом,)
У меня два вопроса. На каком этапе двигаются деньги и почему мак не подходит?
Ruslan
Насколько помню, мак есть только при наличии сети, а у меня сеть необязательна. И при обращении по разным сетевым интерфейсам получается одно устройство будет иметь разные идентификаторы...
Ruslan
Про деньги вопрос непонятен, какой контекст?
Алексей
У меня два вопроса. На каком этапе двигаются деньги и почему мак не подходит?
Мак может меняться программно. Хотя по идее должен сохраняться аппаратный
Slava
#blog #security #firmware Мысли об организации процесса защиты прошивки 1. Создать специальную прошивку с минимальным функционалом: MQTT, OTA, которая генерирует ID устройства, регистрирует его через MQTT в облаке и запрашивает обновление по воздуху. Действие происходит в доверенной сети. 2. Для устройства генерируется ECDSA ключ, сохраняется в БД. 3. Генерируется загрузчик с открытым ключом для конкретного устройства. Поддержка безопасной загрузки активирована. 4. Образ разделов подписывается ключом конкретного устройства. 5. Образ приложения подписывается ключом конкретного устройства. 6. Собирается архив прошивки для OTA и размещается на S3 облака. 7. По MQTT на устройство подаётся команда на обновление по воздуху с указанием идентификатора собранной прошивки. Прочитать: 1. Обновление загрузчика по воздуху и таблицы разделов. Сделать: 1. Сервис хранения ключей, в БД они должны быть зашифрованы, в качестве параметра для поиска ключа логично использовать идентификатор устройства. 2. Сервис подписи прошивки. Он знает где лежат версии прошивки, знает как получить нужный ключ и формирует защищенную прошивку. Два режима: полная защита (с загрузчиком) и только приложение (для обычного обновления)
Вот тут когда тебе платят деньги?
Ruslan
Про мак. Я точно не помню, но кажется он такой же как чип_ид. Т.е. его можно получить такой командой без сети.
Короче, я этот вопрос изучал давно и тогда принял решение о генерации самостоятельно, подробности несущественны и забыты.
Slava
UUID
Это такой длинный код из букв и цифр? А его откуда берешь?
Алексей
Ruslan
Это такой длинный код из букв и цифр? А его откуда берешь?
Википедия даст инфу. Я его генерирую при старте, если его нет в NVS.
Slava
Википедия даст инфу. Я его генерирую при старте, если его нет в NVS.
Т.е. он теоретически уникальный самопридуманный?