搜档网
当前位置:搜档网 › 对称加密算法

对称加密算法

对称加密算法
对称加密算法

对称密码基本加密实验

【实验内容】

通过运算器工具实现DES、3DES、IDEA、AES-128/192/256、SMS4等算法的加解密计算

通过流程演示工具完成DES算法加解密运算的逐步演示和实例演示

通过轮密钥查看工具查看3DES和AES的轮密钥生成过程

查看AES算法逐步计算的动画演示

对DES、3DES、IDEA、AES-128/192/256、SMS4等算法的加解密进行扩展实验

对DES、3DES、IDEA、AES-128/192/256、SMS4等算法的加解密进行算法跟踪

对称密码基本加密实验

【实验原理】

对称密码体制使用相同的加密密钥和解密密钥,其安全性主要依赖于密钥的保密性。分组密码是对称密码体制的重要组成部分,其基本原理为:将明文消息编码后的序列m0,m1,m2,…,m i划分为长度为L(通常为64或128)位的组m=(m0,m1,m2,…,m L-1),每组分别在密钥k=(k0,k1,k2,…,k t-1)(密钥长度为t)的控制下变换成等长的一组密文输出序列c=(c0,c1,c2,…,c L-1)。分组密码的模型如图1.1.4-1所示。

012t-1012t-1

图1.1.4-1

分组密码实际上是在密钥的控制下,从一个足够大和足够好的置换子集中简单而迅速地选出一个置换,用来对当前输入的明文分组进行加密变换。现在所使用的对称分组加密算法大多数都是基于Feistel分组密码结构的,遵从的基本指导原则是Shannon提出的扩散和混乱,扩散和混乱是分组密码的最本质操作。

分组密码与流密码的对比:分组密码以一定大小的分组作为每次处理的基本单元,而流密码则以一个元素(如一个字母或一个比特)作为基本的处理单元;流密码使用一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,软硬件实现简单,缺点是低扩散、插入及修改不敏感;分组密码使用的是一个不对时间变化的固定变换,具有扩散性好、插入敏感等优点,缺点是加解密处理速度慢、存在错误传播。

一、DES算法

数据加密标准(Data Encryption Standard,DES)中的算法是第一个也是最重要的现代对称加密算法,其分组长度为64比特,使用的密钥长度为56比特(实际上函数要求一个64位的密钥作为输入,但其中用到的有效长度只有56位,剩余8位可作为奇偶校验位或完全随意设置),DES加解密过程类似,加解密使用同样的算法,唯一不同的是解密时子密钥的使用

次序要反过来。DES的整个体制是公开的,系统安全性完全依靠密钥的保密。

DES的运算可分为如下三步:

(1)对输入分组进行固定的“初始置换”IP,可写为(L0,R0)=IP(输入分组),其中L0和R0

称为“(左,右)半分组”,都是32比特的分组,IP是公开的固定的函数,无明显的密码意义。

(2)将下面的运算迭代16轮(i=1,2,…,16):Li=Ri-1 ,Ri-1=Li-1f(Ri-1,ki);这里ki称为轮

密钥,是56比特输入密钥的一个48比特字串,f称为S盒函数(S表示交换),是一个代换密码,目的是获得很大程度的信息扩散。

(3)将十六轮迭代后得到的结果(L16,R16)输入到IP的逆置换来消除初始置换的影响,这

一步的输出就是DES算法的输出,即输出分组=IP-1(R16,L16),此处在输入IP-1之前,

16轮迭代输出的两个半分组又进行了一次交换。

DES的加密与解密算法都是用上述三个步骤,不同的是如果在加密算法中使用的轮密钥为k1,k2,…,k16,则解密算法中的轮密钥就应当是k16,k15,…,k1,可记为(k1`,k2`,…,k16`)=(k16,k15,…,k1)。

DES算法的一轮迭代处理过程如图1.1.4-2所示。

图1.1.4-2

DES的计算过程如图1.1.4-3所示。

图1.1.4-3 在加密密钥k 下,将明文消息m 加密为密文c ,使用DES 将c 在k 下解密为明文,解密过程如下:(L 0`,R 0`)=IP(c)=IP(IP -1(R 16,L 16)),即(L 0`,R 0`)=(R 16,L 16);在第一轮中,L 1`=R 0`=L 16=R 15,R 1`=L 0`f(R 0`,k 1`)=R 16f(L 16,k 1`)=[L 16f(R 15,k 16)]f(R 15,k 16)=L 15,即(L 1`,R 1`)=(R 15,L 15);同样的,在接下来的15轮迭代中,可以得到(L 2`,R 2`)=(R 14,L 14),……,(L 16`,R 16`)=(R 0,L 0);最后一轮结束后,交换L 16`和R 16`,即(R 16`,L 16`)=(L 0,R 0),IP -1(L 0,R 0)=IP -1(IP(m))=m ,解密成功。

二、 3DES 算法

DES 的一个主要缺点是密钥长度较短,同时也被认为是DES 仅有的最严重的弱点,容易遭受穷举密钥搜索攻击。克服密钥较短缺陷的一个解决方法是使用不同的密钥,多次运行DES 算法,3DES 应运而生。3DES 具有四种使用模式,其中的一种为加密-解密-加密的3DES 方案,加解密过程可表示为:

,其中。

三、 IDEA 算法

1990年,瑞士联邦理工学院的中国青年学者来学嘉(Xuejia Lai )和著名密码专家James

1

2

i

16

L. Massey在EUROCRYPT 1990国际会议上提出了一个名叫PES(Proposed Encryption Standard)分组密码算法,稍后经过改进成IPES(Improved PES),并于1992年被最终定名为国际数据加密标准(International Data Encryption Algorithm,IDEA)。国际上普遍认为IDEA是继DES 之后的,又一个成功的分组密码,已经应用于Email系统的PGP(Pretty Good Privacy)、OpenPGP的标准算法以及其他加密系统中。

IDEA是一个分组密码,也是一个对合运算,明文和密文的分组长度为64比特,密钥长度为128比特。IDEA易于实现,软硬件实现都很方便,而且加解密速度很快。

(一)加密运算

IDEA中的三个运算为:

l 6位子分组的相异或;

16位整数的模216加,即;

16位整数的模216+1乘,即。

IDEA的整体结构如图1.1.4-4所示,由8轮迭代和一个输出变换组成。64位的明文分为4个子块,每块16位,分别记为。64位的密文也分为4个子块,每块16位,分别记为。128位的密钥经过子密钥生成算法产生出52个16位的子密钥,每一轮加密迭代使用6个子密钥,输出变换使用4个子密钥。记为第r轮迭代使用的第i个子密钥,。记为输出变换使用的第i个子密钥,。

每一轮的运算步骤如下:

(1)。

(2)。

(3)。

(4)。

(5)将第(1)步和第(3)步的结果异或。

(6)将第(2)步和第(4)步的结果异或。

(7)将第(5)步的结果乘以。

(8)将第(6)步和第(7)步的结果相加。

(9)将第(8)步的结果乘以。

(10)将第(7)步和第(9)步的结果相加。

(11)将第(1)步和第(9)步的结果异或。

(12)将第(3)步和第(9)步的结果异或。

(13)将第(2)步和第(10)步的结果异或。

(14) 将第(4)步和第(10)步的结果异或。

(15) 第(11),(12),(13),(14)步的结果为本轮加密迭代的输出结果。

图1.1.4-4 (二) 解密运算

IDEA 的解密过程和加密过程相同,只是所使用的子密钥不同。

IDEA 采用基本轮函数迭代结构,既采用混淆技术,又采用扩散技术。具体地,采用了三种不同的代数群,将其混合运算,获得了良好的非线性,增强了密码的安全性。

IDEA 是在Ascom-Tech AG 公司的Hasler 基金会的支持下完成的,在许多国家申请了专利保护,在非商业领域却是自由使用的。IDEA 的商标为MediaCrypt 所拥有,专利保护期到2010-2011年间。

四、 AES 算法

美国国家标准技术协会(NIST)于1997年提出征集一个新的对称密钥分组加密算法作为取代DES 的新的加密标准的公告,并将这个新的算法命名为高级加密标准(Advanced Encryption Standard,AES)。2000年10月2日,NIST 宣布选中了Rijndeal 算法,建议作为AES 使用,并于2001年正式发布了AES 标准。

