0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32WB的CKS功能提供在MCU上的密钥安全存储和安全使用方法

STM32单片机 来源:STM32 作者:STM32 2021-05-28 15:49 次阅读

我们都知道STM32WB是双核多协议无线微控制器,即主频为64 MHz的 ArmCortex‐M4内核(应用处理器)和主频为32 MHz的ArmCortex‐M0+内核(网络处理器),支持Bluetooth 5和IEEE 802.15.4无线标准。双核的好处是可以优化对资源的安全使用,保证和RF协议栈相关处理的实时性,并可同时提供电源管理的灵活性。

STM32WB的信息安全是以双核隔离为基础的。

STM32WB双核架构和双核间的隔离机制

调试端口访问:

出厂的芯片缺省关闭CM0+一侧的调试端口访问,即使在RDP0的状态下也只能调试CM4内核。

Option Byte

OptionByte中包含双核隔离相关的安全设置,例如CM0+才能访问的Flash区间等等。这些OptionByte受到保护,无法随意被修改。缺省出厂芯片已经使能CM0+的保护,相关的一些OptionByte设置无法通过调试端口或CM4进行修改。

片上Flash:

Flash的一部分只能由CM0+访问,CM4无法对该部分Flash进行读、写、擦。

片上SRAM

SRAM的一部分只能由CM0+访问,CM4无法对该部分SRAM进行读、写。

CRYPTO硬件资源:如AES,TRNG,PKA

系统上电复位时,缺省CRYPTO相关的硬件CM4可以使用。CM0+内核可以通过修改SystemConfig相应的寄存器使得这些硬件资源只能由CM0+内核进行控制,也称为把这些硬件资源配置成Secure访问模式。其中当AES1被配置为Secure时,CM4内核无法访问密钥寄存器,但是依旧可以访问AES1的其他寄存器使用AES1硬件单元进行加解密操作。

CKS (Customer Key Storage)

AES算法是应用程序中经常用到的一种保障数据机密性和完整性的方法,例如用于隐私数据的加密存储、加密通信等。其中,密钥作为最敏感的信息也需要受到保护。

STM32WB的CKS功能提供在MCU上的密钥安全存储和安全使用方法 :

存储在片上安全Flash的密钥无法通过调试端口获取(即使在RDP0条件下)

运行在CM4内核的应用程序代码也无法获得片上安全Flash中存储的密钥,避免软件漏洞带来的风险

应用程序代码依旧能够通过CKS和AES1硬件模块使用存储的密钥进行加解密操作

CKS能够存储多组密钥,应用程序代码可以通过密钥索引来指定AES运算所使用的密钥

用户密钥存储

用户密钥存储在“安全”Flash区域,用户代码和调试端口不可访问

CKS最多可以存储100个用户应用密钥(用于AES运算)

允许存储128位或者256位的AES密钥

对密钥的操作只能通过用户代码调用FUS接口完成

把密钥写到“安全”Flash区域,需要安全的操作环境

44bb6d76-be57-11eb-9e57-12bb97331649.png

用户密钥的写入 (Key Provisioning)

可以通过用户代码完成,也可以通过CubeProgrammer的GUI或者命令行完成

写入应用密钥的明文//simple key,需要安全的操作环境

写入应用密钥的密文//encrypted key,无需安全的操作环境

基于AES-128 GCM

写入用于解密encrypted key的密钥的明文//master key,需要安全的操作环境

该操作在手册中用“write”或“load”表示

用户密钥的写入通过应用代码实现

参考例程:

STM32Cube_FW_WB_VxxxProjectsP-NUCLEO-WB55.NucleoApplicationsCKS

给CKS_param赋值

