序列密码,也就是流密码,是对称密码。跟前面分组密码的区别就在于其加密变换的对象比分组的块小,一般是Bit。前面说过的vernam密码就是一种序列密码。

序列密码的特点有哪些呢?

明文:被加密的是叫明文字。是明文序列的一项。

密钥:由主密钥(初始密钥)产生一个密钥序列,长度和明文字bit长度相同。相应的别叫做密钥字。

密文:经加密函数,明文字与密钥产生了密文字。

加密:与现态(当前状态)有关。照分组密码的OFB和CFB理解。

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

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

同步序列密码特点:消息的发送者和接受者必须同步,即相同的密钥。

自同步序列密码特点:明文统计扩散。

好了,说完这些啰嗦的东西,咱们就说说这关键的密钥序列产生器:

密钥流产生器。一般看做一个有限状态自动机,这个机又是啥呢?可以这样理解,它有三部分,分别是有限状态集,有限输入字符集和有限输出字符集,状态转移函数。就是在状态Si,输入为Ai时,状态装换为Sh并输出Ah。放在咱们序列密码中,就是把密钥流当做输入,当状态一变,就输出。

好了,那问题来了,这状态序列怎么确定呢?还有你说输出就输出,咋输出的呢?

我们将控制状态序列的部分叫驱动器,一般利用线性反馈移位寄存器。一般要求最长周期或m序列产生器实现。这样就能为非线性组合部分提供统计性能好的序列了。

我们将进行非线性组合产生输出序列的部分叫非线性组合部分。要求F输入是二元序列输出也得是,这是最基本要求。对于可定的序列,F应使输出序列周期足够大。

那就谈谈线性反馈移位寄存器(LFSR)。

一个n阶反馈寄存器,由n个二元寄存器和一个反馈函数组成。这n个寄存器的内容所形成的向量即为此时状态。所以其有2n个状态。T时刻LFSR状态为st=(at,at+1,…at+n-1),t+1时刻:st+1=(at+1,at+2,…,at+n),两者一比,发现两点不同:

1.    at输出了。就这样,状态改变就输出一个,成了输出序列。S0是及寄存器的初始状态。

2.    多了个at+n,其求法:at+n=f(at,at+1,…at+n-1)。f就是反馈函数。当f的运算为模2加法时,称为线性移位反馈寄存器(LFSR)。

LFSR特点:

初始状态非0,新状态就非0;初始为0 ,状态恒为0。

选择合适的f反馈函数可以使周期达到2n-1,即m序列。(2n长明密文就可攻破,毕竟伪随机)

驱动部分就说这么多,下面说说几种非线性序列生成器,一般都是几个LFSR组合起来:

gaffe:3个LFSR,LFSR1,3是输入,LFSR2是输出。

J-K触发器:2个LFSR, Pless产生器是其加强版。

Pless产生器:8个LFSR,4个J-K,一个循环计数器。

钟控序列产生器:2个LFSR,一个控制另一个的时钟脉冲。

门限产生器:可变数量n个LFSR。要求:大奇数,所有LFSR长度互素,反馈多项式都是本原的,这样就最大周期了。

总结一下:序列密码进行bit加密,有明文字,密钥字,密文字,关键在于密钥产生器,其分两部分,驱动(状态转移函数,输出函数,状态集和输出集)和非线性组合。驱动一般是LFSR,LFSR是反馈函数f运算为模2加法。最后介绍了集中产生器,都是LFSR组合的,想法设法达成最大周期。

典型的序列密码算法:RC4,A5和SNOW2.0,最后一个不细说。

首先RC4:被广泛应用

基于非线性数据表变换的序列密码。有一个足够大的数据表提供进行非线性变换,产生非线性输出序列,它也叫S盒,S盒大小为2n,通常n=8。RC4每个输出都是S盒中的随机元素。

好了,那么问题又来了,S盒内是咋排列的?又是怎么随机选出来的?

主角登场:KSA密钥调度算法和PRGA伪随机生成算法,分别解决上述两个问题。

KSA:

S初始化:把0~255线性填入。

T初始化:临时向量T,将主密钥K值付给T,假如K长度小于L,那就将K重复赋值给L,直到L都被赋值了。

用T对S置换:按照T[i]对S进行位置置换,就把元素换个位置。

结束了KSA就是PRFA了

PRGA:从S中随机取出,并修改S方便下次选取

就是一个算法

所以我们发现其实S盒里就是0-255,只不过是位置一直在变。

RC4至少128位密钥才安全。

A5算法:GSM

介绍下A5/1,典型的基于LFSR的序列密码算法,3个LFSR,阶数分别为19,22,23,均为本原多项式。64位密钥。

已经明文就可破解A5/1,原因:算法设计太简单,没有足够的混淆和扩散。

SNOW2.0:

基于LFSR和有限状态机的序列密码算法。1个LFSR+1个有限状态转换机(2个32位寄存器)。主密钥K:128位或256位,初始向量:128位。

就这些吧,算法谷歌度娘多得是,有功夫我再写个上来。懒得写啊。

