一、信息论

Claude Elmwood Shannon于1948年首先确立了现代信息论。

1、信息量(amount of information):假设所有消息是等可能的,对消息中所有可能的值进行编码所需要的最少位数。
例如:数据库中有关“一周中的每一天”这一字段包含不超过3位的信息,因为此消息可以用3位进行编码:
000=星期日
001=星期一
010=星期二
011=星期三
100=星期四
101=星期五
110=星期六
111是未用的

2、熵(entropy):一条消息M的信息量可以通过熵来度量,表示为H(M)。通常,一条消息的熵是log2nlog2n{log_{2}}^{n},其中n是消息所有可能的值(假设每一个值是等可能的)。
在密码系统中,熵H(K)=log2KH(K)=log2KH(K)={log_{2}}^{K},K为密钥空间大小。一般说来,熵越大,破译越困难。
例如,密钥为64位的密码系统的熵为64,密钥为56位的密码系统的熵为56。

一条消息的熵也表示了它的不确定性(uncertainty),即当消息被加密称密文时,为了获取明文,需要解密的明文的位数。例如,如果一个密文解密后要么是“男”,要么是“女”,那么此消息的不确定性就是1。密码分析者为了恢复此消息,仅需选择1位。

3、语言信息率(rate of language):r=H(M)/N,其中N是消息的长度。
绝对信息率(absolute rate):假设每个字符串都是等可能的,对每个字母而言可被编码的最大位数。如果在一种语言中,共有L个字母,则其绝对信息率为R=log2LR=log2LR={log_{2}}^{L},这就是单个字母的最大熵。
一种信息的冗余度(redundancy):称为D,D=R-r。

密码分析者的目的是获取密钥K或明文P,或两者都有。在分析前,一般情况下已经具有一些关于明文P的统计信息,比如知晓明文的语言,而这个语言有有一个确定的与之相关的冗余度。密码分析者就根据这个冗余度来减少可能的明文数目,最终确定明文。冗余度越大,越容易被攻击。因此,在加密明文前,经常需要一个压缩程序以减少明文大小。实际上,在加、解密时均须压缩处理以降低消息的冗余度。

4、混乱和扩散
Shannon提出了两种隐藏明文消息中冗余度的基本技术:混乱(confusion)和扩散(diffusion)。
混乱:用于掩盖明文和密文之间的关系,以挫败通过研究密文以获取冗余度和统计模式的企图。最简单的方法就是通过代替。

扩散:将明文冗余度分散到密文中使之分散开来,密码分析者需求这些冗余度会更困难。最简单的方法就是换位(也称置换)。

值得说明的是:虽然序列密码的一些反馈设计加进了扩散,但它只依赖于混乱。分组密码算法既用到混乱,也用到扩散。通常,单独用扩散容易被攻破(即使二重换位密码优于其它的许多手工密码)。

5、唯一解距离U(unidty distance),也称唯一解点
唯一解距离不是对密码分析需要多少密文的度量,而是对存在唯一合理的密码分析所需要的密文数量的指标。

Shannon定义:使得对应明文的实际信息(熵)与加密密钥的熵之和等于所用的密文位数的渐近密文量。
对大多数对称密码系统而言,U=H(K)/DU=H(K)/DU=H(K)/D,H(K)为密码系统的熵,D为语言的冗余度。

有些密码学书籍也将唯一解距离认为是包括正确的明文在内的有意义的明文数目,即一个密码系统的唯一解距离是指一份有意义的相应明文的密文长度。

此外,还有这样的描述:唯一解距离是指,当进行强力攻击时,可能解密出唯一有意义的明文所需要的最少密文量。

唯一解距离与冗余度区别:唯一解距离与冗余度成反比。唯一解距离越长,密码系统就越好。当冗余度接近为零时,即使一个普通的密码系统也是可能不可破的。唯一解距离可以保证当其太小时,密码系统是不安全的,但并不保证当其较大时,密码系统就是安全的。

对于唯一解距离计算中的一些问题,以下的一篇文章对唯一解距离的真正所指进行了探讨,指出这里的唯一应该排除那个唯一正确的明文,对于真实的密文无论其长度是多少都至少会有一个有意义的明文。

文章:美国数学家香农唯一解距离理论探究 《信息网络安全》2009年第08期
网址:http://www.doc88.com/p-6592483716541.html
期刊订阅方式:中国知网官网-数字出版物订阅-期刊(信息科技)-互联网技术

