一、密码学中的随机数

许多密码系统的安全性都依赖于随机数的生成,例如DES加密算法中的密钥,RSA加密和数字签名中的素数。

序列密码的保密性完全取决于密钥的随机性。

如果密钥是真正的随机数,则这种体制在理论上就是不可破译的。但这种方式所需的密钥量大得惊人,在实际上是不可行的。目前一般采用伪随机序列来代替随机序列作为密钥序列,也就是序列存在着一定的循环周期。这样序列周期的长短就成为保密性的关键。如果周期足够长,就会有比较好的保密性。现在周期小于10的10次方的序列很少被使用,周期长达10的50次方的序列也并不少见。

伪随机数产生器(PRNG):

何谓伪随机数产生器(PRNG)?假定需要生成介于1和10之间的随机数,每一个数出现的几率都是一样的。理想情况下,应生成0到1之间的一个值,不考虑以前值,这个范围中的每一个值出现的几率都是一样的,然后再将该值乘以10。

由任何伪随机数生成器返回的数目会受到0到N之间整数数目的限制。因为常见情况下,伪随机数生成器生成0到N之间的一个整数,返回的整数再除以N。可以得出的数字总是处于0和1之间。对生成器随后的调用采用第一次运行产生的整数,并将它传给一个函数,以生成0到N之间的一个新整数,然后再将新整数除以N返回。

二、序列密码的概念及模型

  1. 密钥发生器(也称滚动密钥发生器)输出一系列比特流(记为k1,k2,k3...ki),密钥流(也称滚动密钥)跟明文比特流(记为m1,m2...mi)进行异或运算产生密文比特流。
  2. 在解密端,密文流与完全相同的密钥流异或运算恢复出明文流。

事实上,序列密码算法的安全性依赖于简单的异或运算和一次一密乱码本。密钥流发生器生成的看似随机的密钥流实际上是确定的,在解密的时候能很好的将其再现。密钥流发生器输出的密钥越接近随机,对密码分析者来说就越困难。

一次一密乱码本:一种理想的加密方案,可以简单理解为每个密钥仅对一个消息使用一次。

如果密钥流发生器每次都生成同样的密钥流的话,就很容易被破译。假设Alice得到一份密文和相应的明文,她就可以将两者异或恢复出密钥流。或者,如果她有两个用同一个密钥流加密的密文,她就可以让两者异或得到两个明文互相异或而成的消息,接着就可以用明文和密文异或得出密钥流。在这种情况下,她就可以解密拦截到的任何密文消息,并阅读以前截获到的消息。

因此,流密码强度完全依赖于密钥序列的随机性和不可预测性。

所有序列密码都有密钥,且密钥发生流的输出是密钥的函数。

三、流密码的分类

序列密码体制关键就在于这个产生密钥序列的方法,也就是密钥序列产生器应具有良好的随机性,让密钥序列不可预测。不过一般都是伪随机。分组密码的关键是加解密算法让明文密文关联尽可能复杂。

序列密码分为同步序列密码和自(异)同步序列密码。啥区别呢,就是前者密钥序列独立于明文序列和密文序列。后者并不独立。

同步序列密码:

密钥流的产生于明文消息流相互独立,即密钥序列产生算法与明文无关,所产生的密钥序列也与明文无关。在通信过程中,通信的双方必须保持精确的同步,收方才能正确解密,如果失步收方将不能正确解密。例如,如果通信中丢失或增加了一个密文字符,则收方的解密将一直错误。

同步序列密码就是密钥流的每一位是前面固定数量密文位的函数。如上图,其中,内部状态是前面n比特密文的函数,该算法的密码复杂性在于输出函数,它收到内部状态后生成密钥序列位。

实际上,序列密码不可能做到“一次一密”,但若密钥流生成器生成的密钥周期足够长,且随机性好,其安全强度可以得到保证!因此,序列密码的设计核心在于密钥流生成器的设计,序列密码的安全强度取决于密钥流生成器生成的密钥周期、复杂度、随机(伪随机)特性等。

自同步序列密码:

密钥流的产生于之前已经产生的若干密文有关,即密钥序列产生算法与明文(密文)相关,则所产生的密钥序列与明文(密文)相关。

https://wenku.baidu.com/view/56ffd3c20c22590103029d04.html

https://max.book118.com/html/2016/1207/69368879.shtm

分组密码与序列密码的区别

