中国剩余定理在RSA算法中应用的 研究实验

中国剩余定理在RSA算法中应用的 研究实验
中国剩余定理在RSA算法中应用的 研究实验

中国剩余定理在RSA算法中应用的

研究实验

摘要

RSA算法中模数和运算效率之间一直存在矛盾,目前一些认证机构已采用模数为2 048 bit 的RSA 签名方法,这必然会影响签名效率。中国剩余定理对于提高RSA算法的模幂乘运算效率有显著作用,被广泛地应用在加速私钥解密和签名的运算上。在本文中,就中国剩余定理如何提高RSA算法的速度给出详细的描述。但是,直接使用中国剩余定理是不安全的,容易受到出错攻击,本文介绍了出错攻击的方式,并提出了对抗出错攻击的随机小素数改进方法。在此基础上,本文选取了一种四素数RSA算法进行阐述和简单实现,这种算法巧妙地利用了中国剩余定理将传统的RSA算法的速度提升了几倍。

关键词:RSA 、中国剩余定理、四素数、加密、信息安全

目录

中国剩余定理在RSA算法中应用的 (1)

研究实验 (1)

摘要 (1)

第一章引言 (1)

第二章RSA (2)

2.1RSA密码算法 (2)

2.2 RSA密码算法的实现步骤 (2)

第三章中国剩余定理在RSA算法中的应用 (3)

3.1中国剩余定理 (3)

3.2 RSA 中CRT 的引入 (3)

3.3使用中国剩余定理加速RSA算法效率的安全隐患分析 (4)

3.4使用随机小素数改进中国剩余定理对抗出错攻击的方法 (5)

第四章四素数RSA数字签名算法 (6)

4.1 四素数RSA 算法基本原理 (6)

4.2四素数RSA 算法在数字签名中的应用 (7)

4.3 中国剩余定理的应用 (7)

4.4算法对比 (8)

第五章四素数RSA算法的简单实现 (9)

5.1 密钥产生部分 (9)

5.2 加密解密部分 (10)

第六章总结 (13)

参考文献 (14)

第一章引言

随着网络和通信技术的发展,在给人们带来益处的同时,也带来了安全隐患。由于传输过程中存在数据被通信双方之外的第三方伪造或篡改的可能,通信双方无法验证数据来源,就很有可能出现一方抵赖的情况,此时就要求保证传输信息的不可否认性。数字签名就是通信双方在网上交换信息时,基于公钥密码体制来防止伪造和欺骗的一种身份认证技术。在所有公钥密码体制中,应用最为广泛的是RSA( Rivest-Shamir-Adleman) 密码算法,它的特点是安全性高,易于实现,即可用来加密数据,又能用于身份认证。因此,RSA 签名是一种最常用的数字签名方法。然而,RSA 算法中的大数的模幂运算比较费时,这一直是制约着RSA 发展的瓶颈。早期,人们建议使用较小的加密指数或解密指数以加快加密或解密( 签名) 等基本运算,但是,1990 年Wiener提出当私钥d 小于模数N1 /4时,RSA 密码系统是不安全的,其分析方法本质是利用了连分数中Legendre定理;随后1999 年,Boneh 和Durfee把弱密钥d 的上界提高到d <N0.292。因此,出于安全性考虑,目前RSA 密码系统的模数为1 024 bit 到2 048 bit,如此庞大的模数,其运算效率必然受到影响。针对这一问题,很多学者提出了不同的优化算法,比如基于乘同余对称特性和指数2k次方组合优化算法、加法链方法、滑动窗口法和模重复平方算法等,这些都是从运算操作的角度去优化;国外还提出了许多从结构上改进的算法,比如Batch RSA、Mprime RSA、Mpower RSA 和Rebalanced RSA。这些方法都在一定程度上提高了算法运算效率,其中效果比较显著的是利用中国剩余定理( Chinese RemainderTheorem,CRT) 进行解密或签名。本文把融入中国剩余定理的RSA 算法叫作CRT-RSA ( Chinese Remainder Theorem-Rivest Shamir Adleman) 算法。已证明,若不考虑中国剩余定理的计算代价,双素数CRT-RSA 在运算效率上是传统RSA算法的4 倍;若考虑中国剩余定理的计算代价,双素数CRT-RSA在运算速度上分别是原算法的3.32 倍( 模为1 024 比特) 和3.47 倍( 模为2048 比特)。这个速度虽令人满意,却存在安全隐患,传统双素数CRT-RSA 签名算法容易遭受出错攻击,攻击者能够利用错误的签名来分解模数N。

本文详细阐述了中国剩余定理的原理作用,以及如何将它利用到RSA中,然后通过对一种四素数CRT_RSA算法的实现对其进行研究。

第二章RSA

2.1RSA密码算法

随机选取两个不同的大素数p和q,计算它们的乘积N=pq与相应的欧拉函数(N)=(p-1)(q-1)的值,将N公开,而将φ( N)、p与q保密;显然,如果在不知道N的素因子p与q的前提下,计算(N)的值是属于NP问题,极难实现。

再随机选取一个正整数e,使e满足条件:e<(N)且GCD(e,(N))=1(即e与(N)的最大公因数是1),根据扩展Euclid算法(Extended Euclidean Algorithm)计算d≡e-1(mod ),即计算满足ed≡1(mod(N))的d。将e公开,而将d保密,就确定了RSA 算法的公开密钥PK=(e,N),私人密钥SK=(d,N),密钥空间:

K={(N,p,q,e,d)|N=pq,p与q为不同大素数,ed≡1(mod (N))}。

相应地,RSA算法中的单向陷门函数为f(x)=x t(modN)(其中t∈K且x∈Z N),称为RSA函数。其秘密陷门信息为(N)及素数p、q的值。

确定公钥PK=(e,N)和私钥SK=(d,N)之后,RSA算法的加密运算定义为:

c=E pk(m)=m e(modN),其中1?m?N-1为明文。

解密运算定义为:m=D sk(c)=c d(modN),其中1?c?N-1为密文。

RSA密码算法的明文m应为1到N-1之间的整数,即m∈[1,N-1]。如果明文m太长,可将其转换成N进制的形式,即m=msNs+ms-1Ns-1+,+m1N+m0,于是得到分组后的明文序列m=(m0,m1,…,m s),其中m i∈[1,N-1],0?i?s。与之相应的密文序列为c(c0,c1,…,c s),其中c1对应于m1(0?i?s)。

2.2 RSA密码算法的实现步骤

(1)随机选择两个不同的秘密大素数p与q;

(2)分别计算N=pq和φ( N)=(p-1)(q-1)的值;

(3)选择一个小于φ( N)且与φ( N)互素的正整数e,定义PK=(e,N);

(4)计算e的乘法逆元d=e-1(modφ( N)),并定义SK=(d,N);

(5)利用数制转换将明文分组,使每组中明文m的取值范围在1至N-1之间;

(6)执行加密运算c=E pk(m)=m e(modN),将明文m加密成密文c;

(7)执行解密运算m=D sk(c)=c d(modN),将密文c恢复成明文m。