Rijndeal 算法是具有分组长度和密钥长度均可变的分组密码,密钥长度和分组长度可独立指定为128比特、192比特或256比特。为了满足AES 的要求限定处理分组的大小为128比特,密钥长度为128比特、192比特或256比特,相应的迭代轮数为10轮、12轮、14轮,分别记为AES-128/192/256。Rijndeal 算法采用Square 结构,每一轮都使用代替和混淆并行地处理整个数据分组,包括3个代替和1个混淆。

此处以密钥程度与分组长度均为128比特(此时对应的轮数是10)为例,说明Rijndeal 算法的加解密过程。

128比特的消息(明文、密文)被分为16个字节,记为:输入分组=m 0,m 1,…,m 15;同样的密钥分组也如此:k=k 0,k 1,…,k 15;内部数据结构的表示为一个44矩阵:

(1)

(9)第一轮

输入分组=输入密钥=

Rijndeal中的轮变换记为Round(State,RoundKey),这里State是轮消息矩阵,可被看成输入或输出;RoundKey是轮密钥矩阵,由输入密钥通过密钥表导出。一轮的完成将改变State 的元素的值,即改变State的状态。

轮(除了最后一轮)变换由四个不同的变换组成,如下所示。

Round(State,RoundKey)

{

SubBytes(State);

ShiftRows(State);

MixColumns(State);

AddRoundKey(State,RoundKey);

}

最后一轮稍有不同,记为FinalRound(State,RoundKey),等于不使用MixColumns函数的Round(State,RoundKey)。论变换是可逆的,以便于解密。相应的逆轮变换记为Round-1(State,RoundKey)和FinalRound-1(State,RoundKey)。

SubBytes(State)函数为State的每一个字节x提供了一个非线性代换,任一GF(28)域上的非零字节x被如下变换所代换:y=Ax-1+b;此处

A=b=

ShiftRows(State)函数在State的每行上运算,对于在第i行的元素,循环左移i个位置。

MixColumns(State)函数在State的每列上作用,此处只描述对一列的作用:对于一列(s0,s1,s2,s3)-1,将其表示成3次多项式s(x)=s3x3+s2x2+s1x+s0;对s(x)做如下运算得到d(x)=c(x)?s(x)(mod x4+1),其中c(x)=c3x3+c2x2+c1x+c0=’03’x3+’01’x2+’01’x+’02’,c(x)的系数是GF(28)域中的元素(以十六进制表示字节)。

AddRoundKey(State,RoundKey)函数将RoundKey中的元素和State中的元素进行逐比特的异或操作。

解密运算仅仅是在相反的方向反演加密,即运行

AddRoundKey(State,RoundKey) -1;

MixColumns(State)-1;

ShiftRows(State) -1;

SubBytes(State) -1;

可以看出Rijndeald密码的加解密必须分别使用不同的电路和代码。

五、SMS4算法

SMS4密码算法是我国官方公布的第一个商用密码算法,主要应用于无线局域网产品。SMS4算法是一个分组算法,其分组长度为128比特,密钥长度为128比特;加密算法与密钥扩展算法都采用32轮非线性迭代结构;解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。密钥与明密文均以32比特为单位进行划

分,轮函数与密钥扩展算法也以32比特为基本单位进行运算。

(1)SMS4轮函数

设输入X=(X0,X1,X2,X3),轮密钥为rk(由加密密钥通过密钥扩展算法得到),则SMS4算法的轮函数可表示为:

L为线性变换,设输入为A,输出为B,则:

B=L(A)=A(A<<<2)(A<<<10)(A<<<18)(A<<<24)

其中<<

τ为非线性变换,以8比特为基本单位进行运算,由四个S盒组成。设输入A=(a0,a1,a2,a3),输出为B=(b0,b1,b2,b3),则:

B=(b0,b1,b2,b3)=τ(A)=(Sbox(a0),Sbox(a1),Sbox(a2),Sbox(a3))

其中a i、b i均为一个字节。

(2)SMS4的扩展密钥算法

SMS4的扩展密钥算法用来通过输入的加密密钥生成32个轮密钥,算法描述如下:

加密密钥MK=(MK0, MK1, MK2, MK3),i=0,1,2,3;中间变量为K i,i=0,1,…,35;轮密钥为rk i,i=0,1,…,31;其中MK i、K i、rk i均为32比特;则密钥生成方法为:

其中:

系统参数FK的取值用16进制来表示,FK0=(A3B1BAC6),FK1=(56AA3350),FK2=(677D9197),FK3=(B27022DC);

L’为L的修改,;

固定参数CK的取值方法为:设ck i,j为CK i的第j字节(i=0,1,…,31,j=0,1,2,3),即CK i = (ck i,0,ck i,1,ck i,2,ck i,3),则ck i,j = (4i+j)×7(mod 256);32个固定参数CK i,其16进制表示为:

00070e15, 1c232a31, 383f464d, 545b6269,

70777e85, 8c939aa1, a8afb6bd, c4cbd2d9,

e0e7eef5, fc030a11, 181f262d, 343b4249,

50575e65, 6c737a81, 888f969d, a4abb2b9,

c0c7ced5, dce3eaf1, f8ff060d, 141b2229,

30373e45, 4c535a61, 686f767d, 848b9299,

a0a7aeb5, bcc3cad1, d8dfe6ed, f4fb0209,

10171e25, 2c333a41, 484f565d, 646b7279。

(3)SMS4加解密算法

设明文输入为(M0,M1,M2,M3),密文输出为(C0,C1,C2,C3),轮密钥为rk i,i=0,1,2,…,31,其中,M i、C i、rk i均为32比特;则SMS4算法的加密可表示为:

SMS4算法的解密与加密变换结构相同,但轮密钥使用顺序相反。

对称密码基本加密实验

【实验环境】

ISES客户端

Microsoft CLR Debugger 2005或其它调试器

【实验步骤】

一、DES

在加密算法选项里选择DES,以下实验步骤保持算法不变。

(一)加解密计算

(1)加密

在明文栏的下拉菜单里选择文本或十六进制,然后在后面相应的文本框内输入所要加密的明文;

在密钥栏的下拉菜单里选择文本或十六进制,然后在后面相应的文本框内输入相应的密钥;点击“加密”按钮,在密文文本框内就会出现加密后的密文,如图1.1.4-5所示。

图1.1.4-5

(2)解密

在密文栏相应的文本框内输入所要解密的密文;

在密钥栏的下拉菜单里选择文本或十六进制,然后在后面相应的文本框内输入相应的密钥;点击“解密”按钮,在明文文本框内就会出现解密后的明文。

(二)分步演示

(1)点击“扩展实验”框中的“DES分步演示”按钮,进入DES分步演示窗口,打开后

默认进入分步演示页面。

(2)密钥生成

在“子密钥产生过程”框中,选择密钥的输入形式后,输入密钥;DES要求密钥长度为64位,即选择“ASCII”(输入形式为ASCII码)时应输入8个字符,选择“HEX”(输入形式为十

六进制)时应输入16个十六进制码;

点击“比特流”按钮生成输入密钥的比特流;

点击“等分密钥”按钮,将生成的密钥比特流进行置换选择后,等分为28位的C0和D0两部分;

分别点击两侧的“循环左移”按钮,对C0和D0分别进行循环左移操作(具体的循环左移的移位数与轮序有关,此处演示为第一轮,循环左移1位),生成同样为28位的C1和D1;点击“密钥选取”按钮,对C1和D1进行置换选择,选取48位的轮密钥,此处生成第一轮的密钥K1。

上述密钥生成过程如图1.1.4-6所示。

图1.1.4-6

(3)加密过程

在“加密过程”框中,选择明文的输入形式后,输入明文;DES要求明文分组长度为64位,输入要求参照密钥输入步骤;

点击“比特流”按钮生成输入的明文分组的比特流;

点击“初始置换IP”对明文比特流进行初始置换,并等分为32位左右两部分L0和R0;

点击“扩展置换E”按钮对32位R0进行扩展置换,将其扩展到48位;

