HSM介绍与架构概述U和安全特性
HSM: Hardware Security Module,硬件安全模块,如下图深色模块所示。
该模块提供了逻辑攻击保护,依赖于在主机中实现的以下特性:
1. 给HSM足够保护和锁定闪存区域 2. 在Flash配置区有OTP(One time programmable)页 3. 配置区中留有HSM内存区域 3.1 该区域对修改的锁定(OTP) 3.2 在启动过程结束后,可以关闭配置区的HSM区域 4. 复位后HSM模块配置MBIST,配置MBIST后HSM启动。
HSM不包含针对物理攻击的硬件对抗措施。针对侧通道攻击和故障攻击的对策必须由软件实现。
1.1 CPU
基于Cortex-M3,集成24位系统定时器(SysTick Timer),NVIC控制器,支持MPU和安全特性。
部分异常事件如下图所示:
1.2 TRNG、通用定时器和缓存
4Kbytes统一数据和指令缓存,真随机数发生器(TRNG),2个16位通用定时器。其中TRNG:为加密算法(密钥)、协议(挑战、盲值、填充字节)等提供随机数据。
1.3 AES模块和防火墙
AES(Advanced Encryption Standard,高级加密标准)模块带有8个128位(其中2个是不可更改的)本地密钥和5个(包括1个用于伪RNG)上下文存储防火墙功能:HSM内部保护免受其他主机的访问。
SPB上BUS总线可以访问完整的系统内存映射
SFRs用于数据通信
SFRs 可以触发HSM CPU中断
32个HSM外部中断输入,映射到NVIC的一个中断节点
2个中断信号从HSM到系统中断控制器
最多10个传感器的输入
2个引脚的控制
用于触发芯片的应用程序和系统复位的选项
1.4 Boot ROM (4KB)
包含启动HSM所必需的代码和只读数据
ROM可以通过DBGCTR(安全保护和功耗)在引导软件完成时关闭
ROM数据采用1位纠错和2位纠错检测保护
ROM采用校验和测试
1.5 本地RAM
24KB/40KB (A1G)
96KB (A2G)
复位丢失
RAM通过MBIST测试
1位错误纠正
2位错误检测
本地RAM的前384个字节为BOS保留(在用户操作系统中完全可重用)
1.6 看门狗定时器、Hash模块和PKC模块
看门狗定时器:一个16位向上计数Hash模块:SHA224/256硬件加速器,用于签名生成、验证和通用数据完整性检查 PKC模块:ECC-256硬件加速模器,支持快速签名生成和ECDSA验证
这3个模块只适用于A2G
1.7 A1G
对于A1G,PFx中的HSM Flash专用扇区。TC23x/TC27x/TC29系列S6 16KB,S16和S17共128KB。
TC27x/TC29x系列也可以用Dflash 8×8KB=64KB
1.8 A2G
对于A2G,PFx中的HSM Flash专用扇区。共40×16KB=640KB。配置选项:如果需要并行TP和HSM操作,那么PF0 S0到S39可以配置为TP和HSM PCODE,如下所示:
PF0 S0:特定TP用途
PF0 S1至S7:TP扩展存储器
PF0 S8至S39:HSM PCODE
TP,HSM PCODE和CPU地址范围应该是连续的
对于A2G,DFlash Bank1中的HSM Flash专用扇区
1.9 其他模块
其他可选模块,实现安全相关应用
Secure Boot(安全启动)
Tuning protection(调优保护)
Secure sensor communication(安全传感器通信)
Authentication(身份验证)
Secure flash load(安全闪存加载)
Immobilizer (theft protection)(防盗控制系统,防盗保护)
Secure log (安全日志)
Secure debug authentication(安全调试身份验证)
2.真随机数发生器TRNG
TRNG:True Random Numbers Generator,用于生成随机数:
密钥加密算法
支持协议
需要高“熵” (High “entropy”)
与随机变量相关的不确定性
熵越低,位值越可预测
实现增加熵的后处理
质量(最小熵要求)由德国BSI发布的AIS-31定义
2.1 TRNG熵(TRNG Entropy)
HSM实现TRNG熵:根据BSI AIS 20/31功能类PTG.2的真随机数生成器,每位香农熵至少H1 = 0.9991363
如果从TRNG中收集了80 bits= 10 bytes的数据,则会得到H1 = 80*0.9991363 = 79.93 bits的熵。
如果基于AES的PRNG是从这个TRNG中播种的,那么无论如何都会用16 byte的随机数据初始化状态(即127.9 bit的熵),其中16 byte是AES的块大小。
注意:BSI文件AIS 20/31取代了AIS-31,旧的“P2 high”现在被称为“PTG.2”。但这对TRNG来说没有任何改变。
2.2 TRNG 吞吐量
生成随机数所需的时间不是常数,取决于源的“熵”水平吞吐量R以千比特每秒(kb/s)为单位,如下公式所示
对于100MHz的时钟频率,典型的吞吐量大约是Rtyp = 360kb/s 如果在生成由TRNGCTRL.DBS指定的大小的数据块之前经过了最大时钟周期数。则TRNGSTAT.WARN提示警告
2.3 TRNG操作步骤
TRNG模块一旦启用,就会连续为系统操作生成真正的随机字节(TRNG_CTRL.DIS= 0)
新的真实随机数据的可用性由TRNGSTAT.DTARDY位发出信号并触发相应的“输出缓冲区不空”中断
在重新开始生成之前,TRNG等待数据被读取
一旦数据被读取(从TRNGDATA),标记位TRNGSTAT.DTA_RDY被硬件清除
当数据质量太差时,没有新的数据生成(由FIPS_ERR和WARN位+ 中断报告)
当模块通过设置控制位TRNG_CTRL.Dis = 1失能时,TRNG进入睡眠模式。
2.4 伪随机数发生器PRNG
PRNG:Pseudo Random Numbers Generator,可以使用TRNG + AES CBC(密码块链模式)来实现。在数字硬件中构建PRNG比TRNG容易得多。一旦PRNG被正确地播种,它可以非常快地产生不可预测的输出
3.AES 128 加密/解密模块
AES:Advanced Encryption Standard,高级加密标准,模块如下所示:
3.1 AES 128 模块特性
AES模块是一种快速硬件设备,通过128位密钥支持加密和解密AES 它可以对单个128位数据(即纯文本或密文)块进行纯/简单加密和解密,以及对每个128位的大量数据块进行加密或解密。对于这些,实现了几种操作模式
ECB(电子代码本模式)
CBC(密码块链模式)
CTR(32位计数器模式)
OFB(输出反馈模式)
CFB(密码反馈模式)
这也支持其他模式
GCM (Galois计数器模式)
XTS(基于XEX的微调代码本模式(TCB)与密文窃取(CTS)) 此外,AES模块支持以下功能:
8个AES密钥的内部存储不可读
密钥0和1是可锁定的,即不可写也不可读
5个上下文寄存器用于不同的操作模式
最大延迟1µs @ 100 MHz
3.2 AES 128 模块寄存器
HSM包含SFR寄存器和内部寄存器 SFR寄存器由CPU直接访问
控制寄存器AESCTRL
状态寄存器AESSTAT
输入寄存器AESIN,由4x32位字寄存器组成
输出寄存器AESOUT,由4x32位字寄存器组成
第二个输出寄存器AESOUTSAVE,由4x32位字寄存器组成。
注意:输出寄存器AESOUT在加/解密操作期间不能被CPU访问
内部寄存器只能通过SFR寄存器间接访问
8个关键寄存器(Key Registers)K0, K1,…, K7(128位)。
5个链接变量寄存器(Chaining Variable Register)CV0, CV1, CV2, CV3, CV4,每个都是128位
3.2.1 控制寄存器AESCTRL
AES模块的以下操作完全由AESCTRL寄存器来控制:
从AESIN复制一个键值到某个K[x] (x=0,…,7)寄存器
锁定键K0或K1,使他们不能再写入
从AESIN复制IV(Initial Value,初值)到一些链接变量寄存器CV[y] (y=0,…,4)
值从CVy复制一个CV到AESOUT
在AESIN中对输入进行密码学处理,最多使用一个指定的密钥和链接变量并在AESOUT中输出。
保存AESOUT的内容到AESOUTSAVE。这只是一个间接的过程,如果触发一个将覆盖AESOUT的进程,它将自动发生。
3.3 加密/解密操作步骤
通常加密/解密操作是这样完成的:
密钥被加载到某个K[y]寄存器中
初始值IV被加载到某个CV[y]寄存器中。
然后在输入寄存器AESIN中填充密码操作的输入
写AESCTRL寄存器字段触发加密/解密操作:
--OPC—Operation Code,操作码 -- KEYNR—Key Number,密钥数。带有无效KEYNR的操作码将被忽略 -- CVNR—Chaining Variable Number,链接变量数。带有无效CVNR的操作码将被忽略
等待AES (AESSTAT.BSY)完成操作
从AESOUT读取输出
3.4 AES 128 性能
对于128位数据块的加密/解密AES 128 CBC算法需要14个时钟周期 AES 128在系统级别上的性能不易获得,依赖于SW实现,并且可能由于以下原因而有所不同:
AES 128 key的位置。如AES模块,HSM SRAM或HSM DFLASH
HSM Code的位置。HSM SRAM或HSM PFLASH
利用实现ARM-M3数据缓存。如交叉并行AES操作和数据传输
从主机到HSM使用SW API的效率。例如基于AUTOSAR的协议开始/更新/结束可能添加一些额外的延迟
MAC操作额外的安全检查
HSM运行频率。100 MHz频率
3.5 CBC
CBC:Cipher Block Chaining Mode,密码块链接模式。128-bit块使用128-bit关键字+IV(Initial Value,初始值)进行加密/解密
3.6 ECB
ECB:Electronic Code Book mode,电子码本模式。128-bit块使用128-bit关键字进行加密/解密
4.公钥加密(PKC)模块
PKC:Pubilc Key Cryptography,公钥加密
4.1 PKC模块特性
PKC模块支持ECDSA快速生成签名和验证的硬件模块。支持对长度为256位的整数和二进制多项式进行模块化和非模块化操作:
乘法
模块化加法和减法
模块化乘法
模块化求逆和除法
支持在比特长度为256的所有公共椭圆曲线上执行复杂算法:
仿射坐标中两点的相加
仿射坐标中点的加倍
标量乘法
支持曲线在比特长度为256位的Fp和
包括NIST 曲线 P-192, P-224, P-256, K-163, B-163, K-233, B-233,以及Brainpool 曲线brainpoolP160r1, brainpoolP192r1, brainpoolP224r1, brainpoolP256r1
支持Curve25519和Ed25519的操作
此外,PKC模块支持以下特性:
存储高达256位长度的32个值(整数或二进制多项式)
100 MHz 下,每秒生成 200 个密钥长度为 256 的椭圆曲线 ECDSA 签名
100 MHz 下,每秒验证 100 个密钥长度为 256 的椭圆曲线的 ECDSA 签名。
4.2 椭圆曲线(Elliptic Curves)
4.2.1 表示变量(Representation Variants)
用代数符号表示椭圆曲线的解存在不同的可能性:
Weierstrass-Notation:
Montgomery-Notation:
(twisted,扭曲) Edwards-Notation:
4.2.2 对比
不同的代数符号支持不同的性质:
Weierstrass方程:
-- 任何椭圆曲线都可以用Weierstrass符号表示- -- NIST和Brainpool曲线用Weierstrass符号实现
Montgomery和Edwards 方程:
-- 不是所有的椭圆曲线都可以用Montgomery或Edward符号表示 -- 公式的实现(在SW或HW中)可能会为“更智能的解决方案”提供一些优势。例如,可能会导致一些速度(性能)优势 --曲线ED25519用Edwards符号表示(由ED表示)。例如,与Weierstrass相比,曲线ED25519 HW加速器实现可能提供高达性能因子1.3-1.5的速度优势
注:一种符号可以从一种形式转换为另一种形式,反之亦然
NIST:
定义90-tees
使用不同的密钥长度和相应的安全保护水平(256 bit密钥长度假定为充分保障未来5 - 15年)
用Weierstrass表示法表示,并为SW实现进行了优化。这可能会影响另一侧信道阻力HW实现
在政治上不受信任(特别是在欧洲),因为美国国家安全局参与。生成算法非常有名,但一些的来源参数尚不清楚
-Brainpool:
清洁生成的公共曲线,没有后门(BSI参与)
可用不同的密钥长度(256位密钥长度假设在未来5-15年内足够安全)
以Weierstrass符号表示
-- 不为SW实现优化,通用伪随机符号。非常适合抗侧信道的HW实现,主要只在欧洲使用(很少在世界其他地区使用)
欧洲C2C联盟决定强制作为默认值
Curve ED25519:
由D. Bernstein(来自芝加哥大学)和T. Lange创建的。被几个安全联盟(也在汽车社区)大力宣传(例如,今天在苹果iOS >V9.0等商业产品中使用。存在于Montgomery和Edwards符号中
曲线ED25519有一个辅助因子Cofactor > 1(NIST和Brainpool有一个辅助因子= 1)
-- 定义辅助因子:在密码学中,椭圆曲线是一组基于有限域Fn。该组有n个元素,我们研究的是q大小的质数子群。-- h= n/q 值表示曲线的辅助因子Cofactor
这可能会影响一些安全协议,例如Diffie - Hellman和一些最可能这将需要一些额外的SW检查安全攻击硬化(SW专利侵权的危险)。
--另一方面,不同的软件解决方案可能会在侧信道阻力上实现不同的安全级别,这是不容易确定的
对SW/HW性能进行了高度优化,与NIST或Brainpool相比,估计性能因子增加1.3-1.5倍
-- 由于辅助因子Cofactor> 1,部分性能优势可能会因额外的SW加固措施的必要性而消失 --目前HW解决方案没有经过验证的侧通道阻力(到目前为止,发明者否认了这一风险)
4.2.3 英飞凌Aurix TC3x HSM中的Curve ED25519
之前AURIX TC3x的TIER1 RfQs指定并要求使用ECC256 HSM HW加速器IP时,ED25519曲线既没有被提及,也没有被要求。最近,我们看到对ED25519曲线的兴趣即将出现(例如,来自AUTOSAR或OEM方的安全工作组),因此IFX进行了内部可行性研究,得出了以下结论:
将包括当前ECC256 IP的升级以支持曲线ED25519(最早在TC39x, B-Step中),但需要一些IP修改(额外的微码ROM和更大的参数SRAM),并相应地适度增加的ECC256模块芯片尺寸
估计EdDSA性能将导致大约增加。130- 150ver /s(或相应的260- 300sig /s) ,不包括额外的SW侧通道硬化措施(假设加速因子为1.3-1.5)
5.SHA256-HASH 模块
Hash模块架构如下图所示:
5.1 SHA256特性
哈希模块能够使用一个通用的内部引擎执行MD-5、SHA-1或SHA224/SHA-256函数。该模块旨在用于签名生成、验证和通用数据完整性检查。
处理一个512位输入数据块所需的时间取决于所选择的算法:
该模块支持多任务环境。但是,对于抢占式多任务,需要使用软件抽象层,因为该模块不支持在任意时间点停止或恢复哈希计算。
5.2 HASH模块
HASH SHA256示例代码,该算法选择用HASH顺序先出MSW
6.性能数据
6.1 ECC256 SW vs HW性能图
ECC256的性能约为3-6sig/s
INVIA声称,在他们的SW解决方案中,可以使用ARM M3 100MHz处理器进行多达4次ECDSA256验证操作
支持所有ANSI标准曲线
支持所有NIST标准曲线
ECDSA密钥生成、签名和验证
ECDH按键生成和通用按键功能
针对目标处理器优化的核心功能
通过先进的对抗措施抗SPA、DPA和DFA
可配置的架构
-- 性能和RAM占用之间的可调权衡 -- 单独提供专用硬件加速器(PK2C)。
典型的代码大小在Cortex-M3: 20 kbytes
少于 25 Mcycles 可计算安全的 256 位 ECDSA 签名验证
低内存占用(1.2 kbytes用于安全的256位ECDSA签名验证)
非接触式协议支持低至25mhz(使用PK2C加速器)。
6.2 RSA1024/RAS2048 SW vs HW性能表
一些背景信息见:http://realtimelogic.com/products/sharkssl/Cortex−M3/RSA1024 @ 100MHz,汇编优化代码:
13/2ms = 6.5 ms用于加密(153.8验证/s)
311/2ms = 155.5ms用于解密(6.4签名/s)
RSA1024加密(验证)可以通过使用更小的公钥进行验证过程来简化(例如Exp≤216+1,而不是1024位)
例如,Tier1使用17位公钥长度而不是1024位密钥长度来验证安全的Flash引导加载程序Flash-Bootloader
假设:用CRT签入SW;不包括预处理和后处理
TC3xx (HW):数字包括预处理和后处理
6.3 OEM SW基准测试结果ARM M3 - 80MHz
RSA3072,Exp 16 + 1 ^{16+1}
RSA-PSS(Probabilistic Signature Scheme,概率签名方案):
185ms (5.4ver/s) 验证1次
代码大小 : 5 k B
ECC256:NIST曲线
ECDSA(Elliptic Curve Digital Signature Algorithm,椭圆曲线数字签名算法):
365ms(2.7ver/s)验证1次
代码大小 : 10 kB
ED25519: (Edwards符号表示Bernstein曲线)
EdDSA: 149ms(6,7ver/s)验证1次
代码大小 : 80 k B \color{red}{代码大小:80kB}代码大小:80kB,在使用安全FLASH引导加载程序的情况下对AURIX HSM进行阻塞。AURIX HSM SRAM大小:40kB / AURIX 2G: 96kB
代码大小优化:17,5KB,在2s内进行1次验证(0.5ver/s)
7.看门狗定时器
看门狗定时器,Watchdog Timer。如下图所示:
7.1 看门狗定时器模块特性
定时器模块具有看门狗定时器监控系统操作可能的超时,并检查正确的操作顺序:
一个16位向上计数看门狗定时器
两个可选时钟源,一个固定的预标器
检查点功能
--独立的看门狗超时和检查点不匹配事件
所选输入时钟的频率除以另一个固定因子“8”
-- 实际上,HSM系统时钟除以1024(128 * 8) -- 假设系统频率为100 MHz,看门狗定时器可以实现高达约670 ms的超时时间
功能描述
灰色框是寄存器或位字段,可以由软件读写
看门狗超时和检查点不匹配输出在断言时会触发中断
7.2 运行与服务
看门狗定时器的关键元素是计数器寄存器WDTVAL和重载寄存器WDTRELOAD
重载寄存器包含计数器的初始值
看门狗定时器通过设置WDTCRTL.ACTWDT启动。
当计数器值从0xFFFF切换到0x0000时,发生溢出。看门狗的超时会导致中断。WDT定时器是通过写入服务寄存器WDTSRV来实现的。根据控制位WDTCRTL.INC_SRV区分两种模式;
如果位INCSRV被清除,WDT计时器必须通过将值0x000A写入WDTSRV寄存器来服务。
如果置位INCSRV,那么每次写入寄存器时,写入WDTSRV的值必须加1,否则将触发中断。初始值包含在WDTSRVINI寄存器中,它必须由SW在启用看门狗之前设置。
7.3 编程模式
看门狗定时器主要支持两种模式:
看门狗(Watchdog)操作
检查点(Checkpoint)操作
这两种操作相互独立,可以生成不同的模式:
7.3.1 看门狗模式(Watchdog mode)
在“看门狗模式”的基本应用是定期服务定时器,以避免超时
定时器通过写入服务寄存器WDT_SRV来服务
看门狗配置该操作的步骤如下:
-- 清除INCSRV位,禁用检查点操作 -- 如果还没有停止,通过清除ACTWDT位来停止看门狗,否则Reload值将不会复制到计数器寄存器中 -- 根据CLKSEL位选择合适的时钟源 -- 配置所需时间的重载值 -- 通过设置ACTWDT使能看门狗
为服务看门狗,常量0x000A必须写入WDT_SRV寄存器中
7.3.2 检查点模式(Checkpoint mode)
在“检查点模式”中,看门狗通过将升序值写入服务寄存器WDT_SRV来服务
通过这种方式,可以检查服务点是否按正确的顺序处理,为软件提供硬件流控制
-- 看门狗操作的配置步骤如下:—清除ACTWDT位,禁用看门狗操作 -- 清除INCSRV位,因为只有当INCSRV从0变为1时,初始值才会从WDTSRVINI加载 -- 根据WDTSRVINI文件选择所需的初始值。-- 通过设置INCSRV启用检查点操作:第一个有效的服务值将是WDTSRVINI + 1
为服务以“检查点模式”为看门狗,从WDTSRVINI + 1开始的升序值必须写入WDT_SRV寄存器
7.3.3 分辨率和周期
假设输入时钟频率稳定,则定时器的分辨率为:
看门狗在时钟周期内的超时时间为:
或者
8.桥接模块
8.1 桥接模块通信HSM-Host
8.2 桥接模块通信单元中断
主机到HSM中断
HSM到主机中断
8.3 HSM与TriCore数据共享
桥接模块(Bridge Module )用于连接HSM和主机,实现两者之间的通信。通信单元(Bridge Module )可以被HSM和主机访问:
主机和HSM之间的信息交换
-- 网桥寄存器(对称)Bridge Registers (symmetrical) -- 共享内存区域 Shared Memory Region
主机外设的联合使用
-- 没有可用的信号量和互斥No semaphore and mutexavailable,需要使用网桥寄存器
要在HSM和主机之间共享小信息(32位)
可以使用HSM2HTS和HT2HSMS寄存器
为了共享更大的信息,可以使用共享内存(主机端):
缓存必须以正确的方式管理 缓存可以使用用户定义的64KB内存窗口进行旁路传输
如果缓存可以使用
主机使用HT2HSMS寄存器将&pBuff发送到HSM
-- HSM_HT2HSMS.U=(uint32)&HOST2HSMbuf[0]
HSM定义了一个指向&pBuff的变量
pBuff不是指向HOST RAM,而是指向Cache
初始化后,需要将值从Cache复制到HOST RAM
HSM侧代码
如果没有缓存
一个窗口(最大64Kbyte)可以在不使用缓存的情况下寻址
需要使用SAHBASE和SAHMEM寄存器
Helper对主机地址室进行HSM非缓存读写访问的功能
此文转自:CSDN CinzWS https://blog.csdn.net/qq_37619128/article/details/129735181
联系客服