混合密码算法

2024-07-14

混合密码算法(精选八篇)

混合密码算法 篇1

关键词:SM4,SM2,混合密码算法

0 引言

随着计算机网络和通信技术的高速发展, 电子商务和电子政务的需求和应用日益增加。大量的敏感信息常常通过公共通信设施或计算机网络进行交换, 密码技术是确保信息安全的主导力量, 密码算法的研究与应用是信息安全技术的核心研究领域。目前, 密码算法主要分为两类:一类为对称密钥算法, 另一类为非对称密钥算法[1]。

对称密钥算法又叫传统密码算法, 就是加密密钥能够从解密密钥中推算出来, 反过来也成立。在大多数对称算法中, 加密和解密密钥是相同的。对称密钥算法的优点是:算法实现的效率高、速度快和便于实现, 尤其是对大块数据的加密。缺点是:密钥管理复杂和安全性难以实现, 首先, 在对称密钥密码系统中, 每两个相互通信的人就需要一对密钥, 这就导致了当用户增加时密钥量的成倍增长;其次, 加解密的安全性完全依赖于对密钥的保护, 由于通信双方使用的是相同密钥, 为了保证安全必须使用另外的安全信道来分发密钥[2], 但这种做法往往难以实现。

非对称密钥算法突破性地解决了对称密钥算法无法解决的密钥分发和管理问题。在非对称密钥算法中, 加密和解密使用不同的密钥, 加密密钥公开, 谁都可以使用, 解密密钥只有解密方自己知道, 非法者根据公开的加密密钥无法推算出解密密钥。非对称密钥算法的优点在于:首先, 密钥管理简单, 在多人之间进行保密信息传输所需要的密钥组和数量很小;其次, 密钥的发布不成问题;再次, 信息传输的安全性高。非对称密钥算法的缺点是:加解密速度较对称算法慢, 并且只适用于加密小块数据, 譬如传输密钥、数字签名等。

在实际应用中, 使用单一的加密技术往往不能得到很好的效果, 将对称密钥和非对称密钥技术相结合已经越来越得到人们的重视[3]。SM4和SM2算法是我国国家密码管理局公布的两种重要的商用密码算法, SM4为对称密钥算法, SM2为非对称密钥算法, 在我国商用密码体系中用来替换RSA算法。本文将SM4和SM2算法的优点相结合, 提出了一种新型的混合密码算法, 即基于SM4和SM2算法的混合密码算法, 可以有效地提高信息传输的安全性和高效性。

1 SM4算法介绍

SM4算法全称为SM4分组密码算法, 是国家密码管理局2012年3月发布的第23号公告中公布的密码行业标准。SM4算法是一个分组对称密钥算法, 明文、密钥、密文都是16字节, 加密和解密密钥相同。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密过程与加密过程的结构相似, 只是轮密钥的使用顺序相反[4]。

SM4算法将明文和密文均看成4个32比特字, 即明文 (X0, X1, X2, X3) ∈ (Z232) 4, 密文 (Y0, Y1, Y2, Y3) ∈ (Z232) 4, 轮密钥为rki∈Z232, i=0, 1, 2…31, 反序变换R为R (A0, A1, A2, A3) = (A3, A2, A1, A0) , Ai∈Z232, i=0, 1, 2, 3。

本算法的加密变换为:

本算法的解密变换与加密变换结构相同, 不同的仅是轮密钥的使用顺序。

加密时轮密钥的使用顺序为: (rk0, rk1, …rk31) ;解密时轮密钥的使用顺序为: (rk31, rk30, …rk0) 。

轮密钥由加密密钥生成, 加密密钥长度为128比特, 表示为MK= (MK0, MK1, MK2, MK3) , 其中MKi∈Z232 (i=0, 1, 2, 3) 。

SM4算法的优点是软件和硬件实现容易, 运算速度快, 但该算法的缺点是消息安全取决于对密钥的保护, 泄漏密钥就意味着任何人都能对消息进行密码和解密。由于其加密过程和解密过程互逆, 这两个过程均使用相同的保密密钥, 使得对称密钥加密体制的适用范围受到了很大限制。

2 SM2算法介绍

SM2算法全称为SM2椭圆曲线公钥密码算法, 是国家密码管理局2010年12月发布的第21号公告中公布的密码行业标准。SM2算法属于非对称密钥算法, 使用公钥进行加密, 私钥进行解密, 已知公钥求私钥在计算上不可行。发送者用接收者的公钥将消息加密成密文, 接收者用自已的私钥对收到的密文进行解密还原成原始消息[5]。

2.1 SM2加密算法流程

设需要发送的消息为比特串M, klen为M的比特长度。为了对明文M进行加密, 作为加密者的用户应实现以下运算步骤:

步骤1:用随机数发生器产生随机数k∈[1, n-1];

步骤2:计算椭圆曲线点C1=[k]G= (x1, y1) , 将C1的数据类型转换为比特串;

步骤3:计算椭圆曲线点S=[h]PB, 若S是无穷远点, 则报错;

步骤4:计算椭圆曲线点[k]PB= (x2, y2) , 将坐标x2、y2的数据类型转换为比特串;

步骤5:计算t=KDF (x2||y2, klen) , 若t为全0比特串, 则返回步骤1;

步骤6:计算C2=M⊕t;

步骤7:计算C3=Hash (x2||M||y2) ;

步骤8:输出密文C=C1||C2||C3。

2.2 SM2解密算法流程

设klen为密文中C2的比特长度。为了对密文C=C1||C2||C3进行解密, 作为解密者的用户应实现以下运算步骤。

步骤1:从C中取出比特串C1, 将C1的数据类型转换为椭圆曲线上的点, 验证C1是否满足椭圆曲线方程, 若不满足则报错并退出;

步骤2:计算椭圆曲线点S=[h]C1, 若S是无穷远点, 则报错并退出;

步骤3:计算[dB]C1= (x2, y2) , 将坐标x2、y2的数据类型转换为比特串;

步骤4:计算t=KDF (x2||y2, klen) , 若t为全0比特串, 则报错并退出;

步骤5:从C中取出比特串C2, 计算M'=C2⊕t;

