密码学基础知识(五)序列密码
序列密码,也就是流密码,是对称密码。跟前面分组密码的区别就在于其加密变换的对象比分组的块小,一般是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位。
就这些吧,算法谷歌度娘多得是,有功夫我再写个上来。懒得写啊。
密码学基础知识(五)序列密码相关推荐
- 密码学系列(三):区块链+密码学基础知识
密码学系列(三):区块链+密码学基础知识 一.区块链的概念 区块链概述 区块链的特点 区块链变化 市场现状 二.区块链政策与标准 区块链的特点与发展 三.区块链的定义 区块链的价值 四.区块链开发语言 ...
- git 分支复制_Git基础知识(五)
Git基础知识(五) 分支 都说Git的分支是它的必杀技特性,由于没有接触过太多的版本管理工具,就使用过的SVN来说,两者真的差别巨大.SVN创建一个分支,需要将内容复制一遍!这个时间真的是非常的漫长 ...
- 重力传感器 测重力代码_“重力瀑布”如何帮助您教授孩子的密码学基础知识...
重力传感器 测重力代码 by Kamil Tustanowski 通过卡米尔·图斯坦诺夫斯基 "重力瀑布"如何帮助您教授孩子的密码学基础知识 (How "Gravity ...
- JavaSE基础知识(五)--面向对象代码实现初步(实现一个简单的类类型代码)
Java SE 是什么,包括哪些内容(五)? 本文内容参考自Java8标准 一.面向对象(代码实现): 首先,在这里我需要说明一个根本性的问题:实际上,面向对象编程包括了两部分,一个是你的编程思想,一 ...
- 密码学基础知识-数论(从入门到放弃)
数论知识 本文主要介绍整除.质数和合数.同余定理.模逆元素.欧几里得除法.欧拉函数.欧拉定理.费马小定理.中国剩余定理(孙子定理). 文章目录 数论知识 简介 一.整除 二.质数和合数 三.同余定理 ...
- C# 基础知识 (五).变量类型和字符串处理
这篇文章是阅读<C#入门经典(Beginning C#)>书籍里面的内容,作者Karli Watson.主要包括自己缺乏的一些C#基础知识和在线笔记使用,文章主要包括C#简 ...
- Java基础知识(五) 字符串与数组
Java基础知识 字符串与数组 1. 字符串的创建与存储的机制是什么 2. "==".equals和hashCode有什么区别 3. String.StringBuffer.Str ...
- 密码学基础知识(十)查缺补漏(缺)
今天密码学结束了,哎,都是泪啊,答题时发现脑袋里都是思想,公式没记多少,就主要记了DES AES RC4 RSA的具体算法了,还把LSFR的特征多项式怎么装换成输出f忘了.所以现在补一下那些漏了的知识 ...
- 密码学基础知识(三)古典密码
说完了前面那些,想起个事,本系列依据内容主要来自<现代密码学>马春光编著.我就是学这本书的. 好了,古典密码就是古时候的密码,哈哈,逗你玩的,shannon的保密系统的通信理论发表前的都是 ...
最新文章
- CTF-RSA共模攻击 和 非共模攻击解密脚本
- POJ 3069 Saruman's Army(贪心)
- .31-浅析webpack源码之doResolve事件流(3)
- 创建为ClickOnce清单签名的.pfx格式数字证书
- 处理中文乱码_浅入深出:一次提问引发的深思,从此再也不怕“乱码”问题
- 链表——【线性表(二)】
- Know more about Oracle Latches
- 实现自己的脚本语言ngscript之三:语法设计
- 关于Java中“+”加运算符和“”向前移位运算符混合使用时出现的错误
- 如何做一个MySQL优良数据库_MySQL数据库如何做好优化
- 《工科泛函分析基础》预习笔记 证明:可测集上的连续函数都是可测函数
- 文献整理和论文阅读方法
- 大疆DJI 精灵 4 RTK 镜头很暗 ISO
- Verilog 中的Procedural continuous assignments
- situ课题组工作站神经网络训练速度测评
- 【每日早报】2019/12/31
- L298N模块的连接与使用(stm32驱动与51驱动)
- 植物大战僵尸内存地址(转)
- 消费提示:2012春运火车票 网上订票攻略
- 计算带余除法------C语言
热门文章
- echarts仪表盘option_echarts仪表盘完整代码
- Python之fastai:fastai库的简介、安装、使用方法之详细攻略
- Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介、使用方法、经典案例之详细攻略
- Python之sklearn:LabelEncoder函数简介(编码与编码还原)、使用方法、具体案例之详细攻略
- Py之matplotlibseaborn :高级图可视化之​​​​​​​Q-Q分位数图probplot、​​​​​​​boxplot箱线图、stripplot分类散点图案例应用及代码实现
- 成功解决 ValueError: feature_names mismatch training data did not have the following fields
- 从去除噪点的说起,有OpenCV要什么PS?
- Python词云 wordcloud 十五分钟入门与进阶
- ubuntu QT Creater 安装
- Python-装饰器-案例-获取文件列表