第三章中国剩余定理在RSA算法中的应用

3.1中国剩余定理

中国剩余定理(CRT):已知n1, n2, …, n k为两两互素的正整数,则同余方程组

X≡b i mod n i

X在0到N内有唯一解,其中i=1, 2, …, k,b i为正整数,N=n l n2…n k。

根据高斯算法,中国剩余定理的解为X=(b1M1y1+b2M2y2+…+b k M k y k) mod N ,其中N=n l×n2×…×n k,Mi=N/n i=n1n2…n i-1…n i+1…n k,i=1, 2,…, k, y i满足y i=M i-1 mod n i。由此可见,中国剩余定理为对高位宽(如1024bit)大数的模幂运算转化成对低位宽(如512bit)相对较小的数进行模幂运算提供了可能。

3.2 RSA 中CRT 的引入

在RSA 算法中,n=pq, p, q 是两个长度接近的大素数。由于n 是两个素数的乘积,所以可令

Cp=md (mod p) ,

Cq=md (mod q) ,

再根据中国剩余定理求出最终结果。根据费马小定理,计算上面两式仅需计算

Cp=md1 (mod p) ,

Cq=md2 (mod q) ,

其中d1=d mod(p-1),d2=d mod(q-1)。这样把幂指数d 减少至d1,d2。由于d 的长度接近于n,而d1, d2 能减少至n 的一半,大大减少了计算次数。

基于中国剩余定理,RSA 模幂运算可转化为以下运算过程:

(1)计算

C p=C mod p ,

C q=C mod q ;

(2)计算

Mp=Cp^Dp mod p ,

Mq=Cq^Dqmod q ;

其中Dp=D mod (p-1),Dq=D mod(q-1),对于给定素数p、q及密钥而言是常数,可以预先计算出来。

(3)计算

Sp=Mp(q^(p-1)mod N) mod N ,

Sq=Mq(p^(q-1) mod N) mod N ;

其中,q^(p-1)mod N 和p^(q-1) mod N 是仅仅决定于素数p、q 和模N 的常数,可以预先计算出来。

(4)计算M=(Sp + Sq) mod N。

显然,步骤(2)的计算量远远大于其它步骤的计算量,但是,中国剩余定理的运用,使得Mp和Mq的并行计算成为可能。并行执行步骤(2)的模幂运算需要两个n/2 位的乘法器,相比于不采用中国剩余定理的RSA 运算,加速因子接近于4。

假定模数N 的二进制长度为k,则其两个素因子p和q的长度分别为k/2,出于安全性考虑,私钥d的二进制长度应与模数N相当,也为k。d p、d q、p-1 mod q、q-1mod p可预先计算好,二进制长度均为k/2。从上述运用中国剩余定理计算模幂的过程可知S 计算过程的主要工作花在计算C p和C q上,最后,一步合成C只是两次乘法和一次加法运算,在计算时间复杂度时可忽略不计。使用传统算法计算C p和C q需要3/2*(k/2)次k/2比特的模乘运算,总共需要s1=2*3/2*(k/2) *(k/2)2=3/8*k3次位操作。如果不用中国剩余定理,直接计算需要s1=3/2*k3次位操作。因此,使用中国剩余定理计算模幂乘比不使用大约快了4倍。

3.3使用中国剩余定理加速RSA算法效率的安全隐患分析

直接使用中国剩余定理加速2@) 运算容易受到出错攻击,只要2@) 应用系统在执行签名9 加密时满足以下三个条件:

(一)、签名/加密的原始消息已知;

(二)、在签名/加密时出现了一个错误;

(三)、系统输出了错误的签名/密文;

就可能导致应用系统的模数N被分解,从而造成RSA算法被攻破。其攻击原理是:

签名方用自己的私钥计算C=M d mod N,使用中国剩余定理C可通过C p=C mod p ,C q=C mod q有效计算出来。假设错误发生在计算C p时,也就是说计算出了一个错误的值C p’≠C p=C mod p ,而C q被正确计算出来。C p’和C q就联合产生了一个错误的签名C’,这样就会导致如下结果:

q=gcd(((C’e-M)mod N)),N)

其中 e 是公钥,gcd()表示求最大公约数,即通过上述关系式可以计算出模数N的素因子q,从而达到因子分解N攻破RSA应用系统的目的。(证明略)可以看出,出错攻击是一种非常强的攻击方法,直接使用中国剩余定理进行RSA运算,一旦系统发生了一个错误,将可能导致整个系统的模数被直接分解,致使RSA系统崩溃。因此,在提高RSA算法效率时要慎用中国剩余定理。

3.4使用随机小素数改进中国剩余定理对抗出错攻击的方法

改进方法原理和过程如下:

1. 选择一个随机小素数r(如2,3,5)等,并计算如下两个数:

C pr=M d mod (pr) (mod pr) 和C qr=M d mod (qr) (mod qr);

2. 判断C pr=C qr (mod r)是否成立;

3. 如果上式成立,则认为模幂运算计算过程没有出现错误,合并C pr和C qr可得计算结果C:

C=[(C pr mod p) (q-1 mod p)q + (C qr mod q) (p-1 mod q)p] mod N

4. 如果C pr=C qr (mod r)不成立,则认为本次计算发生错误,废除本次操作,重新计算。

第四章四素数RSA数字签名算法

在本章中,一种改进的RSA算法——四素数RSA算法的原理和具体实现被详细的阐述。通过这个算法我们进一步去了解中国剩余定理在RSA算法速度改进方面的巨大作用。

4.1 四素数RSA 算法基本原理

在传统双素数RSA 密码算法基础上,把素数个数取为4,算法依然成立,其描述如下:

1) 随机选取4 个不同的大素数p,q,r和s,计算n = pqrs,

φ( n) = ( p-1)(q-1)(r-1)(s-1)。

2) 取加密密钥e = 65537,计算出私钥d,满足de≡1 modφ( n) 。

3) 加密解密过程与传统算法一样,仍为:

加密算法c = E( m) ≡m e mod n

解密算法m = D( c) ≡c d mod n

下面,本文从数论的角度来证明算法的正确性。

证明假设明文为m,密文c,密钥( d,n) ,公钥( e,n) 。由加密解密过程有: D( c) ≡c d mod n≡( m e ) d mod n≡m ed modn,又因为de≡1 mod φ( n) ,所以de≡1 + kφ( n) ,其中k 为正整数,代入上式得D( c) ≡m1 +φ( n) mod n,若gcd( m,n) ≠1,根据欧拉定理有: mφ( n)≡1 mod n,故有m1 +φ( n)≡m mod n; 若gcd( m,n) ≠1,由于n = pqrs,故( m,n) 中必含p,q,r,s之一,或者pq,pr,ps,qr,qs,rs 之一,或者pqr,prs,qrs,pqs 之一。由于这几种情况类似,这里只给出gcd( m,n) 只包含p,q,r,s之一的证明过程: 若gcd( m,n) = p,m = cp,1 ?c <qrs,由欧拉定理得: mφ( q)≡1mod q,mφ( r)≡1 mod r,mφ( s)≡1 mod s,因此,对任意k 恒有m k( q-1)≡1 mod q,m k( q-1) ( r-1) ( s-1) ( p-1)≡1 mod q,就有m k( q-1) ( r-1) ( s-1) ( p-1)≡1 + hq,得出m kφ( n)≡1 + hq,因为m = cp,因此得出m kφ( n) +1≡m +cphq,已知p,q,r,s都是素数,故gcd( p,q rs) = 1,gcd( m,qrs) = 1,推出mφ( qrs)≡1 mod qrs,对任意k,总有m k( q-1) ( r-1) ( s-1)≡1 mod qrs,所以m k( q-1) ( r-1) ( s-1) ( p-1)≡1 mod qrs,即m kφ( n) ≡1 + hqrs,又因为m = cp,所以m kφ( n) +1≡m + chpqrs,这就证明了m kφ( n) +1≡m mod n,其他同理可证均成立。

