加密和密码学的毕业论文AES加密算法 下载本文

(1). LDPC码的译码算法,是一种基于稀疏矩阵的并行迭代译码算法,运算量要低于Turbo码等的译码算法,并且由于结构并行的特点,在硬件实现上比较容易。因此在大容量通信应用中,LDPC码具有优势。

(2). LDPC码的码率 可以任意构造,有更大的灵活性。

(3). LDPC码具有低的错误平层,可以应用于有线通信、深空通信以及磁盘存储工业等对误码率要求很苛刻的场合。

而LDPC码的劣势在于以下几点:

(1). 硬件资源需求比较大。全并行的译码结构对计算单元和存储单元的需求都很大。 (2). 编码比较复杂,更好的编码算法还有待研究。同时,由于需要在码长比较长的情况才能充分体现性能上的优势,所以编码时延也比较大。 (3). 相对而言出现比较晚,工业界支持还不够。

LDPC码具有巨大的应用潜力,目前已广泛应用于深空通信、光纤通信、卫星数字视频、音频广播、数字水印、磁/光/全息存储、移动和固定无线通信、电缆调制/解调器和数字用户线(DSL)等领域。LDPC码已成为第四代通信系统(4G)强有力的竞争者,而基于LDPC码的编码方案已经被下一代卫星数字视频广播标准DVB-S2采纳。LDPC码由于更接近香农限的误码率性能,完全并行的迭代译码算法使其比Turbo码在部分场合的应用前景更为广阔。在许多需要高可靠性的通信系统中,LDPC码成了Turbo码的有力竞争者。LDPC码目前已经被一些通信和广播标准所采纳,发展势头改过了Turbo码。

UWB(超宽带)信号的特点是低信噪比、抗多径能力强、高数据速率和信号的频谱宽、功率低,因此其信道编码应该具有较强的纠错能力和较低的编译码复杂度。LDPC码同时具有以上两个方面的特性。

将LDPC码应用于CDMA(码分多址)系统将大大提高通信系统容量。由相关仿真结果可见,使用LDPC码的CDMA系统的容量是使用正交卷积码的CDMA系统容量的2倍,是未使用纠错码的CDMA系统容量的5倍。随着移动通信用户的日益增多,LDPC码将在未来的移动通信的扩容中发挥重要作用。

把LDPC码用在DSL(数字用户线)中,由相关仿真结果可见,LDPC码获得编码增益与Turbo码相当,但是其运算量大大低于Turbo码,且没有Turbo码中出现的差错平底现象。模拟结果还显示,在0.5 ms 10 ms延时条件限制下,其获得的编码增益远高于G.922.1建议中使用的TCM所获得的编码增益。

Flarion所开发的集成了V-LDPC的flash-OFDM(正交频分复用)移动无线芯片组已用于基于IP的移动宽带网,以增大传输距离和在无线信道中的坚韧性,而且硬件实现较简单。flash-OFDM用于移动设备上,其最大数据速率可达 。

此外,LDPC码在有记忆衰落信道、压缩图像传输和磁记录信道等方面也有重要应用。 M.Chiain 等对 LDPC 码用于有记忆衰落信道时的性能进行了评估。B.Myher 提出一种速率自适应 LDPC 编码调制的方案用于慢变化平坦衰落信道,经推广还可用于 FEC-ARQ 系统。 VOCAL Technologies.Ltd 提出了一种用于 WLAN 的LDPC/Turbo 不对称解决方案,即下行链路采用 LDPC 码,上行链路采用 Turbo码。研究表明采用该方案后用于IEEE802.11 a/b/g WLAN移动终端的电池寿命可延长至原来的4倍。

工业界也己经有 LDPC 编译码芯片问世。其中,处于领先地位的 Flarion公司 推出的基于 ASIC 的 Vector-LDPC 解决方案使用了约 260 万门,最高可以支持 50000的码长,0.9 的码率,最大迭代次数为 10,译码器可以达到 10Gbps 的吞吐量,其性能己经非常接近香农限,可以满足目前大多数通信业务的需求。AHA 公司、Digital Fountain公司也都推出了自己的编译码解决方案。

LDPC码接近香农限的性能是在码长非常大,迭代次数很多,低信噪比条件下得出的。而在码长相对短(利于编码),码率较高( )情况下的LDPC码还在研究。LDPC码如何用于MIMO系统,OFDM系统也在进一步的研究中。

综上所述,LDPC的研究从理论到实现,从实现到应用,己经深入到了信道纠错编码的相关各领域,继续研究与开发新的LDPC实现和应用具有很重要的理论和实践意义。基于LDPC的应用将会越来越多,对其的研究也将会越来越深入。 1.3 开发工具与环境

美国AT&T贝尔实验室的Bjarne Stroustrup博士在20世纪80年代初期发明并实现了C++,1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC 1488-1998。C++是具有国际标准的编程语言,通常称作ANSI/ISO C++。C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。

C++是一种使用非常广泛的计算机编程语言,是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。C++被设计成给程序设计者更多的选择的语言。C++设计成尽可能与C兼容,借此提供一个从C到C++的平滑过渡。C++避免平台限定或没有普遍用途的特性。C++不使用会带来额外开销的特性。C++被设计成无需复杂的程序设计环境。