步骤6:计算u=Hash (x2||M'||y2) , 从C中取出比特串C3, 若u≠C3, 则报错并退出;

步骤7:输出明文M′。

SM2算法相比较其它非对称公钥算法如RSA算法而言, SM2算法使用更短的密钥串就能实现比较牢固的加密强度, 同时由于密钥串相对较短, 加密速度也就比RSA算法快。相对于SM4算法, SM2算法具有密钥占用的存储空间小、安全性高等优点, 但是也存在算法复杂、加解密大块数据的速度慢和效率较低的缺陷。

3 SM4和SM2相结合的混合加密算法技术

利用SM4算法加密速度快和SM2算法加密安全性高、密钥管理简单、带宽要求低的优点, 将两者相结合, 必然能得到更高效率、更安全的加密技术。其基本原理为:数据在网络上通信之前, 发送方随机生成一个SM4算法的随机密钥key, 用SM4算法对需传送的明文数据加密, 然后再用SM2算法对该密钥key进行加密。这样接收方在接收到该密文数据和被加密了的密钥数据后, 同样用SM2算法解密出此随机密钥key, 再用此随机密钥key对密文进行SM4解密。每次明文数据加密的随机密钥key都不同, 不存在SM4密钥管理的问题, 这种加密和解密方案既保证了数据安全又提高了加密和解密的速度。从而真正实现了网络数据安全、高效、快捷地传输。

3.1 混合算法加密流程

混合加密算法的流程是:设发送方为A, 接收方为B (B的公钥PublicKeyB, B的私钥PrivateKeyB) , K为用于SM4加密的会话密钥 (假设通信双方互相知道对方的SM2公钥) 。用这种SM4和SM2的混合加密方式传送明文数据Data要经过以下几个步骤, 流程见图1[6]。

步骤1:发送方A随机生成SM4算法加解密的密钥Key;

步骤2:发送方A从密钥服务器中获取接收方公开的SM2公钥PublicKeyB;

步骤3:发送方A用SM4密钥Key对明文Data进行SM4加密得到密文块CipherData;

步骤4:发送方A用接收方公钥PublicKeyB进行SM2算法加密密钥Key得到密钥块CipherKey;

步骤5:发送方A将密文块CipherData和密钥块CipherKey相加形成发送数据Cipher。

3.2 混合算法解密流程

接收方收到密文后解密要经过以下几个步骤, 流程见图2。

步骤1:接收方B将数据Cipher分为密文块CipherData和密钥块CipherKey;

步骤2:接收方B用SM2私钥PrivateKeyB对CipherKey进行SM2解密得到SM4密钥Key;

步骤3:接收方B用SM4密钥key对密文块CipherData进行SM4解密得到明文Data。

4 实验结果

本文对SM4和SM2混合加密算法进行了验证, 硬件平台为同方THD86芯片, CPU工作频率为16M。实验数据表明, 混合算法加密和解密的结果正确, 算法实现起来方便可行, 符合商用标准, 各步骤的数据如表1所示。

5 安全性能分析

混合加密的安全性主要在于对SM4随机密钥的保护。目前主流的方法是利用RSA算法对随机密钥进行加密, 而本文提出的方案是利用SM2算法加密随机密钥, 所以只需要比较RSA算法和SM2算法的性能指标即可。

RSA算法数学原理简单, 在工程应用中比较易于实现, 但它的单位安全强度相对较低。目前用国际上公认的对于RSA算法最有效的攻击方法, 即一般数域筛 (NFS) 方法去破译和攻击RSA算法, 它的破译或求解难度是亚指数级的[7,8]。SM2算法的数学理论非常深奥和复杂, 在工程应用中比较难于实现, 但它的单位安全强度相对较高。用国际上公认的对于SM2算法最有效的攻击方法Pollard rho方法去破译和攻击SM2算法, 它的破译或求解难度基本上是指数级的。SM2算法的单位安全强度高于RSA算法, 也就是说, 要达到同样的安全强度, SM2算法所需的密钥长度远比RSA算法低。一般认为, 当SM2密码体制的密钥长度为160bit时, 其安全性相当于RSA[9]使用1 024bit密钥长度, 密钥短意味着更短的处理时间和密钥存储空间。总之, SM2具有安全性能更高、计算量小、处理速度快、存储空间占用小、带宽要求低和便于密码管理等优点, 能在整体上提高加密过程中的速度与安全性。

本文在同方THD86芯片上对SM2算法和RSA算法的性能进行了测试, 工作频率为系统时钟16M、协处理器32M, 实验结果见表2。

运行数据表明, SM2算法在存储空间和加密上较RSA算法有很大的优势。SM2算法加密速度比RSA算法快, 但解密速度比RSA算法慢。从表2中可以看出, SM2算法的密钥长度为256位, 远远小于RSA算法的1 024位, 说明SM2算法需要的存储空间远远小于RSA算法。

6 结语

基于SM4和SM2算法的混合加密算法, 通过C语言在同方THD86芯片上的实验验证表明, 其具有如下显著优点:①大量的主体数据明文采用加密速度极快的SM4算法, 而只对SM4算法的密钥key这样数据量小的信息才采用SM2算法, 所以加密、解密速度很快;②采用SM2算法对SM4的密钥进行加密, 既保证了密钥安全又不需要单独发送密钥, 减小了密钥泄密的风险;③无需复杂额外的密钥管理, 有利于方案的升级和维护。本文通过理论分析和实践证明, SM4和SM2混合算法运算速度快、安全性高, 可用于电子商务和电子政务中。

参考文献

[1]张先红.数字签名原理及技术[M].北京:机械工业出版社, 2004.

[2]胡振宇, 蒋建春.密码学基础与安全应用[M].北京:北京邮电大学出版社, 2008.

[3]陈相琳, 刘润涛, 于存光.基于DES与ECC的混合数据加密算法[J].哈尔滨理工大学学报, 2007 (2) :59-62.

[4]国家密码管理局.SM2椭圆曲线公钥密码算法[S].2010.

[5]王春风, 钱军.网络安全中基于DES和RSA混合加密技术的研究[J].淮南师范学院学报.2007 (5) :27-28.

[6]国家密钥管理局.SM4分组密码算法[S].GM/T 0002-2012.

[7]JYU-YUAN LAI, CHIH-TSUN HUANG.A highly efficient cipher processor for dual-field elliptic curve cryptography[J].IEEE Trans.on Circuits and Systems-Ⅱ, 2009, 56 (5) :394-398.

[8]SHUMIN XU, XIN TIAN, JIANWEI LIU, et al.Hardware design of SM2coprocessor with improved modular inversion module[C].第十七届全国青年通信学术年会论文集, 2012.

混合密码算法 篇2

JAVA实验报告

一、JAVA编程模拟密码攻击MimaGongji 1.模拟密码攻击MimaGongji功能需求分析

编程模拟密码攻击的过程,实现下述功能:

(1)键盘输入12位密码,包括字母和数字;

(2)采用穷举法进行攻击,直到破解密码为止;

(3)屏幕输出试验的次数,并输出获得的密码。

2.MimaGongji基本设计思路

1)基于对MimaGongji功能需求的分析,MimaGongji这个类作为主类,实现主要功能,包括密码的流输入,密码的穷举法破解和破解后密码的输出。2)Java.io.*这个包主要实现数据的流输入和流输出。

3)public static void main(String[] args)这个方法是主要的方法,实现密码的键盘输入,采用穷举法进行攻击,并屏幕输出试验的次数和获得的密码。4).length()这个方法主要是计算一个字符串的长度

3.实验步骤

1)Java程序代码(*.java)和详细的行注释 //文件名称为“MimaGongji.java” import java.io.*;//加入java的流输入和流输出包 class MimaGongji //定义主类 {

public static void main(String[] args)//引入主要方法 {

String s=“";try{ BufferedReader

mima=

new

BufferedReader(new InputStreamReader(System.in));//定义密码的流输入

JAVA实验报告

//统计试验的次数

}

System.out.print(po);

} //输出破解之后的密码

} System.out.println();//换行 System.out.println(”试验次数:“+g);//输出提示“试验的次数”

} }//类申明的结束

2)程序的运行(包括运行的过程、界面和结果图)

首先编写如上所示的源程序,保存文件名称为“MimaGongji.java”,然后编译源程序,编译完成后,生成一个字节码文件MimaGongji.class,执行这个程序,得到如下图所示的窗口:

JAVA实验报告

getContentPane().add(pb,BorderLayout.SOUTH);//把面板添加到窗口上

t1=new JTextField(50);//创建文本框

t2=new JTextField(50);//创建文本框

t3=new JTextField(50);//创建文本框 t4=new JTextField(5);//创建文本框 t5=new JTextField(5);//创建文本框 t6=new JTextField(5);//创建文本框

t2.setEditable(false);//定义文本框的不可书写

t4.setEditable(false);//定义文本框的不可书写

t5.setEditable(false);//定义文本框的不可书写

t6.setEditable(false);//定义文本框的不可书写

p.add(l3,BorderLayout.NORTH);//把标签添加到面板上 p.add(t3,BorderLayout.CENTER);//把文本框添加到面板上 p.add(l1,BorderLayout.NORTH);//把标签添加到面板上 p.add(t1,BorderLayout.CENTER);//把文本框添加到面板上 p.add(l2,BorderLayout.NORTH);//把标签添加到面板上 p.add(t2,BorderLayout.CENTER);//把文本框添加到面板上 p.add(l4,BorderLayout.NORTH);//把标签添加到面板上 p.add(t4,BorderLayout.CENTER);//把文本框添加到面板上 p.add(l5,BorderLayout.NORTH);//把标签添加到面板上 p.add(t5,BorderLayout.CENTER);//把文本框添加到面板上 p.add(l6,BorderLayout.NORTH);//把标签添加到面板上 p.add(t6,BorderLayout.CENTER);//把文本框添加到面板上 b0=new JButton(”生成父母基因“);//创建父母基因生成按钮 pb.add(b0);//添加到面板上

b1=new JButton(”100次交叉、变异“);//创建交叉、变异按钮 pb.add(b1);//添加到面板上 b2=new JButton(”200次交叉、变异“);pb.add(b2);b3=new JButton(”500次交叉、变异");

JAVA实验报告

Object s=e.getSource();if(s==b0)//监听器实现功能 {

t3.setText(s1);//t3文本框输出s1

} t1.setText(s2);t4.setText(String.valueOf(H1));t5.setText(String.valueOf(H2));

if(s==b1)time(100);//监听器实现功能

} if(s==b2)time(200);if(s==b3)time(500);

public void time(int r)//定义方法,实现函数的调用

