blob: 0bb0fddc30cd62b396d53f19c0693259e2abe6ab [file] [log] [blame] [view]
# 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