当前位置: 首页 > news >正文

[终端安全]-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)安全性验证

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

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

相关文章:

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

本文主要介绍针对安全芯片的攻击和防护方案。 1 芯片攻击 1)故障注入攻击 故障注入攻击(Fault Injection Attack, FIA)是一种通过人为引入故障,诱发系统或芯片在异常情况下产生错误结果,从而泄露机密信息或破坏系统…...

数据库与SQL

数据库基本概念 数据库(DataBase):数据库就是存储数据的仓库数据库管理系统(DBMS):可以独立运行的软件,维护磁盘上的数据,用统一的方式维护不同种类的数据,做到通用且高效。常见的DBMS: mysqloracledb2sqlserver 数据…...

AIGC | 在机器学习工作站安装NVIDIA CUDA® 并行计算平台和编程模型

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x02.初识与安装 CUDA 并行计算平台和编程模型 什么是 CUDA? CUDA(Compute Unified Device Architecture)是英伟达(NVIDIA)推出的并行计算平台和编…...

【电商纯干货分享】干货速看!电商数据集数据API接口数据分析大全!

数据分析——深入探索中小企业数字化转型,专注提供各行业数据分析干货、分析技巧、工具推荐以及各类超实用分析模板,为钻研于数据分析的朋友们加油充电。 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中&#xff09…...

随手记录: Ubuntu NVIDIA显卡驱动安装后 屏幕亮度无法调节 无法连接外显示器等问题

背景 一句话:简单记录帮身边人装系统发现 GPU和外接显示器的无法连接,同时亮度无法调节等新问题 设备型号: 联想笔记本:ThinkBook 16p Gen2CPU:AMD Ryzen 7 5800HGPU:RTX 3060 问题描述及流程&#xff…...

Java:数组

文章目录 一、概念二、声明数组2.1 格式2.2 实例 三、初始化数组3.1 格式3.2 实例 四、处理数组4.1 for循环4.2 增强for循环 五、多维数组5.1 格式5.2 实例 一、概念 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。…...

【代码随想录——图论——岛屿问题】

1.岛屿数量 https://kamacoder.com/problempage.php?pid1171 1.1 深度优先搜索 package mainimport "fmt"var direction [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}func main() {var M, N intfmt.Scanln(&N, &M)sea : make([][]int, N)visited : make…...

异步调用 - 初识

目录 1、引入 2、同步调用 2.1、例子:支付功能 2.2、同步调用的好处 2.3、同步调用的缺点 3、异步调用 3.1、异步调用的方式 3.2、异步调用的优势 3.3、异步调用的缺点 3.4、什么场景下使用异步调用 3.5、MQ技术选型 1、引入 为什么想要异步通信呢&…...

Java 家庭物联网

家庭物联网系统的代码和说明,包括用户认证、设备控制、数据监控、通知和警报、日志记录以及WebSocket实时更新功能。 ### 项目结构 plaintext home-iot-system ├── backend │ └── src │ └── main │ └── java │ └…...

机器学习——随机森林

随机森林 1、集成学习方法 通过构造多个模型组合来解决单一的问题。它的原理是生成多个分类器/模型,各自独立的学习和做出预测。这些预测最后会结合成组合预测,因此优于任何一个单分类得到的预测。 2、什么是随机森林? 随机森林是一个包含…...

Java - JDK17语法新增特性(如果想知道Java - JDK17语法新增常见的特性的知识点,那么只看这一篇就足够了!)

前言:Java在2021年发布了最新的长期支持版本:JDK 17。这个版本引入了许多新的语法特性,提升了开发效率和代码可读性。本文将简要介绍一些常见的新特性,帮助开发者快速掌握并应用于实际开发中。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨…...

Linux-DNS

DNS域名解析服务 1.DNS介绍 DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。…...

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用 使用gitlab的CI/CD实现logseq笔记自动发布为单页应用如何实现将logseq的笔记发布成网站使用 logseq-publish-docker 实现手动发布使用gitlab的CI/CD实现自动发布过程中的问题及解决参考资料 使用gitlab的CI/CD实现logseq笔记…...

云联壹云 FinOps:赋能某车企公有云成本管理与精细化运营

背景 某车企,世界 500 强企业,使用了大量的公有云资源,分布于多家公有云,月消费在千万级别。 业务线多且分散,相关的云消耗由一个核心团队进行管理,本次案例的内容将围绕这些云成本的管理展开的。 需求 …...

C#静态类与非静态类

1、静态类 静态类有几个重要的特点: 1)无法实例化:由于静态类不能被实例化,因此它不会占用对象内存。 2)静态成员:静态类只能包含静态成员(静态方法、静态属性、静态事件等)。 3&am…...

亚信安全:《2024云安全技术发展白皮书》

标签 云计算 安全威胁 云安全技术 网络攻击 数据保护 一句话总结 《云安全技术发展白皮书》全面分析了云计算安全威胁的演进,探讨了云安全技术的发展历程、当前应用和未来趋势,强调了构建全面云安全防护体系的重要性。 摘要 云安全威胁演进&#xff…...

GuLi商城-商品服务-API-品牌管理-云存储开通与使用

这里学习下阿里云对象存储 地址:对象存储 OSS_云存储服务_企业数据管理_存储-阿里云 登录支付宝账号,找到了我以前开通的阿里云对象存储 熟悉下API 文档中心 简介_对象存储(OSS)-阿里云帮助中心 我们将用这种方式上传阿里云OSS...

git 命令行初始化并上传项目

XXXX 为项目名称 1. 初始化 cd D:\XXXX git init git remote add origin http://账号192.168.1.231:8088/r/XXXX.git 2. 拉取项目,做本地合并 git pull origin master git fetch origin git merge origin/master 3. 添加注释,上传 git add . git c…...

Spring框架Mvc(2)

1.传递数组 代码示例 结果 2.集合参数存储并进行存储类似集合类 代码示例 postman进行测试 ,测试结果 3.用Json来对其进行数据的传递 (1)Json是一个经常使用的用来表示对象的字符串 (2)Json字符串在字符串和对象…...

Python学习笔记29:进阶篇(十八)常见标准库使用之质量控制中的数据清洗

前言 本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。 根据模块知识,一次讲解单个或者多个模块的内容。 教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html 质量控制…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...