{

int x,y,z,d1=0,d2=0,w,k,H3=0;

c=new int[23];//定义一个数组

for(int j=1;j<=r;j++)//基因的交叉 {

x=1+(int)(Math.random()*23);//生成一个随机父亲基因位

y=1+(int)(Math.random()*23);//生成一个随机母亲基因位

z=f[x-1];f[x-1]=m[y-1];m[y-1]=z;//两个基因位的基因调换 }

for(int j=0;j<23;j++)//分别计算父母基因总和

{

d1+=f[j];

JAVA实验报告

2)程序的运行(包括运行的过程、界面和结果图)

首先编写如上所示的源程序,保存文件名称为“YichuanSuanfa.java”,然后编译源程序,编译完成后,生成一个字节码文件YichuanSuanfa.class,执行这个程序,得到如下图所示的窗口:

随机生成父母基因,得到如下图示:

JAVA实验报告

500次交叉、变异之后,得到如下图示:

4.实验心得

.java文件名要与主类名相同,JAVA对字

1.编写调试程序要注意程序编写的规则,母的大小写特别敏感,输入时要特捏注意大小写字母的定义,千万别犯主类名与.java文件名不同的错误。

2.在做图形界面时,注意设置图形界面的大小以及文本框、标签和按钮的位置。创建文本框的时候,可以设置文本框的可写性,以及文本框的颜色等等。在随机生成父母基因的时候,注意生成的随机数是什么范围,我们实验要求的范围是什么。监听器的响应,在文本框中输出的是一个基因整体还是一个数,都需要注意,因为这两种输出的方法不同。

3.为了简化程序,我们应该学会调用函数的方法。一开始做程序的时候,我没有注意到这一点,导致我的程序代码非常繁杂,而且容易出错。在同学的建议下,我把100次、200次、500次交叉、变异的实现使用调用函数的方法,这样我的程序代码变得简明多了。因此,在做程序的时候应该考虑到程序代码的简明扼要,不但美观,还能保证

JAVA实验报告

正确性的要求。

IDEA对称密码算法剖析 篇3

IDEA (International Data Encryption Algorithm:国际数据加密算法) 是1990年由瑞士联邦技术学院的X.J.Lai和Massey提出的PES (Proposed Encryption Standard:建议标准算法) 的改进版本。于1992年命名为IDEA。IDEA对PES的抗差分分析的能力进行了强化处理, 其安全性非常高, 同一种算法既可以用于加密, 又可以用于解密, 其唯一的区别仅仅在于子密钥的生成方法不同。IDEA算法在诸如邮件加密系统PGP等多种商业产品中被广泛使用。

IDEA是一种分组长度为64位的分组密码算法, 密钥长度为128位。128位的密钥用于产生52个子密钥。在整个加密过程中, 总共需要进行8轮迭代运算, 整个迭代过程需要48个子密钥, 另外4个子密钥用于最终的64位密文的输出变换。

IEDA算法基于“相异代数群上的混合运算”的设计思想, 其迭代运算中采用了三种数学运算:16位整数的模216加法运算、16位分组的按位异或运算和16位整数的模216+1乘法运算。为了叙述简洁, 在后文中将直接称这三种运算为加法、乘法和异或运算。这三种运算中的任何一对运算都不满足分配律, 也不满足结合律, 这让它们的组合能对输入作出复杂的变换, 从而使得攻击者无法使用化简的方式来分析明文及密钥之间的关系, 因此, 对IDEA算法的密码分析要比对只使用异或运算的DES算法的分析要困难得多。

2 算法原理及框架

IDEA的加密过程包括两个部分:明文到密文加密的8轮迭代运算和子密钥的产生。

2.1 IDEA加密迭代运算

IDEA加密迭代运算过程如图1所示。输入的64位明文数据分组被分成4个16位的子分组, 分别记为X1、X2、X3和X4。这四个分组作为算法的第一轮的输入, 整个加密过程总共进行8轮迭代运算, 最终产生64位的密文输出。

在图1中, 每轮运算分为两部分。

第一部分是变换运算, 其方法是采用加法及乘法运算将4个16位的子明文分组与4个子密钥混合, 产生4个16位的输出。具体的变换方法是:

(1) X1和第一个子密钥进行乘法运算。

(2) X2和第二个子密钥加法运算。

(3) X3和第三个子密钥加法运算。

(4) X4和第四个子密钥乘法运算。

然后将这4个16位输出进行两两配对, 采用逻辑异或 (XOR) 运算将数据混合, 产生2个16位的输出, 即:将 (1) 和 (3) 的结果进行异或运算, 将 (2) 和 (4) 的结果进行异或运算。这两个16位的输出, 连同另外的两个子密钥成为第二部分的输入。

第二部分是用于产生扩散特性的乘加 (MA) 运算。MA运算生成2个16位输出。MA的输出再与变换运算的输出采用XOR运算产生4个16位的最后输出, 这4个16位的最后输出即成为下一轮运算的原始输入。在这4个最后结果中的第2、3个输出是经位置互换而得到的, 这样处理的目的是对抗差分分析攻击。

明文分组在经过8论加密后, 再经过最后的输出变换形成正式的密文。最后的输出变换与前面每一轮的变换运算大致相同, 惟一不同之处在于第2、3个输出是不需要经过位置互换的。这种特殊安排的目的在于可以使用与加密算法相同结构的解密算法进行解密, 从而简化了设计及使用IDEA算法的复杂性。

2.2 IDEA子密钥的产生

2.2.1 加密子密钥的产生

IDEA一次完整的加密运算需要52个子密钥, 它们都是由一个128位的加密密钥产生的。其产生方法如下:

首先将128位加密密钥分成8份:Z1、Z2……、Z8, 其中Z1对应加密密钥中的最高有效的16位, 而Z8则对应于加密密钥中的最低有效的16位。然后将加密密钥循环左移25位后, 用同样的方法得到另外的新的8个子密钥, 如此Z1到Z52陆续生成52个子密钥。

2.2.2 解密子密钥的产生

IDEA的解密过程与加密过程完全相同, 即将密文分组作为输入而逐步恢复明文, 所不同的是参与迭代运算的解密子密钥的生成方式。解密子密钥U1、U2、……、U52是从加密密钥Z1、Z2……、Z8导出的。解密过程中的第i轮循环的头4个子密钥是从加密循环的第 (10-i) 的头4个子密钥导出的, 其中变换阶段被记为循环9。解密密钥的第1个和第4个子密钥等于对应的第1个和第4个加密密钥的模216+1乘法逆元。从第2到第8个循环, 第2和第3个解密子密钥等于对应的第2个和第3个加密子密钥的模216加法逆元, 而第1和第9个循环的第2和第3个解密子密钥等于对应的第2个和第3个加密密钥的模216加法逆元。而对于头8个循环来说, 循环i的最后两个解密子密钥等于加密循环 (9-i) 的最后两个子密钥。

3 源代码解析

3.1 实例使用的简单说明

3.1.1 实例运行说明

本实例的开发平台为Windows和VC++8.0。程序运行是需要提供两个输入:一是需要加/解密的文件的文件名, 另一个是用户自己提供的128位会话密钥。需要加密的明文数据需要用文本文件 (.txt) 存放, 程序运行的第一步首先就是按用户输入的文件名将需要加/解密的文件打开, 若文件打开失败 (文件不存在或文件名或扩展名错) 则程序自动退出。加密后生成的加密文件的文件名与明文文件名相同, 但扩展名为.enc, 如果是解密, 则解密生成的明文文件名为tempfile.txt。

3.1.2 主要函数及流程说明

本实例代码是对IDEA加密算法的独立实现, 不涉及到与其他系统和应用的交互。

本实例代码实现主要包括两部分:

(1) 头文件部分:idea.h。该部分包含了本实例所需要的系统函数以及与IDEA相关的数据结构和函数的声明。

(2) 算法核心代码部分:idea.cpp。该部分是IDEA算法的加/解密和子密钥生成的实现部分。主要包括如下几个函数 (按函数出现的顺序进行介绍, 函数中的疑难语句将在源代码中以注释的方式给出) :

1) static uint16 inv (uint16 x)

该静态函数的功能是提供由加密密钥得到解密密钥的模运算:加密密钥与解密密钥的模216+1乘运算:1 MOD (216+1) 。前文已经提到, 由加密子密钥通过计算模加和模乘运算的逆元即可得到解密子密钥。函数的返回值为16位的无符号整数, 参数x也为16位的无符号整数。

2) static void en_key_idea (word16*userkey, word16*Z)

该静态函数的功能是将用户提供的128位会话密钥产生生成迭代运算所需要的52个子密钥。该函数没有返回值, 生成的52个子密钥存放在一个16位的数组Z中, Z为该函数的参数之一, 另一个参数是指向16位的字类型的指针 (16*8=128位) 。

3) static void de_key_idea (IDEAkey Z, IDEAkey DK)

该静态函数的功能是生成解密子密钥, 并将其存放到数组Z中。

4) uint16 mul (uint16 a, uint16 b)

该函数的功能是实现模乘运算。 (见图1图例说明部分。)

5) static void cipher_idea (word16 in[4], word16 out[4], register CONST IDEAkey Z)

该静态函数是本算法的核心代码部分, 其功能就是在获得64位明文的4个16位子分组和52个子密钥的基础上实现图1所示的加/解密迭代运算过程。

6) void cipher_file (FILE*in, FILE*out, word16*key)

该函数的功能就是调用5) 中的加密函数实现对给定明文文件 (.txt文件) 和给定的128位会话密钥的IDEA加密。

7) void decipher_file (FILE*in, FILE*out, word16*key)

该函数的功能是实现解密。由于IDEA加密算法的加解密过程完全一样, 所不同的仅仅是解密过程中用到的是由52个加密子密钥导出的52个解密子密钥。

8) void swap_files_and_clean_up (char*file)

该函数的功能是将加/解密的结果以文件形式存放到磁盘。

9) void getuserkeyfromargv (word16*key, char*arg)

该函数的功能是对密钥进行格式化处理。

10) void GetChoice (int&choice, char szFileName[100], char szKey[50])

该函数是本实例的运行界面及操作说明显示。

11) int main ()

Main () 函数对以上各函数进行调用实现算法功能。

3.2 头文件部分

3.3 cpp文件部分

4 结语

IDEA加密算法不受差分分析的影响, 其密钥长度为128位, 具有非常大的密钥空间。该算法代码量少, 运行速度快, 并且具有非常高的安全性, 目前, 尚未出现任何一篇公开发表的试图对IDEA进行密码分析的文章。本文在深入剖析IDEA对称密钥分组加密算法原理和实现过程的基础上, 对基于VC++的实例实现进行了详尽的解析说明。

参考文献

[1]Bruce Schneier.Applied Cryptography:Protocols, Algorithms, and Source Code in C.北京:机械工业出版社, 2000.

[2]胡建伟.网络安全与保密.北京:西安电子科技大学出版社, 2003.

[3]石志国.计算机网络安全教程.北京:清华大学出版社, 北京交通大学出版社, 2004.

[4]Susan Yong Dave Aitel.The Hacker’s Handbook The Strategy behind Breaking into and Defending Networks.北京:机械工业出版社, 2006.

