• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Проблема с шифрованием flash памяти ESP32

AlexMas

New member
Работаю над коммерческим продуктом, потому решил использовать функцию шифрования flash памяти. Проект разрабатывается в Arduino IDE. Делал следующее:
1. Сгенерировал ключ шифрования
espsecure generate-flash-encryption-key flash_encryption_key.bin
2. Записал его в eFuse
espefuse --port burn-key BLOCK1 flash_encryption_key.bin
3. Включил шифрование flash памяти
espefuse --port COM3 burn-efuse FLASH_CRYPT_CNT
4. Зашифровал прошивку, которая была сгенерирована в папке проекта Arduino (папка build)
espsecure encrypt-flash-data -k flash_encryption_key.bin -a 0x10000 -o firmware-encrypted.bin firmware.bin
5. Прошил плату Wemos Lolin32 (чип ESP32-D0WD-V3 (revision v3.1))
esptool --port COM3 write_flash 0x10000 firmware-encrypted.bin

Все команды прошли без ошибок и проблем, но плата стала в мониторе Arduino IDE циклически выдавать ошибки.
rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
invalid header: 0x3bca5efb
invalid header: 0x3bca5efb
invalid header: 0x3bca5efb
invalid header: 0x3bca5efb
invalid header: 0x3bca5efb
invalid header: 0x3bca5efb
invalid header: 0x3bca5efb
ets Jul 29 2019 12:21:46
При отсутствии шифрования все работало как надо.

6. После этого зашифровал с тем же ключом загрузчик bootloader.bin и таблицу разделов partitions.bin, также взятые из папки проекта.
7. Прошил зашифрованные загрузчик по адресу 0x1000 , а таблицу разделов 0x8000.
8. Затем заново залил зашифрованную прошивку.
Результат остался прежним - циклические ошибки.
Помогите, пожалуйста, исправить ситуацию! Что я сделал неправильно и как вернуть все в рабочее состояние, но с зашифрованной прошивкой.
 

pvvx

Активный участник сообщества
Убрать все прямые обращения к данным с Flash в вашей программе.
 

pvvx

Активный участник сообщества
Каким образом шифрование внешней Flash защитит от копирования продукта?

В 99% требуется только сама идея, а прошивки на Arduino пишутся за вечер. И обычно с лучшей и дополненной реализацией, чем ваша. Это и есть вся цена для дублирования.

По этому “защита” от копирования возможна только с помощью использования внешних ресурсов и реализаций на стороне этих ресурсов.

Так что помучайтесь ради глупости...
 

AlexMas

New member
Каким образом шифрование внешней Flash защитит от копирования продукта?

В 99% требуется только сама идея, а прошивки на Arduino пишутся за вечер. И обычно с лучшей и дополненной реализацией, чем ваша. Это и есть вся цена для дублирования.

По этому “защита” от копирования возможна только с помощью использования внешних ресурсов и реализаций на стороне этих ресурсов.

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

AlexMas

New member
Убрать все прямые обращения к данным с Flash в вашей программе.
взял из примеров ардуино скетч, где также используется i2s.
#include <ESP_I2S.h>
const int frequency = 440; // frequency of square wave in Hz
const int amplitude = 500; // amplitude of square wave
const int sampleRate = 8000; // sample rate in Hz
i2s_data_bit_width_t bps = I2S_DATA_BIT_WIDTH_16BIT;
i2s_mode_t mode = I2S_MODE_STD;
i2s_slot_mode_t slot = I2S_SLOT_MODE_STEREO;
const int halfWavelength = (sampleRate / frequency); // half wavelength of square wave
int32_t sample = amplitude; // current sample value
int count = 0;
I2SClass i2s;
void setup() {
Serial.begin(115200);
Serial.println("I2S simple tone");
// start I2S at the sample rate with 16-bits per sample
if (!i2s.begin(mode, sampleRate, bps, slot)) {
Serial.println("Failed to initialize I2S!");
while (1); // do nothing
}
}
void loop() {
if (count % halfWavelength == 0) {
// invert the sample every half wavelength count multiple to generate square wave
sample = -1 * sample;
}
i2s.write(sample); // Right channel
i2s.write(sample); // Left channel
// increment the counter for the next sample
count++;
}
По моему здесь нет прямых обращений к данным с Flash, но это тоже не работает и ошибка не изменилась.
 

pvvx

Активный участник сообщества
А в BootLoadr-е?

И у вас "коммерческий" проект. Обращайтесь к платным услугам :ROFLMAO:
 

pvvx

Активный участник сообщества
В большинстве случаев копирование без модификации никому не сдалось. Тем более для дублирования потребуется аналогичная печатная плата и комплектация. А уровень проектов на Arduino ниже плинтуса и для нормального разработчика аналогичный проект пишется за вечер. По этому, никакого смысла в копировании Flash нет. Любой нормальный разработчик скопирует идею, если она актуальна и добавит более продуманные решения и заменит комплектацию, включая замену ESP на более качественный чип. Иначе вообще нет смысла в копировании какого-то устройства. А пользователям “защита” добавит только кучу проблем. В итоге ваш проект будет переработан и выпущен в виде улучшенной или дешевой реализации.
 

pvvx

Активный участник сообщества
Практика показывает, что “защиту” вы cможете организовать только путем внешнего сервиса и услуг, а не в конечном оборудовании для пользователя.
При этом прошивку защищают исключительно уровнями от дурака, чтобы уменьшить возврат товара от любителей перепрограмировать всё что попадется. А как раз этой защиты у ESP нет – каждый может стереть программу в ESP и записать туда что пожелает и вернуть, как неработающее устройство.
 