点击“异或计算”按钮,将得到的扩展结果与轮密钥K1进行异或,得到48位异或结果;分别点击“S1”、“S2”、…、“S8”按钮,将得到的48位异或结果通过S代换产生32位输出;点击“异或计算”按钮,将得到的32位输出与L0进行异或,得到R1;同时令L1=R1,进入下一轮加密计算。

上述加密过程如图1.1.4-7所示。

依次进行16轮计算,最终得到L16和R16;

点击“终结置换”按钮,对交换后的L16和R16进行初始逆置换IP-1,即可得到密文。

上述加密过程如图1.1.4-8所示。

图1.1.4-7

图1.1.4-8

(三)DES实例

(1)点击DES分步演示窗体中的“DES实例”标签,进入DES实例演示页面。

(2)加密实例

输入明文、初始化向量和密钥,选择工作模式和填充模式,点击“加密”按钮,对输入的明文使用DES算法按照选定的工作模式和填充模式进行加密;在轮密钥显示框内以十六进制显示各轮加密使用的密钥,加密结果以两种形式显示在密文框中。上述过程如图1.1.4-9所示。

图1.1.4-9

(3)解密实例

输入密文、密钥和初始化向量,选择工作模式和填充模式,点击“解密”按钮,对输入的密文使用DES算法按照选定的工作模式和填充模式进行解密;在轮密钥显示框内以十六进制显示各轮加密使用的密钥,解密结果以两种形式显示在明文框中。

(四)DES扩展实验

(1)点击“扩展实验”框中的“DES扩展实验”按钮,进入DES扩展实验窗口,打开后

默认进入扩展实验主页面,进行加解密。

(2)确保在主窗口中选中了“加密”按钮,将DES的工作模式设置为“加密运算”。

(3)文本框内输入待加密16个字节长的明文ASCII码串(64比特),16个字节长的密钥

ASCII码串(64比特),点击“运行”按钮,得到DES的加密结果,如图1.1.4-10所示。

图1.1.4-10

(4)观察“初始置换”(初始置换IP)。在主窗口中点击“初始置换”按钮,进入“首置

换”卡片,再次点击“运行”,即可观察明文的初始变换过程,如图1.1.4-11所示。

可以根据需要,调节变换显示的速度。

图1.1.4-11

(5)观察密钥变换。在主窗口中点击“密码表”按钮,打开密码变换卡片组。

①选择“密码表”卡片,观察16轮加密变换的密钥,如图1.1.4-12所示。

图1.1.4-12

②选择“密码盒”卡片,观察16轮加密变换密钥的生成过程。点击“置换选择1”按钮,得到该密钥的初始变换,选择想要测试加密密钥的轮次,再点击“置换选择2”按钮,即可得到相应的加密密钥,如图1.1.4-13所示。

初始置换IP

循环左移位

数表

置换选择2

图1.1.4-13

(6)观察加密函数。点击主窗口的“F(Ri,Ki+1)”按钮,进入加密函数变换卡片。

①依次顺序点击“F(Ri,Ri+1)”卡片中的各个按钮,可以得到“选择运算E”、“代替函数组S”和“置换运算P”的运算结果,如图1.1.4-14所示。

图1.1.4-14

②选择“F(Ri,Ri+1)”卡片右下角的“Ebox”、“Sbox”或“Pbox”,并点击“查看”按钮,可以详细观察相应的变换过程,如图1.1.4-15所示(以Ebox为例)。

图1.1.4-15

(7)观察“末置换”(逆初始变换IP-1)。在主窗口中点击“末置换”按钮,进入“末置

换”卡片,再次点击“运行”,即可观察加密过程的末置换(逆初始变换IP-1)的执行过程,如图1.1.4-16所示。只有当主窗口中循环轮次等于16时,“末置换”按钮才变为有效的,否则无法激活该窗口。

图1.1.4-16

(8)解密时,确保在主窗口中选中了“解密”按钮,将DES的工作模式设置为“解密运

算”。文本框内输入待解密16个字节长的密文ASCII码串(64比特),16个字节长的密钥ASCII码串(64比特),点击“运行”按钮,得到DES的解密结果,如图1.1.4-17所示。解密运算的其他过程与加密过程一样,不再赘述。

图1.1.4-17

(五)算法跟踪

选择DES算法,在算法计算的相应区域输入明/密文和密钥;点击“跟踪加密”/“跟踪解密”按钮,进入调试器,选择对应的算法函数进行算法跟踪;跟踪完成后会自动返回实验界面显示计算结果;切换回调试器,停止调试,关闭调试器,不保存工程。

具体步骤可参照古典密码实验中实验步骤二。

二、3DES

在加密算法选项里选择3DES,以下实验步骤保持算法不变。

(一)加解密计算

选择明/密文和密钥的格式,输入明/密文和密钥;点击“加密”/“解密”按钮,进行加/解密计算;查看计算结果。

具体步骤可参照DES的加解密计算的实验步骤。

(二)查看轮密钥

(1)点击“扩展实验”框中的“查看轮密钥”按钮,进入查看轮密钥窗体。

(2)输入明文、初始化向量和密钥,密钥长度为128位或192位,对应于原理中的两种

情况,此处以输入128位密钥为例;选择工作模式和填充模式,点击“加密”按钮,使用3DES算法按照选定的工作模式和填充模式进行加密;在“密钥”框中查看各轮的密钥,在“密文”框中查看生成的密文。具体如图1.1.4-18所示。

图1.1.4-18

(三)扩展实验

(1)点击扩展实验下的“3DES扩展实验”按钮,进入3DES扩展实验主窗体,如图1.1.4-19

所示。

图1.1.4-19

(2)点击主窗体内最左边的“3DES密码”按钮,进入3DES加解密实验。分别在“明文

ACSII码串”、“密钥K1的ASCII码串”中输入16个十六进制的数值,点击左上角的“DES”按钮,在“一重DES密文ASCII码串”中就会显示出加密的密文ASCII码串值。同样在“密钥K2的ASCII码串”中输入16个十六进制的数值(最好与K1不同),点击上排中间的“DES-1”按钮,在“二重DES密文ASCII码串”中就会显示出加密的密文ASCII码串值,如图1.1.4-20所示。

图1.1.4-20

(3)在“密钥K3的ASCII码串”中输入16个十六进制的数值,点击右上角“DES”按钮,

在“密文ASCII码串”中就会显示出3DES加密的密文ASCII码串值,如图1.1.4-21所示。

图1.1.4-21

(4)3DES的解密过程是其加密过程的逆过程。接着上面的实验步骤,依次从右到左,顺

序点击3DES加解密卡片下排中的按钮“DES-1”、“DES”和“DES-1”,分别得到“二重DES明文ASCII码串”、“一重DES明文ASCII码串”和“明文ASCII码串”,如图

1.1.4-22所示。

图1.1.4-22

(四)算法跟踪

选择3DES算法,在算法计算的相应区域输入明/密文和密钥;点击“跟踪加密”/“跟踪解密”按钮,进入调试器,选择对应的算法函数进行算法跟踪;跟踪完成后会自动返回实验界面显示计算结果;切换回调试器,停止调试,关闭调试器,不保存工程。

具体步骤可参照古典密码实验中实验步骤二。

三、IDEA

在加密算法选项里选择IDEA,以下实验步骤保持算法不变。

(一)加解密计算

选择明/密文和密钥的格式,输入明/密文和密钥;点击“加密”/“解密”按钮,进行加/解密计算;查看计算结果。

具体步骤可参照DES的加解密计算的实验步骤。

(二)扩展实验

(1)点击“扩展实验”框中的“IDEA扩展实验”按钮,进入IDEA扩展实验窗口,打开

后默认进入扩展实验主页面。

(2)在主窗口中的“明文”文本框中输入16个十六进制的数值串,在“密钥”文本框

中输入32个十六进制的数值串,点击“加密”按钮,如图1.1.4-23所示。

图1.1.4-23

(3)观察密码生成过程。在主窗口中点击“密码表”按钮,进入密码表的生成过程。点

击“运行”后,再点击“上”、“下”、“左”或“右”箭头,分别得到相应轮次的密码变换结果,如图1.1.4-24所示。

