参考资料:Cryptographic Engineering, by Cetin Kaya Koç, Editor Springer.

文章目录

  • Side-Channel Analysis
    • Timing Analysis
    • Sample Power Analysis
    • Differential Power Analysis
    • 其他攻击
  • 对抗方法

Side-Channel Analysis

对于密码算法的攻击手段,往往是将密码算法作为一个黑盒来调用,使用代数手段尝试恢复秘密值。但是一旦将密码算法实现在了软/硬件中,根据软/硬件的工作特性它总会泄露一些中间状态的信息,可以使用统计手段来恢复这些中间值从而获得秘密值。

侧信道敌手的能力,远比在安全归约模型中所假设敌手的能力要强得多(安全归约模型并不 catch 的情况)。在归约下安全的密码算法,在实际中不一定安全;但没有安全归约的密码算法,很难让人相信它是安全的。

Timing Analysis

如果逻辑分支(if, case, continue, break, return)与秘密值有关,并且不同逻辑分支的执行时间明显不同。那么通过观察程序的执行时间长短,可以区分程序执行了哪个分支,从而区分出秘密值的 1 1 1 比特信息。

Sample Power Analysis

所需设备:示波器(Oscilloscope)、电磁探头(EM probe)、电阻(resistor)、密码设备、电脑(PC)。

一种简单的方案:

  1. 为密码设备供电,由 PC 为它提供明文。
  2. 在密码设备的接地线上串联电阻,电阻两端连接示波器
  3. 示波器结果发送到 PC 上,记录已知明文的能量迹(power trace)。

对于更加复杂的功耗攻击,应该使用 EM probe 通过侵入式 / 非侵入式来探测芯片上不同部位的电磁信号。采样率应当满足 Nyquist-Shannon sampling theorem,即至少是输入信号的最大频率的两倍;实际中两倍是不够的,但是经验上几倍就够了。

能量消耗是数据依赖或者操作依赖的,对于不同的数据和操作其能量消耗并不相同。有不少的能量泄露模型,比较简单且常用的两个模型,

  • 汉明重量模型(Hamming-weight model):假设能量消耗正比于正在被操作的数据的汉明重量、或者正在执行的指令的汉明重量。

  • 汉明距离模型(Hamming-distance model):假设能量消耗正比于当前状态相较于前一个状态的汉明距离。

一般而言,汉明重量模型适合于软件实现(总线,寄存器),汉明距离模型适合于硬件实现(CMOS 的比特翻转)。

例如,一个未知指令 f ( x ) f(x) f(x),它对于输入 x ∈ { 0 , 1 } 8 x \in \{0,1\}^8 x∈{0,1}8 执行运算。当选取不同的输入 x x x 时,测得的能量迹的峰值不相同。假设泄露模型已知(例如汉明重量模型,依赖于 H W ( x ) HW(x) HW(x)),那么根据 x ∈ [ 0 , 255 ] x \in [0,255] x∈[0,255] 的若干能量迹,可以确定出 f f f 是哪种指令。

Differential Power Analysis

然而,环境噪声(这也包括与秘密值无关的其他操作)可能会严重影响 SPA 的效果。假设环境噪声是高斯白噪声,那么多次实验取平均可以降低噪声(高斯分布加和的标准差按平方根增长)。

Boolean selection function:对于输入 y y y,输出 σ ( y ) = 0 \sigma(y)=0 σ(y)=0 或者 σ ( y ) = 1 \sigma(y)=1 σ(y)=1(例如 MSB 函数),这被用于对若干条能量迹的分组
Y 0 = { y ∣ σ ( y ) = 0 } , Y 1 = { y ∣ σ ( y ) = 1 } \mathcal Y_0 = \{y|\sigma(y)=0\}, \mathcal Y_1 = \{y|\sigma(y)=1\} Y0​={y∣σ(y)=0},Y1​={y∣σ(y)=1}

Bit Tracing:对于 Y 0 , Y 1 \mathcal Y_0,\mathcal Y_1 Y0​,Y1​ 对应的两组能量迹,计算这两组能量迹的平均值,然后计算它们的差分作为 DPA trace
Δ ( t ) : = ⟨ P i ( t ) ⟩ Y 0 − ⟨ P i ( t ) ⟩ Y 1 \Delta(t) := \langle P_i(t)\rangle_{\mathcal Y_0} - \langle P_i(t)\rangle_{\mathcal Y_1} Δ(t):=⟨Pi​(t)⟩Y0​​−⟨Pi​(t)⟩Y1​​