4.2四素数RSA 算法在数字签名中的应用

首先简单介绍一下杂凑函数,它是指将任意长度的消息映射成某一固定长度消息的一种函数,一般用于消息完整性检测和认证。它是一种单项散列函数,也就是说给定一个消息M,用杂凑函数H,生成消息摘要D = H( M) ,这个计算很容易,但反推M 却很难。把杂凑函数运用到数字签名中,一方面是为了提高签名速度,因为,如果直接对消息签名,当消息很长时需要对其分组,再对每组消息用RSA 签名,这样签名效率相当低; 另一方面,可以不泄漏要签名的消息,这适用于一些特殊的签名场景[10]。本文中用的是一种安全性非常高的杂凑函数SHA512[11]( Secure Hash Algorithm) ,再结合四素数RSA 算法,其签名过程如下:

1) 用户A 将要发送的消息M 通过杂凑函数H,产生消息摘要D = H( M) ;

2) 用户A 用私钥d 对消息摘要进行签名S = Dd mod n;

3) 用户A 将消息M 和签名S 一同发送给用户B;

4) 用户B 接受到消息和签名后用A 的公钥解密签名S 得到D,再用杂凑函数计算一次消息摘要D',判断D' 是否等于D。若相同,则说明消息确实来自于A,并且在传输途中没有被篡改; 否则,很有可能消息不是来自于A。

运用以上的签名方法,如果用户A 想否认曾经发送消息M 给用户B,用户B 只需把A 的公钥和签名S 一并出示给公证方,通过正确的计算方法就能证实用户A 确实发送了消息M;如果用户B 伪造了一个消息M',由于他不知道用户A 的私钥,也就无法出示正确的签名给公证方。这样一来,通信双方都必须真实地反映通信情况,有效地防止了一方抵赖的情况发生。

4.3 中国剩余定理的应用

运用中国剩余定理,对消息摘要D 的数字签名可转换为

以下运算过程:

1) 计算m p = D mod p,mq = D mod q,mr = D mod r,ms = D mod s;

2) 计算d p = d mod ( p-1),d q = d mod ( q-1),d r =d mod ( r-1),d s = d mod ( s-1) ;

3) 计算M1 = m p dp mod p,M2 = m p dq mod q,M3 = m r dr mod r,M4 = m s ds mod s;

4) 计算S = ( M1( qrs) p-1 + M2( prs) q-1 + M3( pqs) r-1 +

M4( pqr) s-1 ) mod n,即得出签名S。

在上述计算过程中,先把传统的签名算法S = D d mod n转换为求解四个同余式: S ≡D d mod p,S≡D d mod q,S≡D d mod r 和S≡D d mod s,再利用中国剩余定理进行求解。在求乘法逆元时,本文没有用扩展欧几里得算法,而是运用了费马小定理: 对任何不被素数p 整除的整数A,恒有A p-1≡1 mod p,可得A -1≡A p-2 mod p,巧妙地通过一个多项式运算来代替其中一个逆元的求解,进一步提高了运算效率。但是,如第三章中提到的,运用中国剩余定理容易使RSA 算法遭受出错攻击,所以四素数RSA算法也必须使用随机小素数进行改进,对抗出错攻击。

4.4算法对比

假定模数N 的二进制长度为k,则其四个素因子p、q、r和s的长度分别为k/4,出于安全性考虑,私钥d的二进制长度应与模数N相当,也为k。d p、d q、d r、d s、p-1 mod qrs、q-1mod prs、r-1 mod pqs、s-1mod pqr可预先计算好,二进制长度均为k/4。从上述运用中国剩余定理计算模幂的过程可知S 计算过程的主要工作花在计算C p、C q、C r和C s上,最后,一步合成C只是16次乘法和3次加法运算,在计算时间复杂度时可忽略不计。使用传统算法计算C p、C q、C r和C s需要3/2*(k/4)次k/4比特的模乘运算,总共需要s1=4*3/2*(k/4) *(k/4)2=3/16*k3次位操作。

第五章四素数RSA算法的简单实现

5.1 密钥产生部分

如图所示,输入四个素数,点击生成密钥后,软件自动生成公钥、私钥和模数。密钥生成核心代码如下:

void Produce_Key(int p, int q, int r, int s)

{

int ola_num = Count_N_AoLa_Num(p, q, r, s);

if (ola_num == 0)

{

return;

}

int e = 0;

do

{

e = new Random().Next(1, ola_num);

} while (!JudgeHomogeny(e, ola_num));

textBox3.Text = e.ToString();

int d = Generate_d(e, ola_num);

textBox4.Text = d.ToString();

textBox5.Text = (p * q * r * s).ToString();

}

int Generate_d(int e, int n)

{

int over = e;

for (int i = 1; i < n; )

{

over = over % n;

if (over == 1)

{

return i;

}

else

{

if (over + e <= n)

{

do

{

i++;

over += e;

}

while (over + e <= n);

}

else

{

i++;

over += e;

}

}

}

return 0;

}

5.2 加密解密部分(删)

如图所示,在左侧输入框内输入明文,点击加密按钮,对应的密文会在右侧文本框内产生。点击解密按钮后,密文也可以产生相应的明文。

解密和解密的关键代码如下:

public void Decrypt(BigInteger d, BigInteger n)

{

int bufferLength = n.ToByteArray().Length;

byte [] inBuffer = new byte[bufferLength];

byte [] outBuffer;

BigInteger m, c;

while (inputFile.Read(inBuffer, 0, inBuffer.Length) > 0) {

c = new BigInteger(inBuffer);

m = BigInteger.ModPow(c, d, n);

outBuffer = m.ToByteArray();

outputFile.Write(outBuffer, 0, outBuffer.Length);

}

}

public void Encrypt(BigInteger e, BigInteger n)

{

int bufferLength = n.ToByteArray().Length;

byte [] inBuffer = new byte[bufferLength - 1];

byte [] outBuffer, tmpBuffer;

BigInteger m, c;

while (inputFile.Read(inBuffer, 0, inBuffer.Length) > 0) { m = new BigInteger(inBuffer);

Array.Clear(inBuffer, 0, inBuffer.Length);

c = BigInteger.ModPow(m, e, n);

outBuffer = c.ToByteArray();

if (bufferLength != outBuffer.Length) {

tmpBuffer = new byte[bufferLength];

Buffer.BlockCopy(outBuffer, 0, tmpBuffer, 0, outBuffer.Length);

outBuffer = tmpBuffer;

}

outputFile.Write(outBuffer, 0, outBuffer.Length);

}

}

