fix(nvs_flash): Remove the forceful selection of NVS_ENCRYPTION with flash encryption

- This change will introduce a breaking change for SoCs with the HMAC
  peripheral. Turning on flash encryption will no longer enable NVS
  encryption automatically.

Closes https://github.com/espressif/esp-idf/issues/12549
pull/13890/head
Laukik Hase 2023-11-21 11:11:02 +05:30
rodzic 692d15abbe
commit 6a216ca839
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: D6F3208C06086AC8
9 zmienionych plików z 50 dodań i 8 usunięć

Wyświetl plik

@ -833,7 +833,6 @@ menu "Security features"
bool "Enable flash encryption on boot (READ DOCS FIRST)"
default N
select SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE
select NVS_ENCRYPTION
help
If this option is set, flash contents will be encrypted by the bootloader on first boot.

Wyświetl plik

@ -97,12 +97,6 @@ TEST_CASE("nvs_flash_init_partition_ptr() works correctly", "[nvs]")
}
#ifdef CONFIG_SOC_HMAC_SUPPORTED
/* TODO: This test does not run in CI as the runner assigned has
* flash encryption enabled by default. Enabling flash encryption
* 'selects' NVS encryption; a new runner needs to be setup
* for testing the HMAC NVS encryption scheme without flash encryption
* enabled for this test.
*/
TEST_CASE("test nvs encryption with HMAC-based scheme without toggling any config options", "[nvs_encr_hmac]")
{
nvs_handle_t handle;

Wyświetl plik

@ -26,6 +26,13 @@ def test_nvs_flash_encr_hmac(dut: IdfDut) -> None:
dut.run_all_single_board_cases()
@pytest.mark.esp32c3
@pytest.mark.nvs_encr_hmac
@pytest.mark.parametrize('config', ['nvs_encr_hmac_no_cfg_esp32c3'], indirect=True)
def test_nvs_flash_encr_hmac_no_cfg(dut: IdfDut) -> None:
dut.run_all_single_board_cases(group='nvs_encr_hmac', timeout=120)
@pytest.mark.flash_encryption
@pytest.mark.parametrize('config', CONFIGS_NVS_ENCR_FLASH_ENC, indirect=True)
def test_nvs_flash_encr_flash_enc(dut: IdfDut) -> None:

Wyświetl plik

@ -0,0 +1,22 @@
# Restricting to ESP32C3
CONFIG_IDF_TARGET="esp32c3"
# NOTE: The runner for this test-app has flash-encryption enabled
# Partition Table
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_nvs_encr_flash_enc.csv"
CONFIG_PARTITION_TABLE_FILENAME="partitions_nvs_encr_flash_enc.csv"
CONFIG_PARTITION_TABLE_OFFSET=0x9000
# Enabling Flash Encryption
CONFIG_SECURE_FLASH_ENC_ENABLED=y
CONFIG_SECURE_FLASH_ENCRYPTION_MODE_DEVELOPMENT=y
CONFIG_SECURE_BOOT_ALLOW_ROM_BASIC=y
CONFIG_SECURE_BOOT_ALLOW_JTAG=y
CONFIG_SECURE_FLASH_UART_BOOTLOADER_ALLOW_ENC=y
CONFIG_SECURE_FLASH_UART_BOOTLOADER_ALLOW_DEC=y
CONFIG_SECURE_FLASH_UART_BOOTLOADER_ALLOW_CACHE=y
CONFIG_SECURE_FLASH_REQUIRE_ALREADY_ENABLED=y
# Disabling NVS encryption
CONFIG_NVS_ENCRYPTION=n

Wyświetl plik

@ -20,7 +20,13 @@ NVS Encryption: Flash Encryption-Based Scheme
In this scheme, the keys required for NVS encryption are stored in yet another partition, which is protected using :doc:`Flash Encryption <../../security/flash-encryption>`. Therefore, enabling :doc:`Flash Encryption <../../security/flash-encryption>` becomes a prerequisite for NVS encryption here.
NVS encryption is enabled by default when :doc:`../../security/flash-encryption` is enabled. This is done because Wi-Fi driver stores credentials (like SSID and passphrase) in the default NVS partition. It is important to encrypt them as default choice if platform level encryption is already enabled.
.. only:: SOC_HMAC_SUPPORTED
NVS encryption should be enabled when :doc:`../../security/flash-encryption` is enabled because the Wi-Fi driver stores credentials (like SSID and passphrase) in the default NVS partition. It is important to encrypt them if platform level encryption is already enabled.
.. only:: not SOC_HMAC_SUPPORTED
NVS encryption is enabled by default when :doc:`../../security/flash-encryption` is enabled. This is done because Wi-Fi driver stores credentials (like SSID and passphrase) in the default NVS partition. It is important to encrypt them as default choice if platform level encryption is already enabled.
For using NVS encryption using this scheme, the partition table must contain the :ref:`nvs_encr_key_partition`. Two partition tables containing the :ref:`nvs_encr_key_partition` are provided for NVS encryption under the partition table option (``menuconfig`` > ``Partition Table``). They can be selected with the project configuration menu (``idf.py menuconfig``). Please refer to the example :example:`security/flash_encryption` for how to configure and use the NVS encryption feature.

Wyświetl plik

@ -9,5 +9,6 @@ Migration from 5.1 to 5.2
gcc
peripherals
protocols
storage
system
wifi

Wyświetl plik

@ -0,0 +1,11 @@
Storage
=======
:link_to_translation:`zh_CN:[中文]`
NVS Encryption
--------------
- For SoCs with the HMAC peripheral (``SOC_HMAC_SUPPORTED``), turning on :doc:`Flash Encryption <../../../security/flash-encryption>` will no longer automatically turn on :doc:`NVS encryption <../../../api-reference/storage/nvs_encryption>`.
- You will need to explicitly turn on NVS encryption and select the required scheme (flash encryption-based or HMAC peripheral-based). You can select the HMAC peripheral-based scheme (:ref:`CONFIG_NVS_SEC_KEY_PROTECTION_SCHEME`), even if flash encryption is not enabled.
- SoCs without the HMAC peripheral will still automatically turn on NVS encryption when flash encryption is enabled.

Wyświetl plik

@ -9,5 +9,6 @@
gcc
peripherals
protocols
storage
system
wifi

Wyświetl plik

@ -0,0 +1 @@
.. include:: ../../../../en/migration-guides/release-5.x/5.2/storage.rst