主要是对一些缓存侧信道攻击所涉及到的基础的知识的一个简单总结, 记录下学习历程
一、侧信道攻击
侧信道攻击(Side-Channel Attack)是一种针对加密系统或其他安全系统的攻击方法,通过收集和分析系统在执行特定操作时泄露的非直接信息来获取机密信息。与传统的密码分析不同,侧信道攻击并不试图直接破解密码或算法,而是利用系统在物理实现过程中产生的附带信息。这些信息可以包括电磁辐射、功耗、声音、时间、热量等。
常见的侧信道攻击类型包括:
-
功耗分析(Power Analysis):通过监测设备在执行加密操作时的功耗变化,攻击者可以推断出密钥信息。它又分为简单功耗分析(SPA)和差分功耗分析(DPA)。
-
电磁泄漏(Electromagnetic Leakage):通过捕捉设备在执行操作过程中发出的电磁辐射,攻击者可以重构出设备内部的操作情况。
-
时间分析(Timing Analysis):通过测量设备执行某些操作所需的时间,攻击者可以推测出系统的内部状态或密钥信息。
-
声学攻击(Acoustic Attack):通过监听设备在执行操作过程中发出的声音,攻击者可以获取有用的信息。例如,键盘输入产生的声音可以被分析以恢复输入的文本。
-
缓存攻击(Cache Attack):利用处理器缓存的行为来推断出密钥信息或其他敏感数据。
侧信道攻击的防御方法包括:
-
噪声引入:通过在操作过程中引入随机的噪声,使得侧信道信息难以被有效利用。
-
均衡功耗:设计硬件和软件使得功耗在不同操作中保持一致,减少功耗分析的有效性。
-
时间恒定算法:确保加密操作在不同输入下执行时间相同,防止时间分析攻击。
-
屏蔽和隔离:通过屏蔽关键部件或将其隔离,减少电磁泄漏和声学泄漏。
-
随机化:在算法执行过程中引入随机化,使得每次操作产生的侧信道信息不同,增加攻击难度。
侧信道攻击展示了在设计和实现安全系统时必须考虑的多种非传统威胁。通过理解和防御这些攻击,可以大大增强系统的整体安全性。
1.1 侧信道介绍
侧信道是指在信息传输或处理过程中,通过系统的物理特性、时间特性、功耗特性等非正常途径泄露出的信息。侧信道攻击利用这些泄露的信息来获取有关系统的敏感信息,如密钥、加密算法、用户输入等。
侧信道攻击可以分为两类:主动攻击和被动攻击。主动攻击是指攻击者通过对系统进行特定的操作来引起侧信道泄露,例如通过监测系统的功耗变化来推断密钥信息。被动攻击则是指攻击者通过观察系统的非正常行为来获取侧信道信息,例如通过监测系统的电磁辐射来推断密钥信息。即本质上是利用了设备能量消耗的数据依赖性和操作依赖性。
二、缓存机制的工作原理
2.1 缓存的基本概念
缓存是一种高速存储器,用于临时存储频繁使用的数据和指令,以提高访问速度。因为直接从主内存(RAM)获取数据速度较慢,缓存通过提供更快的存取速度来优化CPU的性能。
2.2 缓存层次结构
图2展示了一个典型的CPU缓存层次结构,主要包括L1、L2和L3缓存,以及与内存的关系。
2.2.1 L1缓存
- L1数据缓存与L1指令缓存:
- 每个核心都有两个L1缓存:一个用于存储数据(L1数据缓存),另一个用于存储指令(L1指令缓存)。
- L1缓存是最靠近CPU核心,速度极快(通常在几个纳秒内)。但它的容量相对较小,通常在32KB到128KB之间。
- 当CPU需要执行指令或读取数据时,首先会检查L1缓存。
2.2.2 L2缓存
- L2缓存:
- 每个核心还有一个单独的L2缓存,速度比L1稍慢,但容量更大(通常在256KB到2MB之间)。
- 如果L1缓存未命中(即所需数据不在L1中),CPU会继续检查L2缓存。
大多数攻击文献主要是在L3(LLC)展开研究,可能是共享的原因
2.2.3 L3缓存
- L3缓存:
- L3缓存是所有核心共享的,位于L1和L2缓存之下,容量更大(从几MB到几十MB不等),但速度相对较慢。
- 当L2缓存未命中时,CPU会查询L3缓存。
2.3 数据访问流程
当CPU执行指令时,数据访问的流程如下:
- 查L1缓存:CPU首先查找L1缓存。如果找到数据,直接读取,整个过程非常快速。
- 查L2缓存:如果L1缓存未命中,CPU会去查L2缓存。如果找到数据,读取速度仍然较快。
- 查L3缓存:若L2缓存未命中,CPU会查找L3缓存。虽然访问速度较慢,但仍比直接访问内存快。
- 访问内存:如果L3缓存也未找到所需数据,CPU必须访问较慢的主内存,影响性能。
2.4 缓存的工作原理
- 预取(Prefetching):为了提高效率,CPU会预测未来可能需要的数据,将其提前加载到缓存中。
- 替换策略:当缓存满时,CPU需要决定哪些数据应被替换,常用的替换策略包括最近最少使用(LRU)和先进先出(FIFO)。
2.5 总结
通过多级缓存的设计,CPU能够有效减少访问延迟,提高整体性能。不同级别的缓存各自承担不同的任务,帮助处理器更快速地获取指令和数据,从而优化计算速度。
2.6 缓存的一致性协议
在多处理器系统中,每个处理器通常都有自己的缓存来提高性能。然而,当多个处理器需要访问共享内存中的相同数据时,就会出现一致性问题。例如,一个处理器修改了某个数据,而另一个处理器访问的却是缓存中旧的数据。这种情况下,就需要缓存一致性协议来保证所有处理器看到的数据是一致的。
常见的缓存一致性协议
2.6.1 MESI协议
MESI协议是被广泛使用的一种缓存一致性协议,其名称来自四种缓存行状态的首字母:
- Modified(M,修改):缓存行已被修改,与主存中的数据不一致,并且该缓存行是唯一的最新副本。
- Exclusive(E,独占):缓存行与主存中的数据一致,且该缓存行是唯一的副本。
- Shared(S,共享):缓存行与主存中的数据一致,且可能存在于多个缓存中。
- Invalid(I,无效):缓存行无效,不含有有效数据。
状态转换规则
- 读操作:
- 如果缓存行处于Modified、Exclusive或Shared状态,直接读取数据。
- 如果缓存行处于Invalid状态,从主存读取数据,并将状态设置为Shared或Exclusive。
- 写操作:
- 如果缓存行处于Modified状态,直接修改数据。
- 如果缓存行处于Exclusive状态,修改数据,并将状态设置为Modified。
- 如果缓存行处于Shared状态,需通知其他缓存将此行置为Invalid,然后修改数据,并将状态设置为Modified。
- 如果缓存行处于Invalid状态,从主存读取数据,通知其他缓存将此行置为Invalid,修改数据,并将状态设置为Modified。
2.6.2 MOESI协议
MOESI协议是MESI协议的扩展,增加了一个额外的状态:
- Owner(O,拥有者):缓存行与主存中的数据一致,但其他缓存可能也有这行数据。该缓存行负责将数据写回主存。
状态转换规则
除MESI状态外,MOESI协议还包含以下转换:
- Owner状态:
- 读操作可以直接读取数据。
- 写操作需将其他缓存中的该行数据置为Invalid,然后将状态转为Modified。
2.6.3 MSI协议
MSI协议是MESI协议的简化版本,仅包含Modified、Shared和Invalid三种状态。
状态转换规则
- 读操作:
- 如果缓存行处于Modified或Shared状态,直接读取数据。
- 如果缓存行处于Invalid状态,从主存读取数据,并将状态设置为Shared。
- 写操作:
- 如果缓存行处于Modified状态,直接修改数据。
- 如果缓存行处于Shared状态,需通知其他缓存将此行置为Invalid,然后修改数据,并将状态设置为Modified。
- 如果缓存行处于Invalid状态,从主存读取数据,通知其他缓存将此行置为Invalid,修改数据,并将状态设置为Modified。
2.6.4 总结
- MESI协议:通过四种状态(Modified、Exclusive、Shared、Invalid)保证缓存一致性。
- MOESI协议:在MESI协议基础上增加了Owner状态,以优化缓存一致性处理。
- MSI协议:MESI协议的简化版本,包含三种状态(Modified、Shared、Invalid)。
当然,需要学好缓存侧信道攻击,还要掌握以下知识点:
时间测量技术
高精度计时工具:如RDTSC(Read Time-Stamp Counter)指令在x86架构中的使用。
时间测量的精度与准确性:理解如何精确测量时间以进行侧信道攻击。
操作系统与虚拟内存
进程与线程:操作系统如何管理进程和线程。
虚拟内存机制:页面、页面表、TLB(转换后备缓冲区)的工作原理。
内存隔离技术:如何保护不同进程间的内存数据。
编程基础
熟悉C/C++编程语言:通常用于实现低层次的攻击代码。
系统编程知识:如内存操作、系统调用、指针操作等。
安全基础知识
基本加密技术:了解常见的加密算法(如AES、RSA)及其实现。
攻击与防御技术:包括缓冲区溢出、ROP(返回导向编程)等常见攻击手法及其防御机制。
这里不再赘述,后期如果有时间的话,也会记录在这。
下一章打算记录下常见的缓存侧信道攻击方法