分享

英飞凌AURIX HSM介绍

 新用户0118F7lQ 2023-07-06 发布于内蒙古
  1. 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_ERRWARN位+ 中断报告)

  • 当模块通过设置控制位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:///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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多