本文主要介绍针对安全芯片的攻击和防护方案。
1 芯片攻击
1)故障注入攻击
故障注入攻击(Fault Injection Attack, FIA)是一种通过人为引入故障,诱发系统或芯片在异常情况下产生错误结果,从而泄露机密信息或破坏系统安全的攻击方法。
1.1)电压毛刺攻击 (Voltage Glitching):快速改变电源电压,导致芯片在电压异常时出现错误行为。
1.2)时钟毛刺攻击 (Clock Glitching):通过改变时钟信号频率,诱发芯片在异常时钟频率下出错。
1.3)激光注入攻击:使用激光照射芯片的特定区域,扰乱其正常工作。
1.4)电磁注入攻击:通过电磁辐射干扰芯片的正常运行,诱发错误。
防护措施
- 电压和时钟监测:使用电压和时钟检测传感器,监测并响应异常电压和时钟变化。
- 冗余计算:引入冗余计算,比较计算结果,发现并纠正故障。
- 错误检测和纠正:使用错误检测和纠正码,检测并修复数据错误。
- 随机延迟:在计算过程中引入随机延迟,增加故障注入的难度。
2)侧信道攻击
侧信道攻击(Side-Channel Attack, SCA)是一种通过分析硬件设备的非功能输出(如电磁辐射、电源消耗、时序信息等)来推断机密信息的攻击方法。
1.1)功耗分析攻击:通过测量设备在执行加密操作时的功耗变化,推断加密密钥。
- 简单功耗分析 (SPA):直接分析功耗波形,寻找密钥信息。
- 差分功耗分析 (DPA):通过统计分析多个功耗波形,提取相关信息。
2.2)电磁分析攻击:通过测量设备在执行操作时的电磁辐射,推断内部操作和数据。
2.3)时序分析攻击:通过测量设备在不同输入下执行操作的时间,推断密钥或其他敏感信息。
防护措施
- 功耗均衡:在执行加密操作时,尽量使功耗曲线平滑均匀,避免泄露信息。
- 随机化:在执行加密操作时引入随机因素,如随机延迟、随机掩码等,增加分析难度。
- 电磁屏蔽:使用屏蔽材料减少电磁辐射,防止电磁分析。
- 时序平衡:确保加密操作在不同输入下执行时间相同,防止时序分析。
2 芯片防护
1)密码算法防护
1.1)防故障注入攻击
- 冗余计算:对密码算法流程操作进行多次冗余计算,比较计算结果,如果不一致,则进行错误处理。例如:
def aes_encrypt_with_redundancy(key, plaintext):
ciphertext1 = aes_encrypt(key, plaintext)
ciphertext2 = aes_encrypt(key, plaintext)
if ciphertext1 != ciphertext2:
raise Exception("Fault injection detected")
return ciphertext1
- 错误检测:在计算过程中插入校验码或冗余数据(如奇偶校验、校验和等),在每个计算步骤后,验证校验码,以检测和纠正由故障注入引起的错误。例如:
def add_parity_bit(data):
parity = sum(data) % 2
return data + [parity]
def check_parity_bit(data):
parity = sum(data[:-1]) % 2
return parity == data[-1]
def aes_encrypt_with_parity_check(key, plaintext):
plaintext_with_parity = add_parity_bit(plaintext)
if not check_parity_bit(plaintext_with_parity):
raise Exception("Input data parity check failed")
ciphertext = aes_encrypt(key, plaintext_with_parity[:-1])
return ciphertext
- 随机延迟:在密码算法操作中引入随机延迟,增加故障注入的难度。
1.2)防侧信道攻击
- 功耗均衡:在硬件实现中,通过硬件电路设计均衡功耗,使功耗变化不随数据变化。
- 掩码技术:在密码算法操作中使用随机掩码,将数据与随机数结合(如异或运算),隐藏真实数据;在计算结果上撤销掩码,恢复真实数据防止侧信道攻击。例如:
import random
def apply_mask(data, mask):
return [d ^ m for d, m in zip(data, mask)]
def aes_encrypt_with_masking(key, plaintext):
mask = [random.randint(0, 255) for _ in range(len(plaintext))]
masked_plaintext = apply_mask(plaintext, mask)
masked_ciphertext = aes_encrypt(key, masked_plaintext)
unmasked_ciphertext = apply_mask(masked_ciphertext, mask)
return unmasked_ciphertext
- 随机化:在密码算法操作中引入随机延迟和操作顺序,增加分析难度。
- 伪操作:对密码算法计算流程操作插入无意义的计算操作(如随机数生成、无关的数学运算等),确保伪操作均匀分布在整个计算过程中,使攻击者难以区分真实操作和伪操作,从而增加攻击者分析计算过程的难度。例如:
def aes_encrypt_with_dummy_operations(key, plaintext):
# 插入伪操作
for _ in range(random.randint(1, 5)):
dummy_value = random.randint(0, 255) ^ random.randint(0, 255)
ciphertext = aes_encrypt(key, plaintext)
# 插入伪操作
for _ in range(random.randint(1, 5)):
dummy_value = random.randint(0, 255) ^ random.randint(0, 255)
return ciphertext
- 电磁屏蔽:在硬件设计中,使用屏蔽材料减少电磁辐射,防止电磁分析。
- 时序平衡:确保密码算法操作在不同输入下执行时间一致,防止时序分析。
2)安全处理器
2.1)寄存器校验
对CPU内部重要寄存器(如PC寄存器等)进行校验,校验出错时触发异常。
2.2)统一指令执行时间
对关键计算指令(例如乘除法指令)和不带延迟的分支指令实现统一指令执行时间,增强安全性和防护性。
- 乘除法指令:调整操作流程,确保相同数据的乘除法操作会执行两次。
- 分支指令:不论是否跳转,都使用统一的执行时间,内部实现功耗扰动,防止分析和识别跳转指令。
2.3)随机指令插入
通过外部信号控制,随机插入自跳转指令,扰乱程序执行时间。例如随机插入的自跳转指令内部实现功耗扰动,防止攻击者分析和识别自跳转指令。
2.4)指令操作随机化
在CPU正常执行指令时,随机翻转空闲的功能寄存器,或者改变指令的执行顺序或增加随机化延迟,防止攻击者通过时序分析来推测指令的执行流程。
2.5)极性翻转
在CPU内部的数据路径和地址路径上引入随机极性翻转,增强抵抗功耗分析的能力。
2.6)Cache数据安全
- CCM(Cacheable Contiguous Memory,可缓存连续内存)输出的数据增加一位,用于表示当前读出的数据是否有校验错误,可以帮助CPU在读取CCM数据时,快速检测出可能存在的数据错误,从而增强系统对数据完整性的保护。
- 支持多周期访问,CCM在响应CPU的读取或写入请求时,可以进行多个时钟周期的操作,从而提高对CCM的访问效率和灵活性,特别是在处理大量数据或需要多步操作的情况下。
- 提供对CCM操作来源信息的支持,用于增强对CCM访问权限的控制。例如区分指令取指(I-DMI)、数据加载/存储(LD/ST)、CCM调试接口(D-DMI)、以及由调试器进行的访问等不同的操作来源。
扩展:智驾SoC双核锁步
双核锁步通过在系统设计层面引入冗余执行和结果比较机制,在智驾SoC芯片上集成了两个独立的CPU核心,通常是对称多处理器(SMP)架构或者多核心对称处理器(CMP)架构,这两个核心相互独立但又可以协同工作,会并行运行同一段代码或任务保持步调完全一致,其运行的结果会进行比较,如果出现差异则会进行错误检测和纠正,可有效抵御故障注入攻击,保障系统的容错性和可靠性。
工作原理:
1)双核部署: 智驾CPU集成了两个完全相同的核心,称为核心A和核心B。
2)指令同步: 在双核锁步模式下,核心A和核心B同时接收到相同的指令流,它们分别独立执行相同的操作。
3)结果比较: 在每个时钟周期结束时,核心A和核心B的执行结果会进行比较。如果它们的结果一致,则认为当前阶段的操作是正确的;如果结果不一致,则可能意味着至少一个核心出现了错误。
4)错误处理: 当检测到核心A和核心B的结果不一致时,系统可以采取多种策略进行错误处理,例如:
- 错误检测和纠正: 可以使用硬件或软件机制进行错误检测和修复。
- 故障切换: 可以切换到备用核心或执行备用算法来确保系统继续稳定运行。
5)提高系统可靠性: 双核锁步技术通过对比两个核心的执行结果,能够有效地检测和纠正由于硬件故障或软件错误导致的异常行为,从而提高了系统的整体可靠性和容错能力。
3)存储器加密和数据校验
3.1)存储器加密是指对存储在安全芯片内存中的数据进行加密,以防止未经授权的访问和数据泄露。实现步骤如下:
密钥生成:由安全芯片生成和管理加密密钥。
数据加密:写入存储器时,使用硬件加密引擎(如AES)对数据进行加密。
数据解密:读取存储器时,使用硬件加密引擎(如AES)对数据进行解密。
密钥保护:加密密钥存储在安全区域(如 TEE)中或者固化隐藏,防止密钥泄露。
3.2)存储器数据校验是通过在数据中添加校验码来检测和纠正存储器中的错误,以确保数据的完整性和正确性。
- 数据校验技术
奇偶校验:在数据中添加一个位作为奇偶校验码,用于检测单比特错误。
校验和:将数据的所有字节相加得到校验和,用于检测多比特错误。
循环冗余校验 (CRC):使用多项式生成校验码,能够检测并纠正多比特错误。
- 实现步骤
生成校验码:在数据写入存储器时生成并附加校验码。
校验数据:在数据读取时重新计算校验码,并与存储的校验码进行比较。
错误处理:如果校验码不匹配,则检测到数据错误,进行相应的错误处理。
4)环境检测网络
物理环境监测网络用于检测和响应物理层面的攻击和异常,包括各种传感器和防护机制。
- 主动屏蔽层:通常由芯片顶层金属或多层导电和非导电材料组成包覆敏感芯片区域,形成一个检测屏蔽网格,防止物理探测和干扰。
- 电压检测传感器:监测芯片的工作电压,检测异常电压变化,防止通过改变电压来诱发故障或绕过安全检查。
- 电流检测传感器:监测芯片的工作电流,识别异常电流变化,防止通过电流变化进行攻击,如电源分析攻击。
- 时钟频率检测传感器:监测芯片的工作频率,检测频率异常变化,防止通过改变时钟频率进行攻击,如时钟故障攻击。
- 电压毛刺检测传感器:检测电压供应中的毛刺和快速变化,防止通过电压毛刺诱发芯片故障或错误行为。
- 光检测传感器:检测环境光变化,识别光注入攻击,防止攻击者通过光照来读取或干扰芯片数据。
5)安全测试模式
安全测试模式是确保芯片在开发和生产过程中能够进行充分的测试和验证,同时在实际使用中不会泄露敏感信息或暴露安全漏洞保证安全性的关键步骤。测试模式应仅能在特定条件下启用,例如通过硬件开关或经过认证的命令,且与正常操作模式隔离,防止测试期间的操作影响正常使用。实现方法如下:
5.1)测试模式激活与认证
硬件触发:通过物理硬件开关或跳线来启用测试模式,这些开关或跳线在芯片封装后无法更改。例如硬件FUSE是一种一次性可编程的硬件组件,存储安全配置和状态信息,是否允许进入测试模式;在芯片制造过程中,通过激光烧蚀或电流脉冲对FUSE进行编程,一旦FUSE被设置为禁用测试模式状态,则无法恢复,确保出厂后芯片的安全性。
软件触发:使用特殊命令或密钥组合来启用测试模式,需要经过认证过程,如使用加密的测试密钥。
5.2)测试功能隔离
模式切换控制:在芯片设计中实现明确的模式切换控制逻辑,确保测试模式与正常模式严格分离。
测试接口限制:仅在受信任的制造或测试环境中,使用特定的硬件或软件密钥组合进入测试模式;在测试过程中,仅开放必要的测试接口,并限制对关键安全模块和数据的访问,防止测试过程中泄露敏感信息。
5.3)安全性验证
加密与认证:对进入测试模式的命令和数据进行加密和认证,防止未经授权的访问。
审计与日志:记录所有测试模式下的操作和访问,便于事后审查和分析。
3 COS安全
COS(Card Operating System,卡片操作系统)是一种专门设计用于智能卡(如SIM卡、银行卡等)的操作系统,也是SE通常装载的操作系统。它的安全技术主要包括:
1)安全域隔离
- 通过安全域的概念来实现多个应用程序(Applet)的隔离,每个安全域都是一个独立的应用程序执行环境,可以运行其自己的Java Applet。
- 安全域之间是相互隔离的,它们无法直接访问彼此的数据或执行环境,从而保证了应用程序的安全性和互不干扰性。安全域的管理一般需参照Global Platform标准实现。
2)安全传输和通信
- 支持多种安全传输协议,如TLS和SCP(Secure Channel Protocol),用于确保与终端设备(如读卡器)之间的安全通信。
- 通过加密和认证机制保护通信的隐私和完整性,防止数据在传输过程中被窃取或篡改。
3)访问控制和权限管理
- 采用基于权限的访问控制机制,通过Access Control Rules(ACRs)来限制应用程序对敏感资源(如文件系统、加密功能)的访问。
- 确保只有授权的应用程序可以执行特定操作,从而防止未经授权的应用程序或恶意代码对系统造成损害。
4)安全管理和运行时环境
- 提供安全的运行时环境,负责管理和执行Java Applet的生命周期,包括内存管理、异常处理、安全监控等功能,确保系统的稳定性和安全性。
- 安全管理功能还包括密钥管理、证书管理和安全更新机制,用于保护和更新系统所需的安全资产。一般需参照Global Platform标准进行应用程序Applet和密钥数据的更新。
5)攻击防范和安全审计
- 具备抵御各种攻击的能力,包括侧信道攻击(如时序攻击、功耗分析攻击)、故障注入攻击、物理攻击。
- 支持安全审计功能,能够记录和分析系统的安全事件和异常情况,帮助识别潜在的安全威胁并采取相应的防御措施。