例如分组密码中,明文 { x i } = [ 0 , 255 ] \{x_i\}=[0,255] {xi​}=[0,255],秘钥 k ∈ [ 0 , 255 ] k \in [0,255] k∈[0,255],S-Box 运算为 y i = S ( x i ⊕ k ) y_i=S(x_i \oplus k) yi​=S(xi​⊕k)。密码设备内置秘钥 k ∗ k^* k∗ 加密明文 { x i } \{x_i\} {xi​},我们采集到已知明文 { x i } \{x_i\} {xi​} 的能量迹 { P i ( t ) } \{P_i(t)\} {Pi​(t)},在汉明重量模型下 S S S 执行的时刻能量消耗关于 H W ( y i ) HW(y_i) HW(yi​) 线性变化(服从高斯分布 N ( m + k ⋅ H W ( y i ) , σ 2 ) N(m + k \cdot HW(y_i), \sigma^2) N(m+k⋅HW(yi​),σ2) 的随机变量)。

假设 S-box 的输出是均匀的(实际上并不均匀),那么根据 M S B ( y i ) = 0 / 1 MSB(y_i)=0/1 MSB(yi​)=0/1 对这些 { P i ( t ) } \{P_i(t)\} {Pi​(t)} 分组后, Y 0 \mathcal Y_0 Y0​ 中的字节 y i y_i yi​ 的平均汉明重量为 7 / 2 = 3.5 7/2=3.5 7/2=3.5,而 Y 1 \mathcal Y_1 Y1​ 中的字节 y i y_i yi​ 的平均汉明重量为 1 + 7 / 2 = 4.5 1+7/2=4.5 1+7/2=4.5。

我们随机猜测 k ∈ [ 0 , 255 ] k \in [0,255] k∈[0,255] 的值:如果猜对了 y i = x i ⊕ k ∗ y_i = x_i \oplus k^* yi​=xi​⊕k∗,那么采集到的能量迹被正确地分组到 Y 0 , Y 1 \mathcal Y_0,\mathcal Y_1 Y0​,Y1​ 中,所以计算出的 Δ ( t ) \Delta(t) Δ(t) 将会出现明显的峰值;如果猜错了 y i ≠ x i ⊕ k ∗ y_i \neq x_i \oplus k^* yi​=xi​⊕k∗,那么它们被随机分成两组,则 Δ ( t ) \Delta(t) Δ(t) 中将不会出现峰值(实际中会出现矮小的峰值)。这就区分出了正确秘钥。

DPA 的步骤:

  1. 确定一个能量泄露模型(汉明重量模型、汉明距离模型)
  2. 找出一个与秘密值有关的中间值(比特选择函数),它使得在选定模型上的功率表现不同
  3. 收集一些已知明文的能量迹(反映了中间值的统计信息)
  4. 猜测秘钥的值,计算对应的中间值,把这些能量迹分成两组(提取统计特征)
  5. 计算两组能量迹的均值迹,然后计算它们的差分迹(消除噪声)
  6. 查看是否有峰值,如果有那么说明秘钥猜对了,如果没有那么重新执行 step 4 直到出现峰值(不需要重新采集能量迹)

其他攻击

  • 模板攻击(TA):对于不同的秘密值计算一个模板 ( m i , C i ) (m_i,C_i) (mi​,Ci​),其中 m i m_i mi​ 是均值 C i C_i Ci​ 是协方差矩阵,然后计算真实能量泄露的最大似然模板。
  • 相关能量攻击(CPA):假设一个秘钥值,计算出假设能量泄露,然后计算它与真实能量泄露的相关系数。
  • 随机模型(Stochastic Model)、互信息分析(Mutual Information Analysis)、Kolmogorov-Smirnov Test,等等。

对抗方法

关键点:抑制侧信道信息与所用秘密值之间的相关性。

  1. 减少侧信道信息的泄露

    • 程序的执行是常数时间的
    • 分支不应依赖于秘密值(不仅是运行时间,还有访存地址)
  2. 添加噪声来掩盖侧信道信息
    • 功率平滑(power smoothing),使得能量迹的变化平缓
    • 插入待机状态(wait state, 硬件)或者空指令(dummy cycle, 软件)
    • 对于同步信号使用不稳定的时钟(unstable clock)
    • 软件层面,在密码算法中添加一些随机的数据掩码(data mask)

一般而言,混合使用软件保护以及硬件保护的效果更好。

