密码学 (cryptography I - Dan Boneh)【三】Block ciphers

学习课程:斯坦福大学密码学公开课
课件链接和作业(附答案):https://pan.baidu.com/s/1vogTE2Flpzi9DmoclLPGQw
提取码:1mrp

What is a block cipher?

在这里插入图片描述
输入输出有着严格相同的位数。
在这里插入图片描述
m变成c要经过好几轮的加密。后面会详细说。
在这里插入图片描述
效率问题,流密码还是效率高啊,不过有些分组密码能做到的事流密码做不到。
记一下64/168和128/128。
在这里插入图片描述
分组密码的两个关键元素:伪随机函数PRF、伪随机置换PRP。
PEF中F不需要是可逆函数。
PEP中要求E是双射函数,一对一且可逆。
在这里插入图片描述
PRP是特殊的PRF。
在这里插入图片描述
接下来讨论PRF和PRP的安全,这是分组密码安全的关键。
接下来的学习要类比之前学过的PRG。
Funs[X,Y]是X到Y的所有函数的集合,它的大小是|Y||X|。X中每一位都有|Y|种映射,|X|位则有|Y||X|种映射,即|Y||X|种函数。(全体函数集合)
SF,给定了一个函数,函数的映射关系由k决定,这样构成的映射种类为|K|个。
如果从SF中随机取一个函数和从Funs[X,Y]中随机取一个函数不可区分,则这个PRF是安全的。(伪随机函数集合)
换句话说,如果有个人从这两个集合中的一个集合里,随机地取函数,然后把取出来的函数展示给你,让你猜他是从哪个集合里取出来的,你猜对的优势是0。这样就说明这个PRF是安全的。
即:在伪随机函数上的均匀分布与在全体函数上的均匀分布不可区分。
在这里插入图片描述

课程中对这一概念的精确解释:有一个攻击者想要区分真随机函数和伪随机函数。他在集合X中选取了很多x,x1、x2、x3…,他把选取的x发送给challenger,challenger会用A方案(真随机)或者B方案(伪随机)计算出一个结果,并返回给攻击者。攻击这从结果中,不能判断出challenger使用了哪个方案。
在这里插入图片描述
伪随机置换和伪随机函数的定义类似,不再赘述。
在这里插入图片描述
一个简单的课堂小问题。告诉我们,对于一个固定的输入,PRF不能有固定的输出。
在这里插入图片描述
由PRF到PRG,一个安全的PRF可以通过图中的方式生成安全的PRG,而且生成PRG可以是并行的,例如可以让一个处理器生成F(k,0)、F(k,2)、F(k,4)…,另一个处理器生成F(k,1)、F(k,3)、F(k,5)…,这大大提高了效率。
PRG的安全性完全取决于PRF的安全性。
真随机函数的输出是独立的真随机序列,因为伪随机函数是安全的,所以它的输出随机性也十分好,和真随机序列无法区分,因此由安全的PRF构成的PRG产生的序列随机性也十分好,因此这个PRG是安全的。

The data encryption standard (DES)

该课程关于DES算法的介绍有点简单,想了解详细一点的话可以看其他教程,当然我之后会另写一篇博客分享一下我对DES的理解^ _ ^。
本节主要关注轮加密。
在这里插入图片描述
DES的历史。
在这里插入图片描述
DES中的轮加密,Feistel网络。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
逆运算(解密用)。
正向运算和逆向运算的区别在于使用f的顺序不同。
AES并没有使用这种结构的轮加密。
在这里插入图片描述
一个小定理,视频中没有给证明。
在这里插入图片描述
IP是一个置换函数,并不是为了安全考虑,仅仅是规定。
在这里插入图片描述
轮加密过程中,f的详细结构。E是扩展函数,P是置换函数、S是S-box(代换函数)。
在这里插入图片描述
S盒的使用方法。
在这里插入图片描述那么S盒该如何构造呢。我们先从一个坏S盒开始,图中是一个线性S盒,它的运算可以用一个矩阵乘以列向量表示。这种线性S盒的安全性是十分差的。
在这里插入图片描述如果S盒是线性的,那么整个DES就是线性的(需要一些线性代数知识才能理解)。如果整个DES是线性的,那么就十分危险了。事实上,只要S盒子接近线性的,就十分危险。
在这里插入图片描述
因此S盒和P盒可不是乱选的,是有一些规则的。

Exhaustive Search Attacks

