第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御
第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御
原文地址:http://bristolcrypto.blogspot.com/2015/07/52-things-number-43-describe-some-basic.html
侧信道防御:为什么
对于一个现代的严肃的密码学方案,我们一般需要某种形式的安全证明。在AES中,我们认为如果攻击者不知道密钥,那么它就是一个随机排列。然而如果攻击者有侧信道信息,这可能不再安全。因此,我们能做什么防御它呢?理想的,我们可以创建一个完全不受侧信道攻击影响的实现,然而,然而,这实际上意味着实现必须完全隔离,绝对没有输出流——这使得它相当没有意义!
也许我们可以确保,无论我们做什么,AES实现是否通过侧信道泄漏信息都无关紧要?这就引出了泄漏弹性密码学(leakage resilient cryptography)领域,这确实是一个非常强的安全需求。在这些条件下(这种情况很少)安全的方案往往比那些避免(/忽略)问题的方案效率低得多。由于在设计中必须始终进行权衡,因此在实践中,我们倾向于使用假定AES不泄漏任何信息的方案,并将它们与包含防御一些更简单的侧通道攻击的实现相结合。这样做的目的是将攻击成本比安全信息的价值更高,这样(即使他们可以做到)就没有敌人会攻击这个系统,因为它不再可行了。
一些基本的防御
因此,考虑到这一点,让我们考虑一些基本的防御措施,以抵御一些不太复杂的侧通道攻击。正如问题中所指出的,这些技术可能很容易被忽略,所以请将本文视为解释一般概念,而不是提供任何明智的建议!
时间攻击
弱点:一些实现的运行时间取决于它们的输入。因此,通过通过观察系统需要多长时间来响应,可以了解到一些关于键/输入的信息。
防御:常数时间实现。就像标题所说的,最好的对抗时间防御的方法就是确保实现需要花费常数时间运行,同时如今的大多数实现都是常数时间的。这可能在硬件上不是很难,但是在软件上却很难,因为微代码(内部处理器的程序)通常是商业机密。
功率分析(DPA,SPA)
弱点:一些实现的功耗与关键材料相关,这通常是由于存储值时的汉明距离。更多信息,请阅读两周前的博客。
防御1:掩码不是直接使用AES Sbox,而是将掩码应用于输入值,并在掩码Sbox中查找它(实际上,Sbox的值被重新排序以适应掩码)。然后,尽管攻击者可能能够检测到某些内部变量之间的关联,但这些变量都是隐藏的,并且不像以前那样(直接)对应于关键材料。更复杂的掩蔽方案实例化起来会更复杂,但是会导致更好的攻击抵抗力。
防御2:在进行功率分析攻击时,攻击者使用他们知道AES方案内部结构的事实。如果我们在我们的实现中打乱s盒的顺序(通过一些秘密排列),对手将不知道他们的读数如何与内部关键材料相对应。另一种变体是故意使用非决定论,允许处理器自行对某些指令集合重新排序。
缓存流
弱点:如果适当的单元已经在处理器缓存中,那么使用查找表(例如SBox)的mplem朝向的效率将会提高或降低。通过将大部分查找表推出缓存,攻击者可以观察是否调用了适当的单元格,从而泄漏信息。如果可以观察到加载缓存的成本,也可以观察到定时攻击或功率分析。
防御:不要对秘密数据使用查询表!这个列表中最简单的防御方法——如果您不想泄漏使用了哪些查找条目的信息,那么就不要使用查找表。对于AES,这是合理的,因为AES Sbox实际上可以作为输入字节上的一个简单函数来计算。这对于(例如)没有这种结构的DES Sbox就不太实用。
第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御的更多相关文章
- 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法
第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...
- intel:spectre&Meltdown侧信道攻击(四)—— cache mapping
前面简单介绍了row hammer攻击的原理和方法,为了更好理解这种底层硬件类攻击,今天介绍一下cpu的cache mapping: 众所周知,cpu从内存读数据,最开始用的是虚拟地址,需要通过分页机 ...
- 第二十三个知识点:写一个实现蒙哥马利算法的C程序
第二十三个知识点:写一个实现蒙哥马利算法的C程序 这次博客我将通过对蒙哥马利算法的一个实际的实现,来补充我们上周蒙哥马利算法的理论方面.这个用C语言实现的蒙哥马利算法,是为一个位数为64的计算机编写的 ...
- 第三十三个知识点:Bellcore攻击是如何攻击使用CRT的RSA的?
第三十三个知识点:Bellcore攻击是如何攻击使用CRT的RSA的? 注意:这篇博客是由follow论密码计算中消除错误的重要性(On the importance of Eliminating E ...
- NeHe OpenGL教程 第四十三课:FreeType库
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Java进阶(四十三)线程与进程的区别
Java进阶(四十三)线程与进程的区别 1.线程的基本概念 概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必 ...
- 网站开发进阶(四十三)html中,路径前加“/” 与不加“/”的区别
网站开发进阶(四十三)html中,路径前加"/" 与不加"/"的区别 前言 <script src="js/downloadify.js&quo ...
- Gradle 1.12用户指南翻译——第四十三章. 构建公告插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- “全栈2019”Java第四十三章:封装
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- 6 — springboot中设置默认首页 -没屁用
1.页面在static目录中时 2).测试 2.页面在templates模板引擎中时 1).这种需要导入相应的启动器 <dependency> <groupId>org.spr ...
- Shell 打印文件的最后5行
目录 Shell 打印文件的最后5行 题解-awk 题解-tail Shell 打印文件的最后5行 经常查看日志的时候,会从文件的末尾往前查看,于是请你写一个 bash脚本以输出一个文本文件 nowc ...
- HDFS04 HDFS的读写流程
HDFS的读写流程(面试重点) 目录 HDFS的读写流程(面试重点) HDFS写数据流程 网络拓扑-节点距离计算 机架感知(副本存储节点的选择) HDFS的读数据流程 HDFS写数据流程 客服端把D: ...
- college-ruled notebook
TBBT.s3.e10: Sheldon: Where's your notebook?Penny: Um, I don't have one.Sheldon: How are you going t ...
- nodejs-CommonJS规范
JavaScript 标准参考教程(alpha) 草稿二:Node.js CommonJS规范 GitHub TOP CommonJS规范 来自<JavaScript 标准参考教程(alpha) ...
- 前端必须知道的 Nginx 知识
Nginx一直跟我们息息相关,它既可以作为Web 服务器,也可以作为负载均衡服务器,具备高性能.高并发连接等. 1.负载均衡 当一个应用单位时间内访问量激增,服务器的带宽及性能受到影响, 影响大到自身 ...
- MyBatis 如何实现流式查询
基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用. 如果没有流式查询,我们想要从数据库取 1000 万条记录而又没 ...
- 初始化Linux数据盘、磁盘分区、挂载磁盘(fdisk)
1.操作场景 2.前提条件 3.划分分区并挂载磁盘 4.设置开机自动挂载磁盘分区 1.操作场景 本文以云服务器的操作系统为"CentOS 7.4 64位"为例,采用fdisk分区工 ...
- Linux基础命令---htdigest建立和更新apache服务器摘要
htdigest htdigest指令用来建立和更新apache服务器用于摘要认证的存放用户认证信息的文件. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS. 1.语法 ...
- maven的lifecycle
1.maven clean. 清理项目的target目录 2.maven compile 编译项目 3.maven test 编译项目后,再执行Junit测试方法 4.maven package 编译 ...