公钥密码体制与RSA算法 篇4

关键词:公钥密码体制RSA算法,加密体制

0.引言

随着计算机联网的不断发展,全球经济发展正在进入信息经济时代,计算机信息的保密问题显得越来越重要,无论是个人信息通信还是电子商务发展,都迫切需要保证Internet网上信息传输的安全,需要保证信息安全。信息安全技术涉及信息论、计算机科学和密码学等多方面知识,它的主要任务是研究计算机系统和通信网络内信息的保护方法以实现系统内信息的安全、保密、真实和完整。其中,信息安全的核心是密码技术。密码技术是集数学、计算机科学、电子与通信等诸多学科于一身的交叉学科。它不仅能够保证机密性信息的加密,而且能够实现数字签名、身份验证、系统安全等功能。是现代化发展的重要科学之一。本文将对公钥密码系统及该系统中目前最广泛流行的RSA算法做一些简单介绍。

1. 公钥密码系统

20世纪70年代Diffie和Hellman以及Erkle分别提出了公开密钥密码体制的思想, 它同于常规的对称密钥密码体制, 算法的核心是向陷门函数的应用, 加密和解密使用不同的密每个用户保存着一对密钥--公开密钥PK和秘密密钥SK, 二者不能相互推导。用户公开密钥可以发布出去, 只要保障秘密密钥的安全即可。

1.1 公钥密码

公钥密钥加密方法是1976年由Hellman和Diffie首先提出,当时堪称密码学方向的里程碑。其主要思想是:采用两个密钥,一个公开密钥,一个私有密钥。发送方发送信息时用对方的公开密钥加密,收信方用自己的私用密钥进行解密。目前,公认比较安全的公开密钥算法主要有RSA算法及其变种Rabin算法、离散对数算法等。

1.2 公钥密码体制的原理

公钥密码体制的思想并不复杂,而实现它的关键问题是如何确定公钥和私钥及加密、解密的算法。我们假设在这种体制中, PK是公开信息,用作加密密钥,而SK需要由用户自己保密,用作解密密钥。加密算法E和解密算法D也都是公开的。虽然SK与PK是成对出现,但却不能根据PK计算出SK。它们须满足条件:

(1) 加密密钥PK对明文X加密后,再用解密密钥SK解密,即可恢复出明文,或写为:DSK (EPK (X))=X

(2) 加密密钥不能用来解密,即DPK (EPK (X))≠X

(3) 在计算机上可以容易地产生成对的PK和SKㄢ

(4) 从已知的PK实际上不可能推导出SKㄢ

(5) 加密和解密的运算可以对调,即:EPK (DSK (X))=X

从上述条件可看出,公开密钥密码体制下,加密密钥不等于解密密钥。加密密钥可对外公开,而该用户唯一保存的私人密钥是保密的,也只有它能将密文复原、解密。虽然解密密钥理论上可由加密密钥推算出来,但这种算法设计在实际上是不可能的,或者虽然能够推算出,但要花费很长的时间而成为不可行的。所以将加密密钥公开也不会危害密钥的安全。

2、RSA算法

RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。

该算法基于下面的两个事实, 这些事实保证了RSA算法的安全有效性:

(1) 已有确定一个数是不是质数的快速算法;

(2) 尚未找到确定一个合数的质因子的快速算法。

2.1 RSA算法的工作原理

(1) 任意选取两个不同的大质数p和q,计算乘积r=p*q;

(2) 任意选区一个大整数e, e与 (p-1) * (q-1) 互质,整数e用做加密密钥。注意:e的选取是很容易的,例如,所有大于p和q的质数都可用;

(3) 确定解密密钥d:d*e=1 mod (p-1)*(q-1)根据e、p和q可以容易地计算出d;

(4) 公开整数r和e,但是不公开d;

(5) 将明文P (假设P是一个小于r的整数) 加密为密文C,计算方法为:C=Pemod r;

(6) 将密文C解密为明文P,计算方法为:P=Cd mod r;

然而只根据r和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。

2.2 RSA算法的优缺点

2.2.1 优点

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。该算法的加密密钥和加密算法分开,使得密钥分配更为方便。它特别符合计算机网络环境。对于网上的大量用户,可以将加密密钥用电话簿的方式印出。如果某用户想与另一用户进行保密通信,只需从公钥簿上查出对方的加密密钥,用它对所传送的信息加密发出即可。对方收到信息后,用仅为自己所知的解密密钥将信息脱密,了解报文的内容。由此可看出,RSA算法解决了大量网络用户密钥管理的难题,这是公钥密码系统相对于对称密码系统最突出的优点。

2.2.2 缺点

(1) 产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

(2) 安全性, RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NPC问题。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构: (XM) d=Xd*Md mod nㄢ

这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash Function对文档作HASH处理,或同时使用不同的签名算法。除了利用公共模数,人们还尝试一些利用解密指数或φ(n)等等攻击。

(3) 速度太慢, 由于RSA的分组长度太大,为保证安全性,n至少也要600 bitx以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。

3、结论

RSA不仅可以加密,还能够完成签名验证功能。密码系统中,RSA公开密钥密码算法在信息交换过程中使用比较广泛、安全性比较高。

一种AES密码算法的硬件实现 篇5

密码模块是安全保密系统的重要组成部分,其核心任务就是加/解密数据。目前,分组密码算法AES以其高效率、低开销、实现简单等特点被广泛应用于密码模块的研制。随着计算机信息技术和超大规模集成电路技术的成熟与发展,通过硬件来实现密钥模块的内部运作,可保证在外界无密钥的明文流动,能够实现真正意义上的保密。此外,硬件实现还具有高速、高可靠性等特点。目前许多AES算法的硬件实现采用基于RAM查找表方式来实现算法中最关键的SubBytes部分。本文采用复合域来实现SubBytes部分的求逆运算,以便于采用组合逻辑减小面积[1]。同时采用加/解密运算中列变换的部分电路进行复用,从而进一步节省实现面积。这样可以使AES密码应用于RFID系统,IC卡等面积要求较小的场合。

1 AES算法简介

AES算法是一种迭代型分组密码,其分组长度和密钥长度均可变,各自可以独立指定为128 b,192 b,256 b[2,3]。本文主要讨论分组长度和密钥长度为128 b的情况。AES算法是将输入的明文(或密文)分成16个字节,在第一个Add Round Keys变换后进入10轮迭代。迭代过程的前9轮完全相同,依次经过字节代替(substitute bytes)、行移位(shift rows)、列混合(mixcolumns)、轮密钥加(add round keys),最后一轮则跳过了列混合(mix columns)。解密过程与加密过程类似,但执行顺序与描述内容有所不同,因此AES算法的加解密运算需要分别实现。

2 AES算法的硬件设计

根据AES算法的原理和基本结构,将整个AES算法模块分成4个相对独立的子模块:接口模块、控制单元模块、加解密运算模块、密钥扩展模块。本文所设计的密码算法不包括密钥发生器,所用的密钥通过接口模块由外部输入,加解密运算后的数据经输出接口输出[4]。AES算法模块的总体结构如图1所示。

2.1 接口模块的设计

输入接口模块的主要任务是:将数据传送到加解密运算模块,将外部输入的密钥传送到密钥扩展模块。由于明文和密钥输入都是128位,将导致整个模块的输入/输出过多,占用太多资源,考虑到本文的设计主要应用于对面积要求较小的场合使用,如RFID系统中数据的传输[5],即每次传输的数据是64位,故采用4个32位寄存器,在时钟的控制下每次输入1组32位,通过4个时钟周期可得到128位的数据,可以有效减少资源的占用。输出接口模块的作用是将128位的解密运算结果输出,同样也采取32位分4组输出的方法。

2.2 控制模块的设计

控制模块的主要任务是实现加/解密运算模块与密钥扩展模块工作的启动。控制模块在时钟脉冲控制下,产生控制加/解密模块中字节替代、行移位、列混合、密钥加各部分工作信号。可由1个两状态的状态机实现控制。当新的数据或密钥输入时,通过状态机的信号可判断上次加/解密运算是否完成。如果状态机信号处于忙状态,说明加解密运算正在进行,需要等待;如果信号处于空闲状态,说明加解密运算已经完成,可以启动加解密运算模块与密钥扩展模块,将数据和密钥分别输入到加解密运算模块与密钥扩展模块中,开始新一组数据的加解密运算。

2.3 加解密运算模块的设计

AES算法的轮变换特点使之在硬件实现时可以有多种方式[6]:串行方式,轮变换可采用组合逻辑实现;在10轮迭代过程中,前一轮结果可直接作为下一轮的输入;并在1个周期内完成1个分组运算,使吞吐量达到最佳状态。但需要大量的存储器资源和组合逻辑资源支持,一般的FPGA芯片难以满足容量的需求,而且时钟频率非常低;基本迭代反馈方式,所有迭代只用1个轮变换模块,10个时钟周期完成1个分组运算,资源占用较少;轮内流水线方式,在轮变换中插入寄存器,将每轮运算分成多个操作段,每个时钟完成1个操作段,其优点是可以提高算法运行的时钟频率。但轮内各级流水部件不能同时执行,因此增加了算法运行的时钟数目。轮内流水线级数越多,时钟数目也越多,虽然算法仿真频率可以达到很高,但吞吐量并没有明显提高。