文章开头给的汉化课程视频中丢失了这一部分,我没有找到这一部分的其他汉化版视频。这里给一个有英文字幕的视频:https://www.bilibili.com/video/av12922709?p=9&spm_id_from=333.788.b_636f6d6d656e74.46
在这里插入图片描述
exhaustive search:穷举法搜索。
目标:给定一组明密文,找到它们对应的密钥k。
首先我们需要确定一点,给定一组明密文,它们对应的密钥是唯一的。接下来要证明这一点。
Lemma:
假设DES是一个理想的cipher,那么给定一个明密文对,它们对应的key只有一个概率大于99.5%。
理想的cipher:对每一个key,DES都有对应的一个随机可逆函数。因为DES的密钥空间是256,因此有256个随机可逆函数实现了从明文空间{0,1}64到密文空间{0,1}64的映射。但事实上这只是一种理想状态下的假设,DES不可能是256个随机可逆函数的集合,不过不影响接下来的内容。
因为DES(k,m)的密文空间是{0,1}64,大小为264,因此DES(k,m)=DES(k’,m)的概率为1/264。而密文空间是256,即k’有256种可能,因此要乘以256
可能性很大,因此可以认为是唯一的(从破解密钥的角度)。
在这里插入图片描述
如果给定两个明密文对,那么这个可能性会更大。
这个结论对AES也生效。
在这里插入图片描述
一些破解DES的小历史。
在这里插入图片描述
如何加强DES呢,一个简单的想法就是把DES使用多次。这样就产生了3DES算法。
3DES的密钥长度为168,理论上用穷举法破解需要2168次运算,但是可以通过一些技巧缩短到2118
3DES虽然在安全性上有所提高,但是3次加密时间开销有点大,效率降低了。
在这里插入图片描述
为什么不用2次加密的DES。因为这样是不够安全的。
我们可以如图所示建立一个表。
注意,表是按第二列排序的,这样方便查找。图中这是按第一列排序的,是不对的。
在这里插入图片描述
原理就是把c用所有可能的k解密一下,然后看看解密出来的内容是否在我们构建的表的第二列。如果在,那么这个k就是k1,查表后找到对应的k2
在这里插入图片描述
有关时间开销的计算。
用空间换时间是穷举类破解法中常用的手段。在这个破解方法中,通过在空间上存储我们生成的表,来减少计算的时间。破解hash值用到的彩虹表方法和这个原理一样。
我们可以看到,两次DES还不足以抵挡穷举法攻击。
这个攻击手段对3DES也实用,不过计算时间会更长。
在这里插入图片描述
如果想要避免穷举攻击,但又想减少加密时间开销,可以试试DESX方法,如图。
需要指出的是3DES是标准,这个不是标准。

More attacks on block ciphers

在这里插入图片描述
side channel attacks:旁道攻击:
通过测量加解密所用的时间和功耗来猜测密钥。
(这种攻击方式让我想到了之前做过的meltdown实验,那个是利用cpu的乱序执行,来越权访问内存数据的一种手段。实验中,通过访问内存数据所用的时间开销不同,来猜测其中的内容。)
fault attacks:错误攻击
使用例如提高计算机时钟周期,提高cpu温度等手段使其输出错误结果,从而暴露密钥信息。可以在输出之前设置一些校验,但校验也可能出错。
因此我们不要自己设计加密算法,一定要按照标准去实现它。
在这里插入图片描述
线性差分攻击:
攻击者手中有很多很多明密文对。由于DES第五个S盒设计的不好,因此明密文对还是有一丢丢联系的。
按位异或明密文对,再按位异或密钥,二者结果相等的概率理想状态下应该是0.5。但是毕竟是人设计的东西,明密文不可能是完全独立,毫无联系的,因此会有一个偏差ε。
教程中只讲了如何利用这个弱点进行攻击。
在这里插入图片描述
当有1/ε2随机明密文对时,就有很大概率猜测出密钥各位的异或值。
在这里插入图片描述
先用这种方法算出密钥中的14位,再用穷举法算出剩下的。
教程中说的很简单,没怎么解释,我也不知道那14位具体怎么算的。。。
在这里插入图片描述
给我们的教训是任何一点细微的线性关系都有可能被利用,因此不要自己设计加密算法。

在这里插入图片描述
量子攻击(还不能实现),利用量子攻击可以缩短穷举的时间。但是能不能造出量子计算机还是未知数。
在这里插入图片描述
AES-256还是能跟量子计算机碰一碰的。

The AES block cipher

在这里插入图片描述AES的历史。
在这里插入图片描述每一步都是可逆的。
在这里插入图片描述
输入和输出都是4字节*4字节的矩阵。
ByteSub:字节代换
ShinRow:行移位变换
MixColumn:列混合变换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Block ciphers from PRGs

70:10
如何用一个PRG构造一个PRF。
G能把k位扩展为2k位,F输入0就选取前k位,F输入1就选取后k位。
在这里插入图片描述
运用相同的方法,把k位扩展为4k位。
在这里插入图片描述
简单证明一下这个方法有用。
在这里插入图片描述
套娃。
在这里插入图片描述
但这种实在是太慢了。
在这里插入图片描述简单的课堂小问题。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值