Secure project using serial number

Excuse me, give mi some help,

How to secure project using serial number, for example if using esp8266 and than for serial number get by chipflash id esp8266,

Make encription from chipflash id, like opertions + -, or / , or maybe using AES, Etc. Value from operations/encripsi save on eeprom, and value seved on eeprom comparated with value from variable input serial by user.

for example i using operator for generate serial.
but i have problem, value from operator not same with value which has been put into eeprom.

#include <EEPROM.h>
const int AddLic=0;
int password = 11222;
int input;
int dariEep;
int hasil; // for example serial number


void setup() {
  Serial.begin(9600);
  //EEPROM.begin();
   Serial.println();
  Serial.print("Chip ID: ");
  Serial.println(ESP.getChipId());
  int id=ESP.getChipId();
  delay(1000);
  hasil = password+id;
  Serial.print("Your Serial Number is :");
  Serial.println(hasil);
  delay(10);
  EEPROM.put(AddLic,hasil);
  EEPROM.commit();
  dariEep =EEPROM.read(AddLic);
  Serial.println("Cek Serial Number Put Hasil To EEPROM:");
  Serial.println(dariEep);
  

}

void loop() { 
  
  /*if (Serial.available() > 0){ 
    char input = Serial.read();  
   
    }
    int dariEep =EEPROM.read(0);
    if(input == dariEep){Serial.println("INPUTAN SESUAI...");}
    else{
      Serial.println("INPUT TIDAK SESUAI...");
      char input = Serial.read(); 
      input;}
           
      
*/}

So, you want a sketch to be able to run on only one individual MCU, not any others? How will that help you?

Flash Encryption - ESP32 - — ESP-IDF Programming Guide latest documentation (espressif.com)

Flash encryption is intended for encrypting the contents of the ESP32’s off-chip flash memory. Once this feature is enabled, firmware is flashed as plaintext, and then the data is encrypted in place on the first boot. As a result, physical readout of flash will not be sufficient to recover most flash contents.

Some can use if have key valid

So, licence key, not serial number?

Yes, Mr

Iam have tray using this code, but, evalue from eeprom read and user input canot same

'
#include <EEPROM.h>

const int licStartAddr = 0; // Alamat awal di EEPROM untuk menyimpan licensi
const int licLength = 32; // Panjang licensi yang diinginkan

String enteredLic; // Variabel untuk menyimpan licensi yang dimasukkan oleh pengguna

void setup() {
Serial.begin(9600);
Serial.println("Program licensi aplikasi Arduino ESP8266");
Serial.println("Masukkan licensi:");
}

void loop() {
// Baca input licensi dari serial
if (Serial.available() > 0) {
char ch = Serial.read();
enteredLic += ch;
}

// Jika panjang licensi yang dimasukkan sama dengan panjang licensi yang diinginkan,
// maka cek apakah licensi yang dimasukkan valid atau tidak
if (enteredLic.length() == licLength) {
String storedLic = "";
for (int i = licStartAddr; i < licStartAddr + licLength; i++) {
storedLic += char(EEPROM.read(i));
}

if (enteredLic == storedLic) {
  Serial.println("Licensi valid");
  // Tambahkan kode aplikasi Anda di sini
} else {
  Serial.println("Licensi tidak valid");
}

// Bersihkan variabel enteredLic
enteredLic = "";

}
}