综上比较可知,本文AES算法的硬件实现的目的是尽量减少资源的占用,使面积尽可能减小。故采用基本迭代反馈工作方式设计。

2.3.1 SubBytes( )和InvSubBytes( )的设计

字节代替是整个AES硬件实现中最为重要的变换,在加解密运算模块及密钥扩展模块中字节代替是主要的运算过程。因此,字节代替的硬件设计决定了整个AES算法硬件实现的速度和面积。字节代替可以通过查找表和算术运算的方式[7]得到。传统的AES算法使用查找表方法实现字节代替,可以提高求逆速度,但由于该变换输入的数据为8位,加密和解密所用的替换字节表不同,因此需要的选择器和寄存器数量较多,硬件实现面积较大,故主要用于高速AES的实现。算术运算的方式在硬件设计上表现为组合逻辑,采用算术运算的方式实现则会降低硬件设计的复杂度,减小面积[8]。

2.3.2 ShiftRows( )和InvShiftRows( )的设计

行移位变换作用在中间态的行上,将状态中的行按不同的偏移量进行循环移位。加密运算中间态的0~3行,分别向右循环移动0,1,2,3个字节。该操作仅是将数据按字节进行移动,硬件实现时只需在布线上进行调整,基本不占硬件资源。

解密过程只是行移位的逆变换,即分别向左循环移动0,1,2,3个字节。同样,该操作也仅将数据按字节移动。如果有字节的位置改变,只需在布线上进行修改。

2.3.3 MixColumns( )和InvMixColumns( )的设计

MixColumns( )变换以矩阵中的列为单位,将每列看作一个GF(28)域上的四阶多项式,将多项式乘以c(x)/d(x)并对x4+1取模。其中c(x)为:

undefined

在相应的解密过程中:

undefined

同样对x4+1取模。

为了降低整个模块的复杂度,考虑将加解密运算中列混合变换的部分电路进行复用,对比加解密运算所乘的多项式,可以发现{03}x可以用({02}x)⊕x表示,同理:

undefined

因此,{02}x可以作为一个基本单元,由于在GF(28)域内,{02}x mod m(x),x∈GF(28)

undefined

这样:

undefined

由于0⊕xi=xi,式(8)只需要4个异或门就可实现。将该单元记为xtime( )函数。其硬件结构如图2所示。加密时所取的系数较小{01,02,03},所以只需经过一次xtime( )单元,便将乘法运算转换为移位操作和加法运算的复合。

而解密时,Mixcolumns( )的系数是{09,0B,0E,0D},实现这些乘法显然比加密时需要更多的时间。由式(3)可知,InvMixcolumns( )也可用xtime ( )函数与异或门实现。这样,就可以实现加/解密列混合变换电路的复用,从而节约电路面积,提高解密运算速度[9]。

2.3.4 密钥加AddRoundKey( )的设计

在AES算法中,加法用异或操作实现。密钥加是中间状态的每一字节按位与轮密钥进行异或操作,加法的逆运算也用异或操作,所以可采用逐位异或操作实现加解密运算的AddRoundkey( )。AddRoundkey( )的逆运算是其自身。因此本文在常规轮中把加密时的密钥加、列混合变换和解密时的密钥加、列混合变换集成为同一模块,通过加解密信号的选择,实现加解密运算的列变换和密钥加功能。这样可消除加解密硬件结构的差异,同时也可降低轮密钥处理的复杂度。

2.4 密钥扩展模块的设计

轮密钥的产生是AES 加解密运算的基础,密钥扩展模块的作用就是产生除了初始密钥本身之外的10 个轮密钥,分别用于10轮加解密运算。

加密运算采用密钥内部扩展的方式,即加密运算与密钥扩展并行完成[10]。这一过程,每一轮变换都要和相应密钥扩展轮次生成的子密钥进行异或,因此需使用状态机控制加密运算和密钥扩展的同步,否则会发生混乱。需要指出,使用内部扩展方式可以提高整个加密运算速度。而解密运算采用外部扩展方式,即密钥扩展完之后再进行解密运算,因为解密运算使用的初始密钥是密钥扩展生成的最后一轮子密钥。

3 仿真测试与结果

根据前述设计思路和优化措施, 系统采用Mentor公司专门为各逻辑器件制造厂商设计的第三方专用仿真工具ModelSim 6.0进行功能仿真,给出了最后的功能仿真图。

3.1 加密运算的仿真测试

一次完整的加密操作,需要12个时钟周期。其中,10个周期用于10个轮循环变换,1个时钟周期用于初始的密钥扩展,1个时钟周期用于密文的输出。加密运算的功能测试仿真波形如图3所示。

从图3给出的加密运算功能仿真结果可以看出,加密运算与密钥扩展过程是并行进行。当“rst”变为低电平,“ld”变为高电平时,明文3243f6a8885a308d313198-a2e0370734与密钥2b7e151628aed2a6abf7158809cf4f3c分别同时加载到加解密运算模块与密钥扩展模块中;在下一个时钟周期,密钥扩展模块生成1轮子密钥,等待加密轮变换中的密钥加操作。当完成1次加密过程后,“done”信号变为高电平,同时输出密文3925841d02dc09fbdc-118597196a0632。从图3中同时也可以看出,密钥扩展模块总是提前一个时钟周期生成下一轮的子密钥,这样可以保证密钥扩展与加密运算同时进行而不会发生错乱,并且还可提高加密速度,节约资源占用和减少面积。使用DC进行综合和优化后,加密运算模块面积不超过20 000个等效门,其中组合逻辑面积为14 264门,非组合逻辑面积为3 878门。

3.2 解密运算的仿真测试

在解密过程中,完成一次解密操作同样需要12时钟周期。其中,10个周期用于10个轮循环变换,1个时钟周期用于初始密钥的加载,1个时钟周期用于密文的输出。在解密过程中,本文采用在解密之前所生成的10轮子密钥,因为解密初始需要的子密钥是密钥扩展得到的最后一轮子密钥,而最后一轮需要的子密钥是密钥扩展的初始密钥。如图4所示。

解密过程与密钥扩展过程不是同步的,当“kld”为高电平时,从第1个时钟周期开始,便将初始密钥2b7e151628aed2a6abf7158809cf4f3c输入到密钥扩展模块中,之后经过10个时钟周期生成10轮子密钥,并存储到寄存器中。当“ld”为高电平时,密文3925841-d02dc09fbdc118597196a0632开始加载到解密模块中,经过10个时钟周期将解密的密文输出,同时“done”信号变为高电平,表示解密过程结束,并输出明文3243f6a8885a308d313198a2e0370734。

对比图3与图4仿真测试结果可知,加解密运算的功能正确,即解密运算能够正确地解出加密运算的密文。解密运算模块使用DC进行综合和优化后面积不超过25 000个等效门。其中组合逻辑面积为10 495门,非组合逻辑面积为14 142门。由于密钥扩展与解密过程不是同步进行,占用了寄存器存储解密过程所需的10轮子密钥,所以非组合逻辑面积比加密运算模块大。但需要指出,由于加/解密运算模块部分电路采用复用的方法实现,所以整个加/解密运算模块的实际总面积比没有复用时减小。

4 结 语

根据设计思路和优化措施, 本文使用Verilog硬件描述语言实现AES密码算法, 并在ModelSim 6.0工具下进行仿真,证明本文设计的正确性。为了更进一步做比较,证明本文设计思路的合理性和优化措施的有效性,同样采取未优化的设计方案实现了该算法,通过在DC中进行综合、布线,两相比较, 优化后的设计比优化前节省了22%的逻辑单元,处理速度提高了13%。

参考文献

[1]黄小苑,戴紫彬.基于FPGA的AES算法芯片设计实现[J].微电子学与计算机,2005,22(8):62-64.

[2]DAEMENJoan,RIJ MEN Vincent.高级加密标准(AES)算法:Rijndael的设计[M].谷大武,徐胜波,译.北京:清华大学出版社,1996.

[3]卢开澄.计算机密码学:计算机网络中的数据保密与安全[M].北京:清华大学出版社,1998.

[4]夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2003.

[5]Joint Technical Committee.ISO/IEC14443(Part1-Part4)i-dentification cards-contactless integrated circuit(s)cards-Proximity cards[S].[2001-07-15].http://webstore.jec.ch/preview.

[6]MORIOKA S,SATOH A.An optimized S-box circuit ar-chitecture for low power AES design[C]//Proc.of CHES.[S.l.]:CHES,2003:172-186.

[7]陈俊,王晶,曾晓洋,等.低复杂度先进密码算法的VLSI实现[J].计算机工程,2007,33(4):143-145.

[8]吴亚联,段斌.AES密码计算构件的设计及应用[J].计算机工程,2005,31(21):181-186.

[9]蔡宇东,沈海斌,严晓浪.AES算法的高速实现[J].微电子与计算机,2004,20(1):83-85.

抗侧信道攻击的椭圆曲线密码算法 篇6

1985年,Miller[1]和Kibitz[2]首次将椭圆曲线应用于密码系统后,椭圆曲线密码系统ECC(Elliptic Curve Cryptography)已受到越来越多关注。ECC具有安全性高、计算量小、处理速度快、存储空间占用小、带宽要求低的特点,非常适合于资源有限的嵌入式移动环境。跟过去的密码系统相比,ECC在相同的安全性下有着更短的密钥。各种基于椭圆曲线密码体制的密码系统中,加密、解密、签名和验证等操作都是以椭圆曲线上关于点的标量乘法为基础来实现的,所以椭圆曲线上的标量乘法的运算速度决定了整个密码系统的运算性能。

