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

    文章

    4693

    浏览量

    89563

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问CW32L052C8T6这种安全性低功耗MCU安全固件部分怎么实现?

    请问,CW32L052C8T6这种安全性低功耗MCU安全固件部分怎么实现?
    发表于 12-05 07:19

    硬件加密引擎在保障数据安全方面有哪些优势呢?

    ” 机制:密钥生成、存储、使用均在加密引擎内部完成,支持真随机数发生器(TRNG)硬件生成密钥,避免软件生成的伪随机数存在的可预测性风险。密钥存储
    发表于 11-17 06:47

    芯源半导体安全芯片技术原理

    支持密钥安全生成、存储和销毁,确保密钥的生命周期安全。​ 安全启动机制:芯源半导体
    发表于 11-13 07:29

    CW32L010的安全运行库保护是什么功能

    它是针对用户指定的MCU内部FLASH数据,提供的一种读保护功能;该功能生效后,就可以禁止对安全运行库进行任何形式的读取操作(比如CPU、
    发表于 11-12 06:19

    STM32WB连接扩展板技术解析:从硬件架构到开发实践

    STMicroelectronics B-WB1M-WPAN1连接扩展板设有板载STM32WB1MMCH6。STMicro B-WB1M-WPAN1连接扩展板提供母头-母头STMOD+
    的头像 发表于 10-23 09:40 351次阅读
    <b class='flag-5'>STM32WB</b>连接扩展板技术解析:从硬件架构到开发实践

    STM32WB09xE蓝牙低功耗MCU技术解析

    STMicroelectronics STM32WB09 BLUETOOTH® 低功耗5.4 32位MCU嵌入最先进的2.4GHz射频无线电外设,优化用于实现超低功耗和出色的无线电性能,可实现
    的头像 发表于 10-20 09:29 320次阅读
    <b class='flag-5'>STM32WB</b>09xE蓝牙低功耗<b class='flag-5'>MCU</b>技术解析

    如何在 MCU/MUP 安全存储机密数据?

    如何在 MCU/MUP 安全存储机密数据
    发表于 09-08 06:44

    根据Datasheet里cyT2B5L有1024位otp,全部都能用来存储密钥吗?

    1)项目上有要求把密钥存在安全模块存储区域的要求 2)根据Datasheet里cyT2B5L有1024位otp,全部都能用来存储密钥吗?还是
    发表于 07-14 07:17

    凌科芯安国产安全MCU简介

    安全MCU是指在传统MCU基础,集成了硬件级安全功能模块的芯片,专门用于应对数据泄露、恶意攻击、固件篡改等
    的头像 发表于 06-04 15:28 772次阅读

    MAX36051 DeepCover安全管理器,具有128字节无痕迹存储器技术手册

    DeepCover 嵌入式安全方案采用多重先进的物理安全机制保护敏感数据,提供最高等级的密钥存储安全
    的头像 发表于 05-13 11:15 587次阅读
    MAX36051 DeepCover<b class='flag-5'>安全</b>管理器,具有128字节无痕迹<b class='flag-5'>存储</b>器技术手册

    凌科芯安推出新一代安全MCU芯片LKT6850

    安全MCU是在传统MCU基础增加了多种安全特性的芯片。硬件它集成了专门的
    的头像 发表于 03-31 15:58 744次阅读

    国芯科技MCU芯片荣获ISO 26262 ASIL-D功能安全产品认证

    近日,国芯科技汽车电子CCFC30XX系列MCU芯片功能安全库(SafetyLib)成功通过SGS通标标准技术服务(上海)有限公司(以下简称为“SGS”)ISO 26262 ASIL-D功能
    的头像 发表于 03-26 17:16 1159次阅读

    代码分区的艺术:双区域架构下的安全与性能平衡策略

    隔离的内存部分的功能,防止未经授权读取或修改专有代码。该功能通过将内部存储划分为两个独立区域(区域一和区域二)并分别配置其信息来控制片资源的访问权限。每个区域可设置独立的128位解锁
    的头像 发表于 02-19 09:55 706次阅读
    代码分区的艺术:双区域架构下的<b class='flag-5'>安全</b>与性能平衡策略

    电脑私有云存储怎么用啊,电脑私有云存储使用方法

    电脑私有云存储怎么用啊,电脑私有云存储使用方法     在当今数字化时代,电脑私有云存储为我们提供了一种
    的头像 发表于 01-22 09:58 1100次阅读
    电脑私有云<b class='flag-5'>存储</b>怎么用啊,电脑私有云<b class='flag-5'>存储</b>的<b class='flag-5'>使用方法</b>

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

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