侧信道攻击:SPA / DPA

news2024/11/28 7:38:18

参考资料: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)Y0Pi(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(xik)。密码设备内置秘钥 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+kHW(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=xik,那么采集到的能量迹被正确地分组到 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=xik,那么它们被随机分成两组,则 Δ ( 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)

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

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

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

相关文章

【LoRaWAN】单播与组播multicast调试记录

本文主要记录 【LoRaWAN】单播与组播multicast调试过程的问题 2023.06.09 📋 个人简介 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎📝 个人主页:[欢迎访问我的 Ethernet_Comm 博客…

甘孜州文化旅游产品市场营销策略研究_kaic

甘孜州文化旅游产品市场营销策略研究 摘要: 近年来,随着文化旅游的兴起,越来越多的旅游者渴望精神层面的满足,获得新奇的文化体验,而我国文化旅游仍处于单层次的观赏旅游。本文研究背景包括对旅游行业的背景介绍&#…

【HTML】form标签

<form> 标签用于创建 HTML 表单&#xff0c;它是用于收集用户输入的重要元素。表单可以包含各种输入字段、按钮和其他交互元素&#xff0c;用于向服务器发送用户输入数据。 下面是一个简单的 <form> 标签的示例&#xff1a; <form action"/submit-form&q…

Spring高级装配--条件化的bean

目录 条件化创建bean的例子 使用 解析 条件化创建bean的例子 希望一个或多个bean只有在应用的类路径下包含特定的库时创建希望某个bean只有当另外某个特定的bean也声明之后才会创建要求某个特定的环境变量设置之后&#xff0c;才会创建某个bean在Spring 4之前&#xff0c;很…

【乐观锁与悲观锁】—— 每天一点小知识

&#x1f4a7; 乐观锁与悲观锁 \color{#FF1493}{乐观锁与悲观锁} 乐观锁与悲观锁&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专栏的文章图文并茂&…

2023-06-09:什么是Redis事务?原理是什么?

2023-06-09&#xff1a;什么是Redis事务&#xff1f;原理是什么&#xff1f; 答案2023-06-09&#xff1a; Redis中的事务是以一组命令的形式出现的&#xff0c;这些命令被认为是最小的执行单位。事务可以保证在一个单独独立的隔离操作中执行所有命令&#xff0c;而且所有命令…

linuxOPS基础_linux ACL访问控制

问题&#xff1a;我们学过的所有者身份包含哪些&#xff1f; 答案:ugo,属主&#xff0c;属组&#xff0c;其他。 问题&#xff1a;我们学过的文件权限包含哪些&#xff1f; 答案&#xff1a;rwx&#xff0c;读写执行&#xff0c;特殊s,t ​ ACL&#xff0c;是 Access Contro…

java变量

基本数据类型介绍 基本的数据类型: 整数类型&#xff1a;byte、short、int、long 定义long类型的变量&#xff0c;赋值时需要以"l"或"L"作为后缀。 Java程序中变量通常声明为int型&#xff0c;除非不足以表示较大的数&#xff0c;才使用long。 Java的整…

移动开发行业,就业及毕业,再到无业,夜夜无眠~

近期听得最多的一个消息就是&#xff1a;“今年太不好找工作了” 这是粉丝朋友发来的感叹&#xff0c;三个星期内没有找到工作&#xff0c;在我朋友圈中算短的了&#xff0c;还有不少朋友已经失业快半年了&#xff0c;情况都和这个类似。 是移动互联网市场变了吗&#xff1f; …

字符串是否相等案例s1==s3?

下列代码的运行结果是&#xff1f; public class test { public static void main(String[] args) { String s1 "abc"; String s2 "ab"; String s3 s2 "c"; System.out.println(s1 s3); } } /** C…

【linux】信号的保存和递达处理

上节我们了解到了预备&#xff08;信号是什么&#xff0c;信号的基础知识&#xff09;再到信号的产生&#xff08;四种方式&#xff09;。今天我们了解信号的保存。信号产生&#xff0c;进程不一定立马就去处理&#xff0c;而是等合适的时间去处理&#xff0c;那么在这段时间内…

[Java基础]面向对象

目录 1、对象和类 2、类之间的关系 3、引用 4、对象的创建和使用 5、构造函数/构造方法 6、内存解析 在这篇文章中&#xff0c;我们将学习面向对象的思想&#xff0c;并学习如何使用面向对象思想编程。在学习面向对象编程之前&#xff0c;我们先了解一下编程语言的发展&a…

Win安装Node.js Npm

1、在使用之前&#xff0c;先类掌握3个东西&#xff0c;明白它们是用来干什么的&#xff1a; npm: nodejs 下的包管理器。 webpack: 它主要用途是通过CommonJS 的语法把所有浏览器端需要发布的静态资源作相应的准备&#xff0c;比如资源的合并和打包。 vue-cli: 用户生成Vue工…

HNU-操作系统OS-作业4(37-40章)

OS_homework_4 这份文件是OS_homework_4 by计科2102 梅炳寅 202108010206 文档设置了目录,可以通过目录快速跳转至答案部分。 第37章 运行程序wolf/OS-homework/file-disks/disk.py 解释一些参数 -G可以查看可视化内容-c可以计算结果。-a 提供待访问的数组-S 将寻道速率改…

深度学习训练营之优化器对比

深度学习训练营之优化器对比 原文链接环境介绍前置工作设置GPU 数据处理导入数据数据集处理数据集可视化 模型构造模型训练结果可视化 原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营…

deque(简单介绍一下)

deque的基本情况&#xff1a; 简单的来说deque是一个双头队列。且两边的尺寸可以动态收缩或者扩张。 其底层实现相当复杂&#xff0c;而且效率并不高。大多数时候都不会使用。 deque诞生的原因是vector和list的优缺点不可分割。 正好复习一下vector和list的优缺点。 vector的…

手机抓包fiddler配置及使用教程

本文基于Fiddler4讲解基本使用 fiddler抓包原理 注意&#xff1a;Fiddler 是以代理web服务器的形式工作的&#xff0c;它使用代理地址:127.0.0.1&#xff0c;端口:8888。当Fiddler退出的时候它会自动注销&#xff0c;这样就不会影响别的 程序。不过如果Fiddler非正常退出&…

学校热水供应系统方案

学校热水供应系统是现代化校园建设的重要组成部分。一套高效、可靠、安全、环保的热水供应系统&#xff0c;不仅能够满足学生、教职工的日常生活需求&#xff0c;也能提高学校形象和竞争力。 在设计学校热水供应系统方案时&#xff0c;需要考虑以下几个方面&#xff1a; 一、热…

【计算机网络复习之路】运输层(谢希仁第八版)万字详解 主打基础

运输层是OSI七层模型中最重要最关键的一层&#xff0c;是唯一负责总体数据传输和控制的一层。运输层要达到两个主要目的&#xff1a;第一&#xff0c;提供可靠的端到端的通信&#xff08;“端到端的通信” 是应用进程之间的通信&#xff09;&#xff1b;第二&#xff0c;向会话…

【css】box-sizing属性

box-sizing 是一个 CSS 属性&#xff0c;用于指定元素的总宽度和高度的计算方式。它影响内容框的大小&#xff0c;并可以包括或排除元素的填充、边框和外边距。 box-sizing 属性接受两个值&#xff1a; content-box&#xff1a;这是默认值。它指定元素的宽度和高度只包括内容区…