第六章总结

近年来,许多加密技术和大量安全协议都采用了RSA 算法,在一些对安全性要求比较高的认证机构中,甚至采用了模数为2 048 bit 的RSA 签名算法,这对于本来运算效率就不太高的RSA 算法来说无疑是一个巨大的挑战。在本文中,中国剩余定理在RSA算法的改进作用上做了详细的阐述,并以一种四素数RSA 算法为例子进行了深入的探究实验。

参考文献

[1] Yunfei Li,Qing Liu,Tong Li.Design and Implementation of an Improved RSA

Algorithm[J],International Conference on E-Health Networking, Digital Ecosystems and Technologies ,2010,390~393

[2]费晓飞,胡捍英.CRT-RSA 算法安全性分析[M].微计算机信息,2009.(1-3):37~38

[3]武滨,使用中国剩余定理提高RSA算法效率安全性分析及改进方法[J].网络与

安全技术,2006,(3):78~80.

[4]肖振久,胡驰,陈虹.四素数RSA 数字签名算法的研究与实现[J].计算机应用,2013,33(5):1374~1377.

[5]张宏,刘方园.四素数RSA 加密算法的研究与分析[J].为计算机信

息,2010,26(5-3):29~30.

[6] 李云飞,柳青,赫林,周保林.一种有效的RSA 算法改进方案[J].计算机应

用,2010,30(9):2393~2397.

[7]柳青,李云飞,周保林,彭华.基于多素数的批处理RSA算法的研究[J].计算机应用

研究2011.28(2):714-716

[8]贺毅朝,刘建芹,陈维海.中国剩余定理在RSA解密中的应用[J].河北省科

学院学报,2003,20(3):138~143.

实验报告_密码学

信息安全实验报告 学号: 学生姓名: 班级:

实验三密码学实验 一、古典密码算法实验 一、实验目的 通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 二、编译环境 运行windows 或linux 操作系统的PC 机,具有gcc(linux)、VC (windows)等C语言编译环境。 三、实验原理 古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。 1.替代密码 替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母a、b、c、d ,用D、E、F、G做对应替换后形成密文。 替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代。它的加密过程可以表示为下面的函数:E(m)=(m+k) mod n 其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E(m)为密文字母在字母表中对应的位置数。例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L:E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L

2.置换密码 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改 变,从而实现明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给的 顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而 形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行 6 列的形式排在矩阵中,形成如下形式: a t t a c k b e g i n s a t f i v e 根据密钥cipher中各字母在字母表中出现的先后顺序,给定一个置换: 1 2 3 4 5 6 f = 1 4 5 3 2 6 根据上面的置换,将原有矩阵中的字母按照第 1 列,第 4 列,第 5 列,第 3 列, 第2列,第 6 列的顺序排列,则有下面形式: a a c t t k b i n g e s a I v f t e 从而得到密文:abatgftetcnvaiikse 其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。 四、实验内容和步骤 1、根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择 一个密钥k,编写替代密码算法的实现程序,实现加密和解密操作。 2、根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。 五、总结与思考 记录程序调试过程中出现的问题,分析其原因并找出解决方法。记录最终实现的程序执行结果。

RSA算法实验报告

实验二非对称密码算法RSA 一、实验目的 通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。 二、实验环境 运行Windows或Linux操作系统的PC机,具有JDK1.6版本的Java语言编译环境。 三、实验内容和步骤 1. 对RSA算法的理解 RSA算法(公开密钥算法)的原理: (1).选择两个大的素数p和q(典型情况下为1024位) (2).计算n = p * q 和z =(p-1)*(q-1). (3).选择一个与z互素的数,将它称为d (4).找到e,使其满足e*d = 1 mod z 提前计算出这些参数以后,我们就可以开始执行加密了。首先将明文分成块,使得每个明文消息P落在间隔0*P

数据加密实验报告

实验报告 课程:计算机保密_ _ 实验名称:数据的加密与解密_ _ 院系(部):计科院_ _ 专业班级:计科11001班_ _ 学号: 201003647_ _ 实验日期: 2013-4-25_ _ 姓名: _刘雄 _ 报告日期: _2013-5-1 _ 报告评分:教师签字:

一. 实验名称 数据加密与解密 二.运行环境 Windows XP系统 IE浏览器 三.实验目的 熟悉加密解密的处理过程,了解基本的加密解密算法。尝试编制基本的加密解密程序。掌握信息认证技术。 四.实验内容及步骤 1、安装运行常用的加解密软件。 2、掌握加解密软件的实际运用。 *3、编写凯撒密码实现、维吉尼亚表加密等置换和替换加解密程序。 4、掌握信息认证的方法及完整性认证。 (1)安装运行常用的加解密软件,掌握加解密软件的实际运用 任务一:通过安装运行加密解密软件(Apocalypso.exe;RSATool.exe;SWriter.exe等(参见:实验一指导))的实际运用,了解并掌握对称密码体系DES、IDEA、AES等算法,及非对称密码体制RSA等算法实施加密加密的原理及技术。 ?DES:加密解密是一种分组加密算法,输入的明文为64位,密钥为56位,生成的密文为64位。 ?BlowFish:算法用来加密64Bit长度的字符串或文件和文件夹加密软件。 ?Gost(Gosudarstvennyi Standard):算法是一种由前苏联设计的类似DES算法的分组密码算法。它是一个64位分组及256位密钥的采用32轮简单迭代型加密算法. ?IDEA:国际数据加密算法:使用128 位密钥提供非常强的安全性; ?Rijndael:是带有可变块长和可变密钥长度的迭代块密码(AES 算法)。块长和密钥长度可以分别指定成128、192 或256 位。 ?MISTY1:它用128位密钥对64位数据进行不确定轮回的加密。文档分为两部分:密钥产生部分和数据随机化部分。 ?Twofish:同Blowfish一样,Twofish使用分组加密机制。它使用任何长度为256比特的单个密钥,对如智能卡的微处理器和嵌入在硬件中运行的软件很有效。它允许使用者调节加密速度,密钥安装时间,和编码大小来平衡性能。 ?Cast-256:AES 算法的一种。 (同学们也可自己下载相应的加解密软件,应用并分析加解密过程) 任务二:下载带MD5验证码的软件(如:https://www.360docs.net/doc/6118307969.html,/downloads/installer/下载(MySQL):Windows (x86, 32-bit), MSI Installer 5.6.11、1.5M;MD5码: 20f788b009a7af437ff4abce8fb3a7d1),使用MD5Verify工具对刚下载的软件生成信息摘要,并与原来的MD5码比较以确定所下载软件的完整性。或用两款不同的MD5软件对同一文件提取信息摘要,而后比较是否一致,由此可进行文件的完整性认证。

网络安全RSA算法的实现实验报告

网络安全基础教程报告 题目:RSA加密算法 学号:1108040205 专业及班级:计网1102班 姓名:雪飞 日期:2013.11.26

一、RSA算法介绍与应用现状 RSA公开密钥加密算法自20世纪70年代提出以来,已经得到了广泛认可和应用。发展至今,电子安全领域的各方面已经形成了较为完备的国际规。RSA作为最重要的公开密钥算法,在各领域的应用数不胜数。RSA在硬件方面,以技术成熟的IC应用于各种消费类电子产品。 RSA在软件方面的应用,主要集中在Internet上。加密连接、数字签名和数字证书的核心算法广泛使用RSA。日常应用中,有比较著名的工具包Open SSL(SSL,Security Socket Layer,是一个安全传输协议,在Internet上进行数据保护和身份确认。Open SSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。Open SSL应用RSA实现签名和密钥交换,已经在各种操作系统得到非常广泛的应用。另外,家喻户晓的IE浏览器,自然也实现了SSL协议,集成了使用RSA技术的加密功能,结合MD5和SHA1,主要用于数字证书和数字签名,对于习惯于使用网上购物和网上银行的用户来说,几乎天天都在使用RSA技术。 RSA更出现在要求高度安全稳定的企业级商务应用中。在当今的企业级商务应用中,不得不提及使用最广泛的平台j2ee。事实上,在j2se的标准库中,就为安全和加密服务提供了两组API:JCA和JCE。JCA (Java Cryptography Architecture)提供基本的加密框架,如证书、数字签名、报文摘要和密钥对产生器;JCA由几个实现了基本的加密技术功能的类和接口组成,其中最主要的是java.security包,此软件包包含的是一组核心的类和接口,Java中数字签名的方法就集中在此软件包中。JCE(Java Cryptography Extension) 在JCA的基础上作了扩展,JCE也是由几个软件包组成,其中最主要的是javax.crypto包,此软件包提供了JCE加密技术操作API。javax.crypto中的Cipher类用于具体的加密和解密。在上述软件包的实现中,集成了应用RSA算法的各种数据加密规(RSA算法应用规介绍参见:.rsasecurity./rsalabs/node.asp?id=2146 ,这些API部支持的算法不仅仅只有RSA,但是RSA是数字签名和证书中最常用的),用户程序可以直接使用java标准库中提供的API 进行数字签名和证书的各种操作。 二、算法原理 1.选择两个不同的大素数p、q (目前两个数的长度都接近512bit是安全的); 2. 计算n = p*q。 3. 计算n的欧拉函数t=(p-1)(q-1)。 4. 选择整数e作为公钥,使e与t互素,且1

密码学实验报告(AES,RSA)

华北电力大学 实验报告| | 实验名称现代密码学课程设计 课程名称现代密码学 | | 专业班级:学生姓名: 学号:成绩: 指导教师:实验日期:

[综合实验一] AES-128加密算法实现 一、实验目的及要求 (1)用C++实现; (2)具有16字节的加密演示; (3)完成4种工作模式下的文件加密与解密:ECB, CBC, CFB,OFB. 二、所用仪器、设备 计算机、Visual C++软件。 三. 实验原理 3.1、设计综述 AES 中的操作均是以字节作为基础的,用到的变量也都是以字节为基础。State 可以用4×4的矩阵表示。AES 算法结构对加密和解密的操作,算法由轮密钥开始,并用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表2所示)。AES 算法的主循环State 矩阵执行1 r N 轮迭代运算,每轮都包括所有 4个阶段的代换,分别是在规范中被称为 SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换) 和AddRoundKey ,(由于外部输入的加密密钥K 长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥 K 扩展成更长的比特串,以生成各轮的加密和解密密钥。最后执行只包括 3个阶段 (省略 MixColumns 变换)的最后一轮运算。 表2 AES 参数 比特。

3.2、字节代替(SubBytes ) AES 定义了一个S 盒,State 中每个字节按照如下方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,然后取出S 盒中对应行和列的元素作为输出。例如,十六进制数{84}。对应S 盒的行是8列是4,S 盒中该位置对应的值是{5F}。 S 盒是一个由16x16字节组成的矩阵,包含了8位值所能表达的256种可能的变换。S 盒按照以下方式构造: (1) 逐行按照升序排列的字节值初始化S 盒。第一行是{00},{01},{02},…,{OF}; 第二行是{10},{l1},…,{1F}等。在行X 和列Y 的字节值是{xy}。 (2) 把S 盒中的每个字节映射为它在有限域GF(k 2)中的逆。GF 代表伽罗瓦域,GF(82) 由一组从0x00到0xff 的256个值组成,加上加法和乘法。 ) 1(] [2)2(3488++++= x x x x X Z GF 。{00}被映射为它自身{00}。 (3) 把S 盒中的每个字节记成),,,,,,,,(012345678b b b b b b b b b 。对S 盒中每个字节的每位 做如下变换: i i i i i i c b b b b b i b ⊕⊕⊕⊕⊕='++++8mod )7(8mod )6(8mod )5(8mod )4( 上式中i c 是指值为{63}字节C 第i 位,即)01100011(),,,,,,,,(012345678=c c c c c c c c c 。符号(')表示更新后的变量的值。AES 用以下的矩阵方式描述了这个变换: ?? ? ?? ? ? ? ? ? ??? ? ????????????+???????????????????????????????????????? ????????????=??????????????????????????0110001111111000011111000011111000011111100011111100011111100011111100017654321076543210b b b b b b b b b b b b b b b b 最后完成的效果如图:

rsa加解密实验报告

苏州科技学院 实验报告 学生姓名:学号: 指导教师:实验时间: 一、实验室名称:计算机学院计算中心 二、实验项目名称:密码算法的实现 三、实验学时:4学时 四、实验原理: 一种密码算法的基本原理(古典密码算法,DES算法,AES算法,RSA算法,ECC算法); RSA算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命:RonRivest, AdiShamir 和Leonard Adleman。 这种加密算法的特点主要是密钥的变化,RSA同时有两把钥匙,公钥与私钥。同时支持数字签名。数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输工程中不被修改。 五、实验目的: 目的:实现一种密码算法(古典密码算法,DES算法,AES算法,RSA算法,ECC算法)并掌握其原理。这次实验我们决定实现RSA算法。 六、实验内容: a)熟悉一种密码算法的基本原理(古典密码算法,DES算法,AES算 法,RSA算法,ECC算法); b)依据所算则的算法,编程实现该该算法;

提供该算法的使用说明手册,可执行代码、源代码及测试用例(包括测试用例手册、可执行代码和源代码)。 以RSA算法为例: 1、甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。 2、甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方 签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。 3、乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密 数据,通过私钥解密。

七、实验器材(设备、元器件): PC、java开发环境 八、实验步骤: a)选择并熟悉一种密码算法。 b)编写概要设计,详细设计报告 c)使用Eclipse工具,编码.

RSA算法实验报告