图1.1.4-24

(4)观察轮变换过程。点击轮变换中的“左”或“右”箭头,观察该轮加密的结果;也

可以直接在轮次文本框中输入一个1-9之间的数值,点击“循环”按钮;具体如图

1.1.4-25所示。

图1.1.4-25

(5)观察输出变换过程。当轮变换的轮次到9时,即进入了IDEA密码的最后一轮输出

变换,得到最后的加密运算结果;具体如图1.1.4-26所示。

图1.1.4-26

(6)运算器工具。在主窗口中点击“运算器”,即进入运算器工具窗口;用户可在其中

输入十六进制的数据进行IDEA中的一些典型运算,如“16位按位异或+”、“16位

密码学对称加密算法

对称加密算法 一、网络安全 1.网络安全 (1) 网络的安全问题:有以下四个方面 A. 端-端的安全问题,主要指用户(包括代理)之间的加密、鉴别和数据完整性维护。 B. 端系统的安全问题,主要涉及防火墙技术 C. 安全服务质量问题,主要指如何保护合法用户的带宽,防止用户非法占用带宽。 D. 安全的网络基础设施,主要涉及路由器、DNS服务器,以及网络控制信息和管理信息的安全问题。 (2)网络的安全服务:有以下五个方面 A.身份认证:这是考虑到在网络的应用环境下,验证身份的双方一般是通过网络而非直接交互,所以传统的验证手段如根据对方的指纹等方法就无法应用。同时大量的黑客随时都可能尝试向网络渗透,截获合法用户的口令并冒充顶替,以合法身份入网。所以应该提供一种安全可靠的身份认证的手段。 B.授权控制:授权控制是控制不同用户对信息资源的访问权限。授权控制是以身份认证为基础的。通过给不同用户的提供严格的不同层次和不同程度的权限,同时结合可靠的身份认机制,可以从很大程度上减少非法入侵事件发生的机会。 C.数据加密:数据加密技术顾名思义。在互联网上应用加密技术来保证信息交换的可靠性已经的到了人们普遍的认可,已经进入了应用阶段。目前的加密技术主要有两大类:一类是基于对称密钥加密的算法,另一类是基于非对称密钥加密的算法。它们都已经达到了一个很高的强度,同时加密算法在理论上也已经相当的成熟,形成了一门独立的学科。而从应用方式上,一般分成软件加密和硬件加密。前者成本低而且实用灵活,更换也方便;而后者加密效率高,本身安全性高。在应用中,可以根据不同的需要来进行选择。 D.数据完整性:数据完整性是指通过网上传输的数据应该防止被修改、删除、插入、替换或重发,以保证合法用户接收和使用该数据的真实性。 E.防止否认:在网上传输数据时,网络应提供两种防止否认的机制:一是防止发送方否认自己发送过的信息,而谎称对方收到的信息是别人冒名或篡改过的;二是防止接收方否认自己收到过信息。利用非对称加密技术可以很好的实现第一个否认机制。 二、加密技术 (1) 加密技术的产生和发展 A. 古代,目前记录的比较早的是一个在公元前2世纪,由一个希腊人提出来的,26个字母放在一个5×5的表格里,这样所有的源文都可以行列号来表示。 B. 近代,在第二次世界大战里,密码机(如紫罗兰)得到了比较广泛的已经技术,同时破译密码的技术也得到了发展,出现了一次性密码技术。同时密码技术也促进了计算机的发展。 C. 现代,由于计算机和计算机网络的出现,对密码技术提出了更高的需求。密码学的论文和会议不断的增加,以密码技术为主的商业公司开始出现,密码算法层出不穷,并开始走向国际标准化的道路,出现了DES,AES等国家(美国的)标准。同时各个国家和政府对密码技术也越来越重视,都加密技术的出口和进口都作了相当严格的规定。 (2) 加密技术的分类 A.对称加密技术 a. 描述 对称算法(symmetric algorithm),有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的。所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性

现代密码学实验报告

现代密码学 实验报告 学生姓名 学号 专业班级计算机科学与技术指导教师段桂华 学院信息科学与工程学院完成时间2016年4月

实验一密码算法实验 [实验目的] 1.掌握密码学中经典的对称密码算法AES、RC4的算法原理。 2.掌握AES、RC4的算法流程和实现方法。 [实验预备] 1.AES算法的基本原理和特点。 2.流密码RC4的密钥流生成以及S盒初始化过程。 [实验内容] 1. 分析AES、RC4的实现过程。 2. 用程序设计语言将算法过程编程实现。 3. 完成字符串数据的加密运算和解密运算 输入十六进制明文:11223344556677889900AABBCCDDEEFF 输入十六进制密钥:13579BDF02468ACE1234567890ABCDEF [实验步骤] 1. 预习AES、RC4算法。 2. 写出算法流程,用程序设计语言将算法过程编程实现。 3. 输入指定的明文、密钥进行实验,验证结果。 4. 自己选择不同的输入,记录输出结果。 写出所编写程序的流程图和运行界面、运行结果。 一、AES算法 1、AES算法简介 AES 是一种可用来保护电子数据的新型加密算法。特别是,AES 是可以使用128、192 和 256 位密钥的迭代式对称密钥块密码,并且可以对 128 位(16 个字节)的数据块进行加密和解密。与使用密钥对的公钥密码不同的是,对称密钥密码使用同一个密钥来对数据进行加密和解密。由块密码返回的加密数据与输入数据具有相同的位数。迭代式密码使用循环结构来针对输入数据反复执行排列和置换运算。 2、算法实现及流程 以加密函数为例,如下所示,首先对密钥进行预处理密钥扩展,然后明文进行Nr(Nr与密钥长度有关)次迭代运算,包括字节替换SubBytes、移位行运算ShiftRows、混合列运算MixColumns、以及轮秘钥加密AddRoundKey。

AES加密算法的实现及应用

AES加密算法的实现及应用 摘要:AES加密算法具有安全性高,运行速度快,对硬件配置要求低,算法属于对称算法等优点,非常适合硬件的实现。课题对于AES加密算法进行改进,提高程序运行效率进行了研究。研究主要包括AES加密算法的改进,C语言实现,以及完成对数据流的加密和解密过程,同时对AES加密算法的应用进行了简单介绍。 关键词:AESC语言加密 前言: AES加密算法作为DES加密算法的替代品,具有安全、高效以及在不同硬件和软件[6]运行环境下表现出的始终如一的良好性能,因此该算法具有较高的开发潜力和良好的实用价值。本研究主要包括AES加密算法的改进,C语言实现,以及完成对数据流的加密和解密过程,同时对AES加密算法的应用进行了简单介绍。 一、AES加密算法的改进及实现 (1)AES加密算法的流程图 在图1.1中,Round代表加密的轮数,即程序循环次数。State代表状态矩阵,一个存储原始数据的数组。RoundKey代

表经过扩展运算后的密钥数组。ByteSub()代表置换函数,对状态矩阵State中的数据进行置换。ShiftRow()代表移位函数,对状态矩阵State中的数据进行移位运算。MixColumn()代表列混合运算函数,对状态矩阵State中的数据进行列混合运算。AddRoundKey()代表异或运送函数,对数组State和数组RoundKey进行异或运算。由上图可以看出,最后一次轮变换比前几次轮变换少执行一次MixColumn()函数。 (2)AES解密算法的流程图 在图1.2中,Round代表加密的轮数,即程序循环次数。State代表状态矩阵,一个存储原始数据的数组。RoundKey代表经过扩展运算后的密钥数组。InvByteSub()代表置换函数,对状态矩阵State中的数据进行置换。InvShiftRow()代表移位函数,对状态矩阵State中的数据进行移位运算。InvMixColumn()代表列混合运算函数,对状态矩阵State中的数据进行列混合运算。由上图可以看出,最后一次轮变换比前几次轮变换少执行一次MixColumn()函数。 二、AES加密算法复杂度分析 下面对改进前的算法和改进后的算法进行复杂度分析[8]以及程序执行效率的分析。 设b为0x00―0xff中的任意常数,以0x09*b为例进行讨

