简单DES算法研究(精选5篇)
简单DES算法研究 篇1
0 引言
DES是Data Encryption Standard(数据加密标准)的缩写,它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准。DES算法在AT、磁卡及智能卡、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密。如信用卡PIN的加密传输、IC卡的双向认证等都用到了DES算法,而且DES在电子商务中也得到了广泛地应用。但是现在很多产品都屏蔽了DES算法的加密过程,同时在教学中,由于具体的信息通过手工的方式来实现其加密过程是非常困难的,使得掌握DES算法造成了一定的难度。本文就是在这种背景下,用Delphi语言模拟其加密实现的过程,并且把实现过程中用到的变量用文本框的方式让使用者输入,帮助初学者快速掌握DES算法。
1 DES算法的原理
DES是一个分组加密算法,它以64位为分组对数据进行加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8位都用作奇偶校验),密钥可以是任意的56位数,而且可以随时改变。DES算法的具体实现过程包括两大部分,即密钥计算和加密计算。
1.1 DES的密钥计算
从用户处取得一个64位(本文如未特指,均指二进制位)长的密码Key,Key=K1K2K3…K65K64,去除64位密码中作为奇偶校验位的第8、16、24、32、40、48、56、64位,剩下的56位作为有效输入密钥。通过固定的置换对56位密钥进行置换,并将置换的结果分为两个部分即前28位记为C0和后28位记为D0。
DES算法的密钥是经过16次迭代得到一组密钥。把前面得到的C0和D0进行循环左移一位得到C1和D1,再通过固定的置换得到32位的密钥,即Key1。然后再把上次循环左移得到的Ci和Di依次左移,左移的位数有固定的规定,每次都不相同,然后再进行固定的置换依次得到32位的密钥,即Key2…Key16。
1.2 DES的加密过程
DES对64位的明文分组进行操作,通过一个初始置换,将明文分组成为左半部分和右半部分,各32位长。然后进行16次完全相同的运算。这些运算成为函数f,在运算过程中数据与密钥结合,经过16轮后,左、右半部分结合在一起,经过一个末置换(初始置换的逆置换),完成该算法。加密过程:DES(m)=IP-1。T16。T15。…。T2。T1。DES标法流程图如图一所示:
1.3 DES的解密过程
数据解密的算法与加密算法相同,区别在于在迭代过程中和数据进行按位异或的密钥的使用顺序不同。在加密中是按照第i次迭代就采用第i次迭代生成的密钥进行异或;而解密时第i次迭代就采用第17-i次迭代生成的密钥和数据进行异或,即密匙的次序相反。如果各轮加密密匙分别是K1,K2,K3,…,K16,那么解密密匙就是K16,K15,K14,…,K1。
2 DES算法的Delphi实现
具体的实现如图二和图三所示。输入要加密的明文和密钥,单击“加密”按钮在密文文本框中显示加密后的密文,单击“解密”按钮,在明文文本框中显示解密后的明文。单击“清屏”按钮清空所有文本框,以便进行新的加密。在本系统中可以实现对数字、字母和汉字的加、解密。
在编程的时候,如果密钥长度小于8位,就在密钥后面补x;如果输入的明文不是8的倍数,则在最后补NUL。然后把补齐后的明文转换为二进制,按照DES算法的原理先生成密钥再进行加密和解密运算。
加密实现的主要的程序:
3 结束语
本系统可以很形象地表现出该算法的加密实现过程,对初学者学习此算法提供了帮助。但是在通用性方面还要不断加以完善。
参考文献
[1]曹天杰.计算机系统安全[M].北京:高等教育出版社,2003.
[2]阙喜戎,孙锐.信息安全原理及应用[M].北京:清华大学出版社,2003.
[3]杨长春.Delphi程序设计教程[M].清华大学出版社,2003.
[4]DouglasRStinson.密码学原理与实践(第二版)[M].北京:电子工业出版社,2003.
[5]韩宝明,杜鹏,刘华.电子商务安全与支付[M].北京:人民邮电出版社,2001.
[6]William Stallings.密码编码学与网络安全:原理与实践(第二版)[M].北京:电子工业出版社,2001.
简单DES算法研究 篇2
密码算法的很多分析方法已经被提出, 与基于算法的输入和输出的传统数学攻击方法相比, 旁路攻击方法依赖于这样一个事实:任何算法的实现都是不理想的, 并会泄漏一些依赖于所处理密钥的物理上可观察的参数。这些参数包括时间, 能量消耗, 电磁辐射和算法错误行为等。目前人们研究最多的旁路攻击之一是能量分析攻击[1], 又叫功耗分析攻击, 按照对泄漏信息分析原理的不同, 可将其分为简单能量分析SPA (Simple Power Analysis) 、差分能量分析DPA (Differential Power Analysis) 、相关能量分析CPA (Correlation Power Analysis) 、模板攻击[2]、碰撞攻击[3]等。
目前, 国内对分组密码的碰撞攻击研究还较少, 国外也主要对密码算法的软件[8]实现做了一些碰撞攻击的研究;而对密码算法的硬件实现, 如FPGA实现的密码算法, 研究较少。DES自公布以来, 20年内一直超越国界成为国际上商用保密通信和计算机通信中最常用的加密算法。因此, 研究针对DES密码算法FPGA实现的旁路碰撞攻击, 采取有效的碰撞检测方法显得尤为重要。
1 Feistel结构分组密码旁路碰撞攻击
旁路碰撞攻击作为传统数学攻击方法和旁路攻击方法的结合体, 关键在于如何有效地检测碰撞, 下面对碰撞的攻击流程和碰撞检测原理进行详细讨论。
1.1 旁路碰撞攻击流程
2003年Schramm在FSE上提出了碰撞攻击的概念[4], 并给出了对包含DES算法的密码设备的实际攻击。其基本思想是寻找特定位置的“内部碰撞” (如果密码算法的某个内部函数的两个不同输入产生相同输出, 则称发生了内部碰撞现象) , 如果发生了内部碰撞, 则可以根据相等的式子推导出密钥的一些信息, 从而破解密码设备。碰撞攻击方法主要分为以下几个步骤 (如图1所示) :
(1) 对算法进行分析, 找到可能发生碰撞的碰撞点;
(2) 根据碰撞点选择输入明文对;
(3) 对选择的明文对进行加密, 同时采集加密各明文对应的功耗信息;
(4) 利用采集到的功耗信息检测碰撞;
(5) 如果碰撞发生, 则可以根据碰撞建立等式分析密钥, 如果未检测到碰撞, 则重新执行步骤 (2) , 直到检测到发生碰撞。
1.2 Feistel结构碰撞模型
通常, Feistel结构密码算法是一个输入明文长度为2w比特数据分组的迭代分组密码[7], 如图2所示。首先长度为2w比特的输入数据被分为左半部分L (w位) 和右半部分R (w位) , 经过轮函数F后, 变为 (L', R') :
对于Feistel结构分组密码算法, 假设输入两个不同明文 (L1, R1) 和 (L2, R2) , 令L1和L2之间的差为δL, R1和R2之间的差为δR, 令δR经过F函数之后得到的是Δ。旁路碰撞攻击的目标是在算法的第二轮输入中消除第一轮中引入的差, 即Δ=δL, 如果碰撞发生, 第二轮中的F函数运算就完全相同, 硬件实现中在第二轮就可以得到具有高度相关的能量消耗。
1.3 基于最小一乘法的旁路碰撞检测原理
为了寻找这种高度相关的特性, 我们采用基于最小一乘法的碰撞检测方法, 下面给出碰撞检测的原理[9]。
给定两条旁道迹T1和T2, 取相同时间段上的l个特征点, 记:
我们假设每个点Ti, j在统计学上都可被描述为下式的形式:
其中, Ti, j为波形中该点的纵坐标值;ri, j表示随机噪声, 公认地, 随机噪声服从均值为0, 方差为σr2的高斯分布;Si, j表示给定时间点j上的信号恒定分量 (不含噪声) , 不妨根据中心极限定理, 将其看作是期望为μs, 方差为σs2的高斯分布。
我们研究两次加密的 (两条波形) 两段相同位置的波形。在两段相同位置上各取l个特征点, 我们定义ΔT来衡量两段波形之间的“距离”, 其期望E (ΔT) 可作为判断碰撞发生与否的区分器。
当碰撞发生时, S1, j=S2, j恒成立, 因此由于则因此, 根据半正态分布的原理:若x∶N (μ, σ2) , 则我们可以推导出E (ΔT) 的结果:
显然, 碰撞未发生时的E (ΔT) 要大于碰撞发生时的E (ΔT) , 当波形条数达到一定数量时, 二者的差是不可忽略的。在二者之间有效地选取一个阈值, 当E (ΔT) 小于这个阈值时, 即可判定发生了碰撞。
2 针对DES的旁路碰撞攻击
2.1 DES碰撞分析
作为典型的Feistel结构密码算法, DES算法的内部碰撞符合Feistel结构碰撞模型的特征。DES的8个S盒是26→24的满射函数, 由S盒的设计特点可知[5], 对于DES中每一个S盒, 相应于任意一个输入zi∈{0, …, 26-1}, 都存在三个差δ1、δ2和δ3, 满足下式:
其中, δ1≠δ2≠δ3, 即在一个单独的S盒中发生了碰撞。
S盒的六位输入是明文经过E盒扩展后与子密钥进行异或操作得到的, 如图3所示。
有因此, 只需知道z和x, 就可获得k的有关信息。对于每一个S盒, 都可以得到一个差δ的列表, 表1为第二个S盒的部分差δ的列表。
表1中第一列为δ差的值, 第二列为所有对应δ差的在S盒输出端发生碰撞的输入对。
为了获得子密钥中对应某一个S盒的六位, 需要保持其他S盒的输入不变, 攻击者可以选择一个特殊的δ, 改变输入x直到检测到碰撞S (x⊕k) =S (x⊕δ⊕k) 。由于E盒的性质, 使得输入x和x⊕δ的两个最高有效位和两个最低有效位也会进入临近的两个S盒, 如图4所示。如果保持δ的两个最高有效位和两个最低有效位都为0, 那么相邻两个S盒在输入为x和x⊕δ的情况下将保持不变。由S盒的设计准则可知, 这样的δ并不存在。因此, 保持其他S盒输入不变, 而由一个S盒产生碰撞的情况是不可能的。
由文献[5]知, 碰撞可以在三个相邻S盒中发生。记第一轮中经过E盒传播后三个相邻S盒的输入为性x (i-1) i (i+1) , x (i-1) i (i+1) ⊕Δ为另一个输入, 其中Δ=δi-1|δi|δi+1表示对应Si-1、Si、Si+1三个相邻S盒的差δi-1、δi和δi+1的拼接。为了不改变左右两个临近S盒Si-2和Si+2的输入, 的两个最高有效位和两个最低有效位必须为0, 即Δ[0]=Δ[1]=Δ[16]=Δ[17]=0。另外, 为了满足扩展变换E盒的特性, Δ必须满足以下条件:Δ[4]=Δ[6], Δ[5]=Δ[7], Δ[10]=Δ[12], Δ[11]=Δ[13]。
因此, Δ=δi-1|δi|δi+1必须服从Δ=00x1x2vwvwx3x4yzyzx5x600, 其中xi, v, w, y, z∈{0, 1}, 如图5所示。
通过对δ列表的分析, 揭露了服从以上所描述属性的差Δ的存在性。即, 存在输入x和x⊕δ, 可以在f函数中导致碰撞f (x) =f (x⊕Δ) 。
例如, 我们选择第一轮中第2、3、4个S盒作为攻击点, 由算法分析知, 这三个S盒的输入对应输入明文的4、6、14、22、30、32、38、40、46、48、54、56、62、64共14位输入。遍历明文的这14位输入, 保持剩余50位明文不变。在f函数中, 这14位明文被扩展为18位输入x, 并和48位轮密钥中相应的密钥位k相异或。结果z=x⊕k进入目标S盒, 攻击者利用能量分析平台记录密码设备在第二轮中的能量消耗。然后, 将输入设为x⊕Δ, 再次记录第二轮中的能量消耗。利用本文提出的碰撞检测方法检测碰撞, 一旦检测到碰撞, 三个相应δ表的分析将揭示可能的密钥候选值k=z⊕x。
2.2 旁路碰撞检测过程
本文提出的碰撞检测方法的前提条件是, 攻击者能够获得并完全控制一个与目标芯片相同或类似的芯片, 我们称其为实验芯片。以DES为例, 选择第一轮中第2、3、4个S盒作为攻击点, 碰撞检测算法如下:
(1) 在实验芯片上对任意明文和密钥进行加密实验, 确定待研究碰撞点在功耗曲线中的位置;
(2) 对实验芯片, 选择密钥K, 通过算法分析, 选取会导致碰撞发生的x和x⊕Δ对应的特殊明文对, 用这组明文对在实验芯片上分别加密m次, 获取m×2条波形, 对获取的m×2条波形利用Matlab软件对碰撞点后的一段波形 (即加密第二轮) 中每个采样点噪声的标准差进行参数估计, 计算碰撞发生时ΔT的期望, 记作E0 (ΔT) ;
(3) 对特定密钥K, 通过对算法分析, 选取n组不会导致碰撞发生的x和x⊕Δ对应的特殊明文对, 对n组明文对分别进行m次加密, 获取n×m×2条波形, 利用Matlab软件分别获取n组明文对加密第二轮中每个采样点的标准差的参数估计, 对每组的m×2条波形进行平均, 得到n组均值, 再对各点均值的标准差进行参数估计, 计算碰撞未发生时ΔT的期望, 记作E1 (ΔT) ;
(4) 根据第1-3步获取的实验数据, 选取作为阈值E;
(5) 对目标芯片, 固定三个临近S盒的差Δ, 遍历明文x的14位, 对每一组x和x⊕Δ对应的明文各加密m次, 获取m×2条波形, 通过Matlab分析获取ΔT的期望E' (ΔT) , 比较E' (ΔT) 和E的大小, 若E' (ΔT)
(6) 若碰撞未发生, 选择满足条件的其他Δ, 重复第 (5) 步。
3 攻击验证
3.1 功耗仿真平台
功耗仿真平台由综合工具DC、仿真工具VCS和功耗计算工具Prime Power 3部分组成[10], 如图6所示。
基于功耗仿真的碰撞攻击步骤如下:
(1) 首先, 使用DC综合工具, 将Verilog硬件语言描述的DES算法综合为门级.v文件。
(2) 编写输入数据到DES算法的testbench中, 在VCS中对DES算法的门级.v文件和testbench进行仿真得到所输入数据加密运算的.vcd文件。
(3) 利用Prime Power功耗仿真软件对门级.v文件与.vcd文件进行分析, 计算该组数据加密运算的功耗。
(4) 将得到的功耗文件利用Matlab软件进行分析。
3.2 功耗实测平台
在实验室现有设备基础上[6], 构建了功耗信息采集平台, 如图7所示。
其中, PC机主要负责对控制模块和FPGA密码芯片进行信息配置, 并对示波器采集到的波形数据进行分析;控制模块主要负责产生控制信号控制FPGA密码芯片;信号发生器负责给密码芯片提供1MHZ的系统时钟;FPGA密码芯片中下载待攻击密码算法, 在其内核电源与地之间串联一个电阻, 通过差分探头测量电阻两端之间的电压值;示波器将采样得到的波形以数据形式存储, 最终在PC机上进行分析。
3.3 攻击结果分析
利用功耗仿真平台, 确定待测密钥, 选择Δ=18'b000011110010101000, 对DES加密200组明文对的过程进行仿真, 得到功耗文件。由于第二轮的仿真功耗为几个离散值, 无法利用本文的碰撞检测过程对其进行分析。因此, 我们用第二轮的ΔT表示明文对加密过程的相关性, ΔT越小, 明文对发生碰撞的可能性越大, 反之, 1/ΔT越大, 明文对发生碰撞的可能性越大。图8为200组明文对第二轮ΔT的倒数。
在实验芯片上, 利用功耗信息采集平台, 将DES硬件描述文件下载到FPGA密码芯片中, 密钥设置为64'h3132333435363738。对任意明文, 利用示波器采集加密过程中产生的功耗信息, 采集到的波形曲线如图9所示, 图中上方波形为触发信号, 下方波形为能量信号。从图中可以很明显地看出, 这是DES加密16轮得到的功耗曲线, 其中方框内表示第二轮的功耗信息。
为了确定阈值, 需要选择在第二轮中会发生碰撞的明文对。通过算法分析, 选择Δ=18'b000011110010101000, 取相应于x的明文plain1=64'h20A0A00020000020, 则相应于x⊕Δ的明文为plain2=64'h A0A0800000000000。为采集第二轮的功耗信息, 我们对示波器进行如下设置:采样速率设置为500 MS/s, 采样点数设置为2.5 k, 触发方式设置为上升沿触发。其中一条波形曲线如图10所示, 方框内为第二轮加密的波形。
对plain1和plain2各加密10次, 采集波形文件并分析, 得到E0 (ΔT) =5.204。选择不会发生碰撞的10组明文对, 各加密10次, 得到200条波形文件, 对波形文件分析, 得到E1 (ΔT) =5.446。因此, 阈值E=5.325。
对目标芯片, 固定差Δ, 遍历明文的14位, 保持其他50位不变, 对每一组x和x⊕Δ对应的明文各加密10次。图11即为对200组明文对分析的结果, 图中横坐标表示明文对数, 纵坐标表示ΔT的期望值。
对比图8和图11可知, 存在一组明文对的期望在阈值E以下且1/ΔT最大, 表示发生了碰撞。明文对为plain1=64'h0080208000200000, plain2=64'h8080008020200020。
4 结语
本文通过对碰撞检测过程的改进, 实现了基于最小一乘法的碰撞检测技术。利用仿真功耗采集平台和实测功耗采集平台, 成功检测到碰撞的发生, 验证了基于最小一乘法碰撞检测技术的有效性。
参考文献
[1]Paul K, Jaffe J, Jun B.Differential power analysis[C]//1999 International Conference on Advances in Cryptology (CRYPTO’99) , 1991, 1666:388-397.
[2]Suresh Chari, Josyula R Rao, Pankaj Rohatgi.Template Attacks[C]//Cryptographic Hardware and Embedded Systems (CHES’02) , 2002, 13-28.
[3]林克成, 邓高明, 赵强, 等.一种基于DES密码算法的旁路内部碰撞攻击方法[J].现代计算机, 2011 (Z1) :3-5.
[4]Schramm K, Wollinger T, Paar C.A New Class of Collision Attacks and Its Application to DES[C]//FSE 2003, LNCS, 2003, 2887:206-222.
[5]Davio M, Desmedt Y, Quisquater J J.Propagation Characteristics of the DES.In Advances in Cryptology[C]//CRYPTO’84, 1984:62-74.
[6]李佩之, 严迎建, 段二朋.DES密码芯片模板攻击技术研究[J].计算机应用与软件, 2013, 30 (4) :310-312.
[7]Ledig H, Muller F, Valette F.Enhancing Collision Attacks[C]//M Joye, J-J Quisquater.CHES 2004, LNCS 3156, 2004:176-190.
[8]Schramm K, Leander G, Felke P, et al.A Collision Attack on AES Combining Side Channel-and Differential Attack[C]//M Joye, J-J Quisquater.CHES 2004, LNCS 3156, 2004:163-175.
[9]Andrey Bogdanov.Multiple-Differential Side-Channel Collision Attacks on AES[C]//E Oswald, P Rohatgi.CHES 2008, LNCS 5154, 2008.International Association for Cryptologic Research 2008:30-44.
DES算法原理及改进 篇3
在众多加密算法中,1977年1月5日被美国国家标准局正式确定为美国的统一数据加密标准的DES(Data Encryption Standard)加密算法,经历了多年的考验,在数据加密领域仍占据着主要的地位,并且被各个领域广泛采用。该算法是一种对称的分组加密算法,输入的是64比特的明文,在56比特的密钥控制下,采用多次换位与代替相组合的处理方法对数据进行加密。
1 DES算法原理
1.1加密处理过程
DES加密算法的数据流程如图1所示。
该算法输入的是64比特的明文,在64比特的密钥控制下(其中每个第8位都用作奇偶校验),通过初始换位IP变成M0=IP(M),再对M0经过16层的加密变换,最后通过逆初始变换(也称最后变换)得到64比特的密文。密文的每一比特都是由明文的每一比特和密钥的每一比特联合确定的。DES的加密过程可分为初始换位、加密处理、最后换位三个部分。具体的运算过程如下:
1)初始换位
加密处理首先要对64比特的明文m按如图2所示的初始换位表IP进行换位,从而构造出64位比特的M0,M0=IP(M)=L0R0,其中L0表示M0的左32比特,R0表示M0的右32比特。
表中的数值表示输入比特被置换后的新比特位置。例如,输入的第1比特,在输出时被置换到第40比特的位置;输入的第2比特,在输出时被置换到第8比特的位置;输入的第58比特,在输出时被置换到第1比特的位置。最后换位的IP-1表如图3所示。
2)加密处理
换位处理的输出,中间经过16层复杂的加密变换。经过初始换位的64比特的输出变为下一步的输入,此64比特分成左L0、右R0两个32比特,从L0到L16和R0到R16共进行了图4所示的16次加密变换。经过i次处理后的左、右32比特分别为Li和Ri,则Li和Ri可作如下定义。
Li=Ri-1
Ri=Li-1⊕f(Ri-1,Ki)
Ki是由初始密钥(即种子密钥)导出的向第i层输入的48比特的密钥;Li-1和Ri-1分别是第i-1层的输出;f是以Ri-1和Ki为变量输出的由S盒置换构成的32比特函数。
3)最后换位
进行16次的加密变换之后,对L16、R16利用按图3所示的最后换位表IP-1作逆置换,得到64比特的密文,这就是DES加密的结果。
1.2解密处理
解密是加密的逆变换,即把最后换位表IP-1和初始换位IP完全倒过来变换,依此类推。另外,在16层的变换处理中,由于Li=Ri-1和Ri=Li-1⊕f(Ri-1,Ki),因此要求出Li-1和Ri-1,只要知道Li、Ri和Ki,并使用同一函数f所表示的变换即可实现。在各层变换中,如果采用与加密时期相同的Kn来处理,就能实现解密。具体地说,第一次迭代时用子密钥K15,第二次K14、最后一次用K0,算法本身并没有任何变化。依次类推,经过16层的变换即可得到L0和R0。
2 DES存在的问题
虽然,DES算法自出现以来一直作为非常安全的加密算法被用于各种数据的保护。但是,学术界对它进行了深入的研究后,发现了它的诸多缺点,主要集中在:
1)DES的加密单位仅有64位,对于数据传输太小。因为每个区组仅含8个字符,而且其中某些为还要用于奇偶校验。
2)密钥仅有56位太短,各次迭代中使用的密钥K(i)是递推产生,这种相关必降低了密码体制的安全性。在现有的技术条件下用穷举搜索法进行攻击,来获取正确密钥已趋于可行,所以不宜用DES算法保护10年以上的数据。
3)DES算法实现替代函数Si所用的S盒的设计原理未公开,其中可能有隐患,它是DES算法的核心,易被差分密码攻击。
为了克服以上的缺点,目前存在多种算法的改进方法,如:
1)三重DES算法
用三个不同密钥进行三重加密,即为
C=Ek3(Dk2(Ek1P))
P=Dk1(Ek2(Dk3C))
这种方法虽然提高了算法的加密强度,可以有效地抵抗穷举攻击法,但却增加了n-1倍的计算时间,降低了运行效率。
2)具有独立子密钥的DES算法
每一轮迭代都使用一个不同的子密钥,而不是由一个56位二进制密钥产生。但是密码专家证明利用261个选择明文便可破译DES变形。
3)带有交换S盒的DES算法
但是改变盒的次序将减弱抵抗差分密码分析的能力,进而减弱算法的安全性,更容易被差分密码法攻击,同时也不能提高对选择明文的攻击。
3改进的DES算法
以上各种DES算法的改进方案都存在不同的问题。针对一些比较适合大型的数据库的加密,提出了一种DES的改进方案。我们知道,DES是一种对二进制数据进行加密的算法,数据分组、密钥长度和输出密文均为64位,而数据库中每个字段长度未必是64的倍数,对尾部碎片的传统的做法是填充数据而使其成为一个整组。而当处理的数据非常大时,这种处理方法会使数据扩张,并且通常数据库的加密还有如下要求:
1)数据库加密以后,数据量不应明显增加;
2)某一数据加密后,其数据长度不变;
3)加/脱密速度要足够快,数据操作响应时间应该让用户能够接受。
所以传统的DES加密算法不适用于加密大型的数据库。为此,我们改进了DES尾部碎片的处理方法:把尾部碎片的前一整块己加密的密文再加密,其结果与尾部碎片异或,得与尾部碎片长度相同的尾部碎片密文。这样既保证系统安全性,又防止系统密文数据的膨胀。另外,字段长度本身比较短,即小于64位,不到一个分组。如果不进行数据扩张,其保密程度将会减弱,把不足一组的部分用随机数填满,弥补短字段易破译的缺陷,但这是以一定的数据膨胀为代价的。
下面把改进的DES算法描述如下:
输入:字段长度len,明文字段X,密钥key。
输出:密文字段Y
过程:
1)将明文字段X分块,X=X1||X2||…||Xn-1||Xn,其中len=(n-1)*8+|Xn|,||表示字段中连接,|X|表示x的字节数。2)若|Xn|=8则
输出Y,结束。
3)若|Xn|I<8,且n<=2则
输出YP结束。
4)若|Xn|<8,且n=1则
随机产生8-|Xn|g个价字节的串Z;
4结束语
这种改进的DES加密方案一方面保证了64位分组加密,同时又保证了数据库加密以后,数据长度不会变化。而且在加密时把尾部碎片的前一整块己加密的密文再加密,在脱密时也应该进行二次脱密,保证加解密后明文的一致性。这种改进的加密算法应用于一些在线考试系统中,既保证了安全性,又避免了数据的膨胀。所以DES的密码挪用法还是一种不错的改进方法。
参考文献
[1]陈湘.ASP.NET与网站开发编程实战[M].清华大学出版社,2002:88-90.
[2]李美满.网络考试系统题库与成绩安全性研究[J].计算机应用,2005,12:133-137.
[3]中国信息安全产品测评认证中心[J].信息安全理论与技术,2004:29-32.
3DES算法原理与设计 篇4
本文详细介绍了DES和3DES加密算法,并结合嵌入式系统开发知识,在以三星公司3C6410嵌入式微处理器为核心的嵌入式系统平台上,移植操作系统,并实现3DES加密算法。
1 DES和3DES加密算法简介
DES算法是一种分组对称加解密算法,明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。
DES算法的入口参数有三个,即Key,Data,Mode。Key为64bit密钥,Data为64bit数据,Mode为加密或解密模式。它把64位的明文输入块变为64位的密文输出块,他所使用的密钥也是64位,其算法主要分为两部分。首先进行初始置换,对64位数据块按位重新组合,并把输出分成左半部分L0和右半部分R0,每部分各32位长。其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位。然后进行逆运算,经过16轮运算后左、右部分在一起经过一个置换(初始置换的逆置换),由此即得到密文输出。其具体流程如图1所示。
3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。它以DES为基本模块,通过组合分组方法设计出分组加密算法,设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密表,这样,3DES加密过程为:C=Ek3(Dk2(Ek1(P)));3DES解密过程为:P=Dk1((EK2(Dk3(C)))。其中K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。在这种情况下,密钥的有效长度为112位。
2 系统实现
嵌入式系统采用三星S3C6410处理器作为系统的核心,并移植嵌入式Win CE6.0操作系统。配置1G Bytes NAND FLASH(型号为K9G8G08U0A)存贮加密/解密的数据。使用128M Bytes Mobile DDR存储器(两片Samsung K4X51163PC),使得数据传输总线频率可达266MHz,,提高的数据处理速度。集成了LCD液晶屏和触摸屏接口,方便人机交互。下面详细介绍系统系统实现方法。
2.1 硬件系统设计
硬件平台选用飞凌公司的OK6410开发板,其核心为Samsung S3C6410,它基于ARM11内核(ARM176JZF-S),采用了64/32位内部总线架构。该64/32位内部总线结构由AXI、AHB和APB总线组成。它还包括许多强大的硬件加速器,例如视频处理,音频处理,二维图形,显示操作和缩放。一个集成的多格式编编解码器(MFC)支持MPEG4/H.264编码、译码以及VC1的解码。H/W编码器/支持实时视频会议和NTSC、PL模式的TV输出。
S3C6410有一个优化的接口连线到外部存储器,存储器系统居于双重外部存储器端口、DRAM和FLASH/ROM/DRAM端口。DRAM的端口可以配置为支持移动DDR、DDR、移动SDRAM和SDRAM。。FLASH/ROM/DRAM端口支持NOR-FLASH,NAND-FLASH,ONENAND,CF,ROM类型外部存储器和移动DDR,DDR,移动SDRAM和SDRAM。
S3C6410包括许多硬件外设,如一个相机接口,TFT 24位真彩色液晶显示控制器,系统管理器(电源管理等),4通道UART,32通道DMA,4通道定时器,通用的I/O端口,IIS总线接口,IIC总线接口,USB主设备,在高速(480 MB/S)时USB OTG操作,SD主设备和高速多媒体卡接口、用于产生时钟的PLL。
S3C6410工作频率达667MHz以上,外围主要配置1G Bytes NAND FLASH、128M Bytes Mobile DDR存储器、串口、网络单元、语音单元、LCD及触摸屏等外设单元,硬件系统的核心框架如图2所示。
2.2 构建运行开发环境
嵌入式运行开发环境主要包括Visual Studio 2005软件开发平台、嵌入式操作系统Win CE 6.0以及相应的开发组件等。构建运行开发环境,首先要安装好所需的软件,具体如下:
1)Visual Studio 2005
2)Visual Studio 2005 Service Pack 1
3)MSDN(可选)
4)Windows Embedded CE6.0
5)Windows Embedded CE 6.0 Platform Builder Service Pack 1
6)WINCE6.0R2
7)Microsoft Device Emulator 2.0(可选)
8)Virtual Machine Network Driver for Microsoft Device Emulator(可选)
9)WINCE6.0 Updates
10)WINCE6.0R3
11)WINCE6.0R3 Update-Rollup
然后安装OK6410开发板的BSP,安装BSP时同时安装一个示例工程文件(S3C6410_CE6_DEMO),打开示例工程文件进行编译操作,如图3。
*方案配置:选择Samsung_SMDK6410Release。
*点击菜单“Build-->Advanced Build Commands-->Clean Sys-gen”开始编译。编译完成后,生成所需要的映像文件(tepldr.bin、Eboot.nb0、Eboot.bin、nk.bin)位于“WINCE600OSDesignsS3C6410_DEMOS3C6410_DEMORel DirSamsung_SMDK6410_Release”目录下。
最后烧写Win CE 6.0映像文件,相关的顺序烧写步骤如下:
1)使用PC端软件“IROM_Fusing_Tool.exe”,固化启动代码(OK6410_SDboot.nb0)到格式化为FAT32文件系统的SD存储卡内。并设置开发板从SD卡启动。
2)使用‘DNW’软件,通过串口线和USB线建立的PC机和开发板的联接,烧写stepldr.bin、eboot.bin到Nandflash,并设置开发板从Nandflash启动。
3)烧写Win CE内核映射文件nk.bin至Nand Flash。
完成上述操作后,开发板自动运行Win CE系统,构建运行开发环境完成。
2.3 3DES应用程序开发
在完成了Win CE 6.0操作系统的移植工作,下面开始应用程序的开发,基本思路是在Visual Studio 2005软件平台上设计开发3DES加密算法的应用程序,编译生成可执行文件,然后将可执行文件下载到嵌入式系统平台内运行即可。
首先,在Visual Studio 2005新建一个项目,命名为3DESTest。选择“Visvual C++”-->“Smart Device”-->“MFC Smart Device Application”模板。并对“MFC Smart Device Applilcation Wizard–3DES”对话框内的参数依次配置,其中“SDK”选择“TE6410board”,“Application type”选择“Dialog based”,其余参数默认即可。完成后进行窗口界面设计布局。
然后,进行3DES加密算法的编写,通过上述章节已经了解到3DES加密算法的原理和流程,具体操作如下。
*3DES算法加密明文:明文--->DES算法加密(密钥1)--->DES算法解密(密钥2)--->DES算法加密(密钥3)--->密文。
*3DES算法解密密文:密文--->DES算法解密(密钥3)--->DES算法加密(密钥2)--->DES算法解密(密钥1)--->明文。
所涉及的加密和解密的函数模块void DESWork::Encrypt Data(char*_src Data,unsigned int key X)和void DESWork::Decrypt Data(char*_src Data,unsigned int key X),“_src Data”表示所要加密或解密的字符串,“key X”表示加密或解密所使用的密钥编号。另外需要强调加密的明文或解密的密文必须是8的倍数,如果不足需要进行补充再加密或解密。最后编译程序代码直至成功。
最后,程序编译成功生成一个可执行的文件“3DES.exe”。通过微软公司Microsoft Active Sync工具,在Win CE和PC桌面系统之间建立联接。将可执行文件到Win CE系统的“Nand Flash”文件夹内。然后重新启动硬件平台进入Win CE操作系统内,运行可执行文件“3DES.exe”。图4为简单的演示界面。
运行表明,该系统能够有效的完成加密和解密的功能,实现简单灵活,易于移植,降低了系统的复杂程度。易于应用到嵌入式系统信息的安全保护上。
3 结束语
本文详细阐述了3DES算法原理,并结合嵌入式系统的相关知识,实现了3DES算法在嵌入式开发平台的系统设计。对嵌入式产品信息保护设计具有非常实用的参考价值。
摘要:该文详细介绍了3DES算法原理,嵌入式开发平台的搭建设,并此平台上实现了3DES算法功能设计。
关键词:3DES,嵌入式,移植
参考文献
[1]Schneier B.应用密码学[M].吴世忠,祝世雄,张文正,译.北京:机械工业出版社,2000.
[2]冯登国.密码分析学[M].北京:清华大学出版社,2000.
[3]Phung S.Windows CE 6.0嵌入式高级编程[M].张冬松,陈芳园,译.北京:清华大学出版社,2009.
[4](美)帕森斯,伦道夫.Visual Studio 2005高级编程[M].吴雷,译.北京:清华大学出版社,2008.
[5]孙媛.嵌入式系统基础及应用[M].北京:机械工业出版社,2009.
三重DES加密算法原理与实现 篇5
对称密码体制其特点是发送和接收的双方使用同一密钥,且该密钥必须保证不被泄露;加密算法的安全性依赖于密钥的秘密性,而非算法的秘密性。DES加密算法就是对称加密体制中的佼佼者。1977年1月,美国政府采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES)。DES被授权用于所有公开的和私人的非保密通信场合,后来它又曾被国际标准组织采纳为国际标准。
虽然现在DES已不作为数据加密标准,但至今它仍然被广泛的应用,而且它是一种最有代表性的分组加密体制。因此,研究这一算法的基本原理、设计思想、安全性分析以及实际应用中有关问题,对于掌握分组密码理论和当前的实际应用都是很有意义的。
1 DES算法原理
DES是一种分组加密算法。明文分组长度为64位。加密得到的密文分组长度为64位。密钥长度64位,8个字节。每一个字节的最高位用于奇偶效验,所以有效密钥长度为56位。其分组加密过程描述如下:(1)子密钥Ki的生成。(2)64位的明文经过一个初始置换IP后,被分成左右两半部分,每个部分32位,以L0和R0表示。(3)进行16轮迭代变换:第i轮变换将上一轮变换所得到的结果的右半部分与第i个子密钥Ki结合,这个过程称为f函数。第i轮变换结果的左半部分为上一轮变换结果的右半部分(即:Li=Ri-1),其右半部分为上一轮变换结果的左半部与上一轮变换结果的右半部经过F函数处理所的结果的异或:Ri=Li-1⊕F(Ri-1,Ki)。(4)16轮变换之后左右两部分再连接起来,经过一个初始逆置换IP-1得到密文。其加密过程如图1所示。
DES的解密算法与加密算法完全相同,只需要将密钥的应用次序与加密时相反应用即可。即解密过程是初始置换函IP数接受长度为64比特的密文输入,将16个子密钥按照K16到K1的顺序应用与F函数的16轮迭代运算中,然后将迭代的结果经由末置换函数IP-1得到64位的明文输出。
2 两个密钥的三重DES
由于DES密钥只有56bit,易于遭受穷举时攻击。作为一种替代加密方案,Tuchman提出使用两个密钥的三重DES加密方法,并在1985年成为美国的一个商用加密标准。该方法使用两个密钥,执行三次DES算法,如图2所示。加密的过程是加密-解密-加密,解密的过程是解密-加密-解密。
采用两个密钥进行三重加密的好处有:(1)两个密钥合起来有效密钥长度有112bit,可以满足商业应用的需要,若采用总长为168bit的三个密钥,会产生不必要的开销。(2)加密时采用加密-解密-加密,而不是加密-加密-加密的形式,这样有效的实现了与现有DES系统的向后兼容问题。因为当K1=K2时,三重DES的效果就和原来的DES一样,有助于逐渐推广三重DES。(3)三重DES具有足够的安全性,目前还没有关于攻破三重DES的报道。
3 Java语言编程实现DES算法
3.1 子密钥的生成
1)PC-1变换。将原密钥的各位按照PC-1矩阵重新排列,这一过程剔除了奇偶校验位。PC-1如下:
2)将排好的密钥分成两部分,前面28位为C0,后面28位为D0
3)从i=1开始,循环执行16次以下步骤得到16个子密钥。
(1)对Ci-1和Di-1进行相同位数的循环左移,得到Ci和Di
左移的位数为:
i取数值:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
移动数:1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
(2)连接Ci和Di,按照矩阵PC-2排列选择合适的位,构成子密钥Ki,该过程将56位压缩到48位,PC-2如下:
(3)i=i+1,转到(1),直到生成16个全部自密钥。
3.2 对64位明文分组加密
1)取得64位明文,不足补齐(补0)
2)对明文各位按照IP矩阵进行排列,矩阵为:
3)将得到的结果分为左右各32位两部分,称为L0,R0
4)从i=1开始,循环执行16次下列的加密过程
(1)按照下面矩阵E将32位的Ri-1扩展为48位,所得结果称为E(Ri-1),E阵为:
(2)将E(Ri-1)和Ki按位异或
(3)将所得结果分为8个部分,每个部分6位,形成B[1],…B[8]
(4)S盒替代。
S盒是8个子矩阵,称为S[1],….S[8],替代如下:将B[i]的第1位和第6位组成一个数称为R,第2、3、4、5位组成一个数称为C,用S[i]中对应的(R,C)中的4位数替换B[i],这样就将原来的48位替换成32位。
(5)P盒置换,按照下面的矩阵重新排列上面的结果
(6)将上一步处理的结果与Li-1按位异或,得到新的Ri,该过程可以简单记为:Ri=Li-1⊕F(Ri-1,Ki)
(7)i=i+1转(4)的第一步,直到完成16次循环
(8)进行IP-1置换,将上面得到的L16R16按照下面的矩阵进行置换:
加密过程结束,解密过程是用K16,K15,…..K1
3.3 DES算法的伪代码表示
C[0]d[0]=PC1(KEY)
FOR I=1 TO 16
C[I]=LS[I](C[I-1])
D[I]=LS[I](D[I-1])
K[I]=PC2(C[I]D[I])
L[0]R[0]=IP(PLAIN BLOCK)
FOR I=1 TO 16
L[I]=R[I-1]
R[I]=L[I-1]⊕F(R[I-1],K[I])
CIPHER BLOCK=FP-1(L[16]R[16])
4 算法安全性分析
DES算法具有相当高的复杂性,密码函数F的非线性性质非常好,起到的“扰乱”效果非常显著,并且还遵循了严格雪崩准则和比特独立准则,这使得要破译它的开销要超过可能获得的利益。再加上其便于理解掌握,经济有效,因此,得到了广泛的应用。算法具有极高的安全性,到目前为止,除了用穷举搜索法对算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2300年的时间。而采用三重DES,破译它就更可想而知了。当然,这并不等于说是不可破解的。而实际上,随着硬件技术和网络的发展,其破解的可能性越来越大,而且,所需要的时间越来越少。
DES算法的有效密钥长度为56位,因此,在实际应用中,我们应避开使用第8,16,24,......64位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。
参考文献
[1]陈卓.网络安全技术[M].北京:机械工业出版社,2004.