相比与其他的开发工具,使用VC++的向导(Wizard)可以生成大量的代码,而不必人工地大量编写代码。从编写程序的难易程度和程序的性能综合考虑,C++是最佳的选择。C++性能良好,因

为它被编译后生成机器代码。对于VB和Java等语言,代码在运行时由对应的解释程序解释,而且每次运行程序时都要将代码转换为可直接由机器执行的机器码,这样做效率偏低,不仅仅是已编译过的C++程序运行得较快,而且微软C++编译器已存在多年,这一事实意味着微软的编译器程序员已经把许多优点和经验集中到编译器上,以至于它能产生非常高效的机器码。因为C++是编译语言,而且非常自然,比其他语言更接近机器代码,所以由C++编译器产生的代码比其他的编译代码效率更高。

Matlab是当今最优秀的科技应用软件之一,具有强大的科学计算能力,可视化功能,开放式可扩展环境,许多科学领域中Matlab成为计算机辅助分析和设计,算法研究及应用开发的基本工具和首选平台。同时,Matlab具有其他高级语言难以比拟的一些优点:编写简单,效率高,易学易懂。Matlab在信号处理,通信,自动控制及科学计算等领域中被广泛应用。Matlab的内核采用C语言编写,并且增强了数据的可视化功能,现在,Matlab不断提供功能更加强大的软件包,并配以翔实丰富的帮助系统,越来越多地得到各个专业应用领域的认可和青睐。现今,Matlab已经发展为综合高性能的数值计算软件。

第二章 AES加密算法的理论与实现

1.1 AES加密算法概述: 1.1.1 Rijndael算法概述:

Rijndael算法是一个分组长度和密钥长度都可变的分组迭代加密算法,分组长度和密钥长度分别可以为128bits,192bits和256bits。在加密过程中,每个数据分组都要进行多次变换操作,每次操作后的中间结果称为状态(State),它可以用一个4行 列的矩阵来表示状态,矩阵中的每个元素为一个字节( 的值由分组的长度决定, =分组长度/32)。将数据分组中的每个字节按列的顺序置入,就构成了一个状态矩阵,其初值是一个相应大小的按规定顺序装入的明文区块。Rijndael算法加密完成后,把最终状态矩阵中的每四个字节元素再按列的顺序取出,依此方法操作就可以得到密文。

密钥也可类似地表示为4行 列的矩阵( 的值由分组的长度决定, =分组长度/32)。Rijndael算法进行轮变换的轮数N,则由 和 的值共同决定。若分组长度和密钥长度均为128bits,则加密时要做10次轮变换。以下的表1给出了 与 和 的关系。

=4 =6 =8 =4 10 12 14 =6 12 12 14 =8 14 14 14 表1 迭代轮数Nr 为 Nb 和 Nk 的函数

在Rijndael算法的轮变换中,S-盒用于对状态矩阵进行非线性混合,以起到混淆的作用。这个非线性混合的过程就是一个可逆的字节替换运算(Substitute Byte),利用一张字节替换表,分别对状态矩阵中的每个字节进行查表替换,这张字节替换表就称为S-盒。S-盒用于加密过程,在解密过程中则需要逆S-盒。S-盒是由在 域上乘法求逆运算和在 域上的一个仿射运算对字节运算后得到的。其中,乘法取逆运算为: 其中 ,当 时,其逆元素也为0。Rijndael算法使用了基于有限域 的既约多项式 。

将从00到FF的十六进制数经过上述运算就可以得到一个16 16的字节替换表矩阵,也就是用于加密的S-盒。对于用于解密的逆S-盒,需要通过在 域上的逆仿射运算生成。经过简化后,只需对S-盒进行循环移位和异或运算就可以实现该逆仿射变换,生成逆S-盒。S-盒是必须是可逆的,S-盒不是自逆的。利用非线性变换可以提高算法对差分攻击和线性攻击的抵抗强度。

在进行轮变换前,一般要进行密钥扩展,来产生轮密钥(Round Key)。如不算初始密钥,在这一过程中需扩展出 个轮密钥,用于每轮变换的最后的轮密钥加运算(AddRoundKey),即把状态矩阵和轮密钥进行异或,实现对状态矩阵的一次性掩盖。 2. AES算法描述:

AES加密过程是在一个 的字节矩阵(state)上运作,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支持更大的区块,其矩阵列数可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:

(1) AddRoundKey(轮密钥加变换)—矩阵中的每个字节都与该轮轮密钥做异或;每个轮密钥由密钥生成方案产生。

(2) SubBytes(字节代替变换)—通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。

(3) ShiftRows(行移位变换)—将矩阵中的每行进行循环移位。

(4) MixColumns(列混淆变换)—为了充分混淆矩阵中各列的操作。这个步骤使用线性转换来混淆每列的四个字节。

注意:加密时,最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。 下面简要描述AES的算法步骤:

(1)SubBytes步骤:矩阵中的各字节通过8位的S-盒进行转换。S-盒是AES定义的 个字节组成的矩阵。把state中每个字节的高4位作为行值,低4位作为列值,然后取出S-盒中对应行列的元素作为输出。这个步骤提供了AES加密的非线性变换能力。S-盒与有限域 上的乘法逆元有关,具有良好的非线性特性。为了避免简单代数攻击,S-盒结合了乘法逆元及可逆的仿射变换