AES算法加解密原理及安全性分析

AES算法加解密原理及安全性分析 刘帅卿 一、AES算法简介 AES算法是高级加密标准算法的简称,其英文名称为Advanced Encryption Standard。该加密标准的出现是因为随着对称密码的发展,以前使用的DES(Data Encryption Standard数据加密标准)算法由于密钥长度较小(56位),已经不适应当今数据加密安全性的要求,因此后来由Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。 AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations)和替换(substitutions)输入数据。加之算法本身复杂的加密过程使得该算法成为数据加密领域的主流。 二、AES算法的基本概念 1、有限域(GF) 由于AES算法中的所有运算都是在有限域当中进行的,所以在理解和实现该算法之前先得打好有限域这一基石才行。通常的数学运算都是在实数域中进行,而AES算法则是在有限域中进行,我们可以将有限域看成是有确定边界范围的正整数集合,在该集合当中,任意两个元素之间的运算结果都仍然落在该集合当中,也即满足运算封闭性。 那么如何才能保证这样的“有限性”(也即封闭性)呢? GF(2w)被称之为伽罗华域,是有限域的典型代表。随着w(=4,8,16,…)的取值不同所形成的有限域范围也不同。AES算法中引入了GF域当中对数学运算的基本定义:将两数的加减法定义为两者的异或运算;将两数的乘法定义为多

1密码学-DES实验报告

南京信息工程大学实验(实习)报告实验(实习)名称对称密码实验(实习)日期得分指导教师 系计软院专业网络工程年2011 班次 1 姓名学号20111346026 一.实验目的 1.理解对称加密算法的原理和特点 2.理解DES算法的加密原理 二.实验内容 第一阶段:初始置换IP。在第一轮迭代之前,需要加密的64位明文首先通过初始置换IP 的作用,对输入分组实施置换。最后,按照置换顺序,DES将64位的置换结果分为左右两部分,第1位到第32位记为L0,第33位到第64位记为R0。 第二阶段:16次迭代变换。DES采用了典型的Feistel结构,是一个乘积结构的迭代密码算法。其算法的核心是算法所规定的16次迭代变换。DES算法的16才迭代变换具有相同的结构,每一次迭代变换都以前一次迭代变换的结果和用户密钥扩展得到的子密钥Ki作为输入;每一次迭代变换只变换了一半数据,它们将输入数据的右半部分经过函数f后将其输出,与输入数据的左半部分进行异或运算,并将得到的结果作为新的有半部分,原来的有半部分变成了新的左半部分。用下面的规则来表示这一过程(假设第i次迭代所得到的结果为LiRi): Li = Ri-1; Ri = Li-1⊕f(Ri-1,Ki);在最后一轮左与右半部分并未变换,而是直接将R16 L16并在一起作为未置换的输入。 第三阶段:逆(初始)置换。他是初始置换IP的逆置换,记为IP-1。在对16次迭代的结果(R16 L16)再使用逆置换IP-1后,得到的结果即可作为DES加密的密文Y输出,即Y = IP-1 (R16 L16) 三.流程图&原理图

流程图

DES原理图

分组密码算法

实验二分组密码算法DES 一、实验目的 通过用DES算法对实际的数据进行加密和解密来深刻了解DES的运行原理。 二、实验原理 分组密码是一种对称密码体制,其特点是在明文加密和密文解密的过程中,信息都是按照固定长度分组后进行处理的。在分组密码的发展历史中,曾出现了许多优秀的算法,包括DES,IDEA,AES,Safer++等等。下面以DES算法为例介绍分组密码算法的实现机制。 DES算法将明文分成64位大小的众多数据块,即分组长度为64位。同时用56位密钥对64位明文信息加密,最终形成64位的密文。如果明文长度不足64位,即将其扩展为64位(如补零等方法)。具体加密过程首先是将输入的数据进行初始置换(IP),即将明文M中数据的排列顺序按一定的规则重新排列,生成新的数据序列,以打乱原来的次序。然后将变换后的数据平分成左右两部分,左边记为L0,右边记为R0,然后对R0实行在子密钥(由加密密钥产生)控制下的变换f,结果记为f(R0,K1),再与L0做逐位异或运算,其结果记为R1,R0则作为下一轮的L1。如此循环16轮,最后得到L16、R16,再对L16、R16实行逆初始置换IP-1,即可得到加密数据。解密过程与此类似,不同之处仅在于子密钥的使用顺序正好相反。DES全部16轮的加密过程如图1-1所示。 DES的加密算法包括3个基本函数: 1.初始置换IP 它的作用是把输入的64位数据块的排列顺序打乱,每位数据按照下面的置换规则重新排列,即将第58位换到第一位,第50位换打第2位,…,依次类推。置换后的64位输出分为L0、R0(左、右)两部分,每部分分别为32位。 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 1

AES加密解密与代码实现详解

先搞定AES算法,基本变换包括SubBytes(字节替代)、ShiftRows(行移位)、MixColumns(列混淆)、AddRoundKey(轮密钥加) 其算法一般描述为 明文及密钥的组织排列方式

ByteSubstitution(字节替代) 非线性的字节替代,单独处理每个字节: 求该字节在有限域GF(28)上的乘法逆,"0"被映射为自身,即对于α∈GF(28),求β∈GF(28), 使得α·β=β·α=1mod(x8+x4+x2+x+1)。 对上一步求得的乘法逆作仿射变换 y i=x i + x(i+4)mod8 + x(i+6)mod8 + x(i+7)mod8 + c i (其中c i是6310即011000112的第i位),用矩阵表示为 本来打算把求乘法逆和仿射变换算法敲上去,最后还是放弃了...直接打置换表

下面是逆置换表,解密时使用 这里遇到问题了,本来用纯c初始化数组很正常,封装成类以后发现不能初始化,不管是声明、构造函数都无法初始化,百歌谷度了一通后没有任何答案,无奈只能在构造函数中声明一个局部变量数组并初始化,然后用memcpy,(成员变量名为Sbox/InvSbox,局部变量名sBox/invsBox)

ShiftRows(行移位变换) 行移位变换完成基于行的循环位移操作,变换方法: 即行移位变换作用于行上,第0行不变,第1行循环左移1个字节,第2行循环左移2个字节,第3行循环左移3个字节。 MixColumns(列混淆变换)

逐列混合,方法: b(x) = (03·x3 + 01·x2 + 01·x + 02) · a(x) mod(x4 + 1)

对称密钥与非对称密钥的区别

对称密钥与非对称密钥的区别 一、对称加密(Symmetric Cryptography) 对称密钥加密,又称私钥加密,即信息的发送方和接收方用同一个密钥去加密和解密 数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个 问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。 对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。 二、非对称加密(Asymmetric Cryptography) 非对称密钥加密系统,又称公钥密钥加密。非对称加密为数据的加密与解密提供了一 个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用 这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。

目前最常用的非对称加密算法是RSA算法。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。 虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。为了解释这个过程,请看下面的例子: (1) Alice需要在银行的网站做一笔交易,她的浏览器首先生成了一个随机数作为对称密钥。 (2) Alice的浏览器向银行的网站请求公钥。 (3)银行将公钥发送给Alice。 (4) Alice的浏览器使用银行的公钥将自己的对称密钥加密。 (5) Alice的浏览器将加密后的对称密钥发送给银行。 (6)银行使用私钥解密得到Alice浏览器的对称密钥。 (7) Alice与银行可以使用对称密钥来对沟通的内容进行加密与解密了。 三、总结 (1)对称密钥加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在

AES加密算法实验报告

四川大学计算机学院、软件学院实验报告 学号::专业:班级:第10 周

在程序运行读取需要加密的图片时,需要进行图片的选取,本次实验中使用在弹窗中选取文件的方式,使用头文件commdlg.h来实现在文件夹中选择需要的文件的选取。 三、加密算法流程 AES加密算法流程如下 字节代替:用一个S盒完成分组的字节到字节的代替; 行移位:进行一次行上的置换; 列混合:利用有限域GF(28)上的运算特性的一个代替; 轮密钥加:当前分组和扩展密钥的一部分进行按位异或。

四、代码实现 cryptograph.h #include #include class plaintext { public: plaintext(); static void createplaintext(unsigned char a[]); static void SubBytes(unsigned char p[16]); static void inSubBytes(unsigned char p[16]); static void ShiftRows(unsigned char e[]); static void inShiftRows(unsigned char e[]); static void MatrixToByte(unsigned char e[]); static void inMatrixToByte(unsigned char e[]); static unsigned char FFmul(unsigned char a, unsigned char b); static void KeyAdding(unsigned char state[16], unsigned char k[][4]); static void KeyExpansion(unsigned char* key, unsigned char w[][4][4]); ~plaintext(); private: }; cryptograph.cpp #include"cryptography.h" using namespace std; static unsigned char sBox[] = {};/定义加密S盒/ unsigned char insBox[256] ={};//定义解密S盒 plaintext::plaintext() {

DES实验报告

DES加密算法 一、实验目的 1、理解对称加密算法的原理和特点 2、理解DES算法的加密原理 二、实验步骤 第一阶段:64位明文进行初始置换IP(initial permutation) 第二阶段:在密钥控制下16轮迭代 第三阶段:交换左右32比特 IP 第四阶段:初识逆置换1 三、实验原理 对称密钥机制即对称密钥体系,也称为单钥密码体系和传统密码体系。对称密码体系通常分为两大类,一类是分组密码(如DES、AES算法),另一类是序列密码(如RC4算法)。对称密码体系加密和解密时所用的密钥是相同的或者是类似的,即由加密密钥可以很容易地推导出解密密钥,反之亦然。同时在一个密码系统中,我们不能假定加密算法和解密算法是保密的,因此密钥必须保密。发送信息的通道往往是不可靠的或者不安全的,所以在对称密码系统中,必须用不同于发送信息的另外一个安全信道来发送密钥。 四、实验内容 第一阶段:置换规则如下矩阵,即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是 输出的左32位,R0 是右32位,例:设置换前的输入值為D1D2D3 (64) 则经过初始置换后的结果為:L0=D550...D8;R0=D57D49 (7) 第二阶段: 1、变换密钥 取得64位的密钥,每个第8位作为奇偶校验位,舍弃64位密钥中的奇偶校验位,根据下表PC-1进行密钥变换得到56位的密钥。将变换后的密钥分为两个部分,开始的28位称为C0,最后的28位成为D0。然后同时将C0、D0循环左移1位形成C1、D1。C1D1经过PC-2从56位中选出48位输出,即为K1。循环左移LSi(i=1,2,……,16)分别是: 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1C1、D1分别循环左移LS2位,再合并,经过PC-2,生成子密钥K2。依次类推直至K16形成。 2、加密数据 将32位的RI-1按下表(E)扩展为48位的EI-1: 异或Ei-1和Ki,即E[i-1] XOR K[i],将异或后的结果分为8个6位长的部分,第1

AES加密算法原理(图文)

AES加密算法原理(图文) 随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES[1]。经过三轮的筛选,比利时Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。此算法将成为美国新的数据加密标准而被广泛应用在各个领域中。尽管人们对AES还有不同的看法,但总体来说,AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES设计有三个密钥长度:128,192,256位,相对而言,AES的128密钥比DES的56密钥强1021倍[2]。AES算法主要包括三个方面:轮变化、圈数和密钥扩展。 AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和256 位密钥,并且用128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。Figure 1 显示了AES 用192位密钥对一个16位字节数据块进行加密和解密的情形。

Figure 1 部分数据 AES算法概述 AES 算法是基于置换和代替的。置换是数据的重新排列,而代替是用一个单元数据替换另一个。AES 使用了几种不同的技术来实现置换和替换。为了阐明这些技术,让我们用Figure 1 所示的数据讨论一个具体的AES 加密例子。下面是你要加密的128位值以及它们对应的索引数组: 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 192位密钥的值是: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 170 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 18 19 20 21 22 23

计算机网络安全实验报告--非对称密码算法RSA

实验二非对称密码算法RSA 一、实验目的 通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。 二、实验环境 运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。 三、实验内容和步骤 1)编写一个程序,随机选择3个较大的数x、e、n,然后计算xe mod n, 记录程序运行时间。实际中应用的素数为512位,n也就为1024位。 这样的大数在计算机上如何表示、如何进行运算,查阅资料给出简单说明。 RSA依赖大数运算,目前主流RSA算法都建立在512位到1024位的大数运算之上,所以我们在现阶段首先需要掌握1024位的大数运算原理。 大多数的编译器只能支持到64位的整数运算,即我们在运算中所使用的整数必须小于等于64位,即:0xffffffffffffffff也就是 18446744073709551615,这远远达不到RSA的需要,于是需要专门建立大数运算库来解决这一问题。 最简单的办法是将大数当作字符串进行处理,也就是将大数用10进制字

符数组进行表示,然后模拟人们手工进行“竖式计算”的过程编写其加减乘除函数。但是这样做效率很低,因为1024位的大数其10进制数字个数就有数百个,对于任何一种运算,都需要在两个有数百个元素的数组空间上做多重循环,还需要许多额外的空间存放计算的进位退位标志及中间结果。当然其优点是算法符合人们的日常习惯,易于理解。 另一种思路是将大数当作一个二进制流进行处理,使用各种移位和逻辑操作来进行加减乘除运算,但是这样做代码设计非常复杂,可读性很低,难以理解也难以调试。 (2)计算机在生成一个随机数时,并不一定就是素数,因此要进行素性检测。 是否有确定的方法判定一个大数是素数,要查阅资料,找出目前实际可行的素数判定法则,并且比较各自的优缺点。 所谓素数,是指除了能被1和它本身整除而不能被其他任何数整除的数。 根据素数的定义,只需用2到N-1去除N,如果都除不尽则N是素数,结束知其循环。由此得算法1。 (1)flay=0,i=2. /*flay为标志,其初值为0,只要有一个数除尽,其值变为1. (2)If n mod i=0 then flay=l else i=i+1/* n mod i是n除以i的余数. (3)If flay=0 and I<=n-1 then(2) else go (4) (4)If flay=0 then write“n是素数。”else write“不是素数” 最坏的情形下,即N是素数时,算法1需要执行N-2次除法,时间复杂

对称密钥密码系统

对称密钥密码系统 2000多年以前,罗马国王Julius Caesar使用过现今被称为“凯撒密码”的加密算法。此加密算法其实是“移位密码”算法的一个特例。由于移位密码安全性不高,使用穷举爆力技术很容易将其破解,于是人们发明了“代换密码”。而移位密码其实是代换密码的一个子集。虽然代换密码安全性有所提高,使用穷举爆力技术较难破解,然而使用统计密码分析技术却可以很容易地破解代换密码。 到了几百年前,有人发明了“置换密码”有时也叫“换位密码”,之后现代密码技术开始出现。很多人把Claude Shannon誉为现代密码学之父,他提出了“扩散”和“混淆”来构造密码体制的基本要素。这种加密技术可以有效的挫败使用统计分析技术来破解密码。 1973年,Horst Feistel公开了他的“Feistel密码”,这是第一个体现密码之父Shannon思想的密码系统。目前,几乎所有的对称密码系统都使用了Feistel密码的设计特征。 1973年,(美)国家标准局(NBS),即现在的(美)国家标准技术研究所(NIST)公布了征求国家密码标准的提案,人们建议了许多的密码系统。 1977年7月,NBS经过对众多的密码系统进行评估后,采纳了IBM在20世纪60年代(1960s)研制出来的一个密码系统作为数据加密标准(DES),此系统是由Horst Feistel领导的一个研究组研制出来的。这个密码系统基于一个称为LUCIFER[Fic73]的密码系统。LUCIFER密码系统本质上是Feistel密码的一个推广。 1983年、1988年和1993年,DES再度被认定为(美)国家标准。 1997年,RSA实验室发布了一个以10000美元作为酬金的挑战:寻找一个前面带有一个已知明文块的密文的DES密钥。由Roche Verse牵头的一个工程小组动用了70000多台通过因特网连接起来的计算机系统,使用穷举爆力攻击程序大约花费96天的时间找到了正确的DES密钥。意识到DES已经快完成它的历史使命,NIST于1997年1月宣布了一项选择一个用作高级加密标准(AES)的候选算法的计划:这个新的标准的将取代DES。

加密解密程序实验报告

程序设计实践 加密解密程序实验报告 课题概述 1.1课题目标和主要内容: 利用MFC类或者win32编写windows程序,实现加密解密的功能。 1.2系统的主要功能: 1.实现用户界面友好的操作。 2.具有对称编码体制,可以实现: i.凯撒密码:能够自定义密钥,自由输入明文,进行加密、解密,在对话框中返回加密和 解密后的内容。

ii.置换密码:能够自定义密钥,自由输入明文,经矩阵变换进行加密、解密,在对话框中返回加密和解密后的内容 iii.对称加密DES:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序加密,解密结果。 3.具有非对称编码体制: i. RSA加密解密:随机产生p,q,经检验是否互质,若不互质接着产生两个随机数,直 到二者互质为止。自动生成p,q,N及加密解密的密钥,可以自由输入明文,返回加密、 解密的内容。 ii. MD5消息摘要计算:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序的加密结果。 4.信息隐藏技术: 用LSB在图片(bmp格式,任意位置的图片)中写入信息,读取信息并显示出来,可 以擦除信息。可以自定义密钥。 5. AES加密解密:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序 加密,解密结果。 6. 以上的所有对文字加密解密的方法(除LSB以外其余所有方法),都可以用于文件加 密,解密,并能够及时保存加密,解密的信息到一个TXT文档,可以存在用户想存放 的地方。 7.更多: 链接了一个可加密解密,功能更为齐全的网站,若是上述方法不能满足用户需求, 可以在程序运行的窗口中点击相应按钮,在联网的条件下进行在线加密解密。 一、系统设计 2.1系统总体框架: 2.2主要的层次逻辑为:

对称密钥密码

1引言 计算机的发展给人类带来了前所未有的便利,以计算机信息技术为手段的企业信息化建设,已成为企业必不可少的部分。计算机CAD技术高速度、高精度和高效等的优点,已经逐步取代手工设计,广泛应用于产品设计工作中。CAD图纸,在任何时候,都是一个企业的命脉。在使用SolidWorks等软件绘制图纸的过程中,作为企业是否经常会考虑:我们厂刚刚设计出来的新产品,怎么市场上别的牌子的产品也已经上市啦?技术人员的流动,是否会同时有图纸的流动?我们花了几十万买的图纸,怎么隔壁的那个厂子图纸和我们的一样呢?我们的光驱、软驱、U盘接口都封掉了,可是图纸怎么还是传出去啦?解决这些问题的一种有效方法就是使用现代密码技术,加密技术是保障信息安全的最基本的、最核心的技术措施。对CAD图纸进行加密应该是一种比较合适的安全保密措施 2密码技术 2.1基本概念 密码学是研究编制密码和破译密码的技术科学。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。随着先进科学技术的应用,密码学已成为一门综合性的尖端技术科学。它与语言学、数学、电子学、声学、信息论、计算机科学等有着广泛而密切的联系。密码就是一组含有参数K的变换E。设已知信息M,通过变换E得到密文C。即C=EK(M)这个过程称之为加密,参数K称为密钥。

2.1.1传统密码学 自从有了人类社会就有了信息交流,特别是出现了战争,为了信息交流的安全,就出现了密码技术。从古代到16世纪末由于这个时期生产力低下,产生的许多密码体制都是可用纸笔或者简单的器械实现加密/解密的,这个时期的密码体制主要有两大类:一类是换位密码体制,另一类是代替密码体制。从二十世纪初到20世纪50年代末,为了适应密码通信的需要,密码设计者设计出了一些采用复杂的机械和电动机械设备实现信息加密/解密操作,他们代替了繁重的手工作业方式,在战争中发挥了重要的作用。转轮密码机是这一时期的杰出代表。 2.1.2现代密码学 对称密钥密码体制又称为单密钥密码体制或秘密密钥密码体制。这种密码体制的加密密钥和解密密钥相同,或者虽然不相同,但可由其中的任意一个可以和容易地推导出另一个。传统的密码学都是属于对称密钥密码体制。现在,在传统密码学地基础上对称密码体制也有了新地发展,像序列密码,分组密码,还有对称密钥密码体制的典型代表:数据加密标准DES和高级数据加密标准AES。非对称密钥密码体制又称为双密钥密码体制或公开密钥密码体制。这种密码体制的加密/解密操作分别使用两个不同地密钥,并且不可能由加密密钥推导出解密密钥。采用非对称密钥密码体制的每个用户都有一对相互关联而又彼此不同地密钥,使用其中的一个密钥加密的数据,不能使用该密钥自身进行解密,而只能使用对应的另一个密钥进行解密。在这一对密钥中,其中一个密钥称为公钥,它可以公开并通过公开的信道发给任何一位想与自己通信的另

《现代密码学》实验报告

现代密码学实验报告 学生姓名骆秀娟 学号0909121906 专业班级计科1204班 指导教师段桂华 学院信息科学与工程学院 完成时间2014年4月25日

实验一对称密码算法实验 [实验目的] 1.掌握密码学中经典的对称密码算法DES、AES、RC4的算法原理。 2.掌握DES、AES、RC4的算法流程和实现方法。 [实验预备] 1.DES算法有什么特点?算法中的哪些结构保证了其混淆和扩散的特性? 2.AES算法的基本原理和特点。 3.流密码RC4的密钥流生成以及S盒初始化过程。 [实验内容] 1.分析DES、AES、RC4、SHA的实现过程。 2. 用程序设计语言将算法过程编程实现。 3. 完成字符串数据的加密运算和解密运算 输入明文:Idolikethisbook 输入密钥:cryption [实验步骤] 1. 预习DES、AES、RC4算法。 2. 写算法流程,用程序设计语言将算法过程编程实现。 3. 输入指定的明文、密钥进行实验,验证结果。 4. 自己选择不同的输入,记录输出结果。 写出所编写程序的流程图和运行界面、运行结果。

DES程序流程图: DES运行结果:

AES程序流程图: AES运行结果:

RC4流程图:

RC4运行结果: [问题讨论] 1. 在DES算法中有哪些是弱密钥?哪些是半弱密钥? 2. 改变明文或密钥中的一个比特值可能影响AES值中的多少比特? 3.分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。 回答问题 解:1>弱密钥有以下几种情况:全0;全1;一半为0,一半为1; 半弱密钥如下:E01F E01F E01F E01F FE01 FE01 FE01 FE01 E001 E001 F101 F101 FE1F FE1F FE01 FE01 2>改变一个比特值最多改变4个AES值。 3>在RC4实验中,为了将输入的char型密钥分个存储进数组中,刚开始我想把它转化为string型,再存储,但是string型数据不能直接从键盘输入,且最后

AES加密算法的实现及应用

现代经济信息 前言: AES加密算法作为DES加密算法的替代品,具有安全、高 效以及在不同硬件和软件[6]运行环境下表现出的始终如一的良好性 能,因此该算法具有较高的开发潜力和良好的实用价值。本研究主要 包括AES加密算法的改进,C语言实现,以及完成对数据流的加密和 解密过程,同时对AES加密算法的应用进行了简单介绍。 一、AES加密算法的改进及实现 (1)AES加密算法的流程图 在图1.1中,Round代表加密的轮数,即程序循环次数。State代 表状态矩阵,一个存储原始数 据的数组。RoundKey代表经 过扩展运算后的密钥数组。 ByteSub()代表置换函数,对 状态矩阵State中的数据进行 置换。ShiftRow()代表移位函 数,对状态矩阵State中的数据 进行移位运算。MixColumn() 代表列混合运算函数,对状态 矩阵State中的数据进行列混合 运算。AddRoundKey()代表异 或运送函数,对数组State和数 组RoundKey进行异或运算。由 上图可以看出,最后一次轮变 换比前几次轮变换少执行一次 MixColumn()函数。 (2)A E S解密算法的流 程图 在图1.2中,Round代表加 密的轮数,即程序循环次数。 State代表状态矩阵,一个存储 原始数据的数组。RoundKey 代表经过扩展运算后的密钥 数组。InvByteSub()代表置换 函数,对状态矩阵State中的数据进行置换。InvShiftRow()代表移位函 数,对状态矩阵State中的数据进行移位运算。InvMixColumn()代表列 混合运算函数,对状态矩阵State中的数据进行列混合运算。由上图可 以看出,最后一次轮变换比前几次轮变换少执行一次MixColumn()函 数。 二、AES加密算法复杂度分析 下面对改进前的算法和改进后的算法进行复杂度分析[8]以及程序 执行效率的分析。 设b为0x00—0xff中的任意常数,以0x09*b为例进行讨论。该算式 分解如下: 0x09*b=(0x08+1)*b =0x08*b+b =(0x06+0x02)*b+b =0x06*b+0x02*b+b =(0x04+0x02)*b+0x02*b+b =0x04*b+0x02*b+0x02*b+b =(0x02+0x02)*b+0x02*b+0x02*b+b =0x02*b+0x02*b+0x02*b+0x02*b +b 将上述算式进行C语言实现得到以下程序: (1)程序1 int i,t; t=b; t=t<<2; for(i=0;i<3;i++){ t=t^t; } t=t^b; 由此可见,该程序的 时间复杂度为O(n)。将上 述程序做一改进可得到如 下程序: (2)程序2 int i,t; t=b; t=t<<2; t=t^t; t=t^t; t=t^t; t=t^t; t=t^b; 由此可见,该程序的 时间复杂度为O(1)。 若通过表格法对公式进行编成,可以得到如下程序: (3)程序3 int t; t=Tab0e[0x0e][b]; 由此可见,该程序的时间复杂度为O(1)。 通过上述程序可以发现,程序2与程序3的时间复杂度相同。但这 只能说明两程序的时间效率相似,并不一定相同,具体判断还要看程 序的规模。 虽然程序之间的规模只有几行代码的差距,但如果将这些程序放 在循环体中执行,程序之间在时间上的执行效率就会表现出较大的差 距,循环次数越多,循环层数越多,效率差距就越明显。AES加密算 法本身是一种非常适用于硬件加密的算法,因此当该算法应用于硬件 编程时,就更要把算法的时间效率考虑在内,否则很可能由于算法执 行时间过长,导致尚未加密的数据被新加入的数据冲掉,造成数据的 遗失,如此一来也就失去了数据加密的意义。这也是为什么要对算法 的程序实现进行效率考察的主要原因。 AES加密算法的实现及应用 赵雪梅 盐城工学院,江苏 盐城 224003 图1.1 AES加密算法流程图图1.2 AES解密算法流程图

密码学实验报告

江苏大学 学院计算机学院 专业信息安全0902 姓名*** 学号3090604035 小组成员*******

AES对称加密算法实现 一.AES对称加密算法实现原理 AES(The Advanced Encryption Standard)接受一个128位的明文,并且在一个128、192或者256位秘密密钥的控制下产生一个128位的密文。它是一个替代-置换网络的设计,并且带有一个称作轮(rand)的步骤的集合,其中轮数可以是9、11或者13(取决于密钥的长度),这样可以将明文映射为密文。 AES实际上能定义为在域GF(2)的元素上的一系列标量的运算。它实质上是在整数模2所组成的域,但是它扩展到了多项式域GF(2)[x]中。为了构造一个域,需要使用一个能够不被任何一个具有相同底GF(2)的度数更小的多项式整除的多项式,在AES中选择了v (x)= x^8 + x^4 + x^3 + x + 1。用整数存储时,它表示值0x11B。域中的加法是一个简单异或(xor)操作。乘法就是乘以其他的多项式。一个单元a的乘法逆元是另一个单元b,使得ab模AES的多项式和多项式p(x)=1是同余的。a(x)=0的逆是它本身。 二.AES对称加密算法实现过程 AES 算法是分组密码算法,它的输入分组、输出分组以及加/ 解密过程中的中间分组都是128比特。(对称密码算法根据对明文消息加密方式的不同可分为两大类,即分组密码和流密码。分组密码将消息分为固定长度的分组,输出的密文分组通常与输入的明文分组长度相同。) 1、AES 的加密与解密框图如图所示 (1) 加密变换

设X是AES 的128 比特明文输入,Y是128 比特的密文输出,则AES 密文Y可以用下面的复合变换表示: Y= Ak(r + 1)·R·S·Akr·C·R·S·Ak(r21)·?·C·R·S·Ak1 (X)其中“·”表示复合运算。这里Aki :表示对X 的一个变换Aki (X) = XY Ki (Ki 为第i 轮的子密钥,为比特串的异或运算) 。S:S 盒置换。即对每一个字节用S2Box 做一个置换。S2Box 是一个给定的转换表。R: 行置换。C: 列置换。 s′(x) = a (x) á s (x) 这里á 是特殊的乘法运算 (2) 解密变换 解密变换是加密变换的逆变换。 2、AES(128bits密钥)加密解密流程如下图所示

实验2 对称加密算法:DES

实验1-2 对称密码算法DES 一.实验原理 信息加密根据采用的密钥类型可以划分为对称密码算法和非对称密码算法。对称密码算法是指加密系统的加密密钥和解密密钥相同,或者虽然不同,但是可以从其中任意一个推导出另一个,更形象的说就是用同一把钥匙开锁和解锁。在对称密码算法的发展历史中曾出现过多种优秀的算法,包括DES、3DES、AES等。下面我们以DES算法为例介绍对称密码算法的实现机制。 DES算法是有美国IBM公司在20世纪70年代提出,并被美国政府、美国国家标准局和美国国家标准协会采纳和承认的一种标准加密算法。它属于分组加密算法,即明文加密和密文解密过程中,信息都是按照固定长度分组后进行处理的。混淆和扩散是它采用的两个最重要的安全特性,混淆是指通过密码算法使明文和密文以及密钥的关系非常复杂,无法从数学上描述或者统计。扩散是指明文和密钥中每一位信息的变动,都会影响到密文中许多位信息的变动,从而隐藏统计上的特性,增加密码安全。 DES将明文分成64比特位大小的众多数据块,即分组长度为64位。同时用56位密钥对64位明文信息加密,最终形成64位的密文。如果明文长度不足64位,则将其扩展为64位(例如补零等方法)。具体加密过程首先是将输入的数据进行初始换位(IP),即将明文M 中数据的排列顺序按一定的规则重新排列,生成新的数据序列,以打乱原来的次序。然后将变换后的数据平分成左右两部分,左边记为L0,右边记为R0,然后对R0施行在子密钥(由加密密钥产生)控制下的变换f,结果记为f(R0 ,K1),再与L0做逐位异或运算,其结果记为R1,R0则作为下一轮的L1。如此循环16轮,最后得到L16、R16,再对L16、R16施行逆初始置换IP-1,即可得到加密数据。解密过程与此类似,不同之处仅在于子密钥的使用顺序正好相反。 DES全部16轮的加密过程如图1-1所示。 DES的加密算法包括3个基本函数: 1.初始换位(IP) 它的作用是把输入的64位数据块的排列顺序打乱,每位数据按照下面换位规则重新组合。即将第58位换到第1位,第50位换到第2位,…,依次类推。重组后的64位输出分为L0、R0(左、右)两部分,每部分分别为32位。 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8 57, 49, 41, 33, 25, 17, 9, 1 59, 51, 43, 35, 27, 19, 11, 3 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 R0和K1经过f(R0,K1)变换后的输出结果,再和L0进行异或运算,输出结果做为R1。R0则赋给L1。L1和R1同样再做类似运算生成L2和R2,…,经过16次运算后生成L16和R16。 2.f函数 f函数是多个置换函数和替代函数的组合函数,它将32位比特的输入变换为32位的输出,如图1-2。R i经过扩展运算E变换后扩展为48比特的E(R i),与K i+1进行异或运算后输出的结果分成8组,每组6比特的并联B,B=B1B2B3B4B5B6B7B8,再经过8个S盒的选择压缩运算转换为4比特,8个4比特合并为32比特后再经过P变换输出为32比特的f(R i-1,K i)。其中,扩展运算E与置换P主要作用是增加算法的扩散效果。

相关主题