ㅤ
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.
Т.е. он теоретически уникальный самопридуманный?