侧信道攻击:SPA / DPA相关推荐

  1. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]43 为AES 对抗侧信道攻击的防御

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 为AES描述一些基础的(可能无 ...

  2. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第39篇]侧信道攻击和故障攻击有什么区别

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 侧信道攻击(Side-chan ...

  3. Intel CPU 易受新型的 SGAxe 和 CrossTalk 侧信道攻击

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 网络安全研究员发现了两种针对当代 Intel 处理器的攻击,可泄露CPU 可新执行环境 (TEE) 中的敏感信息. 第一种攻击名为 & ...

  4. 【安全硬件】Chap.6 IC和半导体产业的全球化;芯片生产猜疑链与SoC设计流程;可能会存在的安全威胁: 硬件木马、IP盗版、逆向工程、侧信道攻击、伪造

    [安全硬件]Chap.6 IC和半导体产业的全球化:芯片生产猜疑链与SoC设计流程:可能会存在的安全威胁: 硬件木马.IP盗版.逆向工程.侧信道攻击.伪造 背景 1. IC和半导体产业的全球化 2. ...

  5. 基于Montgomery算法的高速、可配置 RSA密码IP核硬件设计系列(五)——模幂模块(抵抗侧信道攻击)模块的设计实现方案

    基于Montgomery算法的高速.可配置RSA密码IP核硬件设计系列(五) 2.2 模幂模块设计(抵抗测信道攻击模块) 2.2.1 模幂模块及内部模块的功能 2.2.3 模幂各模块的实现方案 2.2 ...

  6. CATalyst——针对末级缓存侧信道攻击的防御技术

    CATalyst: Defeating Last-Level Cache Side Channel Attacks inCloud Computing, HPCA'16 (A类), 2016年3月[1 ...

  7. 简单来看看什么是侧信道攻击

    前言 之前在看逻辑层面的安全,其中有个旁路攻击,书里面说这玩意就是防范侧信道攻击. 旁路攻击又被称为旁路信道攻击或侧信道攻击.这种硬件层面的攻击通常以从电子设备获取机密信息为目标.对于密码算法,加密是 ...

  8. 基于RF算法的侧信道攻击方法研究

    摘要 目前,随机森林(RF)算法在侧信道分析领域的潜力还没有得到充分利用.文章提出一种基于RF算法的侧信道攻击方法,分别从输入数据处理和参数控制两方面进行模型优化,在特征点选择和RF算法参数调优两方面 ...

  9. 漏洞挖掘——实验11 侧信道攻击+TCP/IP实验

    漏洞挖掘前言 题目 Lab 侧信道攻击 + TCP/IP实验 Pre 1.用IE访问某些网站的时候,输入javascript:alert(document.cookie)会有什么反应,解释原因. 2. ...

  10. 头歌-信息安全技术-Spectre侧信道攻击过程验证

    头歌-信息安全技术-Spectre侧信道攻击过程验证 一.第1关:Cache vs Memory 1.编程要求 2.评测代码 二.第2关:基于Flush+Reload的侧信道实现 1.编程要求 2.评 ...

最新文章

  1. [MySQL]Every derived table must have its own alias
  2. 优秀!广州“土博士”刚毕业,即获海外名校终身教职!
  3. Nagios 监控实例部署
  4. 【统计学习方法】感知机对鸢尾花(iris)数据集进行二分类
  5. Google 是如何定制 Material 主题的?
  6. 女儿问了我一个问题:什么是抽象?
  7. SQL SERVER 2008清理日志
  8. 【oracle】to_date
  9. Python 第十一章 常用第三方模块
  10. 01 React初步认知、React元素、渲染、工程化
  11. idea 编写javafx_用JavaFX编写图块引擎
  12. 用 Python 编写一个天气查询应用
  13. java swing 图片容器_Java Swing中两种设置背景图(容器图片)
  14. AI产品经理的前世今生
  15. 自定义listview实现第一章之“初九”
  16. TextMeshPro的超链接
  17. OpenGL ES OpenGL WebGL EGL WGL 区别
  18. NavMesh基础使用
  19. 添加ubuntu开机引导
  20. Unity视频播放的脚本控制

热门文章

  1. 微信公众号实现回复图文消息
  2. Java调用阿里OCR接口实现印刷文字识别
  3. DGIOT物联网开源平台——天翼云部署
  4. 机房管理系列之网线改造
  5. 浩方连接不上服务器无响应,sv独立客户端无法登陆服务器(sv独立客户端连接失败)...
  6. 按回车键没有反应,不进行下一步
  7. 英雄联盟轮播图自动轮播
  8. 逆向直播盒子Green-iOS客户端
  9. GWO-BiLSTM 双向长短期记忆网络 基于灰狼优化双向长短期记忆网络(GWO-BiLSTM)的回归预测或时序预测
  10. CSP考试笔记:C++篇(第四章、面向对象)(牛客网学习)