ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:398.23KB ,
资源ID:14851147      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-14851147.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(现代密码学——流密码系统(实验报告).docx)为本站会员(b****)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

现代密码学——流密码系统(实验报告).docx

1、安全SnoWolF/百度B英俊制作课程名称 现代密码学实验 实验项目名称 流密码系统 练习一 流密码系统【实验目的】理解流密码加密解密过程,通过程序的实现掌握Geffe、JK触发器和LFSR的工作过程。【实验人数】1人【系统环境】Windows【网络环境】交换网络结构【实验工具】Visual Studio 2019【实验类型】综合型【实验原理】1. 流密码体制模型2. 分类根据加密器中记忆元件的存储状态是否依赖于输入的明文字符可分为两类:1.同步流密码 #独立于明文字符2.自同步流密码 #依赖于输入的明文字符目前最常用的流密码体制是二元加法流密码,是一种同步流密码,其加密变换可表示为异或函数。

2、3. 线性反馈移位寄存器移位寄存器是流密码长产生密钥流的一个主要组成部分。线性反馈移位寄存器( LFSR)是指,给定前一状态的输出,将该输出的线性函数再用作输入的移位寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,再对寄存器中的各比特进行整体移位。线性反馈移位寄存器输出序列的性质完全由其反馈函数决定。1、n级线性反馈移位寄存器最多有2n个不同的状态2、n级n级线性反馈移位寄存器的状态周期小于等于2n-13、周期达到最大值的序列称为m序列仅能被非0常数或自身的常数倍除尽,但不能被其他多项式除尽的多项式称为即约多项式或不可约多项式。n级LFSR产生的序列有最大周期

3、2n-1的必要条件是其特征多项式为不可约的。若n次不可约多项式p(x)的阶为2n-1,则称p(x)是n次本原多项式。ai为m序列的充要条件为p(x)是本原多项式。4. 伪随机序列Golomb对伪随机周期序列提出了应满足的如下3个随机公设:(1)在序列的一个周期内,0与1的个数相差至多为1。(2)在序列的一个周期内,长为1的游程占游程总数的1/2,长为2的游程占游程总数的1/4,长多为 i 的游程占游程总数的 1/2i ,且在等长的游程中0的游程个数和1的游程个数相等。(3)异自相关函数是一个常数。n长m序列满足Golomb的3个随机性公设,具有如下性质:(1)在一个周期内,0和1出现的次数分别

4、为2n-1-1和2n-1。(2)在一个周期内,总游程数为2n-1;对 1 i n-2,长为 i 的游程有2n-i-1个,且0和1游程各半;长为n-1的0游程一个,长为n的1游程一个。【实验内容】自行查找相关资料,结合上次实验的主函数框架,实现流密码系统。具体内容:线性反馈寄存器(LFSR) + 一个非线性组合子系统(Geffe序列生成器或J-K触发器)1) 可参考网上资料。2) 结合参考教材上 pp17的图 2-10,pp27的图2-12,图 2-14。3) 不要求输出密钥流是m序列,但需给出周期大小。4) 实验报告需明确给出LFSR的线性反馈函数的递推形式,初始状态。流秘钥生成器的输出。加密

5、解密的输入输出过程。【实验过程与结果】1.实验源码#include #include #include #include /定义二进制bitset所需的头文件#include /文件读写操作所需的头文件using namespace std;#define CHAR_SIZE26#define DECRYPT_FILECaesar密文.txt#define ENCRYPT_FILECaesar明文.txt#define N 8/常量N指定二进制位大小,也是LFSR最大级数限定typedef structbitsetlfsrInit;/LFSR初始态int scale = 8;/级数,默认为8s

6、tring key;/周期密钥流int lfsrCycle = 0;/周期LFSR;typedef structLFSR register1;/LFSR1LFSR register2;/LFSR2LFSR register3;/LFSR3string keyStream;/扩展后真正被使用到的密钥流GEFFE;/返回命令提示信息void Usage(const char* appname)printf(ntusage: stream -e 明文文件 密钥kn);printf(tusage: stream -d 密文文件 密钥kn);/校验应用程序入口参数,若参数合法返回true,否则返回fal

