# Flash and NVS encryption Below is the quick start guide for encrypting the application and factory partition but before proceeding further please READ THE DOCS FIRST. Documentation References: - [Flash Encryption](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/security/flash-encryption.html) - [NVS Encryption](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/storage/nvs_flash.html#nvs-encryption) ## Enable flash and NVS encryption some factory settings using `idf.py menuconfig` - Enable the Flash encryption [Security features → Enable flash encryption on boot] - The NVS Encryption is enabled by default when Flash Encryption is enabled, [Component config → NVS → Enable NVS encryption] - Use `partitions_encrypted.csv` partition table [Partition Table → Custom partition CSV file] Please enable the below options if you want to use ESP32 Factory Data Provider - Enable ESP32 Factory Data Provider [Component config → CHIP Device Layer → Commissioning options → Use ESP32 Factory Data Provider] - Enable ESP32 Device Instance Info Provider [Component config → CHIP Device Layer → Commissioning options → Use ESP32 Device Instance Info Provider] ## Generate the factory partition using `generate_esp32_chip_factory_bin.py` script - Please check [generating factory data guide](factory_data.md) for various available factory data options - Provide `-e` option along with other options to generate the encrypted factory partition - Two partition binaries will be generated `factory_partition.bin` and `keys/nvs_key_partition.bin` ## Flashing the application, factory partition, and nvs keys - Flash the application using `idf.py flash`. NOTE: If not flashing for the first time you will have to use `idf.py encrypted-flash` - Flash the factory partition, this SHALL be non encrypted write as NVS encryption works differently ``` esptool.py -p (PORT) write_flash 0x9000 path/to/factory_partition.bin ``` - Encrypted flash the nvs keys partition ``` esptool.py -p (PORT) write_flash --encrypt 0x317000 path/to/nvs_key_partition.bin ``` NOTE: Above command uses the default addressed printed in the boot logs