[终端安全]-2 移动终端之硬件安全(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)安全性验证

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构/操作系统 堆和栈】区别及应用场景、底层原理图解

堆和栈 比较有趣的是,计算机网络、操作系统中都会对堆栈有不同方面比较详细的描述,而使用的地方通常对这些底层的细节表现得没有那么明显。 但如果你能了解堆栈在计算机网络和操作系统中的表现形式,在你写代码时就会有不一样的认识&#xff…

Nordic 52832作为HID 键盘连接配对电视/投影后控制没反应问题的分析和解决

问题现象:我们的一款HID键盘硬件一直都工作的很好,连接配对后使用起来和原装键盘效果差不多,但是后面陆续有用户反馈家里的电视等蓝牙设备配对连接我们的键盘后,虽然显示已连接,但实际上控制不了。设备涉及到了好些品牌…

Sentinel-1 Level 1数据处理的详细算法定义(一)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程,以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下&…

linux软链接和硬链接的区别

1 创建软链接和硬链接 如下图所示,一开始有两个文件soft和hard。使用 ln -s soft soft1创建软链接,soft1是soft的软链接;使用ln hard hard1创建硬链接,hard1是hard的硬链接。可以看到软链接的文件类型和其它3个文件的文件类型是不…

【JVM系列】Full GC(完全垃圾回收)的原因及分析

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

使用Python实现CartPole游戏

在深度强化学习内容的介绍中,提出了CartPole游戏进行深度强化学习,现在提供一种用Python简单实现Cart Pole游戏的方法。 1. 游戏介绍 CartPole 游戏是一个经典的强化学习问题,其中有一个小车(cart)和一个杆&#xff…

用网络编程完成windows和linux跨平台之间的通信(服务器)

服务器代码逻辑: 服务器功能 创建 Socket: 服务器首先创建一个 Socket 对象,用于进行网络通信。通常使用 socket() 函数创建。 绑定(Bind): 服务器将 Socket 绑定到一个特定的 IP 地址和端口号上。这是通过…

昇思25天学习打卡营第19天 | RNN实现情感分类

RNN实现情感分类 概述 情感分类是自然语言处理中的经典任务,是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型,实现如下的效果: 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This fil…

Go 中的类型推断

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【三级等保】等保整体建设方案(Word原件)

建设要点目录: 1、系统定级与安全域 2、实施方案设计 3、安全防护体系建设规划 软件全文档,全方案获取方式:本文末个人名片直接获取。

【Python】基于KMeans的航空公司客户数据聚类分析

💐大家好!我是码银~,欢迎关注💐: CSDN:码银 公众号:码银学编程 实验目的和要求 会用Python创建Kmeans聚类分析模型使用KMeans模型对航空公司客户价值进行聚类分析会对聚类结果进行分析评价 实…

Python酷库之旅-第三方库Pandas(008)

目录 一、用法精讲 16、pandas.DataFrame.to_json函数 16-1、语法 16-2、参数 16-3、功能 16-4、返回值 16-5、说明 16-6、用法 16-6-1、数据准备 16-6-2、代码示例 16-6-3、结果输出 17、pandas.read_html函数 17-1、语法 17-2、参数 17-3、功能 17-4、返回值…

介绍东芝TB62262FTAG芯片:高性能两相双极步进电机驱动器

在当今快速发展的科技领域,高性能的电机驱动器对于许多工程项目来说至关重要。东芝的TB62262FTAG这款两相双极步进电机驱动器采用PWM斩波技术,集成了多个先进功能,适用于各种工业和消费类应用。本文将详细介绍TB62262FTAG的参数、性能、优势及…

《向量数据库指南》——Milvus Cloud检索器增强的深度探讨:句子窗口检索与元数据过滤

检索器增强的深度探讨:句子窗口检索与元数据过滤 在信息爆炸的时代,高效的检索系统成为了连接用户与海量数据的关键桥梁。为了进一步提升检索的准确性和用户满意度,检索器增强技术应运而生,其中句子窗口检索与元数据过滤作为两大…

【Qt】day3 自定义控件、框架、定时器、QPainter、QFile

文章目录 自定义控件封装自定义框架定时器第一种方式第二种方式 (推荐) 事件分发器QPainter基本操作高级设置抗锯齿移动坐标原点 画家画资源图片,并实现手动移动 作业QPaintDevice绘图设备QPixmapQimageQPicture QFile文件读写操作QFileInfo文…

移动校园(3):处理全校课程数据excel文档,实现空闲教室查询与课程表查询

首先打开教学平台 然后导出为excel文档 import mathimport pandas as pd import pymssql serverName 127.0.0.1 userName sa passWord 123456 databaseuniSchool conn pymssql.connect(serverserverName,useruserName,passwordpassWord,databasedatabase) cursor conn.cur…

昇思11天

基于 MindSpore 实现 BERT 对话情绪识别 BERT模型概述 BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年开发并发布的一种新型语言模型。BERT在许多自然语言处理(NLP)任务中发挥着重要作用&am…

【C++】map和set详解

目录 1. 关联式容器 2. 键值对pair 3. 树形结构的关联式容器 4. set 4.1 set的介绍 4.2 set的构造 4.3 set的迭代器 4.4 set的容量 4.5 set的常用函数 5. multiset 6. map 6.1 map的介绍 6.2 map的构造 6.3 map的迭代器 6.4 map的容量 6.5 map的operator[] 6.6…

【虚幻引擎】UE4初学者系列教程开发进阶实战篇——生存游戏案例

一、课程体系 1 学前必读 2 Character类相关基础 -人物移动控制 -动画蓝图 3 常见游戏机制基础 -碰撞器、触发器 -物体使用接口 -视角切换 4其他相关设计 -背包系统 -锻造系统 -物体破碎效果 -简易种植系统 -互动物体动画 5课程结语 二、UI部分 思维导图部分 实操部分 …

如何借助AI在20分钟内写一个springboot单表的增删改查

目录 1. AI工具介绍2. 写代码的正确顺序2.1 编写 Entity 类:2.2 编写 Mapper 接口:2.3 编写 Mapper XML 文件(如果使用 MyBatis):2.4 编写 Service 接口:2.5 编写 Service 实现类(ServiceImpl&a…