`

Please follow the forum guidelines and post your code in code tags.

You deleted the post containing your code.


const int licStartAddr = 0;  // Alamat awal di EEPROM untuk menyimpan licensi
const int licLength = 32;    // Panjang licensi yang diinginkan

String enteredLic;  // Variabel untuk menyimpan licensi yang dimasukkan oleh pengguna

void setup() {
  Serial.begin(9600);
  Serial.println("Program licensi aplikasi Arduino ESP8266");
  Serial.println("Masukkan licensi:");
}

void loop() {
  // Baca input licensi dari serial
  if (Serial.available() > 0) {
    char ch = Serial.read();
    enteredLic += ch;
  }

  // Jika panjang licensi yang dimasukkan sama dengan panjang licensi yang diinginkan,
  // maka cek apakah licensi yang dimasukkan valid atau tidak
  if (enteredLic.length() == licLength) {
    String storedLic = "";
    for (int i = licStartAddr; i < licStartAddr + licLength; i++) {
      storedLic += char(EEPROM.read(i));
    }

    if (enteredLic == storedLic) {
      Serial.println("Licensi valid");
      // Tambahkan kode aplikasi Anda di sini
    } else {
      Serial.println("Licensi tidak valid");
    }

    // Bersihkan variabel enteredLic
    enteredLic = "";
  }
}

All we see is some code. You haven't clearly explained what your problem is. Where is your #include for the EEPROM library?

This befor add chipid+encripsi or operations to eeprom

Sorry, your English is just not clear enough to express such a detailed technical topic. What is your specific question?

In home app ide or in document/arduino/libraries ( windows)

Your code does not compile without errors

Arduino: 1.8.19 (Windows Store 1.8.57.0) (Windows 10), Board: "Arduino Uno"

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware -hardware C:\Users\ken\Documents\ArduinoData\packages -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\tools-builder -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -tools C:\Users\ken\Documents\ArduinoData\packages -built-in-libraries C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\libraries -libraries C:\Users\ken\Documents\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10819 -build-path C:\Users\ken\AppData\Local\Temp\arduino_build_751866 -warnings=all -build-cache C:\Users\ken\AppData\Local\Temp\arduino_cache_799471 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -verbose C:\Users\ken\Documents\Arduino\sketch_dec28a\sketch_dec28a.ino

C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\arduino-builder -compile -logger=machine -hardware C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware -hardware C:\Users\ken\Documents\ArduinoData\packages -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\tools-builder -tools C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -tools C:\Users\ken\Documents\ArduinoData\packages -built-in-libraries C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\libraries -libraries C:\Users\ken\Documents\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10819 -build-path C:\Users\ken\AppData\Local\Temp\arduino_build_751866 -warnings=all -build-cache C:\Users\ken\AppData\Local\Temp\arduino_cache_799471 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\tools\avr -verbose C:\Users\ken\Documents\Arduino\sketch_dec28a\sketch_dec28a.ino

Using board 'uno' from platform in folder: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\arduino\avr

Using core 'arduino' from platform in folder: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\arduino\avr

Detecting libraries used...

"C:\\Program Files\\WindowsApps\\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Program Files\\WindowsApps\\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files\\WindowsApps\\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\\hardware\\arduino\\avr\\variants\\standard" "C:\\Users\\ken\\AppData\\Local\\Temp\\arduino_build_751866\\sketch\\sketch_dec28a.ino.cpp" -o nul

Generating function prototypes...

"C:\\Program Files\\WindowsApps\\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Program Files\\WindowsApps\\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files\\WindowsApps\\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\\hardware\\arduino\\avr\\variants\\standard" "C:\\Users\\ken\\AppData\\Local\\Temp\\arduino_build_751866\\sketch\\sketch_dec28a.ino.cpp" -o "C:\\Users\\ken\\AppData\\Local\\Temp\\arduino_build_751866\\preproc\\ctags_target_for_gcc_minus_e.cpp"

"C:\\Program Files\\WindowsApps\\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\ken\\AppData\\Local\\Temp\\arduino_build_751866\\preproc\\ctags_target_for_gcc_minus_e.cpp"

Compiling sketch...

"C:\\Program Files\\WindowsApps\\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Program Files\\WindowsApps\\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files\\WindowsApps\\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\\hardware\\arduino\\avr\\variants\\standard" "C:\\Users\\ken\\AppData\\Local\\Temp\\arduino_build_751866\\sketch\\sketch_dec28a.ino.cpp" -o "C:\\Users\\ken\\AppData\\Local\\Temp\\arduino_build_751866\\sketch\\sketch_dec28a.ino.cpp.o"

C:\Users\ken\Documents\Arduino\sketch_dec28a\sketch_dec28a.ino: In function 'void loop()':

sketch_dec28a:24:25: error: 'EEPROM' was not declared in this scope

       storedLic += char(EEPROM.read(i));

                         ^~~~~~

C:\Users\ken\Documents\Arduino\sketch_dec28a\sketch_dec28a.ino:24:25: note: suggested alternative: 'EECR'

       storedLic += char(EEPROM.read(i));

                         ^~~~~~

                         EECR

exit status 1

'EEPROM' was not declared in this scope


Some one can use product if he has add valid key, valid key maybe can inpuy from serial, for test using serial monitor, for implementations input key for android app

How will the key be generated? Are you supplying the hardware? Please describe the installation process.

Just software and firmware, for this project using esp8266, i just suply firmware for esp8266, and app android for input key

Suppose person A obtains it from you, it finds the chip ID, generates a key, and requests it on each startup. But A gives it to B. B does everything just the same. Now they also can run it.

every esp8266 have different chipflash id,

I know. But see post #18. If the user supplies an ESP, the program must use whatever chip ID is there.