1996年,Kocher提出了侧信道攻击SCA(Side Channel Attack)。侧信道攻击是一种利用密码芯片在运算过程中无意泄露出的信息,对芯片的密码算法进行攻击的一种方法。侧信道攻击分为计时攻击、能量攻击和电磁辐射攻击等几种类型。SPA(Simple Power Attack)、DPA(Differential Power Attack)、RPA (Refined Power Analysis)和ZPA (Zero value Power Analysis) 等能量攻击已对移动设备的安全性构成严重威胁[3]。

对ECC的能量攻击主要集中在对标量乘运算的攻击[4,5]。文献[6]是一种防御DPA,RPA和SPA的WBRIP方法。文献[7] 在WBRIP方法基础上,结合嵌入式移动环境下对安全性和算法快速执行的要求,提出一种改进的RWNAF(Refined Width-w Non-Adjacent Form)方法,该方法能有效地防御SPA、DPA、RPA、ZPA攻击,且存储开销和计算开销均优于WBRIP方法。

本文在RWNAF的基础上,提出一种高效安全的侧信道攻击防御方法—FWNAF(Fractional Width-w NAF)算法。该算法利用M?ller提出的碎片窗口技术[8],进一步提高了存储资源的利用效率,同时也减少了由于系统资源急剧变化而引发的系统计算性能的“抖动现象”。

1 RWNAF算法及其缺陷

1.1 RWNAF算法

RWNAF算法主要分为两部分:非邻接表NAF的产生算法,安全标量乘算法。

算法1

非邻接表NAF的产生算法

算法2

安全标量乘算法

1.2 RWNAF算法的缺陷

RWNAF算法中,当窗口值w取整数时,预计算表E′的大小为2w-1+1,并且随w的增加预计算表空间成几何级递增。由此,当窗口值发生变化时,系统的计算性能将发生急剧的变化,甚至产生“抖动现象”。

2 抗侧信道攻击的FWNAF算法

为了克服RWNAF算法的缺陷,在RWNAF算法的基础上,利用Möller提出的碎片窗口技术[8],提出一种高效安全的侧信道攻击防御方法—FWNAF(Fractional Width-w NAF)算法。该算法进一步提高了存储资源的利用效率,同时也减少了由于系统资源急剧变化而引发的系统计算性能的“抖动现象”。

FWNAF算法主要包含两部分:抗SPA攻击的NAF 产生算法,抗DPA及变种攻击(RPA、ZPA)的标量乘算法。

2.1 防御设计思想

由于RWNAF算法在实现上选用宽度为w的预计算表提高运算速度,特别地,当窗口w=2,3,4,…时,对应的存储空间为3,5,9,…。由于存储空间的离散分布使得有限的存贮资源并不能得到利用,为了解决这一问题,从两个方面进行改进如下:

(1) 利用碎片窗口对预计算表优化

采用碎片窗口技术[8],将离散的预计算存储空间转变为连续的分布,使得设计者能够灵活高效地对预计算表进行配置,从而最大限度地减少了存储资源的浪费。

(2) 安全性防御方法

首先,通过概率SPA技术构造具有概率规律性的NAF生成序列;同时,利用随机扰乱码对标量乘运算的真实泄漏信息加以掩盖,避免了DPA攻击以及其变种攻击,使得算法具有抗多种攻击的防御能力。

2.2 抗SPA攻击的NAF产生算法

RWNAF方法的预计算点数目为2w-1的离散分布,为了填补这些离散的预计算点,采用碎片窗口的办法,其核心思想是:将宽度为w的部分预计算点被添加到宽度为w-1的预计算表中[8],具体而言,将窗口w分为整数部分w0和碎片部分w1,满足:

w0=「ww1=w-(w0-1) (1)

碎片窗口w1的取值为1/2w0-2, 2/2w0-2,…,(2w0-2-1)/2w0-2,(2w0-2)/2w0-2,通过这种方法可以对有限的系统资源进行动态的配置,从而提高计算性能。

然而,直接将Width-w NAF算法和碎片窗口技术相结合,产生的NAF序列具有以下特点:

u[i+1]|00ri-1u[i]|00ri=w0orw0-1 (2)

在序列dw[n], dw[n-1],…,dw[0]中,任何一个连续为0的子序列的长度为ri-1。由于ri有两种不同的取值,所以计算模式并不是固定的,不能防御SPA。为了产生能防御SPA攻击的NAF序列,对ri取值情况讨论如下:

(1) 当u>2w0-1,ri=w0出现的概率为w1;ri=w0-1出现的概率为1-w1。

(2) 当u<2w0-1,ri=w0出现的概率为1。

针对ri在不同条件下概率不同的特点,采用文献[9]提出的概率SPA的思想:使得ri在不同条件下具有相同的概率分布。即,当u<2w0-1时,ri=w0的概率为w1,ri=w0-1的概率为1-w1。由于不同情况下ri的概率分布都是相同的,所以攻击者无法进行SPA攻击。

在碎片窗口的作用下,所有s个预计算点被分为两部分:固定计算部分C1,可选部分C2,如下式所示:

C1={Ρ,3Ρ,,(2w-1-1)Ρ2w-2points}C2={(2w-1+1)Ρ,,(2w-1)Ρs-2w-2points}(3)

根据系统中存储资源的动态变化,通过对C2部分的预计算点数目进行调整,使得预计算表的大小为连续分布。

SPA防御的NAF产生算法如算法3所示:

算法3

SPA防御的NAF产生算法

算法3的第4.2步所示,w0和w0-1子序列的产生并不依赖于整数k,而由随机选择相关。因此,即使攻击者知道了其分布,也无法获取密钥k

2.3 抗DPA及其变种攻击的标量乘算法

在算法2的基础上,为了防御DPA及其变种攻击,对基点P进行Masking处理。每次加密运算前产生一个初始化随机点R,先计算kP+R再减去R得到kP。由于每次加密运算过程中R是随机的,无法形成有效的能量攻击曲线,因此能抵抗DPA攻击,同时特殊点在运算中不会出现,能抵抗特殊点进行RPA与ZPA进行攻击。

结合式(2)的抗SPA的NAF序列,采用初始化随机点的标量乘法计算如下所示:

kΡ+R=(dn-1dn-2d0n)2Ρ+(11¯1¯1¯n)R

=(|00riu||00riu||00riu|)Ρ+

(1|00rix||00rix||00rix|)R(4)

其中ri的取值为w0-1或w0-2,类似地,x对应的取值为-(2w0-1-1)R或-(2w0-2-1)R

算法 4

标量乘法运算

算法4在运算过程中采用初始化随机点掩盖了真实的泄漏信息,使得攻击者无法获取有效的功耗曲线,因此能防御DPA及其变种RPA和ZPA攻击。

3 防御方法的安全性和性能分析

3.1 安全性分析

在FWNAF算法中,密钥k通过NAF表生成算法后得到的序列为:

(|00r-1x||00r-1x||00r-1x|) (5)

其中r的取值有两种不同情况,即w0或w0-1,因此在标量乘法的计算过程中加法运算和倍乘运算出现的情况为:

(|DDr-1A||DDr-1A||DDr-1A|) (6)

由于参数r的产生与密钥k的无关,而只于算法3中随机数rand有关,因此,即使攻击者知道了rand的分布也无法通过SPA攻击破解出密钥信息。

在标量乘运算中,通过引入随机掩码R,也能够使得特殊点(零值点或零值寄存器)也不可能在计算中出现。所以FWNAF算法也能防御DPA、RPA和ZPA攻击。

3.2 性能分析

(1) 存储开销分析

FWNAF与RWNAF算法的预计算表为E={R′,P+R′,3P+R′,…,(2w-1)P+R′},均需要2w-1 + 1个点的存储空间。然而RWNAF算法的存储空间是离散分布,随着窗口的宽度w的增加,将会存在越来越多的无法被利用存储碎片,而FWNAF方法通过碎片窗口技术,使得预计算表的存储空间为连续分布,从而避免了存储碎片的出现,存储开销的比较结果如表1所示。

由表1所知,FWNAF算法由于使用碎片窗口技术,使得系统中有限的存储资源能被高效地利用起来,从而减少了资源浪费。

(2) 计算开销分析

RWNAF、FWNAF算法的计算开销可以分为两部分:预计算开销t(E′),运行时开销t(s)。总开销对应着以上两部分计算开销之和。计算开销比较如表2所示。

在预计算阶段,随着窗口宽度w的增加,两种方法所对应的计算开销逐步增加。虽然RWNAF的开销较小。但RWNAF算法的预计算表为离散分布,当系统中的资源发生变化时,可能会存在部分闲置的资源不能被利用的情况,而FWNAF算法的资源利用最有效,不会存在空闲资源被浪费的情况。

在运行阶段的计算开销比较,随着窗口宽度w的增加,两种算法的计算开销逐步减少,算法的运算速度非常接近,其区别在于:RFNAF算法的存储空间是离散分布的,所以当w变化较大时,整个系统的计算性能抖动较大,而FWNAF算法的通过对存储空间的高效利用,当系统资源发生急剧变化时,其计算性能发生变化幅度要小于RWNAF,所以FWNAF算法在运行时的系统性能抖动的可能性较小。