实验报告 姓名:XXXXXXXXX学号:0XXXXX班级:XXXXXXXXX日期:2013/12/* 题目:RSA算法实验 一、实验环境 1.硬件配置: 处理器:Inter(R) Core(TM) i5-2430M CPU @ 2.40GHz (4 CPUs) ,~2.4GHz 内存:2048MB RAM 2.使用软件: (1) 操作系统:win7 旗舰版 (2) 软件工具:Microsoft Visual c++ 6.0 二、实验涉及的相关概念或基本原理 它是第一个既能用于数据加密也能用于数字签名的算法。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。 RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数(大于100 个十进制位)的函数。从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。 密钥对的产生。选择两个大素数,p 和q 。计算: n = p * q 然后随机选择加密密钥e,要求 e 和( p - 1 ) * ( q - 1 ) 互质。最后,利用Euclid 算法计算解密密钥d,满足 e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) ) 其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。 加密信息m(二进制表示)时,首先把m分成等长数据块m1 ,m2,..., mi ,块长s ,其中<= n, s 尽可能的 大。对应的密文是: ci = mi^e ( mod n ) ( a ) 解密时作如下计算: mi =ci^d ( mod n ) ( b ) RSA 可用于数字签名,方案是用( a ) 式签名,( b )式验证。具体操作时考虑到安全性和m信息量较大等因素,一般是先作HASH 运算。 RSA 的安全性。RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,模数n 必须选大一些,因具体适用情况而定。 RSA的速度。由于进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。 RSA的选择密文攻击。RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装( Blind),

加密解密程序实验报告

程序设计实践 加密解密程序实验报告 课题概述 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主要的层次逻辑为:

RSA算法的实现实验报告

RSA算法的实现 一、实验目的 1. 熟悉公钥密码体制; 2.掌握产生密钥对的程序设计方法; 3.掌握产生加密/解密的程序设计方法。 二、实验内容和要求 1.进行RSA加密/解密算法的设计; 2.对RSA程序进行编译和调试; 3.使用编写的程序进行加密和解密。 三、实验环境 运行Windows操作系统的PC机,可以利用具有VC++语言环境;如果所运用的语言是JAVA,那么也可以利用JAVA语言环境来实现RSA算法的加密和解密。 四、实验步骤 1.采用C++语言进行本次实验的编写,实验的代码如下: #include #include int candp(int a,int b,int c) { int r=1; b=b+1; while(b!=1) { r=r*a; r=r%c; b--; } printf("%d\n",r); return r; } void main() {

int p,q,e,d,m,n,t,c,r; char s; printf("please input the p,q: "); scanf("%d%d",&p,&q); n=p*q; printf("the n is %3d\n",n); t=(p-1)*(q-1); printf("the t is %3d\n",t); printf("please input the e: "); scanf("%d",&e); if(e<1||e>t) { printf("e is error,please input again: "); scanf("%d",&e); } d=1; while(((e*d)%t)!=1) d++; printf("then caculate out that the d is %d\n",d); printf("the cipher please input 1\n"); printf("the plain please input 2\n"); scanf("%d",&r); switch(r) { case 1: printf("input the m: "); /*输入要加密的明文数字*/ scanf("%d",&m); c=candp(m,e,n); printf("the cipher is %d\n",c);break; case 2: printf("input the c: "); /*输入要解密的密文数字*/ scanf("%d",&c);

密码学实验----

《密码学与信息安全》实验报告 专业 班级 姓名 学号 2015年 6 月 5 日

