中南大学现代密码学实验报告

更新时间:2023-09-16 21:58:01 阅读量: 高中教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

现 代 密 码 学 实 验 报 告

学生姓名 代巍 学 号 0909121615 专业班级 信息安全1201 指导教师 段桂华

学 院 信息科学与工程学院 完成时间 2014年5月

实验一 对称密码算法实验

[实验目的]

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算法

1. DES算法及原理

DES密码实际上是Lucifer密码的进一步发展。它是一种采用传统加密方法的区组密码。它的算法是对称的,既可用于加密又可用于解密。美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的通常称为DES密码算法要求主要为以下四点:

提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改;具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础实现经济,运行有效,并且适用于多种完全不同的应用。

目前在这里,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,

以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。

DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。

通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。

DES算法流程图

子密钥产生流程图

2.DES算法加密解密过程

(1)加密过程。 a.初始置换。

DES的第一阶段包括64位分组的置换,改变每个分组中位的顺序。术语置换使用其严格的数学意义;只改变了顺序。这64位数据现在被分成两半:L0(左半部分)和R0(右半部分)。下标0说明是原始的数据。在DES算法第二阶段的每次循环后,这些下标加1。

b.循环移位(16次)

一种根据密钥,并且依赖于表格的算法。这种操作通常被称为数据移位。这个算法要重复16次,但由于每次移位都使用密钥的不同子分组,因此每次移位的操作各不相同。密钥的子分组由另一组表格和表格的移位算法来确定。在每次循环以后,L(左半部分)和R(右半部分)的下标依次加一。第16次循环的结果被称为预输出。

c.逆置换

DES的最后一个阶段包括64位分组的置换,改变每个分组中位的顺序,这

与第1阶段的操作类似。这次置换的输出结果就是密文。

(2)解密过程

DES的解密过程和加密过程相同,只是在解密过程中将子密钥的使用顺序颠倒。

3. DES算法C++实现

模块化设计(囿于篇幅,举几个代表的例子) (1) 二进制转换(将输入的字符串转化为比特数组)

void erjinzhi(char z[8],int *q) { }

char ch; int i,j,a=7;

for(i=0;i<8;i++) { }

for(i=0;i<=63;i++) { }