信息论——密码学笔记(七)相关推荐

  1. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  2. 密码学笔记——eval(function(p,a,c,k,e,d) 加密破解

    密码学笔记--eval(function(p,a,c,k,e,d) 的加密破解 例题: 小明某天在看js的时候,突然看到了这么一段代码,发现怎么也理不出代码逻辑,你能帮帮他吗? 格式:SimCTF{} ...

  3. 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码

    吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...

  4. websocket 获取连接id_Swoole学习笔记七:搭建WebSocket长连接 之 使用 USER_ID 作为身份凭证...

    Swoole学习笔记七:搭建WebSocket长连接 之 使用 USER_ID 作为身份凭证 2年前 阅读 3678 评论 0 喜欢 0 ### 0.前言 前面基本的WebSocket操作,我们基本都 ...

  5. Python数据挖掘笔记 七 .PCA降维操作及subplot子图绘制

    Python数据挖掘笔记 七 .PCA降维操作及subplot子图绘制 这篇文章主要介绍四个知识点,也是我那节课讲课的内容.1.PCA降维操作:2.Python中Sklearn的PCA扩展包:3.Ma ...

  6. ROS学习笔记七:使用rqt_console和roslaunch

    ROS学习笔记七:使用rqt_console和roslaunch 本节主要介绍在调试时使用的rqt_console和rqt_logger_level,以及一次性打开多个节点的工具roslaunch. ...

  7. 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9344721 作者:七十一雾央 新浪微博:http:// ...

  8. FPGA学习笔记(七): DSB调制解调的仿真

    笔记七是DSB调制解调的仿真实现. DSB调制解调的实现原理:首先使用DDS产生低频正弦波信号作为调制信号,再用DDS产生高频信号作为载波信号,然后使用乘法器将两者相乘产生DSB信号,DSB信号与载波 ...

  9. 【K210】K210学习笔记七——使用K210拍摄照片并在MaixHub上进行训练

    [K210]K210学习笔记七--使用K210拍摄照片并在MaixHub上进行训练 前言 K210准备工作 K210如何拍摄照片 准备工作 拍摄相关代码定义 用K210拍摄到的照片在MaixHub平台 ...

最新文章

  1. .Net 中如何测试静态方法
  2. 五年引用量最高的10大论文:Adam第一,Transfromer上榜!竟然没有ResNet?
  3. 启动targetcli时遭遇ImportError: cannot import name ALUATargetPortGroup故障
  4. python术语中英对照栈图_Python常用技术栈总结
  5. 美国密西西比州立大学招收机器学习、数据挖掘方向全奖博士生
  6. redis同步到磁盘
  7. android google地图点聚合样式修改
  8. PAT A1029 Median (25 point(s)) __two pointers
  9. Android移动应用基础教程知识整理
  10. html5+css3初学练手小米商城
  11. Tensorflow 笔记 Ⅳ——mnist手写数字识别
  12. 分布式锁-Redis解决方案和Redisson解决方案
  13. 蓝桥杯 算法训练 Cowboys By Assassin dp+字符串操作
  14. 2021年中国房地产行业发展现状分析(附房地产开发投资额、房屋施工面积、商品房销售情况及企业排名统计)[图]
  15. mysql数据库巡检方案_Mysql数据库巡检
  16. UVa679 Dropping Balls (满二叉树+开关灯思想)
  17. 轻松理解MySQL的MVCC机制
  18. scratch——画板
  19. Matlab安装refprop物性包并调用使用
  20. Eye of the Temple:在4平米玩出大空间VR效果的秘诀

热门文章

  1. 用php写shell,php与shell实现多线程的简单例子
  2. Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)
  3. 成功解决Exception “unhandled ImportError“cannot import name ‘imresize‘ from ‘imageio‘
  4. 成功解决极其刁钻bug之TypeError: ‘<=‘ not supported between instances of ‘list‘ and ‘int‘
  5. Ubuntu 16.04 安装JDK
  6. CentOs下搭建GitLab
  7. 数据可视化的开源方案: Superset vs Redash vs Metabase (一)
  8. python3.6使用chardet模块总是报错ValueError: Expected a bytes object, not a unicode object
  9. 一款超炫的图片排列特效
  10. c#基类 常用数据验证的封装,数字,字符,邮箱的验证