4 结 语

能量攻击是一种强有力的密码攻击方法,本文考虑ECC上的能量攻击,结合嵌入式移动设备资源有限的特点,在RWNAF(Refined Width-w NAF)算法的基础上,提出了一种改进的算法—FWNAF(Fractional Width-w NAF)算法,FWNAF利用碎片窗口技术,提高了存储资源的利用效率,同时也减少了由于系统资源急剧变化而引发的系统计算性能的“抖动现象”。 其性能最稳定。

摘要:椭圆曲线密码系统具有较高的安全性和有效的计算性,非常适合于资源受限的嵌入式移动环境。侧信道攻击是一种强有力的密码攻击方法,利用密码芯片在运算过程中泄露的信息对芯片的密码算法进行攻击。针对侧信道攻击椭圆曲线密码系统主要集中在对标量乘运算的攻击,提出一种基于RWNAF(Refined Width-w NAF)的改进算法FWNAF(Fractional Width-w NAF)算法。该算法利用碎片窗口技术,进一步提高存储资源的利用效率,同时也减少由于系统资源急剧变化而引发的系统计算性能的“抖动现象”。

关键词:椭圆曲线密码系统,密码芯片,算法设计

参考文献

[1]Koblitz N.Elliptic curve cryptosystems[J].Mathematics of Computa-tion,1987,48:203-209.

[2]Miller V.Uses of Elliptic Curves in Cryptography[C]//Advances in Cryptography-Proceedings of CRYPTO’85.New York:Springer-Ver-lag,1986:417-426.

[3]周永彬,徐秋亮.侧信道攻击理论与技术.中国密码学发展报告2008[M].北京:电子工业出版社,2009:191-259.

[4]张金中,寇应展,陈财森,等.针对二进制方法点乘的椭圆曲线密码故障攻击[J].计算机工程,2011,37(5):1-3.

[5]翁江,豆允旗,马传贵.智能卡上椭圆曲线标量乘差分错误分析攻击研究[J].信息工程大学学报,2011,12(6):660-665.

[6]Hideyo Mamiya.Efficient Countermeasures Against RPA,DPA and SPA[C]//Proceedings of Cryptographic Hardware and Embedded System 2004,LNCS,3156:343-356.

[7]张涛,范明钰.Smartcard上椭圆曲线密码算法的防御策略研究[J].计算机工程,2007,33(14):125-127.

[8]Moller,B.Improved techniques for fast exponentiation[C]//Proceed-ings of ICISC2002,2002,2587:298-312.

混合密码算法 篇7

信息安全一直是与我们生活息息相关的重要问题,而保护信息安全最常用的手段就是数据加密了。自K.Aihara等人提出混沌神经网络模型以来,混沌与神经网络相结合应用于数据加密就得到了不断发展。目前主要的研究方法有:(1)采用已知的混沌序列来训练神经网络模型,使得神经网络能够近似生成相同的混沌序列,然后将已知的混沌序列作为公钥,训练好的神经网络权重和阈值参数作为私钥,实现数据加密。(2)利用离散Hopfield网络的混沌吸引性和初始状态与吸引子的单向映射性,可以将离散Hopfield网络的稳定吸引子作为密钥实现加密。文献[1]将神经网络互学习模型与混沌系统融合互扰,提出了一种新型复合流密码。文献[2]把Diffe-Hellman密钥交换协议和流密码算法相结合,设计了一种基于神经网络混沌吸引子的混合加密算法。文献[3]将Hermite正交多项式引入到神经网络激励层,实现了“一次一密”异步加密算法。文献[4]利用Hopfield网络的混沌吸引性与线性反馈移位寄存器相结合,提出了一种流密码加密方案。将混沌与神经网络相结合应用于数据加密最主要的就是利用混沌序列的混沌特性了,但是文献[5]也指出了混沌序列在数据加密中存在序列被重构缺陷,而且文献[6]对Logistic方程的四点和十六点序列片段完全实现了重构。因此,简单的混沌序列加密方法是存在被破解的风险的。针对这个问题,本文引入一种外部密钥对Logistic方程进行加密,同时提出一种分段线性混沌神经网络模型,通过一种敏感和扩散处理,使得混沌网络模型也具有良好的敏感性,生成良好的随机序列。

1 Logistic映射

Logistic映射是经典的混沌序列映射,由于其实现方法简单,容易被窃密者利用相空间进行重构,从而构造出混沌方程的形式[7]。因此,本文为了增强Logistic映射的保密性,引入一个外部密钥对Logistic映射的初始值和参数进行加密。

采用24位的二进制数字K1作为一个外部密钥来初始化Logistic映射的初始值和参数。设K1的16进制表示为K1=k1k2k3k4k5k6,″k1k2k3k4k5k6″为外部密钥。其中″k1k2k3″用于生成Logistic映射的输入控制参数r,″k4k5k6″用于生成Logistic映射的初始值X0。

在本文中,使用的Logistic映射如下:

其中:r为输入控制参数,X0为Logistic映射的初始值。它们由外部密钥经过运算产生,运算过程中″k1k2k3k4k5k6″分别转化为相应的十进制数进行运算。因此:

2 混沌神经网络模型

本文采用的混沌神经网络结构如图1所示,网络的输入层对数据进行预处理,每一层的传输函数由函数f(·)和g(·)组合构成,实现对输入的数据进行混沌处理。

图1 混沌神经网络结构图

设二进制密钥K2长度为16 bit,将其按行二维化分组,每一行为一组,形成4×4的二进制数据矩阵D1:

每一行数据为一组,共有4组,分别为D11、D12、D13、D14。在本文中,为了提高密钥K2的敏感性,分别对D11、D12、D13、D14作如下处理:

设D11、D12、D13、D14的十进制表示分别为h1、h2、h3、h4,则:

其中:X为Logistic方程生成的值,n0为区间[50,100]上的整数。

由于X的取值在区间(0,1)上,因此的值也在区间(0,1)上。为了将的值扩散,使得的部分值不在区间(0,1)上,引入4×4矩阵W来扩散,其中矩阵W的元素由Logistic方程生成的序列来初始化。因此,变换后的矩阵为:

将变换后的数据输入到混沌神经网络,则:

其中,是网络第一层的输入,W1和B1分别是第一层神经元的权值和阈值,函数g(·)的数学模型描述如下:

其中α为函数g(·)的参数。

函数g(x)将区间(-∞,∞)上的数映射到区间(0,1)上。混沌网络的传输函数f(·)为一个分段线性混沌映射函数,其输入值要求在区间(0,1)上,这与函数g(·)的映射区间刚好吻合。n1表示函数f(·)的迭代次数,Q1为函数f(·)的控制参数矩阵,传输函数f(·)的数学模型描述如下:

其中:x(k)是混沌映射的状态,q是控制参数,并且0<x(k)<1,0<q<1。当q=0.5时,上述混沌映射模型的Lyapunov指数最大,其混沌特性最为明显[8]

其中,D2是网络第二层的输入,W2和B2分别是第二层神经元的权值和阈值;n2表示函数f(·)的迭代次数,Q2为函数f(·)的控制参数。

由于网络的每一个神经元输出值都在区间(0,1)上,因此可以采用如下方法来更新控制参数Q1、Q2的值,通过网络运算得到不同的随机值D3。

每运行一次混沌网络,都会生成一个随机值D3,并更新Q1和Q2的值。利用更新后的Q1和Q2重复运行混沌网络就可以得到由随机值D3组成的随机序列。

3 量化处理

为了将混沌网络生成的随机序列应用于数据加密,本文引入转换函数T(x),使生成的随机序列转换为0-1随机序列,T(x)定义如下:

其中:N为区间[10,+∞]上的整数,n为区间上的整数,

由于网络生成的随机值在区间(0,1)上,因此本文将区间(0,1)分成N等份,N值越大,(0,1)区间划分越精细,数据精度越高。

4 生成0-1随机序列

(1)输入密钥K1来初始化Logistic映射,并迭代运算Logistic映射200次,设X=[x101x102x103…x199x200]用于存储后面100次的混沌值。

(2)利用X来初始化扩散矩阵W和混沌网络的权值与阈值。W是4×4的矩阵,W1是2×4的矩阵,B1是2×1的矩阵,W2是1×2的矩阵,B2是1×1的矩阵,从X中提取元素来分别初始化W、W1、B1、W2、B2。

(3)输入密钥K2,经过初始分组和变换得到

(4)将输入到混沌神经网络,经过网络运算得到一位随机值D3;然后不断更新控制参数Q1、Q2的值,直到得到所需长度的随机值序列。

(5)通过量化函数T(x)将生成的随机序列转换成相应的二进制随机序列。

5 算法分析

本文通过理论分析和实验仿真的方法来对算法的密钥空间大小、0/1的个数统计、随机序列的相关性和密钥的敏感性进行分析,并得出相应结论。仿真实验数据如下:

5.1 密钥空间分析

