流密码器实验

本实验为信息安全专业选做实验。

实验目的

(1) 了解硬件加密解密的应用。

(2) 用HDL语言设计流密码器。

实验原理

流密码是将明文划分成字符(如单个字母)或其编码的基本单元(如0, 1数字),逐个与密钥流作用进行加密,接收端使用同样的密钥流解密,属于对称加密技术。流密码强度完全依赖于密钥序列的随机性和不可预测性,其核心问题是密钥流生成器的设计。线性反馈移位寄存器(LFSR,Linear Feedback Shift Register)因其实现简单、速度快、有较为成熟的理论等优点而成为构造密钥流生成器的最重要的部件之一。LFSR可以生成伪随机序列,n级LFSR其输出伪随机序列的周期小于等于2n-1,通过选择合适的反馈函数可使序列的周期达到最大值2n-1,该序列称为m序列。反馈函数可用一个一元高次多项式表示,称这个多项式为LFSR的特征多项式,其中本原多项式产生的非零序列均是m序列。一般可通过查表的方式得到常用的本原多项式的反馈系数。

参考设计

虚拟面板如图 1

image
图 1. 流密码器参考设计的虚拟面板

例 1给出了参考设计的代码。该代码基本与图 1一致,但是线性反馈移位寄存器与图中不同。参考设计只是简单的循环右移移位寄存器,并未构成图中的线性反馈网络。

例 1. 流密码器参考设计的代码
/****** Replace input ports with internal signals *******/
wire reset =  PB[0];
wire clk   =  PB[1];
wire [11:0] in_reg_d= S[11:0];
wire [7:0]  lfsr_d  = S[26:19];
wire in_reg_load    = S[16];
wire lfsr_load      = S[17];
wire shift_enable   = S[18];

/************* The logic of this experiment *************/
wire [11:0] in_reg_q, out_reg_q;
wire [7:0] lfsr_q;
wire lfsr_left_in, cipher_stream;

RightShifter #(12) IR (.iClk(clk), .iReset(reset), 
    .iLoad(in_reg_load), .iEnable(shift_enable), 
    .iShiftIn(1'b0), .iD(in_reg_d), .oQ(in_reg_q));
RightShifter #(8) LFSR (.iClk(clk), .iReset(reset), 
    .iLoad(lfsr_load), .iEnable(shift_enable), 
    .iShiftIn(lfsr_left_in), .iD(lfsr_d), .oQ(lfsr_q));
assign lfsr_left_in = lfsr_q[0]/*- TODO:根据反馈系数设计线性反馈移位寄存器 -*/;
assign cipher_stream = in_reg_q[0] ^ lfsr_q[0];
RightShifter #(12) OR (.iClk(clk), .iReset(reset), 
    .iLoad(in_reg_load), .iEnable(shift_enable), 
    .iShiftIn(cipher_stream), .iD(12'h0), .oQ(out_reg_q));

/***** Internal signals assignment to output ports ******/
assign L[11:0] = in_reg_q;
assign L[19:12] = lfsr_q; 
assign L[31:20] = out_reg_q;
assign L[32] = in_reg_load;
assign L[33] = lfsr_load;
assign L[34] = lfsr_left_in;
assign L[35] = cipher_stream;
  1. 完整代码可从开源项目托管网站下载,下载方法见下载实验材料

  2. 实验材料并未包含RightShifter模块,可使用移位寄存器实验中完成的右移移位寄存器。

任务1:流密码器

修改例 1参考设计代码中注释了 TODO 的语句,按照特征多项式

f(x)=1+x2+x3+x4+x8

构造反馈网络(即图 1电路),形成8级LSFR。

验证测试加密、解密过程。自己拟定多组初始密钥和验证数据,但必须包含以0xEB作为密钥,0xFE0作为明文输入,得到密文后再用密文作为输入得到解密的明文。将实验结果与理论计算进行分析对比,解密还原与原文对比,并得出结论。

【拓展】修改反馈网络,重新构造为5级LSFR,观察伪随机序列的周期是否为31。注:可以查反馈系数表,得到本原多项式的特征方程。

任务2:流密码器的控制

在任务1中,用按键产生时钟信号,人工计数12次移位。这个任务用连续的时钟作为移位寄存器的时钟信号,并且用一个计数器控制移位的次数,当移位12次后自动停止移位,用有限状态机设计一个控制逻辑来实现这个过程,其状态图如图 2

状态图-全自动
图 2. 流密码器的状态图

图中start是启动信号,用开关产生。“LOAD IR”状态将开关数据装入输入寄存器;“LOAD LFSR”状态将开关数据装入线性反馈移位寄存器;“SHIFT”状态移位所有的寄存器,移位次数由一个减法计数器控制,当移位12次后进入“DONE”状态;在“DONE”状态,如果start信号尚未撤销,则停留在这个状态,直到start信号撤销再回到空闲状态。

将状态机输出填入下表,并用HDL设计实现该状态机。

IDLE LOAD IR LOAD LFSR SHIFT DONE
前面计数器实验中已经完成将10MHz的时钟分频为1Hz时钟的分频器。