密码学基础知识(五)序列密码相关推荐

  1. 密码学系列(三):区块链+密码学基础知识

    密码学系列(三):区块链+密码学基础知识 一.区块链的概念 区块链概述 区块链的特点 区块链变化 市场现状 二.区块链政策与标准 区块链的特点与发展 三.区块链的定义 区块链的价值 四.区块链开发语言 ...

  2. git 分支复制_Git基础知识(五)

    Git基础知识(五) 分支 都说Git的分支是它的必杀技特性,由于没有接触过太多的版本管理工具,就使用过的SVN来说,两者真的差别巨大.SVN创建一个分支,需要将内容复制一遍!这个时间真的是非常的漫长 ...

  3. 重力传感器 测重力代码_“重力瀑布”如何帮助您教授孩子的密码学基础知识...

    重力传感器 测重力代码 by Kamil Tustanowski 通过卡米尔·图斯坦诺夫斯基 "重力瀑布"如何帮助您教授孩子的密码学基础知识 (How "Gravity ...

  4. JavaSE基础知识(五)--面向对象代码实现初步(实现一个简单的类类型代码)

    Java SE 是什么,包括哪些内容(五)? 本文内容参考自Java8标准 一.面向对象(代码实现): 首先,在这里我需要说明一个根本性的问题:实际上,面向对象编程包括了两部分,一个是你的编程思想,一 ...

  5. 密码学基础知识-数论(从入门到放弃)

    数论知识 本文主要介绍整除.质数和合数.同余定理.模逆元素.欧几里得除法.欧拉函数.欧拉定理.费马小定理.中国剩余定理(孙子定理). 文章目录 数论知识 简介 一.整除 二.质数和合数 三.同余定理 ...

  6. C# 基础知识 (五).变量类型和字符串处理

            这篇文章是阅读<C#入门经典(Beginning C#)>书籍里面的内容,作者Karli Watson.主要包括自己缺乏的一些C#基础知识和在线笔记使用,文章主要包括C#简 ...

  7. Java基础知识(五) 字符串与数组

    Java基础知识 字符串与数组 1. 字符串的创建与存储的机制是什么 2. "==".equals和hashCode有什么区别 3. String.StringBuffer.Str ...

  8. 密码学基础知识(十)查缺补漏(缺)

    今天密码学结束了,哎,都是泪啊,答题时发现脑袋里都是思想,公式没记多少,就主要记了DES AES RC4 RSA的具体算法了,还把LSFR的特征多项式怎么装换成输出f忘了.所以现在补一下那些漏了的知识 ...

  9. 密码学基础知识(三)古典密码

    说完了前面那些,想起个事,本系列依据内容主要来自<现代密码学>马春光编著.我就是学这本书的. 好了,古典密码就是古时候的密码,哈哈,逗你玩的,shannon的保密系统的通信理论发表前的都是 ...

最新文章

  1. CTF-RSA共模攻击 和 非共模攻击解密脚本
  2. POJ 3069 Saruman's Army(贪心)
  3. .31-浅析webpack源码之doResolve事件流(3)
  4. 创建为ClickOnce清单签名的.pfx格式数字证书
  5. 处理中文乱码_浅入深出:一次提问引发的深思,从此再也不怕“乱码”问题
  6. 链表——【线性表(二)】
  7. Know more about Oracle Latches
  8. 实现自己的脚本语言ngscript之三:语法设计
  9. 关于Java中“+”加运算符和“”向前移位运算符混合使用时出现的错误
  10. 如何做一个MySQL优良数据库_MySQL数据库如何做好优化
  11. 《工科泛函分析基础》预习笔记 证明:可测集上的连续函数都是可测函数
  12. 文献整理和论文阅读方法
  13. 大疆DJI 精灵 4 RTK 镜头很暗 ISO
  14. Verilog 中的Procedural continuous assignments
  15. situ课题组工作站神经网络训练速度测评
  16. 【每日早报】2019/12/31
  17. L298N模块的连接与使用(stm32驱动与51驱动)
  18. 植物大战僵尸内存地址(转)
  19. 消费提示:2012春运火车票 网上订票攻略
  20. 计算带余除法------C语言

热门文章

  1. echarts仪表盘option_echarts仪表盘完整代码
  2. Python之fastai:fastai库的简介、安装、使用方法之详细攻略
  3. Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介、使用方法、经典案例之详细攻略
  4. Python之sklearn:LabelEncoder函数简介(编码与编码还原)、使用方法、具体案例之详细攻略
  5. Py之matplotlibseaborn :高级图可视化之​​​​​​​Q-Q分位数图probplot、​​​​​​​boxplot箱线图、stripplot分类散点图案例应用及代码实现
  6. 成功解决 ValueError: feature_names mismatch training data did not have the following fields
  7. 从去除噪点的说起,有OpenCV要什么PS?
  8. Python词云 wordcloud 十五分钟入门与进阶
  9. ubuntu QT Creater 安装
  10. Python-装饰器-案例-获取文件列表