本文的加密密钥由K1和K2组成,密钥空间由K1和K2的长度决定。设它们的长度分别为L1和L2,则密钥空间为2(L1+L2)。L1+L2越大,密钥空间越大。在本文中L1=24、L2=16,密钥空间大小为240。显然,L2的长度大小是可变的,增加L2的长度可以增加密钥空间大小。但是,增加密钥L2的长度时,混沌网络的输入个数也会增多,相应的混沌网络层数也会增多,网络迭代运行一次的时间开销将会增大。当生成的随机序列长度非常大时,整个网络运行的时间开销将会是非常大的。

5.2 统计分析

一个有效的二进制随机序列必须满足0/1比例近似相等[9]。因此,本检验的目的是确定序列中0/1的比例是否与真正的随机序列中的0/1的比例近似相等。同时,本文参考文献[12]的方法对生成的随机序列进行频数检验、序列检验和游程检验。

为此,随机选取两个长度为256的随机序列进行统计分析,分析结果如表1所示。

表1 统计分析结果

由表1可以看出,序列1和序列2中“0”与“1”的个数接近相等,满足随机序列要求。同时,频数检验值y1均小于3.84,能通过频数检验;序列检验值y2均小于5.99,能通过序列检验;游程检验值y3远小于1.96,能通过游程检验。因此,生成的随机序列具有很好的随机性。

为了进一步验证生成序列的随机性,本文将上述随机选取的两组随机序列与文献[11,12]中的统计分析结果进行比较。文献[11,12]的统计分析结果如表2所示。

表2 文献#xref_id=197#统计分析结果

由表1和表2可以看出,本文生成的随机序列中“0”与“1”的相差个数要比文献[12]中“0”与“1”的相差个数更小。因此,本文生成的0/1序列随机性更好。同时,本文的频数检验值y1、序列检验值y2和游程检验值y3均小于文献[12]中对应的值。因此,本文生成的0/1序列能够更好地通过频数检验、序列检验和游程检验。与文献[11]相比,本文生成的随机序列中“0”与“1”的相差个数接近文献[11]中“0”与“1”的相差个数。同时,本文的频数检验值y1和游程检验值y3在有些情况下小于文献[11]中对应的值,说明本文生成的0/1序列在有些情况下能够更好地通过频数检验和游程检验。但是,本文的序列检验值y2均大于文献[11]中对应的值,说明文献[11]中生成的0/1序列能够更好地通过序列检验。总体上来说,本文算法在频数检验、序列检验和游程检验中优于文献[12],在有些情况下优于文献[11]

5.3 相关性分析

序列的自相关函数变化越小,说明序列的随机性越好。序列的互相关函数越接近零,说明两个序列越互不相关[10]。图2是初始密钥为K1和K2时生成的0/1序列的自相关函数图。图3是密钥K1或K2随机改变一位时生成的0/1序列对比图,实线代表原序列,虚线代表新序列。图4是两个序列的互相关函数图。

图2 生成0-1序列的自相关函数图

图3 密钥改变一位时生成的0/1序列对比图

图4 序列的互相关函数图

由图2可以看出,自相关函数变化很小,生成的序列随机性良好。由图3可以看出,只要改变密钥K1或K2中的一位,生成的0/1序列将会有很大的不同;由图4可以看出,改变密钥K1或K2中的一位时,生成的新序列与原序列的互相关函数值接近0,说明两个序列互不相关。

5.4 密钥敏感性分析

Logistic映射生成的混沌序列对初始值具有良好的敏感性,由于密钥K1用于生成Logistic方程的初始值,因此K1也具有良好的敏感性。同时,本文利用Logistic映射对密钥K2进行了敏感和扩散处理,使得K2也具有良好的敏感性。为了验证密钥K1和K2的敏感性,分别改变密钥K1、K2中的一位,并统计新随机序列与原随机序列的不同位数所占的百分比。设i表示K1和K2中每一位对应的位置编号,则1≤i≤Lg,Lg为密钥K1和K2的长度总和。在本文中,Lg=40。NP表示新随机序列与原随机序列的不同位数占序列总数的百分比,NP的计算公式为:

其中,D(n)和D'(n)分别表示原随机序列和新随机序列,NK表示序列D(n)的总位数,NP(i)表示改变第i位时所对应的百分比。

根据分组密码测度中的严格雪崩准则,改变密钥中的任一比特,应导致密文中大约50%比特的变化。图5是对密钥长度Lg=40,生成序列长度NK=20 000时得到的百分比统计结果。

图5 密钥改变一位时生成的序列所改变的百分比

由图5可以看出,密钥改变一位时生成的序列所改变的百分比均接近50%,满足严格雪崩准则。因此,密钥K1和K2均具有敏感性。

综上所述,本文算法生成的0/1序列具有良好的随机性,密钥具有很强的敏感性。此外,本文采用24位的外部密钥来生成混沌初值和控制参数,与文献[13]直接采用混沌初值和控制参数作为密钥相比,本文的密钥更方便管理。同时,解决了文献[6]提出的Logistic序列易被重构的问题,使得密钥的安全性更好。

6 结语

浅谈密码技术中的DES加密算法 篇8

密码技术是实现密秘通信的手段, 是隐蔽文字、图像和声音的一种特种符号。这些特种符号通常按照通信双方约定好的方法把原来的信息进行隐蔽, 不为第三方所知的通信方式就叫密码通信。在计算机中, 采用密码技术将信息隐蔽起来, 再将隐蔽后的信息传播出去, 使信息在传输过程中即使被窃取或截获, 窃取者也没有办法了解信息的内容, 从而达到保证信息的安全性。数据加密的一般模型如图1所示。在图1中, 把未加密的原始数据称为明文数据, 用M表示;把经过加密算法加密的数据称为密文数据, 用C表示;加密算法用E表示;解密算法则用D表示。即M经过E加密后得到C, 表示为C=E (M) 。接收到C后, 由公式M=D (C) 得于M (如图1) 。

在众多的加密算法中, DES算法是由IBM公司研制, 由美国联邦定为加密标准。DES算法的工作原理是公开加密和解密的算法, DES算法对密钥进行保密。只有掌握与发送方相同的密钥之后才能解读出由DES算法所加密的密文数据。所以想要破解DES的密文的实际是搜索密钥的编码。如要破解56位长度的密钥, 如果用穷举法进行搜索, 运算次数为256。

DES密钥的生成如下。

(1) 取得密钥。

从用户处取得一个64位 (本文如未特指, 均指二进制位) ) 长的密码key, 去除64位密码中作为奇偶校验位的第8、16、24、32、40、48、56、64位, 剩下的56位作为有效输入密钥。

(2) 等分密钥。

DES加密算法。

把在1步中生成的56位输入密钥分成均等的A, B两部分, 每部分为28位, 参照表1和表2把输入密钥的位值填入相应的位置。按照表1所示A的第一位为输入的64位密钥的第57位, A的第2位为64位密钥的第49位, ..., 依此类推, A的最后一位是64位密钥的第36位。

(3) 密钥移位。

DES算法的密钥是经过16次迭代得到一组密钥的, 把在 (2) 中生成的A, B视为迭代的起始密钥, 表3显示在第i次迭代时密钥循环左移的位数。比如在第1次迭代时密钥循环左移1位, 第3次迭代时密钥循环左移2位。

第9次迭代时密钥循环左移1位, 第14次迭代时密钥循环左移2位。

第一次迭代:

第i次迭代:

DES加密算法的实现。

利用算法核心代码封装的接口函数编写一个针对文本文件的加密解密工具。选择把密文以16进制的形式写入文件的方法。当然也可以直接写入文件。

例如:密文为:12345678

在内存中显示为:

31 32 33 34 35 36 37 38

那么就把以3132333435363738的形式写入文件。

为了解密的方便, 密文中的每个字节用两个字节表示, 也即在内存中显示为0x9A的内容, 就以9A的形式写入文件中。当内存中显示的内容为0×0? (?代表0~F) 形式时, 需要以0?的形式写入文件。

这样可以避开前面提及的问题, 只是在解密时先按照两两组合的原则, 顺序把从文件中读取的数据转换成待解的密文。

例:

读出的数据是:

3132333435363738

得到复原的过程如下:

最终得真正的密文12345678, 这样就可以调用DES算法解密函数从密文得到明文。

DES算法是对固定大小 (64位) 的数据块进行加密解密操作的, 对于那些不够64位的数据块是需要采用填充机制补位到64位长, 为了方便使用, 数据位的填充是对用户而言是透明的, 利用该工具进行加密解密操作时, 用户只需输入操作的类型、读取数据的文件名、写入操作结果的文件名、密钥等信息。

DES算法具有极高安全性, 除了用穷举搜索法对DES算法进行攻击外, 还没有发现更有效的办法。而56位长的密钥的穷举空间为256, 这意味着如果计算机的速度是每一秒种检测一百万个密钥, 则它搜索完全部密钥就需要将近2285年的时间, 这是难以实现的, 当然, 随着科学技术的发展, 当出现超高速计算机后, 我们可考虑把DES密钥的长度再增长一些, 以此来达到更高的保密程度。

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【混合密码算法】相关文章:

密码算法08-19

有关密码算法的论文04-28

混合推荐算法05-02

混合进化算法05-12

混合蚁群算法07-19

混合自适应遗传算法08-12

混合模拟退火遗传算法09-03

混合遗传算法及应用09-03

IGA-BP混合算法07-12

GA-BP混合算法07-15

上一篇:以体育发展体育下一篇:CMMI质量管理软件开发