printf(\

if(i%8==0) printf( \printf(\a=a+16; ch=z[i]; for(j=0;j<8;j++) { }

ch=ch/2; a--;

*(q+a)=ch%2;

(2)密钥生成时 C D移位

void LS_yiwei(int (*p)[28],int i) {

int j;

if(i==1||i==2||i==9||i==16) {

for(j=0;j<=27;j++) {

if(j==27) else

*(*(p+i)+j)=*(*(p+i-1)+j+1); *(*(p+i)+j)=*(*(p+i-1)+0);

}

} else { for(j=0;j<=27;j++) { if(j==26) *(*(p+i)+j)=*(*(p+i-1)+0); else if(j==27)

*(*(p+i)+j)=*(*(p+i-1)+1); else

*(*(p+i)+j)=*(*(p+i-1)+j+2); }

}

}

(2)密文生成模块

void miwen(int *ip_1) { int i,j,a,c,b,x[8]; for(i=0;i<=7;i++) { a=i*8; x[i]=0; for(j=7;j>=0;j--) { c=*(ip_1+a); b=pow(2,j); x[i]=x[i]+b*c;

miwens[i]=x[i];//把密文copy在miwens数组中 a++;

}

}

// printf(\密文为:\ for(i=0;i<=7;i++) { a=x[i]7; printf(\ }

printf(\

}

为了输出使用 4. 实验结果

二、AES算法 1.AES算法简介

AES 是一种可用来保护电子数据的新型加密算法。特别是,AES 是可以使用 128、192 和 256 位密钥的迭代式对称密钥块密码,并且可以对 128 位(16 个字节)的数据块进行加密和解密。与使用密钥对的公钥密码不同的是,对称密钥密码使用同一个密钥来对数据进行加密和解密。由块密码返回的加密数据与输入数据具有相同的位数。迭代式密码使用循环结构来针对输入数据反复执行排列和置换运算。 2.算法实现

以加密函数为例,如下所示,首先对密钥进行预处理密钥扩展,然后明文进行Nr(Nr与密钥长度有关)次迭代运算,包括字节代换ShiftRows行移位、MixColumns、列混合以及AddRoundKey密钥加。

void Cipher() {

int i,j,round=0;

// 把明文赋值到状态数组中 for(i=0;i<4;i++) for(j=0;j<4;j++)

state[j][i] = in[i*4 + j];

// 先与初始轮密钥相加 AddRoundKey(0); // 第一轮至(Nr-1)轮的迭代运算,第Nr轮不用进行列混合运算 for(round=1;round

SubBytes(); //字节代换 ShiftRows(); //行移位 MixColumns(); //列混合 AddRoundKey(round); //密钥加 }

SubBytes(); ShiftRows();

AddRoundKey(Nr);

// 加密结束,将机密结果填入数组out中以便输出 for(i=0;i<4;i++) for(j=0;j<4;j++)

out[i*4+j]=state[j][i]; }

解密函数的流程和加密函数是一致的,只是对于行变换、列变换、以及相关s盒子为加密的逆过程。

字节代换(SubBytes)字节代换是非线形变换,独立地对状态的每个字节进行。

行移位(ShiftRows)是将状态阵列的各行进行循环移位,不同状态行的位移量不同。第0行不移动,第1行循环左移C1个字节,第2行循环左移C2个字节,第3行循环左移C3个字节。位移量C1、C2、C3的取值与Nb有关。

列混合(MixColumns)是将状态阵列的每个列视为多项式,再与一个固定的多项式c(x)进行模x4+1乘法。Rijndael的设计者给出的c(x)为(系数用十六进制数表示):c(x)=‘03’x3+‘01’x2+‘01’x+‘02’。

密钥加(AddRoundKey)是将轮密钥简单地与状态进行逐比特异或。轮密钥由种子密钥通过密钥编排算法得到,轮密钥长度等于分组长度Nb。

程序流程图

AES流程图

3.实验结果

首先,输入密钥cryption,输入明文Idolikethisbook,实验结果如图所示。

实验结果

三、RC4算法 1.算法简介

RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。首先,用从1到256个字节的可变长度密钥初始化一个256个字节的状态盒S[256]。然后,通过S盒子对密钥按字节进行变换。最后可以得到变换后的密钥。对于加密,只要让密钥按字节与明文进行异或。而解密,只要让密钥按字节与密文进行异或。 2.算法实现

开始时,S中元素的值被置为按升序从0到255,即S[0]=0,

S[1]=1,…… ,S[255]=255。同时对密钥key[key_len]的进行填充到随机序列密钥rc4key[256]中,(key_len为key的字节长度,且不大于256)。循环重复用key,直到rc4key的所有字节都被赋值。然后根据密钥re4key去对S盒进行变换。这些预操作可概括如下:

//S盒先初始化为s[0]=0,s[1]=1...s[255]=255

for(i = 0; i < 255; i++)

S[i]=i;

//初始化序列化密钥

for(i = 0; i < 256; i++) { }

for( j = 0, i = 0; i < 256; i++) { }

j = (rc4key[i] + S[i] + j) % 256;

swap(&S[i], &S[j]); //交换S[i]和S[j]的数值 j = i % key_len ; rc4key[i] = key_data[j];

//根据密钥rc4key,填充S盒

矢量S一旦完成初始化,输人密钥就不再被使用.密钥流的生成是从s[0]到S[255],对每个S[i],根据当前S的值,将S[i]与S中的另一字节置换.当S[255]完成置换后,操作继续重复,从S[0]开始。操作如下:

//生成随机序列密钥

for(counter = 0; counter < buffer_len; counter++)

{ }

i = (i + 1) % 256; j = (S[i] + j) % 256; swap(&S[i], &S[j]);

t = (S[i] + S[j]) % 256; rc4key[counter] = S[t];

这两个过程使用同样的函数即可,加密中,将k的值与下一明文字节异或;解密中,将k的值与下一密文字节异或。操作如下:

//将缓冲区数据和随机系列密钥进行异或,则可进行加密或者解密

for(i = 0; i < buffer_len; i++)

result[i] = buffer_data[i] ^ rc4key[i];

程序流程图

图1.1

RC4流程图

3.运行结果

首先,输入密钥cryption,输入明文Idolikethisbook,实验结果如图所示。

加密结果1

如果密钥不变,明文变为idolikethisbook,实验结果如图所示。可以看到,当密钥不变,明文做一小部分改变的时候(第一位由‘I’改变为‘i’),只有对应位的密文发生改变。

加密结果2

[问题讨论]

1. 在DES算法中有哪些是弱密钥?哪些是半弱密钥?

2. 改变明文或密钥中的一个比特值可能影响AES值中的多少比特?

3.分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。 回答问题 答

1、弱密钥:DES在16迭代中分别使用不同的子密钥来确保DES的安全性,如果存在这样一个秘钥,尤其产生的子密钥是相同的,则称其为弱密钥。即K1=K2=…=K16

半弱密钥:由K产生的子密钥K1,K2,…,K16中存在着重复但是不是完全相同,则称为半弱密钥

2、最多影响128比特 3、

实验二 公钥密码算法实验

[实验目的]

1.掌握密码学中常用的公钥密码算法RSA、ECC的算法原理。 2.掌握RSA、ECC的算法流程和实现方法。

[实验预备]

1.RSA和ECC密码系统所基于的数学难题是什么? 2.RSA和ECC算法的基本原理。

3.公钥密码系统可以取代对称密码系统吗? 4.RSA和ECC的实现过程。

[实验内容]

1. 分析RSA、ECC的实现过程。 2. 用程序设计语言将算法过程编程实现 3. 完成数据的加密运算和解密运算 输入明文:security 输入密钥:cryption 对ASCII码进行加密和解密。

[实验步骤] 1. 预习RSA、ECC算法。 2. 了解大素数的生成、大数的运算、公钥、私钥的生成。 3. 写出算法流程,用程序设计语言将算法过程编程实现。 4. 输入指定的明文和密钥进行实验,验证结果。 写出所编写程序的流程图和运行界面、运行结果。

一、RSA 算法

1. RSA算法及原理

(1)选取长度相等的两个大素数p 和q,计算其乘积: n = pq

然后随机选取加密密钥e,使e 和(p–1)(q–1)互素。 最后用欧几里德扩展算法计算解密密钥d,以满足 ed = 1(mod(p–1) ( q–1)) 即d = e–1 mod((p–1)(q–1)) e 和n 是公钥,d 是私钥

(2)加密公式如下: ci = mi^e(mod n)

(3)解密时,取每一密文分组ci 并计算: mi = ci^d(mod n)

Ci^d =(mi^e)^d = mi^(ed) = mi^[k(p–1)(q–1)+1 ] = mi mi^[k(p–1)(q–1)] = mi *1 = mi (4)消息也可以用d 加密用e 解密 2. RSA算法加密解密过程

发送者 B 将明文信息加密后变成密文信息发送给接受者A,A解密。 (1) 加密过程。发送者 B 将作如下事情: a. 得到确认的接受者 A 的加密公钥公告栏等处得到)

b. 将明文信息表示为整数 c. 计算整数

d. 将整数 c 转换成密文信息.

f. 将密文信息发送给 A. (可以在公开通道中传递, 在不知道解密私钥的情况下第三者无法破解密文信息)

(2) 解密过程。为了将密文信息恢复为明文信息, 接受者 A 将作如下事情: a. 将密文信息转换成整数c. b. 运用解密私钥

恢复整数

.

c. 将整数 c 转换成明文信息. 3.RSA算法实现

。(要求以最有效的方式来表达信息)

(从认证中心或电话本或信息

本文来源:https://www.bwwdw.com/article/euxh.html

Top