首页 > 其他分享 >[终端安全]-2 移动终端之硬件安全(SE)

[终端安全]-2 移动终端之硬件安全(SE)

时间:2024-07-07 08:59:20浏览次数:8  
标签:加密 芯片 检测 硬件安全 plaintext 终端 操作 数据 SE

本文主要介绍针对安全芯片的攻击和防护方案。

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)安全性验证

加密与认证:对进入测试模式的命令和数据进行加密和认证,防止未经授权的访问。

审计与日志:记录所有测试模式下的操作和访问,便于事后审查和分析。

标签:加密,芯片,检测,硬件安全,plaintext,终端,操作,数据,SE
From: https://blog.csdn.net/wendywm0496/article/details/140228791

相关文章

  • Body SectionedSolidHorizontal
    BodySectionedSolidHorizontalBodySectionedSolidHorizontal是通过使用两个或多个闭合轮廓(可能具有不同的尺寸)来表示产品的三维实体,这些轮廓沿准线在指定位置之间扫掠。应使用保持该几何表示的IfcShapeResentation的以下属性值:IfcShapeRepresentation.RepresentationIdentifi......
  • springboot整合ElasticSearch
    RestClient依赖,此为java的客户端,从来交互elasticsearch<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId></dependency>因为SpringBoot默认的ES版本是7.17.10,所以我们需要......
  • C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
    目录一、代码解析:二、解决方案1、增加日志记录2、异步操作注意事项3、增加超时机制4、使用线程池5、使用信号量或事件6、监控数据库连接状态在C#程序操作SqlServer数据库的实际应用中,若异常就会抛出异常,我们还能找到异常的原因,进一步去解决;但偶发的不返回、也不抛......
  • searchBar组件的用法
    文章目录1.概念介绍2.使用方法3.代码与效果3.1示例代码3.2运行效果4.内容总结我们在上一章回中介绍了"Material3中的IconButton"相关的内容,本章回中将介绍SearchBar组件.闲话休提,让我们一起TalkFlutter吧。1.概念介绍我们在本章回中介绍的SearchBar是指......
  • 自注意力机制self-attention
     self-attention步骤: (1)得到Q、K、V      扩展到多头注意力机制:   self-attention存在缺点:缺少位置信息为每一个输入设置一个positionalvectorei  ......
  • [Redis]ZSet
    通过value查score在Redis的有序集合(zset)中,通过成员(member)获取其对应的分数(score)的复杂度是O(logN),其中N是有序集合中的元素数量。这是因为Redis使用跳跃表(skiplist)和哈希表(hashtable)的组合来实现有序集合。跳跃表用于按顺序存储元素,以便高效地按分数排序和查找范围,而哈......
  • 尚硅谷 docker-compose.yml 文件内容
    #配置各个容器服务services:microService:image:zzyy_docker:1.6container_name:ms01#容器名称,如果不指定,会生成一个服务名加上前缀的容器名ports:-"6001:6001"volumes:-/app/microService:/datanetworks:-springboo......
  • 【图像增强】3C增强算法和对比度拉伸算法水下图像增强(含MSE PSNR SSIM)【含GUI Matlab
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信或扫描文章底部QQ二维码。......
  • CF292C Beautiful IP Addresses 题解(两种写法)
    题意一个IP地址是一个32位的2进制整数,分成四组8位的2进制整数(没有前导0)。比如说,0.255.1.123 是一个正确的IP地址,而0.256.1.123 和 0.255.1.01 不是正确的。定义一个合法的回文IP地址为BeautifulIPAddress(回文地址就是去掉“.”后是个回文字符串的地......
  • 清华&地平线!SparseDrive:端到端自动驾驶 论文精读
    论文地址:SparseDrive:End-to-EndAutonomousDrivingviaSparseSceneRepresentation源代码:SparseDrive摘要    传统的模块化自动驾驶系统被分解为不同的独立任务,例如感知、预测和规划,这导致了信息丢失和跨模块的误差累积。相比之下,端到端范式将多任务统一到一个......