7、sebool CheckParse(int argc, char* argv)if (argc != 5 |(argv21 != e & argv21 != d)Usage(argv1);return false;return true;/加/解密结果输出到当前目录磁盘文件中,strOut指向输出字符缓冲区,strFile为输出文件bool FileOut(const string strOut, string strFile)if (strOut.empty()/判断字符缓冲区是否为空return false;ofstream fileOut(strFile);/打开文件fileOut st

8、rOut;/写入文件fileOut.close();/关闭文件return true;/加/解密内容输入到字符缓冲区中, strIn指向输出字符缓冲区, strFile为输入文件bool FileIn(char* strIn, const char* strFile)ifstream fileIn(strFile);/打开文件if (!fileIn.is_open()/判断文件是否成功打开std:cout Error opening file;return false;while (!fileIn.eof()/直到读取到文件末尾fileIn.getline(strIn, 100);/读取文件,

9、每次读100bytereturn true;/线性反馈寄存器LFSRvoid Lfsr(LFSR& lfsr, int k)bitsetbint(lfsr.lfsrInit);/将初始态存为二进制数bitsetstr(bint);string s1;/保存输出结果cout = 0; i-)/遍历bint中的数字cout binti;cout =(1);/向右移1位bintlfsr.scale - 1 = j;/第1个数据和第n个数据异或然后赋值给第n个for (int i = lfsr.scale - 1; i = 0; i-)cout binti;cout endl;bitsetbinTem

10、p(bintk % lfsr.scale);/根据密钥k,每次取移位后二进制数据的第k位s1 = binTemp.to_string();/把binTemp转换成string放入s1lfsr.key.push_back(s10);/转成char,放入LFSR密钥流+lfsr.lfsrCycle;/周期递增 while (str.to_string() != bint.to_string();/直到移位后数据与初始态相同cout 输出周期密钥流序列为: endl lfsr.key endl;cout 周期为: lfsr.lfsrCycle endl endl;/Geffe序列生成器,连同加密解密

11、的操作,k为密钥bool Geffe(GEFFE& geffe, const string strIn, string:size_type strLen, string& strOut, string:size_type k)/k对序列生成器的影响:从拓展后密钥流的第k位开始,对明/密文进行加/解密操作if (strIn.empty()/判断输入字符缓冲区是否为空return false;int iCount = 0;for (string:size_type i = k; i strLen + k & iCount strLen; +i, +iCount)/bitsetbitvec1(gef

12、fe.register1.key, i % geffe.register1.key.size(), 1);/从LFSR1中周期序列取1位bitsetbitvec2(geffe.register2.key, i % geffe.register2.key.size(), 1);/从LFSR2中周期序列取1位bitsetbitvec3(geffe.register3.key, i % geffe.register3.key.size(), 1);/从LFSR3中周期序列取1位bitsetbitvecKey(bitvec1 & bitvec2) (bitvec3 & (bitvec2);/运算得1位

13、密钥bitsetbitvecIn(strIn, iCount, 1);/从明/密文中取1位bitsetbitvecOut(bitvecKey bitvecIn);/加/解密操作strOut += bitvecOut.to_string();/将1位结果写入输出缓冲区geffe.keyStream += bitvecKey.to_string();/保存使用的密钥return true;/初始化geffe和LFSRvoid Init(GEFFE& geffe, char* argv)geffe.register1.scale = 7;/设置LFSR级数geffe.register2.scale

14、= 5;geffe.register3.scale = 3;geffe.register1.lfsrInit = 64;/设置初始态geffe.register2.lfsrInit = 16;geffe.register3.lfsrInit = 4;cout LFSR1: endl;Lfsr(geffe.register1, atoi(argv4);/传入LFSR1和密钥kcout LFSR2: endl;Lfsr(geffe.register2, atoi(argv4);cout LFSR3: endl;Lfsr(geffe.register3, atoi(argv4);int main(i

15、nt argc, char* argv)if (!CheckParse(argc, argv)/检查命令行参数return 0;char strin1024;/输入字符缓冲区if (!FileIn(strin, argv3)/读取文件到字符缓冲区cout 文件读取失败 endl;return 0;string strIn = strin, strOut, fileName = C:UsersAdministratorDesktop输出.txt;GEFFE geffe;Init(geffe, argv);/初始化Geffe和LFSRbool operate = false;operate = G

16、effe(geffe, strIn, strIn.size(), strOut, atoi(argv4);/进行加/解密操作if (argv21 = e & operate = true)cout 加密成功! endl;else if (argv21 = d & operate = true)cout 解密成功! endl;elsecout 操作失败! endl;return 0;if (!FileOut(strOut, fileName)/将输出字符缓冲区写入输出文件cout 文件写入失败 endl;return 0;cout 密钥k为:tt argv4 endl;cout 输入为:tt s

17、trIn endl;cout 实际使用密钥流:t geffe.keyStream endl;cout 输出为:tt strOut endl;return 0;2.设计思路(1)整体框架:流密码系统需要包括1.读取输入文件,2.写入输出文件,3.LFSR,4.Geffe序列生成器,5.利用密钥流进行加/解密操作,共5个部分。(2)输入输出文件,利用C+的头文件可以简单实现,用string类型将需要输入和输出的字符保存起来。(3)LFSR部分,创建了LFSR结构体,包含初始态、级数、周期密钥流、周期的属性。这部分还需要针对每一个LFSR根据初始态生成其对应的周期密钥流并存储起来。生成周期密钥流过程

18、中还需要受到密钥k的控制。(4)Geffe序列生成器,创建了GEFFE结构体,包含三个LFSR和实际使用的密钥流的属性。这部分包含加解密操作,根据公式和实际需要一位一位地输出密钥流序列,同时做加解密操作,最后将实际使用密钥流作保存。生成序列密钥流的过程中需要受到密钥k的控制。密钥k一定,得到的密钥流也一定。3.实验结果+调试结果图+结果分析(1)默认设置LFSR1级数为7,初始态a7a6a5a4a3a2a1=1000000,递推关系为f(a1,a2,a3,a4,a5,a6,a7)=a1a7,周期为127;LFSR2级数为5,初始态a5a4a3a2a1=10000,递推关系为f(a1,a2,a3

19、,a4,a5)=a1a5,周期为21;LFSR3级数为3,初始态a3a2a1=100,递推关系为f(a1,a2,a3)=a1a3,周期为7。由于Geffe序列生成器对应的LFSR的级数互素,因此根据课本的结论,Geffe序列生成器的序列周期为(27-1)*(25-1)*(23-1)=127*31*7=27559。(2) 加密过程,密钥k=5明文为:101011001010011密钥流:110101001010101密文为:011110000000110结果正确。(3) 解密过程,密钥k=5密文为:011110000000110密钥流:110101001010101明文为:10101100101

20、0011结果正确。(4) 以k=5,级数为5的LFSR2为例,分析LFSR密钥流生成过程如下图,10000为初始状态,根据递推关系为f(a1,a2,a3,a4,a5)=a1a5,则输出为10=1,同时向右移位生成新序列,将输出放在高位a5,新序列为11000。以此类推。直到产生的新序列与初始状态10000相同,则计算总共进行了多少次移位操作,次数即为该密钥流的周期。根据密钥k=5,对新序列的取值做限定。例如第一个新序列11000,第0位(低位)为0,第4位(高位)为1,而k=54,因此做求余操作,循环至第0位,因此取11000的第0位“0”。以此类推,取每个新序列的第0位,生成周期密钥流。如图

21、所示。(5) 以k=5为例,分析Geffe密钥流序列生成过程LFSR1密钥流序列为:1111111010101001100111011101001011000110111101101011011001001000111000010111110010101110011010001001111000101000011000001000000LFSR2密钥流序列为:000111110101001100010LFSR3密钥流序列为:1101001由于k=5,因此从k+1(6)位开始在LFSR中取密钥流序列。根据输入文的长度为15,因此取密钥流15位。LFSR1取:110101010011001LFSR

22、2取:111010100110001LFSR3取:011101001110100按照公式:a1&a2a3&(a2)a1&a2 =110000000010001a2 =000101011001110a3&a2 =000101001000100得密钥流=110101001010101结果正确。(6) 加密过程,k=4明文为:101011001010011密钥流:110111010010101密文为:011100011000110结果正确。(7) 解密过程,k=4密文为:011100011000110密钥流:110111010010101明文为:101011001010011结果正确。(8) 加密过

23、程,k=12明文为:101011001010011密钥流:100110010001110密文为:001101011011101结果正确。(9) 解密过程,k=12密文为:001101011011101密钥流:100110010001110明文为:101011001010011结果正确。【实验评估】1. 实验分析实验结果证明了,(1) 根据密钥流的加密解密过程结果无误;(2) 当密钥k一定时,能够保证密钥流的唯一性;(3) 当密钥k取不同值时,产生的密钥流也不同;(4) Geffe序列生成器加长了密钥流序列的周期,达到了伪随机性的效果;(5) Geffe序列生成器的序列输出,0和1的分布大致平衡

24、。2. 实验心得通过阅读课本和查阅网上资料充分了解了流密码加密解密过程,再而程序编写的实现使我掌握了密钥流、密钥序列的生成原理,对Geffe序列生成器、JK触发器和LFSR的工作过程有了深刻的理解。实验过程中,因纠结如何得出求Geffe序列生成器周期的算法而耗费了大量时间,后感觉太过于复杂而放弃。课本仅给出当3个LFSR级数互素时的周期求解方式,也说明当级数不互素时,Geffe序列生成器的周期并不容易得出来且没有规律。实验过程中,尝试将LFSR的级数设为8,与级数为7的LFSR进行周期对比,结果发现级数为7的LFSR的周期大于级数为8的LFSR。因此LFSR的周期不仅受级数的影响,也与初始态相关。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2