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

发布者:WhisperingRain最新更新时间:2023-09-06 来源: elecfans关键字:STM32WB  MCU  密钥  安全存储  安全使用 手机看文章 扫描二维码
随时随地手机看文章

我们都知道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的情况下也不能通过调试端口访问。

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


关键字:STM32WB  MCU  密钥  安全存储  安全使用 引用地址:STM32WB的CKS功能提供在MCU上的密钥安全存储和安全使用方法

上一篇:STM32F3 MCU外围元器件及晶振选型参考
下一篇:STM32外接DHT11温湿度传感器并通过OLED进行数据显示的设计电路与程序

推荐阅读最新更新时间:2024-11-03 11:15

STC12C系列单片机输出固定脉冲个数
实现方法:运用PWM输出功能输出一定频率(F)的脉冲,在一定的时间、以一定的频率输出的脉冲个数是确定的。所以根据所要输出的脉冲个数(PlusCount)可以确定输出脉冲的时间(TimePlus)。 TimePlus=PlusCount/F ; 定时我们采用T0的工作方式3,即自动重装模式。 EA=1 TMOD=0x02; //自动重装模式 AUXR = 0x80; //T0 为12T模式 TH0=TL0=256; void Timer0() interrupt 1 { TimeCount++; if(TimeCount==InitCount) { CR = TR0=0; //停止T00; // PLU
[单片机]
单片机指令MOV、MOVC、MOVX的区别与联系
这三条都是单片机内数据传送指令。但是它们操作的对象有所不同。 1、MOV:MOV是内部数据传送指令,什么是内部数据传送呢?就是寄存器之间、寄存器与通用存储区之间的数据传送。 2、MOVX:MOVX是外部数据存储器(外部RAM)与累加器A之间的数据传送指令。因为内部与外部的RAM地址有重叠现象,所以需要用不 同的指令予以区分。 3、MOVC:MOVC是累加器与程序存储区之间的数据传送指令。它比MOV指令多了一个字母 C ,这个 C 就是 Code 的意思,翻译过来就是 代码 的意思,就是代码区(程序存储区)与A之间的数据传送指令。它可以用于内部程序存储区(内部ROM)与A之间的数据传送,也可以 用于外部程序存储区(外部ROM)与
[单片机]
SPMC65P2404A单片机在电动跑步机中的应用
1 引言   目前,倡导健康已经成为人们越来越关注的焦点,而跑步机的出现就越来越受到人们的喜爱,人们可以不用出户就可以在家里或者健身房进行体育锻炼。这种方式越来越受到消费者的亲赖。跑步机的蓬勃发展可以归纳为以下几个方面的因素:   - 随着人们生活水平的提高;   - 人们越来越重视自身的身体健康;   - 更热衷于参加各种体育运动,其中借助跑步机进行的锻炼,其运动形式简单;   - 适合在家庭或健身房室内进行,锻炼起来特别方便。   国外电动跑步机制造业从上个世纪七十年代后期起步,与我国同类产品相比,除款式多样化及附加功能开发上比较占先外,其他差距较小。例如钢材,我国宝钢、鞍钢等生产的带钢的品质均达到或超过国际标准,其配套的钢
[单片机]
SPMC65P2404A<font color='red'>单片机</font>在电动跑步机中的应用
单片机PWM波(AT89C51、ADC0808)
一、简介 此电路由AT89C51最小系统和ADC0808组成。 二、运行效果 三、代码 /*想要更多项目私wo!!!*/ #include reg52.h #define uint unsigned int #define uchar unsigned char sbit CLK = P2^4; sbit ST = P2^5; sbit EOC = P2^6; sbit OE = P2^7; sbit PWM = P3^0; void DelayMS(uint ms) { uchar i; while(ms--) { for(i=0;i 120;i++); } } voi
[单片机]
<font color='red'>单片机</font>PWM波(AT89C51、ADC0808)
我与51单片机不得不说的故事
记得,刚开始接触51是上大二的时候,那时候,哪知道51是什么东西,只知道有本叫《单片机原理与接口技术》的书是自己的专业必修课。当老师说道,“单片机”是一个微型计算机的时候,我还在感慨,就这么个小东西(DIP40),能跟强大的计算机媲美嘛! 紧接着,51单片机的第一个实验就是在proteus上面的仿真。由于,当时刚刚开始开数、模电课程,所以对电路中的单片机的P0口外接的8个I/O口分别和一个470R的电阻和一个led串联后并联在一起构成了一个简单的流水灯电路还不是很理解。紧接着,就是老师在keil里面输入了几行汇编代码,“下载”到单片机里面(proteus里面的),只见,led开始闪烁了。随后就是老师随便动了几行代码,led就开始
[单片机]
我与51<font color='red'>单片机</font>不得不说的故事
STC Monitor-51的单片机在线仿真调试
引言 当今很多院校中,单片机的教学仍以经典的51内核单片机为主。其实验与应用开发中最重要的环节是软、硬件综合调试,通常采用的方法主要有两种:一种是使用仿真器,优点是功能齐全,但是价格较高,一般厂家研发采用;另一种是使用软件仿真和芯片直接烧写验证的方法,其成本虽然低,但在程序或硬件出现疑难问题时,很难找到原因。 实际上,还有一种成本低且具有在线仿真调试功能的技术是在线仿真调试,它特别适合初学者。 在线仿真调试 是指:通过Keil C51编译器,结合单片机中的监控程序,对系统的应用程序和硬件进行仿真调试,可以让单片机以单步、断点、全速等运行模式来执行程序。在线仿真调试是单片机应用开发过程中的高效方法,国内STC公司的51内核单片机IA
[单片机]
STC Monitor-51的<font color='red'>单片机</font>在线仿真调试
单芯闪存微控制器性能达200MIPS
  爱特梅尔现已推出基于ARM9的AT91SAM9XE系列的样品,这是集成了200MIPS的 ARM926EJ-S™ 处理器核与512K字节片上闪存的第一代单芯片闪存微控制器。    从ARM7顺利过渡到ARM9闪存微控制器   SAM9XE系列最大程度地重复利用了为SAM7系列而开发的外设和技术。此外,SAM9XE系列与SAM7系列采用相同的支持架构,从而实现两个微控制器系列之间地迁移。   爱特梅尔公司ARM产品市场主管Jacko Wilbrink指出:“SAM9XE 系列将爱特梅尔在ARM 闪存 MCU 方面的领导地位从 ARM7 领域扩展到 ARM9 领域。SAM9XE 系列建构于经过验证的架构和外设集,能够满足迅速
[新品]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved