目录

  • 写在前面的话
  • 参考资料
  • 笔记

写在前面的话

个人笔记,仅供参考,不喜勿喷,谢谢大家。

参考资料

视频:【完整版-斯坦福-密码学】全13讲
理解密码学:如何理解"语义安全(semantic security)"?

笔记

一致性方程

对于是否有效,如果从理论考虑,E和D在多项式时间完成就是有效。如果从应用考虑,在特定时间内完成才算有效。E通常是一个随机算法,当加密信息时,E自己生成二进制随机数,它将用这些随机数来加密给定的明文。解密算法时确定算法。

一次性密码本

密钥空间和明文空间一致,密钥和明文等长,都是二进制。这里密文就是密钥和明文异或的结果。


一次性密码本,当给我明文和密文是可以找到密钥的。密文和明文做异或即可。明文和密钥一样长是根本问题,如果A有办法安全传输一个密钥给B,那么就有办法直接传输明文给B,显然不现实,很难实现。

香农对于安全语义的看法,如下。我的理解是,等长明文消息加密后的密文是一样的,攻击者区分不了是哪个明文加密得到的。一般化说,我得到了一个密文,我无法得知加密的明文是哪个?这里给了两个明文,对于所有的明文都是一样的,这些明文生成的密文概率都是一样的。在这总情况下,唯密文攻击无效。


一次性密码本拥有完美安全

如果我有一条密文消息,有多少可能的一次性密码本的密钥满足映射结果为密文c?有多少这样的密钥k满足m异或k等于c?答案是1。


完美安全对于唯密文攻击是安全的,但是对于其他攻击不一定。香农还证明了,如果要达到完美安全,其全体密钥数不少于其能处理的明文数。也就是说,我的密钥长度必须不小于明文长度。

流密码技术

在流密码中,密钥不是完全随机的,是一种伪随机密钥。伪随机数生成器(PRG),看成一个函数g,这个函数是确定算法,把本来较小的种子空间给扩大了。这里唯一具有随机性的就是这个随机种子,它作为函数g的输入,并且输出应当看起来是随机的。

将种子作为私钥,使用发生器将种子扩张成长得多的看起来很随机的序列或者成为伪随机序列,再和明文进行异或,得到密文。

注意,流密码是完美安全的吗?在流密码中,密钥比明文短得多。答案是否定的,密钥至少和明文一样长才是完美安全。那流密码安全吗?这里需要用另外的安全性来说明,这是不可预测性。

假设流密码是可预测的,即当我给出生成器输出的前i位,会找到一种算法计算出剩下的数。


上面这个例子表明,当流密码存在可预测性,前缀就会暴露整个信息。所以在流密码中使用PRG,它最好是不可预测的。

不可预测性

对于各个位置,即对所有i,没有有效的破解算法A以不可忽略的概率预测出第i+1位。

例子

如有有一个发生器,计算输出的所有位的异或总能得到1,第一位异或第二位,再异或第三位,如果将所有位全部异或可以得到1,那么这个发生器是可预测的吗?是的,给定输出前n-1位,我可以预测出第n位,因为要满足前n位的异或必须是1。

几个脆弱的PRG

线性同余方法有三个参数,分别是a(整数)b(整数),p(质数)。引入r[0]作为发生器的种子。生成随机数的方法就是迭代地运行下面的步骤,算r[i]等于(a*r[i-1]+b)mod p,反复迭代。即使这个方法具有很好的统计性质,但是很容易被预测。

还有一个就是GNU C Library函数库里面的random()。它不满足密码学的随机性。

可忽略和不可忽略


例子

比如一个函数随lambda的增加指数级衰减,明显这个函数是可忽略的,对于任意d,存在一个充分大的lambda,满足1除以2的lambda次方小于1除以lambda的d次方,这明显比所有多项式分式小。但是对于1除以lambda的1000次方,这是一个增长极为缓慢的函数,它的值几乎不动,不过这个函数不可忽略,因为如果我取d为10000,显然函数值大于1除以lambda的10000次方,这个函数值大于某个多项式分式。

直观上来看,一个函数经常表现为多项式小,实际上意味着这个事件发生的概率已然太大了,无法满足实际加密的需要。

通常使用小于指数来表示可忽略性,不可忽略意思是大于1除以多项式。

回顾一下,一次性密码本需要密钥和明文一样长,这不适合应用,所以有PRG来生成密钥,对种子进行扩展,这变成了流密码。

如果用同样的密码本加密多条信息是不安全的,攻击者截获密文可以还原明文。流密码中的密钥只能使用一次。


永远不要用相同的密钥加密两个方向的流量,k一般是一对不同的密钥组成,分别加密两个方向。

在wep中IV用来计数数据包数量,由于IV只有24bits,当经过1600万帧循环一次就有了二次密码本,同样IV还加密两个不同的信息,密钥k不变它是一个长期的密钥。并且在很多情况下,重启系统IV会被重置到0,于是每次重启都用用0联结k加密下一个数据包,这样会加密很多报文。


设计者想为每个数据包使用不同的密钥,但是设计者并没有达到随机密钥的效果,会发现这些密钥都很接近。后缀都是k。

一个比较好的方法就是把密钥k丢进PRG生成一个长流对应的密钥,把这个密钥以帧的数量进行划分,这样一来每个帧都有对应的伪随机密钥。

硬盘加密

比如有一个文件信息,开头是To Bob:…,分块加密,如果后面改成To Eve:…,文件信息不变,那么攻击者能够通过密文发现改变的严格位置。在流密码和一次性密码本里面,也是一样的,很容易分辨出发生改变的位置。所以安全的情况应该是,所有分块的内容都应该被改变。其实如果这是用流密码来加密,就是两次加密了,才会出现这种情况。

所以千万不要使用重复的密钥加密不同的信息。注意流密码和一次性密码本只提供私密性保护不提供完整性保护,当密钥只用一次时它们根本不提供完整性。实际上,这样很容易修改密文来对还原明文造成显著的影响。

可修改性

修改密文

例子:

流密码:RC4,它的种子大小可变。从128bits到2048bits,开始循环输出,每一轮输出1字节。

弱点:

看它生成的第二个字节有点不均匀,如果RC4是完全随机的,第二个字节等于0的概率应该严格为1/256,因为有256种字节值,但是对于RC4是2/256。也就是说用RC4的输出来加密一段信息,第二个字节就更有可能不会被加密,换句话说就是它以比正常情况多一倍的概率与0异或。并且第一个字节和第三个字节也一样,也不是均匀的。如果使用RC4推荐不要使用前256个字节,从257开始。

并且RC4输出中(0,0)序列出现的可能性更大。也就是16位2字节更有可能是00,如果RC4完全随机则应该是1/256 ^ 2,但是这里面会存在1/256 ^ 3的偏差。

密钥相近

流密码加密DVD电影的加密方法:混淆系统CSS(已经被完全破解)【面向硬件设计的流密码】,它是基于线性反馈移位寄存器(LFSR),LFSR是一由若干单元组成的寄存器,每个单元含一位。接着对特定的单元有出头(taps),不是全部单元都有特定位置的叫出头(taps),然后这些出头被异或,在每一个时钟周期,寄存器向右移一位,最右位被丢弃,而异或结果被当作第一位。LFSR的种子就是寄存器的初始状态


CSS的密钥是5字节,40位。CSS使用两个LFSR,一个是17位LFSR,另一个是25位。17位是1与密钥(种子)的前两位,也就是 1+2*8=17。25位是1与密钥最后三位联结。这样利用了密钥全部的字节。然后这些LFSR运行8轮,输出8位,相加取模256,输出一个字节,然后这个字节与电影数据里的字节进行异或加密CSS是个简单的流密码。

这容易被破解,只需要2^17次。假设获得加密后的电影数据,由于DVD加密使用的MPEG文件,如果知道明文的前缀,比如说前20个字节,如果于其异或,将得到PRG的最初输出分段,所以得到CSS输出的前20个字节,即PRG的输出,然后 我们尝试2 ^17种第一个LFSR的可能初始状态,对每一种值,运行LFSR以生成20个字节。将得到的输出减去第一个LFSR输出的20个字节,得到第二个寄存器的前20个字节,看这20个字节是否来自第二个寄存器的输出。

eStream(2008),与之前的流密码不同在于引入了新鲜值。新鲜值表示只要密钥确定下来,用不重复值。

Salsa 20同时面对硬件和软件。利用函数H计算(k,r),使用计数器可以得到足够长的序列。H是可逆的。eStream有5种这样的流密码。

性能比较

【完整版-斯坦福-密码学】全13讲(流密码)【笔记】相关推荐

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

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

  2. 完结!《沉浸式线性代数》完整版正式发布,全交互式体验

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 两个月前,红色石头发文介绍过一本非常棒的在线线性代数教程,名为<Immersive Li ...

  3. 百度SEO站群最新易支付源码完整版 已pj全解密

    简单的介绍一下测试结果吧 源码介绍: (1)20套首页模板 (2)用户排名榜板块 (3)广推引流一个模块 (4)邮箱配置 (5)短信配置 (6)结算配置 (7)商品拦截 (8)用户登录问候语音 (9) ...

  4. 【完整版】蓝桥杯竞赛python算法笔记 代码模板|吐血总结|蓝桥杯省赛国赛

    蓝桥杯竞赛python算法笔记 代码模板|吐血总结 文章目录 蓝桥杯竞赛python算法笔记 代码模板|吐血总结 1 二分 1.1 二分求最大满足(check红色条件) 1.2 二分求最小满足(che ...

  5. 95页字节跳动内部前端学习笔记在互联网上火了,完整版开放下载

    前端工程师学习路线 一.入门前端三剑客 1.HTML html 学起来还是挺简单的,无论你是否有编程基础,我觉得都可以快速入门,对于新手,我推荐找个入门的视频看一下,然后跟着视频打代码就可以了,入门教 ...

  6. python自动化办公百度云_用Python自动办公 做职场高手全16讲 完整版 视频教程

    python这门编程最近可是非常火,不是俗谚有说"人生苦短,我用python".这是有道理的,一是它相对于其他语言,更简单易上手,二是功能可大,可以爬虫,可以写工具. 这里分享给大 ...

  7. 斯坦福NLP名课带学详解 | CS224n 第13讲 - 基于上下文的表征与NLP预训练模型(ELMo, transformer)(NLP通关指南·完结)

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...

  8. java 李炎恢_李炎恢 jquery 66讲视频教程PDF文件完整版全集

    [实例简介] 李炎恢老师在线教程66讲所用的PDF笔记课件,共16章.使用本文档可以省去记笔记的过程. 分享给大家,希望对大家有用. [实例截图] [核心代码] faae1ed4-23fe-4919- ...

  9. 2023史上最全Java面试题【完整版】跳槽必备,看完轻松收撕面试官

    ✨作者简介:杨 戬,博客专家.github开源作者 ✨多年工作总结:Java学习路线总结,小白逆袭Java技术总监 ✨技术交流:定期更新Java硬核干货,不定期送书活动.助你实现技术飞跃 ✨关注公众号 ...

最新文章

  1. 题目1195:最长最短文本
  2. linux python2.7安装教程_Linux中RedHat下安装Python2.7开发环境的详细教程-学派吧-
  3. 云炬创业政策学习笔记20210106
  4. linux脚本执行进度条,shell脚本实现进度条
  5. UGUI_UI的深度学习
  6. Nginx安装方式介绍
  7. 高并发下防止库存超卖解决方案
  8. TightVNC 2.6.4 发布
  9. Azure PaaS服务密钥的安全性
  10. 【概率论与数理统计】小结7 - 统计学中的基本概念
  11. 室内设计数据手册pdf_室内设计制图讲座 PDF扫描版[25MB]
  12. 关于极限编程简单介绍
  13. html5翻牌小游戏源码,html5记忆翻牌游戏实现思路及代码
  14. Flink中的Window计算-增量计算全量计算
  15. 微信小程序构建新闻列表
  16. linux安装rlwrap 解决sqlplus不能上下翻问题
  17. Android侧滑原来可以这么优雅
  18. 分享 |转录组测序那些事儿
  19. 5+App和uni-app在App开发上有何区别?
  20. 淘宝/天猫/1688拍立淘API接口(以图搜商品API接口,图片搜索API接口,图片搜索商品API接口)代码对接教程

热门文章

  1. 为什么需要函数式编程?
  2. RadonDB - 基于MySQL的云原始分布式数据库,用于构建全局的,可扩展的云服务
  3. 面试精讲之面试考点及大厂真题 - 分布式专栏 20 降级组件Hystrix的功能特性
  4. NGINX基于Tomcat配置负载均衡
  5. Spring MVC @RequestMapping Annotation示例
  6. java 课后习题 找零钱
  7. WinRAR 在cmd执行rar压缩命令
  8. 【Liunx】manjaro双系统安装(折腾)教程
  9. 【C语言】请输入一个n(n=10)并输出一个n行n列的杨辉三角
  10. “The server requested authentication method unknown to the client.”的解决方案