AlexMas

New member
То есть скопировать прошивку и переработать ее не проблема? И никакие шифрования и защита загрузки в ESP не помогают?
Посмотрел bootloader, так куча ошибок, в частности относящихся к загрузке partitions.
 

Вложения

pvvx

Активный участник сообщества
А если вы “зашифруете” Flash и зададите проверки на перепрограммирование, без реализации защиты внешними сервисами, то это позволит другим использовать платные альтернативные прошивки для вашего устройства :p
 

AlexMas

New member
Да дело не в самом устройстве, а в программе, точнее в ее алгоритме и настройках. Если кто-то сделает альтернативный способ, то ради бога. Пусть заливают в это копеечное устройство свои чудо-прошивки. Не хочется плоды своих исследований просто так кому-то отдавать. Кстати bootlader и в папках других скетчей почему-то такой же с кучей ошибок.
 

pvvx

Активный участник сообщества
Но, т.к. вы выбрали уровень Arduino, да ещё на известном всем чипе, то уже понятно, что ничего интересного и коммерчески выгодного там не будет и “защищать” там нечего. Тем более в единичном устройстве.
 

pvvx

Активный участник сообщества
Ныне дизассемблированием чужих программ уже никто не занимается. Если только ради спортивного интереса. Всегда все алгоритмы и “настройки” возможно выудить по внешним интерфейсам и реакциям устройства. Патента на ваш алгоритм и средств для судов и у вас нет и в России и Китае всем плевать на патенты...
И какая ещё “коммерция” на дешевых устройствах, если вы не собираетесь их выпускать миллионными тиражами? :)
 

AlexMas

New member
Я выбрал, то что мне доступно для технической реализации. На момент начала разработки я не был уверен в положительном результате. А теперь когда он получен ,то хочется защитить свои достижения. Коммерческий проект не означает, что он всегда будет реализован на ESP32. Это только этап, на котором будет идти апробация.
 

AlexMas

New member
В дальнейшем планируется использовать это устройство с внешним сервисом, для которого оно будет только источником данных. Но до этого нужно еще убедить потенциальных клиентов, а без демонстрации чего-то работающего сделать это трудно. А средств на серьезные разработки у нас нет и давать их никто не торопится. Поэтому пока такой уровень.
 

pvvx

Активный участник сообщества
С конкурентами путем “защит” вообще никогда не борются. Иначе сразу проигрывают. Там актуальны другие методы…
 

pvvx

Активный участник сообщества
Я выбрал, то что мне доступно для технической реализации. На момент начала разработки я не был уверен в положительном результате. А теперь когда он получен ,то хочется защитить свои достижения. Коммерческий проект не означает, что он всегда будет реализован на ESP32. Это только этап, на котором будет идти апробация.
Для этого достаточно примитивных вариантов - совсем тупых - даже сравнения серийного номера чипа/Flash.
Получив демонстрацию, после "апробации" клиент может заказать у других, т.к. вы будете терять время на всякие защиты и увеличивать цену :p
Не представляю, что такого эдакого можно сделать на ESP, что это не повторит школьник.
Если только устройство не содержит какой-то специальный изготовленный вами датчик с новейшим ноу-хау.
 

aZholtikov

Active member
В каждом маленьком ребёнке
И в мальчишке, и в девчонке
Есть по двести грамм какашек
Или даже полкило
А вот в дяде или тете
Там уже какашек больше
И порой вообще бывает
Целый человек говно

P.S. Что-то почитывая сообщения @pvvx навеяло (не конкретно здесь, а за последнюю неделю)...
 

pvvx

Активный участник сообщества
В каждом маленьком ребёнке
И в мальчишке, и в девчонке
Есть по двести грамм какашек
Или даже полкило
А вот в дяде или тете
Там уже какашек больше
И порой вообще бывает
Целый человек говно

P.S. Что-то почитывая сообщения @pvvx навеяло (не конкретно здесь, а за последнюю неделю)...
Дык вы же кляузник, недовольный всем (видимо у вас всё совсем плохо). А я типа баба-яга :p

И по теме, как пример: с 1990-х годов изготавливаем промышленное оборудование. Ни одной копии электроники за всё время не встречалось. При этом сами производимые установки (техпроцесс, включая физику) были разработаны нами и давно уже есть китайские копии, но не по электронной части, а просто упрощенные и не качественные. Все они имеют только повторы наших старых разработок по железу, не предполагающие развития, нововведений, улучшения качества выходной продукции и т.д. хотя-бы в чем-то. И это очень плохо, т.к. не взять от конкурентов чего-то нового. В итоге конкурентов и нет, кроме более дешевых тупых вариантов от китайцев или дорогущих западных решений, которые потом приходится переоборудовать на наши решения - и это тоже часть бизнеса :p
А обновление программы можно и клиенту передать, если бы он смог перепрограммировать сам без ошибок. Но приходится выезжать сервисным инженерам, что не дешево…
 

aZholtikov

Active member
Я просто напомню заголовок сайта - "esp8266 - Сообщество разработчиков". Сообщество - это взаимное уважение и помощь.
Не чмырыть, а помогать. Не можете помочь без "опускания" спрашивающего "ниже плинтуса" - промолчите.
 
Сверху Снизу