英飞凌 TC3XX单片机HSM内核开发-Secure Boot(三)

安全启动相关的加密服务

1 随机数生成器

伪随机数生成器(PRNG)基于由HSM实现的真随机数生成器(TRNG)生成的种子。PRNG序列使用AES-CTR模式生成,该模式使用一个从零开始的计数器进行生成。

  • 种子生成:PRNG的种子由TRNG模块生成。
  • 生成模式:使用AES-CTR模式生成伪随机数,确保生成的序列具有良好的随机性。

真随机数生成器(TRNG)TRNG模块利用非确定性现象生成随机数据流,该数据流符合德国BSI AIS-20/31出版物定义的质量标准[15]。

  • 数据块大小:TRNG外设可以生成8位、16位或32位的数据块。
  • API组合:这些数据块进一步组合,以为用户提供128位的数据(由四个32位字组成)。

TRNG的随机性和不可预测性使其适用于需要高安全性的应用,如密钥生成和加密操作。

2 AES算法

高级加密标准(AES)指定了一个经过FIPS批准的加密算法,可用于保护电子数据。AES算法是一种对称块密码,可以加密(加密)和解密(解密)信息。加密将数据转换为称为密文的不可读形式;解密密文将数据恢复为原始形式,称为明文。AES算法能够使用128、192和256位的密钥对128位的块进行加密和解密。

在AURIX中,AES硬件外设的当前实现仅支持128位的加密密钥,并且处理128位的数据块。它能够对单个128位数据块(即明文或密文块)进行加密和解密,也可以对多个128位的数据块进行加密或解密。为此,实施了几种所谓的操作模式:

  • ECB(电子密码本模式):每个数据块独立加密。简单但不够安全,因为相同的明文块总是会加密成相同的密文块。

  • CBC(密码块链模式):每个数据块在加密前与前一个数据块的密文进行异或操作。提高了安全性,因为相同的明文块将被加密为不同的密文块。

  • CTR(计数器模式):使用计数器作为密钥流生成器,将密文和明文与计数器加密的结果进行异或操作。能够支持并行加密。

  • OFB(输出反馈模式):将加密后的密文块作为下一轮加密的输入。适合需要流模式加密的场景。

  • CFB(密码反馈模式):与OFB类似,但加密结果与明文块进行异或操作。适用于流模式加密。

  • GCM(Galois计数器模式):结合了计数器模式的加密和Galois/Counter模式的认证。提供加密和数据完整性验证。

  • XTS(XEX基于调节密码本模式与密文窃取):用于加密磁盘块设备的数据,提供更高的安全性和数据完整性。

2.1 填充

AES操作在128位块上进行。当数据长度不是128位的倍数时,该块必须进行填充。用户代码负责填充数据块,常用的填充模式有三种:

ANSI X.923

在ANSI X.923中,用零字节填充数据块,最后一个字节定义了填充的边界或填充字节的数量。例如,块大小为8字节,需填充4字节(以十六进制格式表示):

... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |

PKCS#7

PKCS#7描述在RFC 2315和RFC 5652中。填充是按完整字节进行的。每个填充字节的值是添加的字节数,即N字节,每个字节的值为N。添加的字节数取决于需要扩展到的块边界。填充将是以下之一:

  • 01
  • 02 02
  • 03 03 03
  • 04 04 04 04
  • 05 05 05 05 05
  • 06 06 06 06 06 06
  • 依此类推...

这种填充方法(以及前两种)在N小于256的情况下是明确定义的。例如,块大小为8字节,需填充4字节:

... | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |

零填充

所有需要填充的字节用零填充。例如,块大小为8字节,需填充4字节:

... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |

2.2 加密模式

电子密码本模式(ECB)

ECB是最简单的加密模式。消息被划分为块,每个块单独加密。这种方法的缺点在于,相同的明文块会被加密成相同的密文块。由于没有块间的依赖性,这种模式在某些情况下会暴露数据模式的信息。例如,如果明文中有重复的数据块,那么加密后的密文中也会有相同的块,这可能使攻击者通过分析密文块之间的模式来推断出一些信息。

这种模式的优点是其实现简单,并且可以并行处理块,因为每个块的加密操作是独立的。然而,正是因为其结构上的简单性,ECB模式在处理需要高安全性的场合时通常不被推荐,因为它无法隐藏数据中的模式信息。

密文块链接(CBC)模式

密文块链接(Cipher-Block Chaining, CBC)模式是由Ehrsam、Meyer、Smith和Tuchman于1976年发明的。它通过在加密过程中引入块间的依赖关系,解决了电子代码本(ECB)模式的一些安全问题。以下是CBC模式的工作原理:

  1. 初始化向量(IV):CBC模式要求为第一个明文块使用一个初始化向量(IV)。IV是一个随机或伪随机的值,用于确保相同的明文在不同的加密操作中生成不同的密文。IV必须在每次加密会话中唯一且随机,以保持安全性。

  2. 异或操作:每个明文块在加密之前都会与前一个密文块进行异或(XOR)操作。这意味着每个密文块不仅依赖于明文,还依赖于前一个密文块。

  3. 加密:在与前一个密文块异或之后,结果将使用AES算法加密,生成当前的密文块。

  4. 解密:在解密过程中,操作过程会反转。每个密文块先被解密得到异或值,然后与前一个密文块(第一个块使用IV)进行异或,以恢复原始的明文块。