分组密码:是对一个大的明文数据块(分组)进行固定变换的操作。
序列密码:是对单个明文位的随时间变换的操作。

尽管分组和序列密码非常不同,但分组密码也可作为序列密码使用,反之亦然。两者的区别主要体现在实现上:
1. 每次只能对一个数据位进行加密和解密的序列密码并不适用于软件实现。分组密码算法就可以很容易地用软件实现,因为它可以避免耗时的位操作,并且它易于处理计算机界定大小的数据分组。
2. 序列密码更适合用硬件实现,因为使用硅材料可以非常有效地实现它。

序列密码体制——密码学笔记(三)相关推荐

  1. 分组密码体制——密码学笔记(二)

    一.概述 对称密码:加密密钥和解密密钥两者可以互推出来.大多数情况下,加密和解密的密钥是相同的. 对称密码的分类 1.分组密码:对明文进行分块,再对每一块进行加密:利用分组密码,相同的明文用相同的密钥 ...

  2. python慕课笔记_MOOC python笔记(三) 序列容器:字符串、列表、元组

    Python Python开发 Python语言 MOOC python笔记(三) 序列容器:字符串.列表.元组 容器概念 容器是Python中的重要概念,分为有序与无序. 有序容器也称为序列类型容器 ...

  3. mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...

    MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...

  4. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

  5. 《编程之美》读书笔记(三):烙饼问题与搜索树

    <编程之美>读书笔记三:烙饼问题与搜索树 薛笛 EMail:jxuedi#gmail.com 前面已经写了一些关于烙饼问题的简单分析,但因为那天太累有些意犹未尽,今天再充实一些内容那这个问 ...

  6. GEE (Google Earth Engine)最基础代码学习笔记三

    GEE (Google Earth Engine)代码学习笔记三 本次学习核心为:将JavaScript objects and primitives放入Earth Engine 容器传到服务器,并处 ...

  7. Keras笔记(三):目标函数objectives /loss

    注:本文转自 目标函数objectives - Keras中文文档 Keras文档系列 Keras笔记(一):常用函数 Keras笔记(二):优化器optimizers Keras笔记(三):目标函数 ...

  8. MySQL学习笔记(三)查询

    写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明. 文章仅供参考,如需深入了解,请查阅MySQL参考手册.附上下载链接: 链接:https://pa ...

  9. 『RNN 监督序列标注』笔记-第一/二章 监督序列标注

    『RNN 监督序列标注』笔记-第一/二章 监督序列标注 监督序列标注(Supervised Sequence Labeling)与传统的监督模式分类(supervised pattern classi ...

最新文章

  1. VS2005 / windows sdk7.1配置
  2. 电子邮件成企业主动营销的首选工具
  3. spring定时任务
  4. Stas and the Queue at the Buffet
  5. case when then else 详解
  6. 洛谷P3414 SAC#1 - 组合数
  7. 十六、Struts2文件上传与下载
  8. 算法运行时间中的对数
  9. Linux:查看内存和CPU信息
  10. TypeScript 的存在削弱了 JavaScript 生态系统?
  11. IBM推出跨境支付区块链网络,企业级区块链技术进一步升级
  12. 少样本学习系列(四)【元学习与少样本深层理解】
  13. 新软件--AutoReply(自动回复),还能自动接听,做答录机
  14. JAVA中this的四种用法的详解
  15. ubuntu 安装dep文件
  16. 对数函数定义域和值域为r_对数函数值域为R的意义
  17. mac压缩文件有多余文件怎么办 mac压缩文件软件哪个好
  18. 鲜为人知的大小端问题
  19. 关于如何跟老板谈加薪
  20. 转贴:girdview分组,统计,排序的解决方案

热门文章

  1. 无人值守数据中心这一次真的能“大势所趋”吗?
  2. web版本 开源压测工具_标星 1.3K 的 Web 框架压测库,助你更好的选择框架
  3. 成功解决AttributeError: module ‘tensorflow‘ has no attribute ‘contrib‘
  4. 成功解决pypmml.base.PmmlError: (‘MalformedInputException‘, ‘Input length = 1‘)
  5. 成功解决TypeError: sequence item 0: expected str instance, bytes found
  6. Anaconda:Anaconda安装图文教程及其tensorflow安装、运行、测试之最强详细攻略
  7. log4j.properties
  8. 不用中间变量交换a和b的值?
  9. PHP学习之PHP的语法糖
  10. BootstrapTable-加载数据