基于硬件逻辑加密的保密通信系统(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-20 10:07:25

点击下载

作者:丁群,杨自恒

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

基于硬件逻辑加密的保密通信系统

基于硬件逻辑加密的保密通信系统试读:

前言

保密通信系统研究与开发对国家安全与发展具有重要意义。基于硬件逻辑加密的保密通信系统,使保密通信系统具有运行速度快、自主研发加密核、保密性强、易与其他数字设备兼容、便于组合移植更新等优势,具有广泛重要的应用前景。我们结合十余年来在密码数字IP核、加密芯片、数据加密卡、加密网卡、专有安全网络系统、网络视频实时加密传输等方面的研发经验及多年的教学基础上编写了本书。全书从保密通信系统模型出发,分章讲解了保密通信系统的整个过程。对加密与解密部分进行详细讲解,尤其是密码基于硬件逻辑实现过程,部分过程附带源代码。在本书部分章节对数据传输加密系统、网络数据加密卡、视频加密系统等应用性较强的项目进行了详细介绍。

本书主要采用了VHDL硬件描述语言设计,有少量章节采用其他语言设计并进行说明。本书利用通用平台设计,具有广泛指导性;注重基础知识与工程能力相互结合,列举了许多编程实例,并通过仿真验证结果,具有可理解性。本书应用设计均来自作者的科研项目,具有可扩展性。本书可作为信息与通信工程学科研究生教材,也可作为电子信息类专业本科生选修教材。

本书由丁群、杨自恒共同编写完成。其中第1、5、12~15章由丁群、杨自恒共同完成,第4、6~8、10、11章由丁群撰写,第2、3、9章由杨自恒撰写。特别感谢为此书做出贡献的时映鹏、叶爱平、周平、丁丽娜、王路、齐娜、潘晶、王宏俊、白园、郑东、齐仁吉、李娜、宋兵兵、范春雷等研究生同学们,他们在源代码设计、分析、仿真,以及硬件平台设计、仿真、调试、组装等方面做了大量的工作,在此向他们表示最诚挚的谢意!

由于作者水平有限,加之编写时间仓促,书中难免有错误与不足之处,恳求批评指正。丁群 杨自恒2015年3月于黑龙江大学

第1章 绪论

信息安全(Information Safety)已成为人们在信息空间中生存与发展的重要保证条件。信息安全是任何国家、政府、部门、行业都必须十分重视的问题,是一个不容忽视的国家安全战略问题。如果信息与网络的防护能力不强,许多信息系统处于不设防状态,重要信息发生泄露,将给国家、政府、企业等部门带来很大损失。目前一些信息系统产品还存在非自主性安全漏洞问题,信息安全产品在实用性、兼容性、标准化上还存在不足,需要引起重视并持之以恒地向前探索与研究,而在信息安全领域中保证通信安全更为重要。

1.1 通信安全

一个完整的信息安全系统主要包含安全技术措施、安全管理措施和相应的政策法律。除重视信息安全技术外,实现安全管理应有专门的安全管理机构、专门的安全管理人员、逐步完善的管理制度、逐步提供的安全技术设施。信息安全管理主要涉及人事管理、设备管理、场地管理、存储媒体管理、软件管理、网络管理、密码和密钥管理。国家也制定了相关政策法律:中华人民共和国计算机安全保护条例、中华人民共和国商用密码条例、计算机信息网络国际联网安全保护管理办法等。信息安全技术可分为许多种,不同方面的安全保护有不同的措施。

① 边界安全:防火墙、网络安全隔离卡、线路选择器、安全隔离与信息交换等产品。

② 通信安全:安全终端产品、网络加密卡、网络链路机、安全路由器等。

③ 身份鉴别与访问控制:身份认证智能卡等。

④ 数据安全:数据加密、数据备份与恢复产品。

⑤ 基础平台:安全操作系统、安全数据库系统。

⑥ 内容安全:反垃圾邮件产品。

⑦ 评估与监控:入侵检测系统、网络脆弱性扫描产品、安全审计产品。

其中,通信安全(Communication Security)是本书阐述的主要内容。通信安全具有4个基本要素。

① 保密性(Confidentiality):非法人员从截获的数据中几乎无法恢复原有信息。

② 完整性(Integrity):保证数据传输的精确和一致。

③ 可靠性(Reliability):保证数据是正确的,数据来源是可靠的,还要保证通信系统传输的可靠性。

④ 不可否认性(Non-Repudiation):一方不能否认自己没有发过某信息或接收过某信息。

其中,保密性为对信息进行加密;完整性主要是通过散列(Hash)算法提取原信息的数字摘要,信息的数字摘要可视为报文的“指纹”,用以验证通过网络接收的文件是否为原件;可靠性主要通过信息发送方将原文经过散列算法取得摘要后再利用私钥加密,产生数字签名和原文,到达接收方后利用公钥对数字签名进行解密,将原文通过散列算法得到新的摘要,对比两者产生的结果是否相同,信息传输相同认为信息传输可靠,但在实际通信系统中,信号传输的可靠性也非常重要;不可否认性主要利用数字签名和身份认证。在本书中将保密性作为重点阐述。

1.2 保密通信系统

1.2.1 香农保密通信系统

香农保密通信系统(Shannon Secure Communication System)如图1-1所示。图1-1 保密通信系统的一般模型

图1-1所示一个完整的信息由发送端到接收端的变换过程,现将上述框图中名词解释如下。

信源:发送方所要发送的信息。

加密器:将发送方要发送的明文信息加密成密文。

编码器:将加密后的信息进行编码使之成为适合信道传输的码型。

调制器:将编码后的码型进行调制并以有线或者无线的方式发送出去。

信道:信号传输通道。

噪声源:信号在信道上传输避免不了受到外界的干扰或信道本身特性的影响,会使得码型发生畸变。这种干扰会造成接收端误判,进而影响通信质量。常见的噪声源有外界雷电、强电磁场辐射、信道衰落特性等。

在接收端的操作正好和发送端相对应,如解调、译码、解密,最终还原出信号,这样就完成一次保密通信的过程。本书重点阐述以网络为平台的加密系统实现过程。

1.2.2 加密系统基本原理

对于图1-1 中的保密通信系统,将其加密部分做详细说明。一般的加密系统可以用如图1-2所示的形式来描述。图1-2 加密系统原理框图

在发送明文前,首先需在发送方和接收方之间约定好加密所使用的密钥,并且一旦密钥被选定后就必须严格加以保密,防止泄露。

一般情况下,密码学主要研究明文(Plantext)、密文(Ciphertext)、加密(Encryption)、解密(Decryption)之间的关系。其基本要求是:密钥空间要足够大,并且弱密钥的数量要尽可能少;加密序列要符合伪随机特性,使得窃听者难以破译。在通常情况下,M、C、K都是有限集合。一旦加密算法被确定下来,对于m∈M,k∈K,密文c∈C也被唯一确定。其中,M称为明文消息集合;E为密文消息集合;K、K为密钥空间;加密算法为E:c=E(m,k);解密算12K1法为D2:m=D(c)=D(E(m))。Kkkk

在上述加密系统中,将(M,C,E,E,D)称为密码系统。若K、KK1K212相同,则称该加密系统为对称加密系统,否则称之为非对称加密系统。密钥空间K中不同的密钥可以有不同的概率,但是在密钥量很大的情况下,可以认为其是等概率出现的。对于密钥空间K有l个密钥,即k,k,k,…,k,其概率可以表示为p(k), j=1,2,…,l,明文空间M有r个明123lj文,即m,m,…,m,其概率可表示为p(m), i=1,2,…,r,E是由明文空12ri间M到密文空间C的加密映射E,E,…,E所构成的集合。12t

1.2.3 加密体制

利用计算机技术可以将要传输的报文、数据、图像、视频等信息转换成二进制序列,而现代加密算法正是将明文的二进制码元作为加密对象。通常情况下,根据加密密钥和解密密钥是否相同又可以将加密算法分为对称加密体制(Symmetric Algorithm System)和非对称加密体制(Asymmetric Algorithm System)。(1)非对称加密体制

非对称加密体制就是加密端使用的加密密钥和解密端使用的解密密钥不相同。其最早由Diffie和Hellman在《密码学新方向》这篇文章中提出来。该算法有两个不同的密钥:一个叫公钥(Public Key),用来加密;另一个叫私钥(Private Key),用来解密。并且加密密钥公开,解密密钥保密。其典型代表有RSA、椭圆曲线加密算法等。(2)对称加密体制

对称加密体制就是加密密钥和解密密钥相同的加密体制,从理论上讲,可以从加密密钥推导出解密密钥,反之亦成立。因此,加、解密密钥必须严格加以保密,防止外泄。对称加密体制有分组密码(Block Cipher)和流密码(Stream Cipher)两种形式。其中,流密码又称为序列密码,序列密码就是将明文表示成连续的符号或比特流,利用密钥产生的密钥序列与明文对应地进行加密。分组密码又被称为块密码。分组密码与序列密码的主要区别在于记忆性。在分组密码中,固定的加密密钥决定了相同的明文组对应相同的密文组。在序列密码中,由于密钥流元素的产生由序列密码的内部状态和密钥所决定,因此明文的重复部分是用密钥流的不同部分加密的。在分组加密中设明文m=(m,m,…,m)为明文序列,加密序列为k=(k,k,…,k),输12m12r出的密文为c=(c,c,…,c)。若n>m,认为该分组加密算法具有数据12n扩展分组密码;若n<m,就认为该分组加密算法具有数据压缩分组密码;若 n=m,该分组加密算法称为无数据扩展压缩分组密码。常用的分组密码有DES、IDEA、AES。

1.3 现场可编程门阵列

信息加密关系到国家安全,实际上允许出口的加密产品对其他国家来说已不再是安全的了,所以必须拥有自主知识产权的信息加密技术,必须具备自行研究、自行设计、自行开发和自行升级的能力,这对全球激烈的信息战是至关重要的事情。随着数字化技术和大规模集成电路的快速发展,数字保密通信系统及应用是当前极具挑战性的研发课题。

近几年来,随着大规模集成电路的飞速发展,在 PAL(Programmable Array Logic,可编程阵列逻辑)、GAL(Gate Array Logic,门阵列逻辑)、EPLD(Erasable Programmable Logic Device,可擦除可编辑逻辑器件)等可编程器件基础上改进的现场可编程门阵列(Field Programmable Gate Array,FPGA)芯片技术,在设计、功能、性能和成本造价上都有了长足的进步,特别是片上系统(System-On-Chip, SOC)技术的兴起,使得解决上述的问题成为可能。由于是采用软件的设计思想对FPGA进行编程生成硬件逻辑,加密算法可以完全固化为硬件逻辑门电路,所以能够解决CPU串行工作时在速度上受限的问题,从而使硬件加密的速度得以进一步地提高。采用FPGA器件设计实现数字系统可以分为以下4个步骤:设计输入、设计处理、模拟仿真、下载编程。(1)设计输入

设计输入就是设计者按照系统开发的要求,以各种形式设计电路,将电路输入到相应的开发软件中。开发软件一般都支持几种或者多种输入方式,例如原理图输入方式、文本输入方式。其中,文本输入方式又能用多种硬件语言来描述。(2)设计处理

从设计输入文件到位流文件的编译过程称为设计处理,这是整个系统开发的核心部分。控制这个过程时用户只需要设置参数就可以,不需要知道如何实现这个过程。整个设计需要完成优化、综合、映射、布局、布线和生成编程文件等任务。(3)模拟仿真

模拟仿真主要包括时序仿真、功能仿真和实验验证。功能仿真又称前仿真,是在设计输入阶段不考虑时延等因素进行的仿真。时序仿真也称后仿真,是在选择了具体器件、完成布局布线后包含有定时关系的仿真。在线测试是在对器件编程后,利用实验手段测试器件的功能和性能指标。(4)下载编程

下载编程是将设计阶段生成的位流文件载入FPGA器件中。下载编程方法包括在在线编程(In-System Programmable,ISP)和使用专用的编程器件编程。

1.4 VHDL编程

本书中所阐述的加密系统各类模块,如果不附加说明都是利用VHDL(Very-High-Speed Integrated Circuit Hardware Description Language,非常高速集成电路硬件描述语言)实现的,实际上更加鼓励学者根据需求选择VHDL或Verilog HDL编程方法,本书围绕后续实例主要讲解 VHDL 编程方法。硬件描述语言是自上而下逐层实现设计理念的一种供数字电路设计者应用的语言,它是以形式化的方式来刻画数字电路系统,并且用一系列分层次的模块代替复杂时序或者逻辑数字电路。

目前广泛采用的是一种称为高层次设计(High-Level-Design)的方法。它的设计思路是:在制成具体物理器件前,用VHDL的门级模型来替代实际的基本元器件。由于门级模型的时延性能和逻辑功能与所用的物理器件完全相同,在仿真工具的推动下,它能够较顺利地验证比较复杂的数字系统物理结构是否正确。

VHDL主要是应用在数字电路的设计中。目前多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC(Application Specific Integrated Circuit,专用集成电路)。VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计或设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(或称可视部分及端口)和内部(或称不可视部分),涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

基于VHDL综合的FPGA设计流程大致可以分为设计的建立、设计实现、编程和系统验证3个主要部分。

1.设计的建立

首先在文件编辑器下输入VHDL的源代码,VHDL源代码可以是行为级的、RTL级的或者它们的混合形式。设计捕获以后,就可以对源代码进行行为级的仿真。行为级仿真验证VHDL代码的功能,检查代码是否正确等,根据所提示的错误信息可以对相应的源码进行修改。设计者还可以使用单位时延和标准的VHDL测试矢量来驱动行为级仿真。在建立了行为级的VHDL源文件后,就可以对它进行综合,综合的过程把行为级的VHDL文件转化为门级网表,并对它进行指定工艺的优化。有些FPGA开发软件还可以从门级网表生成用于结构仿真的结构网表,结构仿真验证综合后的VHDL网表功能。

2.设计的实现

在综合和结构仿真完成后,下一步工作就是进行布局和布线。布局布线后的时延信息可以通过同一仿真器做后仿真验证,检查设计是否满足时延约束。如仿真结果有问题,可进行静态时延分析,找出问题之所在,重新修改综合的约束条件或者重新修改设计,以得到满意的设计结果。

3.编程和系统验证

仿真结果无误后,就可以产生编程文件,送入编程器进行编程实现。对编程的器件要进行测试,以验证其是否完成所要求的功能。

从这种Top-Down的设计流程可以看出,在整个FPGA的设计过程中要进行3级仿真,每一级仿真正确后才能进行下一步的设计,这样有利于在设计的早期发现问题并改正,从而缩短整个系统的设计周期。

FPGA设计中VHDL编程主要有以下3种方式。

1.与工艺无关的编程方式

VHDL编程的最大特点就是可以建立与工艺无关的设计,掌握VHDL基本的编程方法和技巧是写出标准的、高效的VHDL代码的基础,如对时序逻辑器件、数据流、状态机的描述,在什么情况下使用if—then—else语句比较好,什么情况要用case语句等。

2.行为驱动的编程方式

与 ASIC 的结构不同,FPGA 是以模块为基础的阵列结构,在同一条路径上的每一级逻辑单元都会增加该路径的时延,这就使得满足一条有多级逻辑单元的关键路径的时延要求变得很困难。因此,使用一种有效的编程方式,使逻辑综合最终实现,对FPGA设计来说特别重要。行为驱动编程的最主要目的就是减少关键路径的时延。以下几种编程方式可以减少在设计中因时延不能满足要求而遇到的困难。

① 减少关键路径上的逻辑单元。

② 尽量使某些设计资源共享。资源共享能够减少完成 VHDL 操作所需的模块数目,这可以节约FPGA的有效资源。

③ 使运算操作在循环语句外来完成,这样可以减少FPGA资源的利用。

④ 减少关键路径的负载。因为线的时延随着负载数的增加而增加,可以通过多加几个寄存器的方式来减少关键信号(如使能、时钟等)的扇出数。

⑤ 分割设计。大多数综合工具在优化中等大小的模块(2 000 到 5 000 门)时综合得最好。为了减少综合的时间,应将设计分割成综合工具所能接收的模块,在分割设计时,可以在模块的前后都加上寄存器。

3.针对特殊工艺的编程方式

除了与工艺无关的编程和行为驱动的编程,有些FPGA开发工具还提供针对FPGA结构的编程。大多数综合工具都能完成随机逻辑、控制逻辑和数据流宏单元的综合,但不一定能产出对特定工艺来说是最优的结构。针对特殊工艺的编程就是利用某种FPGA工艺和结构特点,产生出最适合于该种FPGA的VHDL程序。如Actel的ACTgenMacroBuilder就能产生多种模块,如加法器、寄存器、FIFO、RAM等VHDL代码。如果最终要用Actel的FPGA器件来实现,设计中也用到这些模块,就可以利用这种编程方式产生相应的模块,作为设计的一部分。在以上 3 种编程方式中,第一种是最基本的。当由第一种方式编程不能满足速度、负载、时延等要求时,可以根据设计的特点选择某种行为驱动的编程方式来提高设计的性能,或者在一开始编程时就将两种方式结合起来使用。如何进行行为驱动的编程,在很大程度上取决于设计者的设计经验,这要在设计过程中不断地积累。第三种方式是针对有这种功能的 EDA(Electronic Design Automation,电子设计自动化)工具或FPGA开发软件而言的,当用相应的FPGA开发软件进行设计时,用第三种方式产生某些模块的 VHDL 代码更方便,也更容易满足指标的要求。

1.5 QuartusⅡ仿真软件

在现代电子设计自动化中,常用的EDA工具有Altera公司的MAX+plusⅡ和QuartusⅡ,Lattice公司的ISP Design Expert System、PAC-Designer、ISP Lever,Xinlinx公司的Foundation ISE等。这些设计工具有各自的优缺点,作为IC 设计人员可以选取某一个或者几个设计工具来完成自己的设计。

Altera 公司在 21 世纪初推出了一种针对FPGA/CPLD器件的软件QuartusⅡ。在这以前一直以MAX+plusⅡ软件为开发环境,QuartusⅡ软件的功能非常强大,包括设计输入、编程、仿真、时序分析、系统级设计、配置、基于块的设计、软件开发、调试、时序逼近、工程更改管理等。QuartusⅡ软件开发流程如图1-3所示。图1-3 QuartusⅡ软件的开发流程

Altera 公司 QuartusⅡ设计软件能够提供完整的多平台设计环境,可以满足某些特定设计的需要。其支持原理图、VHDL、Verilog HDL以及AHDL(Altera Hardware Description Language,Altera硬件描述语言)等多种设计输入形式。内嵌综合器以及仿真器可以完成从设计输入到硬件配置的完整 PLD 设计流程。其支持上百万逻辑门数的逻辑器件开发,并且为第三方工具提供了无缝接口。QuartusⅡ支持的器件有:Stratix、StratixⅡ、Mercury、MAX 3000A、MAX 7000B、MAX 7000S、MAX 7000AE、FLEX 6000、FLEX 10K、FLEX 10KE、Cyclone、CycloneⅡ、APEXⅡ、APEX 20KC和ACEX 1K系列。编程器是QuartusⅡ软件包的关键部分,其能够为设计者提供功能强大的设计处理能力。开发流程如下。(1)设计输入

在设计开始阶段需首先利用EDA工具的文本编辑器或者图形编辑器来表达设计者的设计思想。可以使用某一种或者几种方法来实现设计输入,目前有图形输入、HDL文本输入、LPM输入3种。图形输入又可以分为原理图输入、状态图输入、波形图输入。图形输入因其综合、实现效率高而被广泛的应用,但是有其客观上的弊端。HDL文本输入即以文本的形式来实现电子设计功能。主流的硬件描述语言有VHDL或Verilog HDL语言,其程序代码执行效率高,可移植性强,近几年同样得到极其广泛的应用。LPM输入方法,即 LPM包含 25个基本模块,可以通过配置参数实现各种数据宽度的逻辑功能和多种不同的功能特性。采用LPM描述,对于同一个逻辑功能,有了统一的描述方法。(2)HDL综合器

综合是将软件设计与硬件的可实现性相结合的过程,即将软件设计转化为硬件的必须步骤。其目的是针对 CPLD/FPGA 产品供应商的硬件系列。综合过程就是将设计者在EDA平台上编辑输入的HDL文本、原理图或状态图形描述,依据给定的硬件结构和约束控制条件进行编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件。常见的综合器有:Synopsys 公司的 FPGA CompilerⅡ综合器、Synplicity公司的Synplify Pro综合器、Mentor公司Exemplar Logic的LeonardoSpectrum。由此可见,在综合器工作前,必须给定最终实现硬件的结构参数,该功能就是将软件描述与硬件结构用网表文件的方式对应起来,成为相应的映射关系,换句话说,综合的过程就是将软件设计转换成硬件实现的过程。(3)适配器

适配器也称结构综合器,是在综合通过后利用CPLD/FPGA布局/布线适配器将网表文件针对具体器件进行逻辑映射操作,其中包括配置、逻辑分割、逻辑优化、布局布线。其最终目的是将由综合器产生的网表文件配置于指定的目标器件中,最终产生下载文件。适配完成后可以利用适配所产生的仿真文件进行精确的时序仿真,同时产生可用于编程的文件。(4)仿真器

在编程下载前必须对适配的结果进行模拟测试,即仿真。仿真是在一定的算法和一定的仿真库条件下利用计算机技术对 EDA 设计进行模拟,以验证设计的正确性。通常意义上讲,按照不同的分类标准可以将仿真进行不同的分类。按处理的硬件描述语言类型,可分为VHDL 仿真器、Verilog 仿真器等;按仿真的电路描述级别的不同可分为系统级仿真、行为级仿真、RTL级仿真、门级时序仿真。

仿真主要分为功能仿真和时序仿真。功能仿真是在设计输入后进行;时序仿真是在逻辑综合后或布局布线后进行。

功能仿真是指在一个设计中,验证所设计的逻辑功能是否达到设计目的。在FPGA布局布线以前的仿真都称作功能仿真。

时序仿真是将设计电路映射到特定的电路环境,以验证电路是否满足设计要求。时序仿真是在考虑门时延、线时延的基础上所作的仿真。时序仿真和功能仿真使用相同的仿真器,二者所需的流程和激励也是相同的;唯一的差别是时序仿真加载到仿真器的设计中考虑了布局布线时延,并且在仿真结果波形图中,时序仿真后信号有一定的时延,而功能仿真没有考虑时延等方面的因素。(5)下载器

编程下载是指将编程数据放到具体的器件中去,即将适配器产生的配置/下载文件通过 CPLD/FPGA 或者下载电缆下载到目标芯片中去。常见的下载模式有JTAG下载模式、PS下载模式、AS下载模式。(6)硬件测试

硬件测试主要是将含有下载文件的硬件系统进行功能测试,以便在真实的环境中测试设计者的设计是否满足设计要求。

1.6 DSP Builder的设计

一些电路仿真模型是利用美国Altera公司的DSP Builder工具进行正确设计后基于FPGA实现的。DSP Builder是一个系统级(或算法级)设计工具,它架构在多个软件工具上,并把系统级和RTL级两个设计领域的设计工具连接起来,最大程度地发挥了两种工具的优势。DSP Builder依赖于MathWorks公司的数学分析工具——Matlab/Simulink,因Simulink的Blockset出现,可以在Simulink中进行图形化设计和仿真,同时又通过Signal Compiler可以把Matlab/Simulink的设计文件(.mdl)转换成相应的 VHDL 设计文件(.vhd),以及用于控制综合与编译的TCL脚本。而对后者的处理可以由FPGA/CPLD开发工具QuartusⅡ来完成。

由于在FPGA上设计一个DSP模块的复杂性,设计的性能(包括面积、速度、可靠性、设计周期)对于不同的应用目标将有不同的要求,涉及的软件工具也不仅仅是Simulink和QuartusⅡ,DSP Builder针对不同情况提供了两套设计流程,即手动流程和自动流程。

DSP Builder设计步骤如下。

第一步是在Matlab/Simulink中进行设计输入,即在Matlab的Simulink环境中建立一个.mdl模型文件,用图形方式调用Altera DSP Builder和其他Simulink库中的图形模块(Block),构成系统级或算法级设计框图(或称 Simulink 设计模型)。

第二步是利用Simulink强大的图形化仿真、分析功能,分析此设计模型的正确性,完成模型仿真。

在这两步中,与一般的Matlab/Simulink建模过程几乎没有什么区别,所不同的是设计模型库采用Altera DSP Builder的Simulink库,也不涉及其他EDA软件,没有自动流程和手动流程的区别。

第三步是 DSP Builder 设计实现的关键一步,通过 Signal Compiler 把Matlab/Simulink下的设计文件(.mdl)转换成相应的VHDL设计文件(.vhd),而对VHDL文件的处理可以由FPGA/CPLD开发工具QuartusⅡ来完成。由于EDA工具软件(如QuartusⅡ、ModelSim)不能直接处理Matlab的.mdl文件,这就需要一个转换过程。转换获得的HDL文件是基于RTL级(寄存器传输级)的VHDL描述。

接下来的几个步骤是对以上设计产生的 VHDL 的 RTL 代码和仿真文件进行综合、编译适配以及仿真。为了针对不同用户的设计目的和设计要求,DSP Builder提供了两种不同的设计流程,主要可以分为自动流程和手动流程。

如果采用DSP Builder的自动流程,几乎可以忽略硬件的具体实现过程,可以选择让DSP Builder自动调用QuartusⅡ等EDA软件,完成综合(Synthesis)、网表(ATOM Netlist)生成和QuartusⅡ适配,甚至在Matlab中完成FPGA的配置下载过程。

如果希望使用其他第三方的VHDL综合器和仿真器(除Synplify、Leonardo Spectrum和QuartusⅡ综合器及ModelSim外),或是希望完成特定的适配设置,如逻辑锁定、时序驱动编译、ESB特定功能应用等,可以选手动流程设计。这里使用的是QuartusⅡ自带的仿真器,并采用手动流程。

在手动流程中,设计者可以灵活地指定综合、适配条件。不过,需要手动地调用VHDL综合器进行综合,调用QuartusⅡ进行适配,调用ModelSim或者 QuartusⅡ进行仿真,最后用 QuartusⅡ产生相应的编程文件用于 FPGA的配置。

在DSP Builder设计流程的最后一步,可以在DSP Builder中直接下载到FPGA用户开发板上,或者通过QuartusⅡ完成硬件的下载及测试。

在QuartusⅡ环境下对输出序列进行下载步骤如下。

① 将在DSP Builder环境下形成的工程文件调入QuartusⅡ环境下。

② 由于在DSP Builder环境下已经执行了编译、综合等过程,这里就直接在QuartusⅡ环境下生成模型的仿真图形。

③ 在 QuartusⅡ环境下,对工程文件进行下载(到 SOC/SOPC 实验开发系统中)。

DSP Builder的设计流程如图1-4所示。图1-4 DSP Builder的设计流程

这里要注意的是,QuartusⅡ版本的选择必须和DSP Builder的版本一致,目前使用的是QuartusⅡ8.1和DSP Builder 8.1,大部分人已使用QuartusⅡ9.0及以上更高的版本。

Matlab要选择较高的版本。针对QuartusⅡ8.0和DSP Builder 8.1,Matlab至少要安装2008版本(也就是Matlab 7.6)或是更高的版本。

在利用DSP Builder的Simulink模型仿真中可以在同一设计环境中使用定点运算和浮点运算双重功能,但对于硬件设计,Simulink信号必须转化为与硬件结构相对应的总线格式,所以 Simulink 的浮点值必须转化成定点值才能在目标硬件中实现,此转换是利用 AltBus 模块完成,这也是硬件实现的关键。

本章描述了保密通信系统组成的基本框架,后续章节围绕此框架进行阐述。本章将基于硬件逻辑加密(Hardware Logic Encryption)的实现工具进行了概括性阐述,还需要读者根据自己的计划选择专门书籍进行学习与实践。

第2章 分组密码DES

DES(Data Encryption Standard,数据加密标准)算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。明文按64位(即64 bit)进行分组,密钥长64位,事实上密钥是56位参与DES运算,分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。本章学习主要为后面章节分组密码学习奠定基础。

2.1 DES算法描述

DES是一个16轮的Feistel型结构密码,它的分组长度为64 bit,用一个56 bit的密钥来加密一个64 bit的明文串,输出一个64 bit的密文串。其中,使用密钥为64 bit,实用56 bit,另外8 bit用作奇偶校验。加密的过程是先对64位明文分组进行初始置换,然后分左右两部分分别经过16轮迭代,然后再进行循环移位与变换,最后进行逆变换得出密文。加密与解密使用相同的密钥,因而它属于对称密码体制。

图2-1给出了DES实现过程框图,图2-2给出了DES加密框图。在加密框图中,假设输入的明文数据是64 bit。首先经过初始置换(IP)后把其左半部分32 bit记为L,右半部分32 bit记为R,即成了置换后00的输入;然后把R与密钥产生器产生的子密钥k进行运算,其结果计01为f(R,k);再与L进行模2加得到L⊕f(R,k),把R记为L放在左01000101边,而把L⊕f(R,k)记为R放在右边,从而完成了第一轮迭代运算。0011在此基础上,重复上述的迭代过程,一直迭代至第16轮。所得的第16轮迭代结果左右不交换,即L⊕f(R,k)记为R,放在左边,而15151616R记为L放在右边,成为预输出,最后经过初始置换的逆置换(IP1516−1)运算后得到密文。图2-1 DES工作流程图图2-2 DES加密框图

2.2 DES中的初始置换与初始逆置换

表2-1给出了初始置换与初始逆置换。对于要加密的明文串64 bit,初始置换把原来输入的第58位置换为第1位,原输入的第50位置换为第2位,……,把原输入的第7位置换为第64位,即最后一位。同样的初始逆置换是以预输出作为它的输入,该置换的输出以预输出块的第40位作为它的第1位,……,而以25位作为它的最后一位。表2-1 初始置换与初始逆置换

2.3 密码函数

密码函数f(R,K)工作流程如图2-3所示,由E将32 bit换为48 bit,i-1i共8组,通过S替代盒(Substitution Box)后分别输出32 bit,最后通过P置换盒(Permutation Box)输出。密码函数是整个加密的关键部分,它包含了如下几种功能。图2-3 函数f(R1,K)工作流程i−i

1.扩展函数

扩展函数E的功能就是将一个32位的输入块扩展为48位的输出块,而这 48 位的输出块再分成 8 个 6 位的块。将R从32位扩展到48i位的目的是使输入的一位影响下一步的两个替换,使得输出对输入的依赖性传播得更快,密文的每一位都依赖于明文的每一位。其扩展函数E工作过程如图2-4所示。图2-4 扩展函数E工作过程

2.S盒运算

在密码函数f(R,k)中有8个S盒,称为8个不同的选择函数,分别用(S,S,…,S)表示,参见表2-2。每个S盒都是将6位作为输入,得到一128个4位块作为输出。

输入6 bit:bbbbbb123456

输出4 bit:S(bb,bbbb)162345行  列

以S为例,若B是6位的一个块,则S(B)计算如下:B的第一位11和最后一位表示0~3的二进制数,令该数为i;而B的中间4位表示0~15的二进制数,令该数为j;在该表S中查第i行j列的数,它是0~151的一个数,且唯一地由4位块代表,则该块就是输入B的S的输出1S(B)。例如对于输入为101000而言,行是10,即第2行,而列是由10100确定,即第4列,S盒的第2行与第5列的交叉处即为D,因而输1出为1101,因此1101就是S盒S在输入为101000时的输出。1

在f(R,k)的计算中,它将由模2加运算得到的b,b,…,b48,按每612位一组,共分为8 组,顺序记为B,B,…,B,分别经过 8 个选择函数128S运算,变成C,C,…,C,即i1232S(B)S(B)…S(B)=C,C,…,C1122881232表2-2 S盒续表

3.置换函数P

置换函数P是通过输入块的位,从32位输入中得到32位的输出。置换函数P由表2-3给出。由该表确定函数P的输出P(C),取C的第16位为P(C)的第1位,取第7位为P(C)的第2位,……,取第25位为P(C)的第32位。表2-3 置换函数P

令S,S,…,S为8个不同的选择函数,P为置换函数,E为扩展函128数。为了计算f(R,k),先规定B,B,…,B每个为6位块,且B,B,12812…,B=k⊕E(R),于是有f(R,k )=P[S(B)S(B),…,S(B)],因此,在8112288f(R,k)的计算中,将k⊕E(R)分成8个块,即每块6位(即B),然后每个iB取作S的一个输入就得到每个都为4位的8个块S(B)(i=1,2,…,8)的iiii输出,再将此8块连接成32位的整块。这个整块就构成了P的输出,经P置换,即为f(R,k)的输出。

2.4 轮密钥的生成过程

在DES中,每一轮迭代都使用了一个轮密钥。轮密钥是从用户输入的密钥k(64位)产生的。实用密钥是56位,另8位是奇偶校验位。

图2-5给出了子密钥的生成示意图,具体的子密钥生成过程描述如下。

输入的密钥k先经过一个置换(称为“置换选择1”)进行重排。置换结果(56位)被当成两个28 bit的量C与D,其中,C是置换结000果的前28位,而D是置换结果的后28位。0图2-5 子密钥的生成

置换选择1见表2-4。注意到,在置换选择1中不出现第8、16、24、32、40、48、56、64位,因此,实际64位的密钥k在经过置换选择1后,奇偶校验位被删除掉而仅保留下有效的56位密钥。置换选择1与初始置换的含义类似。例如,置换结果C的第7位是输入密钥k的0第9位,而置换结果D的第10位是输入密钥的第54位。0表2-4 置换选择1

在计算第i轮迭代所需要的子密钥时,首先对C1与D1进行循环i−i−左移,分别得到C与D。循环的次数取决于i的值:如果i=1、2、9、ii16,循环左移的次数是1;否则循环左移的次数等于2。这些经过移位的值将作为下一个循环的输入。然后,以C、D作为另外一个由iiDES算法固定的置换选择(称为“置换选择2”)的输入,所得到的置换结果即为第i轮迭代所需要的子密钥k。i

表2-5给出了置换选择2,它表示从56 bit(即C与D)选择出48位ii进行输出。表2-5 置换选择2

前面说过,DES的解密过程与加密过程共用了同样的计算过程。两者的不同之处仅在于解密时子密钥k的使用顺序与加密时相反。如i果加密的子密钥为k,k,…,k,那么,解密时子密钥的使用顺序为1216k,k,…,k。即使用DES解密时,将以64位密文作为输入,第一轮迭16151代使用子密钥k,第二轮迭代使用子密钥k,…,第16轮迭代使用1615子密钥k,其他运算与加密时一样,最后输出的便是64位明文。1

严格说来,DES中解密过程的正确性是由Feistel密码结构的性质决定的。读者可以回顾一下,以便得到DES加密过程与解密过程互逆性的证明。

1997年1月28日,美国的RSA数据安全公司在互联网上开展了一项名为“密钥挑战”的竞赛,悬赏一万美元,破解一段用56 bit密钥加密的DES密文。计划公布后引起了网络用户的强烈响应。一位名叫Rocke Verser的程序员设计了一个可以通过互联网分段运行的密钥穷举搜索程序,组织实施了一个称为DESHALL的搜索行动,成千上万的志愿者加入计划中,在计划实施的第96天,即挑战赛计划公布的第140天,1997年6月17日晚上10:39,美国盐湖城Inetz公司的职员Michael Sanders 成功地找到了密钥,在计算机上显示了明文:“The unknown message is:strong cryptography makes the world a safer place”。

三重DES加密原理如图2-6所示。图2-6 三重DES加密框图112

密钥长度为112 bit,密钥空间为2。

如果令k=k,则实际进行了双密钥加解密,即Triple DES加解密。13

如果令k=k=k,则实际进行了普通单密钥加解密。123

3DES作为DES的替代,密钥长度最多为168 bit,可克服穷举攻击问题。同时,3DES 的底层加密算法对密码分析攻击有很强的免疫力。但由于软件实现该算法速度慢,使 3DES 不能成为长期使用的加密算法标准,需要一种新的高级加密标准来替代。尽管如此,DES加解密仍然在广泛使用,并且是了解分组密码的入门基础。但更需要算法易于各种硬件和软件实现的分组密码。

随着计算机计算能力的提高,由于DES的密钥过短,仅有56位,对DES的成功攻击也屡见报端。因此,NIST(National Institute of Standards and Technology,美国国家标准与技术研究院)于1997年发布公告,征集新的数据加密标准作为联邦信息处理标准以代替DES。尽管如此,DES的出现是现代密码学历史上非常重要的事件,它对于分析掌握分组密码的基本理论与设计原理仍然具有重要的意义。本章以图表的结构讲解了DES分组加密算法,在此基础上对其他分组加密算法的理解则会更加容易。

第3章 基于FPGA的分组密码AES实现

AES(Advanced Encryption Standard,高级加密标准)也称Rijndael加密,是美国联邦政府最新设定的区块加密标准,也是因为随着对称密码的发展,所使用的DES算法由于密钥长度较小(56位),已经不适应当今数据加密安全性的要求,后来由Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。AES算法本身复杂的加密过程使得该算法成为数据加密领域的主流。本章讨论AES所涉及的数学知识、加密算法原理以及基于FPGA实现方法。

3.1 AES加密算法

AES是一个迭代的、对称密钥分组的密码,它可以使用128位、192位和256位密钥,并且用128位(16 Byte)分组加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(Permutation)和替换(Substitution)输入数据。

3.1.1 AES算法的数学知识

1.有限域

域是一个包含元素0和1的集合,它满足3个条件:它分别有一个乘法和加法运算;每个元素有一个加法逆,即对每个x,存在一个元素−x,使得x+(−x)=0;每个非零元有一个乘法逆运算。在密码学中,集合中的元素个数有限,则称上述定义的域为有限域,常用GF(p)表示,其中,p表示域中元素的个数。在AES算法中用到的有限域是8GF(2),它表示该域中的元素是由8 bit组成的字节,这些字节可以通过异或做加法运算,也可以通过某种方式做乘法运算,而且每一个字节都有一个逆元。

2.有限域多项式

有限域中的元素可以有多种不同的方式表示,AES算法采用传统的多项式表示法,将 bbbbbbbb构成的字节 b 看成系数在{0,1}76543210上的多项式,即。

例如,十六进制数{57}对应的二进制数为01010111,该字节对应642的多项式为x+x+x+x+1。

3.有限域的加法运算8

有限域GF(2)上两个元素的和是一个次数不超过7的多项式,其系数等于两个元素对应系数的模2加(比特异或)。由于AES算法中的字节被看作有限域上的元素,因此有限域中的加法运算就是对两个字节进行异或操作。8

例如,在GF(2)域中,十六进制数{57}和{83}所表示的多项式的和为{d 4},计算如下。64277642(x+x+x+x+1)+(x+x+1)=x+x+x+x   (3-1)

用二进制表示为:{01010111}⊕{10000011}={11010100}

用十六进制表示为:{57}⊕{83}={d4}

4.有限域的乘法运算8

有限域GF(2)上的两个元素的乘积就是这两个多项式的模乘,模就是一个 8次不可约多项式。在AES算法中,规定这个8次不可约多项式为843m(x)=x+x+x+x+1       (3-2)

例如,十六进制数{57}和{83}所表示的多项式乘积为{c1},计算如下。64271311877532(x+x+x+x+1)(x+x+1)=x+x+x+x+x+x+x+x+x+1=x 13986543+x11+x+x+x+x+x+x+1(3-3)131198654376843x+x+x+x+x+x+x+x+1=x+x(mod(x+x+x+x+1))(3-4)

5.有限域的x乘运算8

有限域GF(2)上还定义了一种运算,称为x乘法,其定义为,假8设b(x)是GF(2)上的多项式,则8765432x⋅b(x)=bx+bx+bx+bx+bx+bx+bx+bx(modm(x))(3-5)76543210

如果 b=0,求模的结果不变;否则为乘积结果减去m(x),即求7乘积结果与m(x)的异或。由此得出,首先对b(x)的字节左移一位(最后一位补0),如果b=1,再与十六进制数{1b}做异或运算。该运算记7为b=xtime(x),x的幂乘运算可以重复应用xtime函数来实现。

例如,{57}·{13}可按如下方式实现。

{57}·{02}=xtime({57})={ae}

{57}·{04}=xtime({ae})={47}

{57}·{08}=xtime({47})={8 e}

{57}·{10}=xtime({8 e})={07}

{57}⋅{13}={57}⋅{(01}⊕{02}⊕{10})={fe}

6.状态矩阵和轮数

AES算法是一种迭代型分组密码算法,NIST确定的AES算法标准将分组长度固定为128位,仅支持128位、192位和256位的密钥长度。AES算法由加密、解密和密钥扩展3种基本运算构成,所有的运算都是基于完整的字节操作,类似于明文分组和密文分组,算法的中间结果也必须分组,称加密和解密过程中所产生的中间结果的分组为状态(State)。状态可以用一个以字节为元素的二维矩阵来表示,即状态矩阵,该矩阵的行数为4,列数为Nb(Nb=4)。

加密时将输入字节按照a,a,a,a,a,a,a,0,0l,02,03,00,ll,l2,1a…的顺序映射到状态矩阵上,加密后以同样的顺序提取状态矩阵3,1从而得到输出字节。类似地,密钥也可以看成是由字节构成的二维数组,该数组也可以用一个行数为4,列数为Nk的矩阵来表示,其中,Nk的值为密钥长度除以32。

AES加密运算和解密运算都采取轮迭代结构,运算的轮数记为Nr,与Nb、Nk有关,它们之间的关系见表3-1。表3-1 密钥—分组—轮数组合关系(Byte)

3.1.2 AES算法描述

AES算法采取轮迭代结构,每轮变换由4个不同的变换组成。加密过程的这4 个变换分别是字节变换(SubBytes)、行移位变换(ShiftRows)、列混合变换(MixColumns)和轮密钥加变换(AddRoundKey)。解密过程所对应的轮变换分别是这4个变换的逆变换,具体的加密与解密的框图如图3-1所示。

1.字节变换

字节变换是一种非线性、可逆变换,它将状态矩阵中的的每一个字节进行变换,图3-2说明了字节变换作用在状态矩阵的结果。8

字节变换由以下两个变换的合成得到:首先取有限域GF(2)中的乘法逆,即把每一个字节的值用它的乘法逆代替,其中,“00”的逆8是其本身;然后在GF(2)中做式(3-6)所示的仿射变换。图3-1 AES的加密与解密框图图3-2 SubBytes作用在状态矩阵上的结果

将以上变换作用于所有可能字节,可构造出字节变换的查找表,见表3-2,该表被称为S盒。通过查找S盒可以直接得到字节变换的结果。例如状态矩阵中S={53},则S盒中第5行第3列的字节{ed}即为1,1字节变换后字节的值。表3-2 S盒

2.行移位变换和逆行移位变换(InvShiftRows)

行移位变换是将状态矩阵的各行进行左循环移位,如图3-3所示。不同状态行的位移量不同,第0行不移动,第1行循环左移1 Byte,第二行循环左移2 Byte,第三行循环左移3 Byte。图3-3 ShiftRows变换

InvShiftRows是ShiftRows的逆过程。即状态矩阵的后3行依次左循环移动3 Byte、2 Byte、1 Byte,如图3-4所示。图3-4 InvShiftRows变换

3.列混合变换和逆列混合变换(InvMixColumns)

列混合变换是将状态矩阵的各列进行变换,如图3-5所示。在变8换中,它将状态矩阵的每一列看作系数在GF(2)上的多项式,与固定432多项式a(x)进行模(x +1)相乘,而a(x)={03}x+{01}x+{01}x+{02}。这种运算可以用矩阵乘法来表示,记为s(x)=a(x)s(x),如式(3-7)所示。

InvMixColumns 与 MixColumns 相似,只是固定多项式变为a(x)32的逆,即a(x),则 a(x)={0b}x+{0d}x+{09}x+{0e}。同样基于以上的11状态转换,解密运算的InvMixColumns可以表示为式(3-8)。图3-5 MixCoulumns变换

4.轮密钥变换

轮密钥加变换是将轮密钥与状态矩阵进行逐位异或运算,如图

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载