mirror of
https://github.com/espressif/esp-idf
synced 2025-03-10 09:39:10 -04:00
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
This commit is contained in:
parent
692d15abbe
commit
6a216ca839
@ -833,7 +833,6 @@ menu "Security features"
|
|||||||
bool "Enable flash encryption on boot (READ DOCS FIRST)"
|
bool "Enable flash encryption on boot (READ DOCS FIRST)"
|
||||||
default N
|
default N
|
||||||
select SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE
|
select SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE
|
||||||
select NVS_ENCRYPTION
|
|
||||||
help
|
help
|
||||||
If this option is set, flash contents will be encrypted by the bootloader on first boot.
|
If this option is set, flash contents will be encrypted by the bootloader on first boot.
|
||||||
|
|
||||||
|
@ -97,12 +97,6 @@ TEST_CASE("nvs_flash_init_partition_ptr() works correctly", "[nvs]")
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SOC_HMAC_SUPPORTED
|
#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]")
|
TEST_CASE("test nvs encryption with HMAC-based scheme without toggling any config options", "[nvs_encr_hmac]")
|
||||||
{
|
{
|
||||||
nvs_handle_t handle;
|
nvs_handle_t handle;
|
||||||
|
@ -26,6 +26,13 @@ def test_nvs_flash_encr_hmac(dut: IdfDut) -> None:
|
|||||||
dut.run_all_single_board_cases()
|
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.flash_encryption
|
||||||
@pytest.mark.parametrize('config', CONFIGS_NVS_ENCR_FLASH_ENC, indirect=True)
|
@pytest.mark.parametrize('config', CONFIGS_NVS_ENCR_FLASH_ENC, indirect=True)
|
||||||
def test_nvs_flash_encr_flash_enc(dut: IdfDut) -> None:
|
def test_nvs_flash_encr_flash_enc(dut: IdfDut) -> None:
|
||||||
|
@ -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
|
@ -20,6 +20,12 @@ 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.
|
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.
|
||||||
|
|
||||||
|
.. 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.
|
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.
|
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.
|
||||||
|
@ -9,5 +9,6 @@ Migration from 5.1 to 5.2
|
|||||||
gcc
|
gcc
|
||||||
peripherals
|
peripherals
|
||||||
protocols
|
protocols
|
||||||
|
storage
|
||||||
system
|
system
|
||||||
wifi
|
wifi
|
||||||
|
11
docs/en/migration-guides/release-5.x/5.2/storage.rst
Normal file
11
docs/en/migration-guides/release-5.x/5.2/storage.rst
Normal file
@ -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.
|
@ -9,5 +9,6 @@
|
|||||||
gcc
|
gcc
|
||||||
peripherals
|
peripherals
|
||||||
protocols
|
protocols
|
||||||
|
storage
|
||||||
system
|
system
|
||||||
wifi
|
wifi
|
||||||
|
1
docs/zh_CN/migration-guides/release-5.x/5.2/storage.rst
Normal file
1
docs/zh_CN/migration-guides/release-5.x/5.2/storage.rst
Normal file
@ -0,0 +1 @@
|
|||||||
|
.. include:: ../../../../en/migration-guides/release-5.x/5.2/storage.rst
|
Loading…
x
Reference in New Issue
Block a user