实验一古典密码实验 1实验目的 1.理解代替密码学加密过程 2.理解置换密码学加密过程 2实验内容 1.手动完成Caesar密码 2.Caesar加密 3.Caesar密码分析 4.单表置换密码 5.单表置换密码分析 3实验过程 本练习主机A、B为一组,C、D为一组,E、F为一组。 首先使用“快照X”恢复Windows系统环境。 1.手动完成Caesar密码 (1)在实验原理部分我们已经了解了Caesar密码的基本原理,那么请同学们写出当 密钥k=3时,对应明文:data security has evolved rapidly的密文:data security has evolved rapidly 。 (2)进入实验平台,单击工具栏中的“密码工具”按钮,启动密码工具,在向导区点 击“Caesar密码”。在明文输入区输入明文:data security has evolved rapidly。 将密钥k调节到3,查看相应的密文,并与你手动加密的密文进行比较。 请根据密钥验证密文与明文对应关系是否正确。 2.Caesar加密 (1)进入“加密解密”|“Caesar密码”视图,在明文输入区输入明文(明文应为英 文),单击“加密”按钮进行加密。 请将明文记录在这里:I am a stident 。 (2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值,并记下该密钥k值用于同组主机的解密。加密工作完成后,单击“导出”按钮将密文默认导出到Caesar共享文件夹(D:\Work\Encryption\Caesar\)中,默认文件名为Caesar密文.txt。 (3)通知同组主机接收密文,并将密钥k通告给同组主机。 6 (4)单击“导入”按钮,进入同组主机Work\Encryption\Caesar目录(同组主机IP\Work\Encryption\Caesar),打开Caesar密文.txt。 (5)调节密钥k的微调按钮或对照表的移位按钮,将k设为同组主机加密时的密钥k 值,这时解密已经成功。请将明文写出:I am a stident 。 (6)将解密后的明文与同组主机记录的明文比较,请对比明文是否相同。 3.Caesar密码分析 (1)本机进入“密码工具”|“加密解密”|“Caesar密码”,在明文输入区输入明文(要求明文有一定的意义以便让同组主机分析)。 请将明文记录在这里:I am a stident 。 (2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值完成Caesar 加密,单击“导出”按钮,将密文默认导出到Caesar共享文件夹中。 (3)通告同组主机(不要通告密钥值k)密文已经放在共享文件夹中,让同组主机获 取密文。 (4)单击“导入”按钮将同组主机Caesar密文导入。

实验9 加密与解密实验

新疆师范大学 计算机网络安全(本科) 实验报告 实验名称:实验9 加密与解密实验 院系:计算机科学技术学院 班级: 2011-01班 学生姓名:木拉提·巴力 学号: 20111601141025 合作者姓名:米热古丽·塔力浦 指导教师:赵新元老师 教师评阅结果: 教师评语: 实验日期 2014 年 12 月 28 日

一、实验目的 1、掌握Caeser密码原理,理解Caeser密码加密、解密过程。 2、了解使用程序实现DES和RSA加解密。 3、学会使用PGP加密软件加密文件与邮件。 二、实验内容 1、编写实现Caeser密码加密、解密 2、了解程序实现DES和RSA加密、解密 3、使用PGP加密文件 4、使用PGP加密邮件 三、实验原理 请简介一下PGP加密的基本原理。 四、实验步骤 1、编写一个程序能够实现Caeser加密与解密。假定Caeser密码的偏移量为3,本程序只对小写字符进行加密,要求用户从键盘输入你的姓名拼音(假设长度小于100),将其进行加密后显示出来,然后再显示出原文。请截图显示你的程序运行结果,并附上源代码。 1.加密程序运行结果: 源代码: #include "stdafx.h" #include #include #define MAXSIZE 100

int main() { char str[MAXSIZE]; int i; int offset; int n; printf("请输入要加密的字符串:"); gets(str); printf("请输入要偏移量:"); //若将a变为b,则偏移量为1,以此类推,偏移量在1-25之间 scanf("%d%*c", &offset); n = strlen(str); for (i = 0; i < n; i++) { if ('a' <= str[i] && str[i] <= 'z' - offset || 'A' <= str[i] && str[i] <= 'Z' - offset) str[i] += offset; else str[i] += offset - 26; } printf("加密后的字符串是:"); puts(str); return 0; } 2.解密程序运行结果: 源代码:

RSA实验报告

一实验目的 1.了解非对称加密机制 2.理解RSA算法的加解密原理 3.熟悉Java的学习以及运用Java实现RSA算法的加解密过程 二实验背景 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然秘密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。 RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在的这么多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。 三实验原理 1.非对称密钥加解密概述 使用对称密钥加密体制进行保密通信时,任意不同的两个用户之间都应该使用互不相同的密钥。这样,如果一个网络中有n个用户,他们之间彼此都可能进

行秘密通信,这时网络中将需要n(n-1)/2个密钥(其中,每个用户都需要保存n-1个密钥),这样巨大的密钥量给密钥分配和管理带来了极大的困难。另外,随着计算机网络,特别是因特网的发展,网络上互不相识的用户可能需要进行保密的会话(例如,如果用户在进行电子商务活动时,需要保密的连接,这时的客户对象可能根本不是固定的对象)。最后,对称密钥加密机制难以解决签名验证问题。 非对称密钥加密也称为公开密钥加密,或者叫做公钥加密算法。使用公开密钥密码的每一个用户都分别拥有两个密钥:加密密钥和解密密钥,它们两者并不相同,并且由加密密钥得到解密密钥在计算机上是不可行的。每一个用户的加密密钥都是公开的。因此,加密密钥也称为公开密钥。所有用户的公开密钥都将记录在作用类似于电话号码薄的密钥本上,而它可以被所有用户访问,这样每一个用户都可以得到其他所有用户的公开密钥。同时,每一个用户的解密密钥将由用户保存并严格保密。因此,解密密钥也称为私有密钥。 非对称密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学最重要的发明。公钥加密算法一般是将对密钥的求解转化为对数学上的困难问题的求解,例如RSA算法的安全性是建立在“大数分解和素性检测”这个数论难题的基础上,已知两个大素数a和b,求出a*b是容易计算的,而已知a*b,想知道其是哪两个大素数的乘积目前还没有好的计算方法,另外也有一些非对称加密算法(如ELGamal算法)的安全性是基于求“离散对数”这个数学难题上的。 在公钥密码系统中每个实体都有自己的公钥和相应的私钥。公钥密码系统的加密变换和解密变换分别用E和D表示。任何实体B要向实体A发送信息m的步骤如下:实体B首先获得实体A的真实公钥的拷贝(eA),实体B使用eA计算密文c=E(m)并发送给实体A,实体A使用自己的私钥dA,计算m=D(c)解密密文,恢复出明文m。这里公钥不需要保密,但要保证它的真实性,即eA确实是实体A掌握的私钥dA所对应的公钥。提供真实的公钥比安全地分配密钥实现起来要容易得多。这也是公钥密码系统的主要优点之一。 公钥密码系统的主要目的是提供保密性,它不能提供数据源认证(data origin authentication)和数据完整性(data integrity)。数据源认证是指:指定的数据是在以前的某个时间确实是由真正的源创建的。数据完整性是指:真正的源创建该数据后经过传输后存储没有发生改变。数据源认证和数据完整性要由其他技术来提供(如消息认证码技术、数字签名技术等)。 从本质上来看,公钥密码比对称密钥密码加密的速度要慢,粗略的说,公钥加密算法RSA硬件实现比分组加密算法DES硬件实现的速度慢1500倍,而软件实现的速度要慢100倍。 公钥解密也可以提供认证保证(如:在实体认证协议、带认证的密钥建立协

RSA实验报告

RSA算法实验 【实验目的】 1.了解RSA算法的基本原理 2.掌握RSA算法的实现方法 3.通过实际编程了解非对称密码算法RSA的加密和解密过程,同时锻炼编 程能力。 【实验环境】 1. 应用软件:Microsoft VC++ 2. 操作系统:Windows XP 【实验预备知识点】 1. RSA密码系统所基于的数学难题是对大素数的因式分解。 2. RSA算法原理:(1).选择两个大的素数p 和q(典型情况下为1024 位) (2).计算n = p * q 和z =(p-1)*(q-1). (3).选择一个与z 互素的数,将它称为d (4).找到e,使其满足e*d = 1 mod z 提前计算出这些参数以后,我们就可以开始执行加密了。 【实验内容】 ◆自行以2位小素数为p,q,3为公钥e,构造一个小的RSA系统,对“a、 b、c、d”这4个字母进行加密,解密 ◆在密码教学系统中实现RSA运算的大素数、公钥、私钥的生成、明文加 解密、分块大小的选择 ◆了解在不同分块大小的情况下,RSA系统的密文长度也会有所变化 ◆了解在不同参数的情况下,RSA系统的性能变化 【实验步骤】 1.熟悉RSA运算原理; 2.打开实验程序,如图1; 3.选择密钥长度为128、256、512或者1024比特; 4.点击“随机求取N,E,D”按钮,得到大整数N,公钥E,密钥D;

5.在明文对话框中输入需要加密的明文字符串; 6.点击“加密”按钮可获得加密后的密文,点击“解密”按钮可获得解密后的明文; 或者 7.自己输入大整数N、公钥E、密钥D,然后点击按钮“自己输入N,E,D”就激活明文输入框。(自己输入的数都是16进制的数)8.在明文对话框中输入需要加密的明文字符串; 9.点击“加密”按钮可获得加密后的密文,点击“解密”按钮可获得解密后的明文; 10.运算用时:显示的是随机求取N,E,D时,程序运行所需要的时间。 图1 RSA算法实验 【实验过程】 1.随机求取N,E,D:点击“随机求取N,E,D”按钮,得到下图所示的N,E,D.

RSA加密的简易实现要点

安全学实验报告 —RSA加密解密的简单实现 华南师范大学赵教授 RSA介绍: 当前最著名、应用最广泛的公钥系统RSA是在1978年,由美国麻省理工学院(MIT)的Rivest、Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。 RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。 公钥加密算法中使用最广的是RSA。RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。此外,RSA加密系统还可应用于智能IC卡和网络安全产品。 一.系统总体方案: 1.要求:编写RSA加密解密演示程序,用户自己输入两个素数P,Q以及公钥E,程序判断P,Q为素数后计算得到公钥(e,n),私钥(d,n)并显示。 输入明文密文并可以进行加密解密。 2.数学原理: 1.密钥的生成选择p,q为两个大的互异素数计算n=p*q, ψ(n)=(p-1)(q-1) 选择整数e使gcd(ψ(n),e)=1(互质),(1

加解密算法实验报告

实验加/解密算法 实验日期:__年__月_日实验成绩:___________ 1.实验目的: (1)数据机密性; (2)数据完整性; (3)不可抵赖性 2.实验环境(设备、仪器、网络): (1)虚拟机 (2)加密工具 (3)Windows系统环境 3.实验内容(实验方案、实验步骤、测量数据及处理等): 3.1实验方案 加密方和解密方利用RSA加密算法分别生成一对公钥和私钥,并告知对方自己的公钥。 加密方实验流程如图3-1所示: 图3-1 将加密后的明文和签名发送给解密方。 解密方实验流程如图3-2所示:

图3-2 将明文同样进行hash运算得出摘要,与验证签名后得出的摘要相比较,如果相同则可以证明明文没有被破坏或改变,同时也可使确定是加密方发送的信息。 3.2实验过程 加密方 (1)加密方通过RSA算法得出公钥(e,n)=(101,253),私钥(d,n)=(61,253); (2)编辑明文为we are in xinjiang,and you? (3)在加密工具的环境中利用解密方的公钥对明文进行加密,如图3-3所示: 图3-3 (4)在加密工具中利用MD5对明文进行hash运算,如图3-4所示:

图3-4 (5)用加密方的私钥对生成的摘要进行签名,如图3-5所示: 图3-5 (6)将签名与密文发送给解密方。

解密方 (1)通过RSA算法得出公钥(e,n)=(1003,2173),私钥(d,n)=(1827,2173) (2)利用解密方的私钥对密文解密,如图3-6所示: 图3-6 (3)验证签名,将加密方发送的签名用加密方的公钥解密,如图3-7所示:

密码学实验----

《密码学与信息安全》实验报告精品文档,你值得期待 专业 班级 姓名 学号

2015年 6 月 5 日

实验一古典密码实验 1实验目的 1.理解代替密码学加密过程 2.理解置换密码学加密过程 2实验内容 1.手动完成Caesar密码 2.Caesar加密 3.Caesar密码分析 4.单表置换密码 5.单表置换密码分析 3实验过程 本练习主机A、B为一组,C、D为一组,E、F为一组。 首先使用“快照X”恢复Windows系统环境。 1.手动完成Caesar密码 (1)在实验原理部分我们已经了解了Caesar密码的基本原理,那么请同学们写出当密钥k=3时,对应明文:data security has evolved rapidly的密文:data security has evolved rapidly 。 (2)进入实验平台,单击工具栏中的“密码工具”按钮,启动密码工具,在向导区点击“Caesar密码”。在明文输入区输入明文:data security has evolved rapidly。将密钥k 调节到3,查看相应的密文,并与你手动加密的密文进行比较。 请根据密钥验证密文与明文对应关系是否正确。 2.Caesar加密 (1)进入“加密解密”|“Caesar密码”视图,在明文输入区输入明文(明文应为英文),单击“加密”按钮进行加密。 请将明文记录在这里:I am a stident 。 (2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值,并记下该密钥k值用于同组主机的解密。加密工作完成后,单击“导出”按钮将密文默认导出到Caesar共享文件夹(D:\Work\Encryption\Caesar\)中,默认文件名为Caesar密文.txt。 (3)通知同组主机接收密文,并将密钥k通告给同组主机。6 (4)单击“导入”按钮,进入同组主机Work\Encryption\Caesar目录(\\同组主机IP\Work\Encryption\Caesar),打开Caesar密文.txt。 (5)调节密钥k的微调按钮或对照表的移位按钮,将k设为同组主机加密时的密钥k 值,这时解密已经成功。请将明文写出:I am a stident 。 (6)将解密后的明文与同组主机记录的明文比较,请对比明文是否相同。3.Caesar密码分析 (1)本机进入“密码工具”|“加密解密”|“Caesar密码”,在明文输入区输入明文(要求明文有一定的意义以便让同组主机分析)。 请将明文记录在这里:I am a stident 。 (2)调节密钥k的微调按钮或者对照表的移位按钮,选择合适的密钥k值完成Caesar 加密,单击“导出”按钮,将密文默认导出到Caesar共享文件夹中。 (3)通告同组主机(不要通告密钥值k)密文已经放在共享文件夹中,让同组主机获取密文。 (4)单击“导入”按钮将同组主机Caesar密文导入。

RSA算法C语言实现 实验报告

广州大学学生实验报告开课学院及实验室:年月日 学院年级、专 业、班 姓名学号 实验课程名称成绩 实验项目名称实验4 非对称密码算法实验指导老师 实验目的 掌握产生RSA密钥对的程序设计方法 掌握产生RSA加密/解密的程序设计方法 实验内容 编写函数求出1~65535之间的全部素数 取8-bit的两个素数p,q,并用来生成一对RSA密钥 编写RSA加密/解密程序(可以限制N为16-bit,并利用上述的p,q) 加密你的学号+姓名并随后解密 实验步骤 【RSA算法流程】 加密: 1、取8-bit的两个素数p,q,并用来生成一对RSA密钥 2、根据欧拉函数,求得r=(p-1)(q-1) 3、选择一个小于r的整数e,求得e关于模r的模反元素,命名为d。(模反元素存在,当且仅当e与r互质) 4、(N,e)是公钥,(N,d)是私钥。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。 5、利用公式将n加密为c,公式: ) (mod N c n e≡ ,其中e为公钥 解密:利用公式将c加密为n ,公式: ) (mod N n c d≡ ,其中d为私钥 RSA算法的C代码实现 1、判断是否为素数 2、随机产生素数p,q,最大为8bit 3、产生公钥e(根据欧拉函数r,从2开始遍历寻找符合条件的e,直到int变量溢出)

4、产生私钥d(从1开始遍历符合条件的d,直到变量溢出) 5、实现加解密公式的代码(a是加解密文本,b为公钥或私钥,c为N=pq) 运行结果截屏:实验中遇到的问题与解决方法: 1、p,q值过大,导致加密后数据溢出(将获得的p,q的结果mod 254后加1) 2、加密后的数据用char类型存储溢出 (char类型太小,改用int或更大的数据类型存储加密结果更好) 3、cin遇到空格直接返回结果,没有获取空格后的字符串,无法一次读取学号+空格+姓名(改用gets函数) 4、scanf函数与gets函数冲突 (这是因为二者使用的结束标记不同。输入字符串时,scanf()或cin>>遇到空格、回车、Tab 结束,但在缓冲区中还留着这些结束符,此后如果使用gets()想去获取下一行字符串,它碰到的却是前面遗留下来的回车(或者回车之前还有空格等空白符),那么这次gets()就直接失效了,解决方法:用一句while(getchar()!='\n'); 来处理掉缓冲区里的回车换行符,或者改用cin函数) 5、p,q值过小,导致N过小,加密后的字符无法被解密还原为原文 (这是因为公式mod N,结果的范围从0~N-1,所以假如N小于原文的值则解密将出错,解决方法为扩大p,q取值,所以p,q按课件的要求取8bit范围的数可能会出错,范围要扩大到涵盖原文取值,建议取值为逼近8bit的素数) 实验总结:略

相关文档
最新文档