通过这种方式,CBC模式通过异或操作和加密将块链接在一起,确保即使明文块相同,每个密文块也都是唯一的。


基于密码的消息认证码(CMAC)

CMAC(Cipher-based Message Authentication Code)是一种基于对称密钥块密码(如高级加密标准AES)的密钥哈希函数。CMAC旨在提供比校验和或错误检测代码更强的数据完整性保证。下面是CMAC的详细介绍:

  1. 功能与优势

    • 数据完整性保证:CMAC提供的数据完整性保证比校验和或错误检测代码更为强大。校验和或错误检测代码只能检测到数据的意外修改,而CMAC则能够检测到有意的、未经授权的修改,此外也可以检测到意外的修改。
    • 对称密钥算法:CMAC基于对称密钥块密码(例如AES),而HMAC(哈希消息认证码)则基于哈希函数(如SHA-1)。因此,当AES在系统中更为可用时,AES-CMAC是更合适的选择。
  2. 工作原理

    • 密钥:CMAC使用对称密钥进行操作,该密钥用于加密消息。
    • 加密操作:AES-CMAC算法将消息分成块,并通过对称密钥和AES算法进行加密。每个消息块经过加密后与前一个密文块进行异或操作,直到处理完整个消息。
    • 生成MAC值:最终生成的消息认证码(MAC)是对整个消息的唯一标识。任何对消息内容的修改都会导致MAC值的改变,从而能够检测到数据的篡改。

    • 基于哈希的消息认证码(HMAC)

HMAC(Hash-based Message Authentication Code)是一种使用哈希函数和密钥的认证机制。它结合了哈希函数的安全性与密钥的保密性,以提供消息的完整性和认证。HMAC的定义来源于RFC 2104,具体公式如下:

其中:

  • H 是一个加密哈希函数。
  • K 是秘密密钥。
  • m 是需要认证的消息。
  • K_0 是从原始密钥 K 派生出的另一个秘密密钥。其生成方式是将 K 右填充额外的零,以适应哈希函数的输入块大小,或如果 K 的长度超过块大小,则对 K 进行哈希处理。
  • **||**表示拼接操作。
  • ^ 表示异或(XOR)操作。
  • opad 是外部填充(0x5c5c5c...5c5c,长度为一个块的十六进制常量)。
  • ipad 是内部填充(0x363636...3636,长度为一个块的十六进制常量)。

HMAC 算法的文字描述

  1. 密钥处理

    • 长度等于块大小(B):如果密钥 K 的长度等于块大小 B,则直接将 K 作为 K0。
    • 长度大于块大小(B):如果密钥 K 的长度大于 B,需要对 K 进行哈希计算得到一个长度为 L 的字符串,然后在其后附加零,直到其长度为 B,即 K0 = H(K) 后跟若干个零。
    • 长度小于块大小(B):如果密钥 K 的长度小于 B,则在 K 的末尾添加零,使其长度达到 B 字节,从而得到 K0。
  2. 填充和异或操作

    • 用内部填充常量(ipad)与 K0 进行异或操作,得到一个长度为 B 字节的中间字符串。
    • 将待认证的消息 m 附加到这个中间字符串后面。
  3. 计算哈希值

    • 对上述组合后的数据(K0 与 ipad 异或后的结果加上消息 m)应用哈希函数,得到一个哈希值。
  4. 外部填充和异或操作

    • 用外部填充常量(opad)与 K0 进行异或操作,得到另一个长度为 B 字节的字符串。
    • 将步骤 3 中得到的哈希值附加到这个字符串后面。
  5. 最终哈希计算

    • 对上述组合后的数据(K0 与 opad 异或后的结果加上步骤 3 的哈希值)再次应用哈希函数,得到最终的 HMAC。
相关推荐
枯无穷肉2 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名6772 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式大圣2 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云山工作室3 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
嵌入式-老费3 小时前
基于海思soc的智能产品开发(mcu读保护的设置)
单片机·嵌入式硬件
qq_397562315 小时前
MPU6050 , 设置内部低通滤波器,对于输出数据的影响。(简单实验)
单片机
艺术家天选5 小时前
STM32点亮LED灯
stm32·单片机·嵌入式硬件
向阳逐梦5 小时前
基于STM32F4单片机实现ROS机器人主板
stm32·单片机·机器人
委员6 小时前
基于NodeMCU的物联网空调控制系统设计
单片机·mcu·物联网·智能家居
小猪写代码6 小时前
STM32 水质水位检测项目 (调试模块)和(延时模块)
stm32·单片机·嵌入式硬件