流密码与线性反馈移位寄存器LFSR
1. 创建资源
开始实验之前,您需要先创建实验相关资源。
在实验室页面,单击创建资源。
(可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。
说明:资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。
实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。
资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息
2. 实验原理
实验原理
流密码
流密码一般逐字节或者逐比特处理信息。一般来说流密码的密钥长度会与明文的长度相同。流密码的密钥派生自一个较短的密钥,派生算法通常为一个伪随机数生成算法。需要注意的是,流加密目前来说都是对称加密。伪随机数生成算法生成的序列的随机性越强,明文中的统计特征被覆盖的更好。
流密码加解密非常简单,在已知明文的情况下,可以非常容易地获取密钥流。流密码的关键在于设计好的伪随机数生成器。一般来说,伪随机数生成器的基本构造模块为反馈移位寄存器。当然,也有一些特殊设计的流密码,比如 RC4。
多数流密码的基本构造模块为反馈移位寄存器FSR,特别是线性反馈移位寄存器LFSR。
参考资料
3. 实验内容
实验内容
编写程序(用C、C++或Python)实现基本LFSR。程序应满足以下要求:
程序应该提示用户LFSR的大小k(单位为比特)。只允许输入小于或等于32的4的倍数。
程序应该提示用户LFSR的原始内容。用户应该输入一个非负的整数,与适当的内容相对应。(例如,如果缓冲区的大小是8,用户输入117,那么缓冲区应该包含01110101)。
程序应该提示用户输入用于确定LFSR中未来位的规则。用户应该输入一个非负整数,对应缓冲区中为了创建下一个移入的比特而进行异或操作的位。
最后,程序应该询问用户运行LFSR的步数,即n,以及用一个文件来存储输出。(输出文件应该有n+1行)。
程序运行示例:
What is the size of your LFSR? > 8 What are the contents of the original LFSR? > 211 What rule would you like to use? > 72 How many steps do you want to run the LFSR? > 5 What file would you like the output to be stored? > lfsr.out
运行以上示例创建的文件lfsr.out内容如下:
1 11010011 0 11101001 1 01110100 1 10111010 0 11011101 0 11101110
实验链接:https://developer.aliyun.com/adc/scenario/6395ab7e56ae44ada118a220a985210d