一、What is a block cipher?

1. PRPs 和 PRFs

伪随机函数和伪随机置换

2. PRP和PRF安全定义

安全PRF

安全PRF的定义如下:

伪随机函数SFS_FSF​与Funs[X,Y]Funs[X,Y]Funs[X,Y]​(真随机函数)不可区分

如果不可区分,那么就可以享受真随机函数的巨大Size,使得破解困难(无法确定映射函数)

将单个的X映射到Y变成了由[k, *]映射到Y,通过固定了部分输入即k降低了整个大小,同时还能保持不可区分性

直观的理解:

一个例子:

安全PRP

将Funs[X,Y]Funs[X,Y]Funs[X,Y]限制是一对一函数即Perms[X]Perms[X]Perms[X]就可以表示安全PRP

应用案例:

通过伪随机函数生成伪随机发生器

二、DES数据加密标准

The data encryption standard(DES)

DES主要讨论的就是对于分组密码格式中的密钥拓展算法回合函数

2.1 DES的历史

2.2 DES的构造

Feistel 网络

可逆性的证明:

进而整体的逆运算就是解密算法:

进而推出的定理:

Feistel网络是从PRF走向PRP的桥梁!

DES

overview

回合函数

其中的回合函数

S盒

S盒的设计规范:

一句话总结: 选择的S盒的输出表现不可以是非常接近一个线性函数的输出

2.3 穷举攻击 - Exhaustive Search Attacks

目标:根据一对输入与输出找出其中的DES密钥

问题的前提是:一对明文/密文就确定一定是对应一个密钥吗?

Dan Boneh老师给出了证明:

并集上届在第一部分讲过:

并集上届直观上很好理解,但是对于Pr[DES(k,m)=DES(k′,m)]<=1/264Pr[DES(k, m)=DES(k',m)] <= 1/ 2^{64}Pr[DES(k,m)=DES(k′,m)]<=1/264​是如何计算的呢?

下面一个例子希望能让你明白:

DES假设是理想的随机函数,我们认为是一个6面骰子,那么问题就转换为同时掷两个6面骰子,两个骰子数字相同概率的计算方法,我想应该很好计算:

两个骰子总工会出现6*6=36种结果,其中相同面的结果占6个,概率就是16\frac{1}{6}61​

同理,DES理想随机函数单个分组加密的输出是64位,两个相同的概率就是:

264264∗264=1264\frac{2^{64}}{2^{64}*2^{64}} = \frac{1}{2^{64}}264∗264264​=2641​

现在问题的前提是已经被证明是正确的了即:一对明文、密文对可以大概率的确定唯一对应一个密钥加密

事实上,如果有两对明文密文对用key作为密钥,则通过类似的推算这个key唯一的概率将会基本为1

顺带一提,这一点对AES也成立, 如果你看AES-128,给定两个明文密文对以很高的概率只有一个密钥


现在的问题是怎样得到这个密钥

最暴力的方法-穷举:

56位的DES已经不安全了,不可再使用

那么,安全性问题该如何解决呢?

简单直接的方式 => 增加DES的密钥长度

3DES

需要注意的是,3DES并不是直接加密三次,中间的一次是解密. 并且三次都使用独立的密钥

为什么这样设计?

原因:这仅仅只是一个技巧,为了当k1=k2=k3时,先加密再解密3DES退化成DES而已

2的168次方的时间,就算地球上所有机器一起工作10年也是不能破解的

事实上,任何大于2的90次方的都可被认为是充分安全的

大家可能认为3DES的安全性是2的168次方的,但事实上,有一个简单的攻击,只需2的118次方(下面会说到)

2的118次方被认为是对穷举攻击充分安全的, 是个足够高的安全级别了

为什么不能直接加密两次?

中间相遇攻击

核心在于,可以将解密/加密算法用于两边制造碰撞(判断相等),然后建表查询

虽然3DES也可以用此方法实现21182^{118}2118时间内查找,但是还是安全的

3DES实际上是NIST标准,所以3DES实际上应用广泛,而DES不应再被使用了,如果出于某些原因,你一定要用DES的某种变体,用3DES,别用DES


增强DES抵抗穷举攻击能力的方法

这个方法没有被NIST标准化,因为它不能抵抗针对DES更为复杂的攻击,不过如果只考虑穷举攻击, 又不想承担3DES的性能开销,这就是个有趣的想法:

2.4 更多对分组密码的攻击

侧道攻击和故障攻击

旁/侧道攻击: 通过统计测量加密时间功耗的角度来破解密码

故障攻击:人为的让其计算错误,暴露密钥

侧信道攻击(Side-channel attacks, SCA)是一类攻击者尝试通过观察侧信道泄露来推测目标计算的信息。(例如,时间,功率消耗,电磁辐射,噪声等。)

故障攻击(Fault attacks, FA)是一类攻击,在这种攻击中,攻击者尝试利用错误计算的结果。错误可能导致程序或者设计错误(例如 Intel著名的FDIV错误),或者被攻击者诱导的错误(例如,能量故障,时钟故障,温度变化,离子束注入等)。

使用标准库中的密码而不是自己去编写实现或创造!

线性密码分析

发现了一条定理, 明文与密文对之间存在某种依赖:

根据这个定理对于有一点点线性关系的密码算法就可以进行攻击

例如DES,其第五个S盒设计时有点接近线性函数也就导致了被这种分析降低了攻击时间

DES的这一点点偏差在较大量的(具体数量关系见上图)明文/密文对的线性分析下就可以很轻松的得到其密钥和

在第五个S盒的输入输出上运用这个方法就可以将整个密钥的时间复杂度降下来

不要自己设计密码,按标准的来。因为一点点的线性关系都会导致严重的后果

这个定理的线性分析类似于机器学习/深度学习的过程,在大量的数据集的支持下就可以将数据之间的某种线性关系分析出来

量子攻击

量子计算机的由来:

20世纪七八十年代,Richard Feynman对于当前经典计算机无法完成量子实验的计算提出了自己的设想:

量子物理问题对于经典计算机来说就是无法计算的,需要特定的计算机来实现也即量子计算机

因为量子计算机有着与经典计算机不同强大的计算能力,所以可以作为对传统密码学算法的一种攻击

但是目前是否能够真正的制造出这样的计算机仍然是一个迷

量子计算对与密码学的影响是巨大的,因为整个社会、网络安全等各方面都基于密码学难题

量子计算机能否制造出来未知,但是理论上使用其进行计算已有了明确的算法,即Grover

三、AES

3.1 AES历史

因为DES或者3DES对于硬件来说都时间都太慢,所以NIST启动了一个新的分组加密标准叫做高级加密标准AES

3.2 Subs-Perm网络

AES不基于Feistel网络而是基于Subs-Perm(substitution permutation 代置换)网络

最大的区别在于位数的改变,在Feistel中每回合有一半的位是不变的,而Subs-Perm网络中每回合每一位都要改变

DES通过Feistel整体提供可逆性,对于DES其中的S盒是不可逆的,其输入6位,输出4位; 而AES则是每一个步骤都是可逆的,这样才保证了整体上的可逆

3.3 构造

对于上方的每个轮函数(蓝色区域), 其具体过程如下:

关于AES字节代换、行置换、列混淆的一些补充:

3.4 代码大小与时间的平衡

3.5 应用

网络上的应用:

先将AES计算库发送给客户端,客户端预先计算所有的表,随后每次交互只要将基本数据发送给客户端即可

3.6 攻击

尽管已有一些攻击,但是这些攻击的效果在如今看来依旧是安全的

四、用PRGs构建分组密码

构建分组密码,实际上就是构建一个PRP伪随机置换

我们的思路: PRG=>PRF=>PRPPRG => PRF => PRPPRG=>PRF=>PRP

从伪随机数发生器构建伪随机函数

从一位的安全PRG开始推导:

根据G(k)[.]G(k)[.]G(k)[.]中的 . 选择左右

拓展到两位G1(k)G_1(k)G1​(k):

证明两位的G1(k)G_1(k)G1​(k)是安全的:

再次拓展:

拓展n次:

虽然构造过程很美,但是不实用!

可以从PRF到PRP吗?可以!通过Feistel网络的结构即可!


觉得不错的话,请点赞关注呦~~你的关注就是博主的动力
关注公众号,查看更多go开发、密码学和区块链科研内容:

斯坦福密码学-3-分组密码block_cipher相关推荐

  1. 【完整版-斯坦福-密码学】全13讲(流密码)【笔记】

    目录 写在前面的话 参考资料 笔记 写在前面的话 个人笔记,仅供参考,不喜勿喷,谢谢大家. 参考资料 视频:[完整版-斯坦福-密码学]全13讲 理解密码学:如何理解"语义安全(semanti ...

  2. 【完整版-斯坦福-密码学】全13讲(绪论)【笔记】

    目录 写在前面的话 参考资料 笔记 写在前面的话 个人笔记,仅供参考,不喜勿喷,谢谢大家. 参考资料 视频:[完整版-斯坦福-密码学]全13讲 理解密码学:如何理解"语义安全(semanti ...

  3. 密码学:分组密码.(块密码:是一种对称密码算法)

    密码学:分组密码. 分组加密(Block Cipher) 又称为分块加密或块密码,是一种对称密码算法,这类算法将明文分成多个等长的块 (Block) ,使用确定的算法和对称密钥对每组分别加密或解密.分 ...

  4. 斯坦福 密码学 I 学习笔记0:大纲

    斯坦福密码学 I 学习笔记 本系列为斯坦福 Dan Boneh教授的"密码学 I"的学习笔记 课程网址: http://www.coursera.org/lecture/crypt ...

  5. 斯坦福密码学课程-笔记-01-Introduction绪论

    斯坦福密码学课程笔记 01-绪论 Introduction Course Overview Cryptography is everywhere Secure communication Secure ...

  6. 斯坦福密码学课程-笔记-02-Stream Ciphers流密码

    斯坦福密码学课程笔记 02-流密码 Stream Ciphers The One Time Pad Symmetric Ciphers: definition The One Time Pad (Ve ...

  7. 密码学之分组密码设计及DES算法设计

    分组密码:对明文加密时,首先要对明文进行分组,每组的长度相同,然后对每组明文分别加密,得到等长的密文. 特点:速度快.易于标准化.便于软硬件实现 设计要求: 分组长度n要足够大 秘钥空间要足够大 密码 ...

  8. 密码学基础——分组密码

    文章目录 一.分组密码 1.分组密码定义 2.分组密码作用 3.分组密码设计原则 二.DES 1.DES基本原理 2.DES的基本结构 (1)初始值化(IP) (2)加密处理 轮函数 E扩展置换 S盒 ...

  9. 密码学的中文入门书籍及课程推荐

    密码学是一门研究如何保护信息安全的学科.一种简单轻松入门密码学的方法是学习密码学史,此处推荐书籍<密码了不起[知乎出品]>(刘巍然).这是一本密码学科普读物,通过浅显生动的例子,在不涉及复 ...

最新文章

  1. 最牛程序员,雷军年度演讲:最好的投资,就是投资自己
  2. spring18-4: spring aop
  3. 怎么写显示商品图片_shopee商品描述怎么写,shopee商品排名靠前的是
  4. 绝地求生哪个服务器延迟,绝地求生:腾讯公布国服服务器,超性能环境绝对稳定远离延迟!...
  5. loadView的使用总结
  6. 精述IBM的MQTT协议和MQTT-S协议
  7. SpringMVC原理及非注解配置详解
  8. 安装完wps去除右键新建中的wps等文档
  9. Pandas学习——空值填充
  10. 小米青春版路由器解锁root与SSH方法
  11. 浏览器html中加入word,web网页中加载word
  12. 1.ASP.NET MVC使用EPPlus,导出数据到Excel中
  13. python的爬虫攻击
  14. Python:for循环语句
  15. MongoDB学习记录
  16. Android系统初识
  17. 批量修改txt(或其他)文件编码为utf-8
  18. Activity是什么东西
  19. 用计算机播放vcd教案,信息技术-播放CD和VCD.doc
  20. 苹果手机中这4个功能最好立马关闭,不然手机耗电特别快

热门文章

  1. alsa-lib和alsa-utils移植
  2. #请高手帮忙解决一下Java写QQ邮箱验证发送的链接打不开的问题
  3. 聊天机器人在对话中的知识提取
  4. CRAFT Objects from Images
  5. 平泉二职计算机专业学什么,平泉职教中心关于贯彻《职业教育法》情况的报告.doc...
  6. 用计算机制作演示文稿教案博客,《制作幻灯片》教学设计
  7. oracle 索引介绍、作用、使用
  8. 有趣的装B利器-快速打出代码
  9. 服务器液冷散热与风冷散热
  10. 超写实虚拟数字人再升级:Wav2Lip-GFPGAN完整版教程及效果视频评测【手把手】