typedef PACKED_STRUCT{uint8_t KeyType;uint8_t KeySize;uint8_t KeyData[32 + 12];} SHCI_C2_FUS_StoreUsrKey_Cmd_Param_t;SHCI_C2_FUS_StoreUsrKey_Cmd_Param_t CKS_param;CKS_param.KeyType = …;CKS_param.KeySize = …;memcpy(CKS_param.KeyData, pKeySimple_128, 16

调用FUS服务:SHCI_C2_FUS_StoreUsrKey

输入:CKS_param结构体

输出:芯片为该密钥分配的索引

SHCI_C2_FUS_StoreUsrKey (&CKS_param, &key_simple_128_idx );

用户密钥的写入使用STM32CubeProgrammer GUI实现

STM32CubeProgrammer 从2.4版本开始支持

芯片切换到系统 Bootloader 启动运行DFU,

STM32CubeProgrammer 以USB方式连接芯片

步骤:选择KEY文件 ——》 指定KEY类型 ——》 写入KEY

注意:GUI界面没有返回为该密钥分配的索引,需要用户自己记录

应用密钥的装载和使用

Load:AES1的密钥装载

SHCI_C2_FUS_LoadUsrKey (key_simple_128_idx)

该操作会把AES1密钥寄存器配置成Secure

SAES1@SYSCFG_SIPCR

只能由运行在CM0+上的FUS来配置

运行在CM4上的用户代码可以读取其状态

安全状态和AES1时钟是否使能没有关系

使用步骤

Step1:AES1模块初始化

初始化结构体的pKey,设置为空指针即可

使能AES1时钟

Step2:密钥装载

要在AES1模块disable1的时候 (EN=0)

Step3:使用AES1做加解密

hcryp1.Init.DataType = CRYP_DATATYPE_8B;hcryp1.Init.KeySize = CRYP_KEYSIZE_128B;hcryp1.Init.Algorithm = CRYP_AES_CBC;/* Key will be provided by CKS service */hcryp1.Init.pKey = NULL; hcryp1.Init.pInitVect = AESIV;HAL_CRYP_Init (&hcryp1);SHCI_C2_FUS_LoadUsrKey (key_simple_128_idx);HAL_CRYP_Encrypt(&hcryp1, Plaintext, size, EncryptedBuf, timeout)

应用密钥的使用

Lock:

SHCI_C2_FUS_LockUsrKey (key_simple_128_idx)

对某个key lock之后,将无法再对该key进行Load操作,再次Load该Key时FUS API返回错误代码0xFF;但是不影响已经在AES1密钥寄存器中的key

对该key load的禁止操作,会一直生效直到下次系统复位

注意事项:关于后续更新

为了避免有效密钥一直存在于AES1密钥寄存器中,建议使用完毕后Load一个dummy key或者disable AES1

后续FUS版本(从 STM32CUbeWB1.11开始)会增加API:Unload

早期出厂芯片预装的FUS版本较老,在FUS升级的时候,通过CSK存储在芯片里的用户key会被擦除

从FUS1.1.1.1或者FUS1.2.0开始,再做FUS升级,不会影响到已经存在的用户key应用密钥的使用

小结

使用CKS对AES密钥进行保护,与传统的直接将AES密钥存储在Flash中的做法有明显的优势:

CKS存储的密钥数据无法通过调试端口获取,已经存储的密钥数据,即使在RDP为0的情况下也不能通过调试端口访问。

密钥使用过程中应用程序代码虽然可以使用密钥进行加解密操作,但是始终无法直接获取密钥数据本身,降低了软件漏洞可能带来的风险。

原文标题:信息安全专题 | 安全存储(2)STM32WB的用户密钥存储 (CKS)

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    13

    文章

    4311

    浏览量

    85839

原文标题:信息安全专题 | 安全存储(2)STM32WB的用户密钥存储 (CKS)

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32WB55RG开发(5)----监测STM32WB连接状态

    会讨论为什么需要监测连接状态,然后介绍STM32WB提供的相关工具和技术。随后,会详细解释如何使用这些工具来实时跟踪和管理连接状态,以及如何解读和响应不同的连接状态事件。通过这些内容,能够更好地理解和利用STM32WB的无线连接
    的头像 发表于 12-16 16:22 186次阅读
    <b class='flag-5'>STM32WB</b>55RG开发(5)----监测<b class='flag-5'>STM32WB</b>连接状态

    ST NPI 专区 | 新架产品【STM32WB09KEV7TR】

    STM32WB09xx32位MCU无线系列:Bluetooth低功耗5.4STM32WB09xx是轻量级、高性价比Bluetooth低功耗5.4应用的理想解决方案产品说明STM32WB
    的头像 发表于 08-13 08:27 319次阅读
    ST NPI 专区 | 新<b class='flag-5'>上</b>架产品【<b class='flag-5'>STM32WB</b>09KEV7TR】

    WPS完成后,主机应用程序如何从ESP读取WPA安全密钥

    WPS 完成后,主机应用程序如何从 ESP 读取 WPA 安全密钥? AT WPS 命令似乎将结果存储在闪存中,以便 ESP 下次将连接到同一 AP。 ESP是否可以选择不将其存储
    发表于 07-16 08:28

    安全服务加密存储代码怎么查

    日益凸显。为了保护数据安全,云服务提供商需要提供加密存储功能。本文将详细介绍云安全服务加密
    的头像 发表于 07-02 09:28 363次阅读

    求助,关于TRAVEO™ II MCU安全调试的几个问题求解

    我对TRAVEO™ II MCU安全调试有几个问题。 1.TRAVEO TRAVEO™ II 有两种方式保护DAP,一种是永久禁用,一种是身份验证访问,对于身份验证访问,它像密码一样吗? 不喜欢
    发表于 05-30 07:34

    STM32WBSTM32L4/L4+的区别和优劣势是什么?

    STM32WBSTM32L4 / L4+的区别,和优劣势
    发表于 04-26 08:07

    STM32WB thread启动错误是什么原因导致的?

    STM32Cube_FW_WB_V1.3.0ProjectsP-NUCLEO-WB55.NucleoApplicationsBLE_ThreadBle_Thread_Static 硬件环境:STM32WB nucleo 使用SW2切换协议为thread , 显示失败
    发表于 04-16 08:01

    STM32WB能否连接蓝牙耳机?如果可以支持什么格式?

    STM32WB能否连接蓝牙耳机?如果可以支持什么格式?如果能得到回答将非常感谢!
    发表于 03-27 07:11

    项目开发时能不能同时用两块芯片,比如一块stm32WB一块stm32F4?

    请问项目开发时能不能同时用两块芯片,比如一块stm32WB,一块stm32F4?
    发表于 03-20 08:22

    STM32WB配置SMPS模块具体步骤是什么?

    想要降低STM32WB的功耗,查找手册发现开启SMPS模块可以降低功耗。配置SMPS模块具体步骤是什么有大佬知道吗?是开启SMPS宏定义,然后写PWR的寄存器就可以了吗?怎么证明自己的SMPS模块-配置正确了呢?
    发表于 03-20 08:18

    STM32U5,STM32WBSTM32L4开发板,哪个开发板拥有较多数量的ADC?

    请问,我现在需要开发一个项目,在这个项目中需要使用较多数量的传感器(至少8个),这些传感器需要进行信号采集,现在在使用STM32U5,STM32WBSTM32L4芯片的开发板中,哪些开发板拥有较多数量的ADC?
    发表于 03-20 08:01

    STM32WB的Zigbee终端在调用ZbStartupWait加入网络时,选择rejoin入网后终端会在15s后自动退网的原因?

    STM32WB系列的Zigbee终端在调用ZbStartupWait加入网络时,选择rejoin入网后,终端会在15s后,自动退网,这个是什么原因造成的。
    发表于 03-15 06:25

    CKS32F4xx系列DSP功能介绍

    CKS32F4xx系列使用高性能的32位内核,支持浮点运算单元(FPU),同时还支持DSP指令以及存储保护(MPU)用来加强应用的安全性。
    的头像 发表于 03-04 13:43 1554次阅读
    <b class='flag-5'>CKS</b>32F4xx系列DSP<b class='flag-5'>功能</b>介绍

    CysecureTools如何直接访问外部存储设备内的密钥呢?

    显然不符合安全标准。 那么,如标题所示,CysecureTools应该如何直接访问外部存储设备内的密钥呢?\"
    发表于 01-31 08:08

    详解全志R128 RTOS安全方案功能

    /sys_partition.fex功能介绍R128 FreeRTOS 系统支持如下安全功能 安全硬件下图是 ARM 为 M33 Star 提供
    发表于 12-28 15:59