武汉大学应用密码学RSA加密解密大作业
1 对RSA算法的理解
RSA加密算法是一种非对称加密算法,它基于一个非常简单的数论思想:“将两个素数乘起来是很容易的,但是分解该乘积是非常困难的”。
1.1加解密步骤
(1)生成公钥和私钥
a)随机生成两个不相等的大素数p和q,计算N=p*q;
b)根据欧拉函数,求出φ=(p-1)*(q-1);
c)选择一个小于r的整数e,求e关于r的模反元素d使得e*d mod φ
=1
得到公钥
(2)加密
给定明文m,公钥
(3)解密
给定密文c,私钥
1.2素性检验
RSA算法的实现难点之一是生成大素数,这就需要生成一个大数并对其进行素性检验。素性检验有很多种方法。其中包括确定性方法和随机方法。确定性方法有试除法(埃拉托斯特尼筛法),卢卡斯-莱默检验法和AKS素数测试。常见的随机方法有费马素性检验,米勒-拉宾检验和欧拉-雅科比测试。本次作业采用就是米勒-拉宾检验方法。
米勒-拉宾(Miller Rabin) 算法原理:
要测试N 是否为素数,首先将N-1 分解为2s d。在每次测试开始时,先随机选一个介于[1, N-1]的整数a,之后如果对所有的r∈[0, s-1],若a d mod N ≠ 1 且a2^rd mod N ≠1,则N 是合数。否则,N 有3/4 的概率为素数。
1.3安全问题
(1)公共模数攻击。每个人具有相同的r,但有不同的指数e和d,这是不安全的。
(2)低加密指数攻击。如果选择了较低的e值,虽然可以加快计算速度,但存在不安全性。
(3)低解密指数攻击。如果选择了较低的d值,也是不安全的。
(4)选择密文攻击。如A想让T对一个T不愿意签名的消息m’签名,A首先选择一个任意值x,计算y=x e(mod r),然后要求T对m=ym’签名,A最后计算(m d mod r)x-1 mod r =( ym’) d x-1mod r= m’d mod r。
还有一些不是直接对RSA的算法本身进行的攻击,如中间人攻击、时间攻击、边信道攻击等。
2.具体实现
2.1函数说明
void ProducePrime(JTextField prime):使用JA V A的Biginteger生成512位的
大数,再用Miller Robin算法检验是否是素数。参数prime即为生成的大素数。
boolean MillerRobin(BigInteger n):用Miller Robin检验判断大数n是否是素数。
BigInteger modex(BigInteger a, BigInteger b, BigInteger n):模幂运算,计算a b mod n
BigInteger inverse(BigInteger a, BigInteger b):求逆运算,计算a-1 ( b )
String Encode(String Plaintext, BigInteger n, int nLen, int m, JTextField e):加密,用公钥(n,e)对明文Plaintext加密。
String Decode(String Ciphertext, BigInteger n, int m, JTextField d):解密,用私钥d对密文Ciphertext解密。
2.2JA V A代码
import java.math.BigInteger;
import java.util.Random;
import java.util.Scanner;
import javax.swing.JTextField;
public class RSA {
public static void main(String[] args) {
String s;
JTextField p = new JTextField(35);
JTextField q = new JTextField(35);
JTextField e = new JTextField(35);
JTextField d = new JTextField(35);
ProducePrime(p);
ProducePrime(q);
BigInteger pp = new BigInteger(p.getText());
BigInteger qq = new BigInteger(q.getText());
BigInteger oo = (pp.subtract(new BigInteger("1"))).multiply(qq
.subtract(new BigInteger("1")));
BigInteger ee;
do {
ee = new BigInteger(100, new Random()).mod(oo);
} while (MillerRobin(ee) == false);
e.setText(ee.toString());
d.setText(inverse(ee, oo).toString());
BigInteger n = pp.multiply(qq);
int nLen = n.bitLength();
int m = (int) (Math.ceil((double) (nLen) / 16.0));
nLen = (nLen - 1) / 16;
String Ciphertext = new String();
String Plaintext = new String();
System.out.println("P:" + p.getText());
System.out.println("Q:" + q.getText());
System.out.println("公钥:" + e.getText());
System.out.println("私钥:" + d.getText());
Scanner scanner = new Scanner(System.in);
System.out.println("输入要加密字符串:");
s = scanner.nextLine();
Ciphertext = Encode(s, n, nLen, m, e);
System.out.println("加密结果:" + Ciphertext);
Plaintext = Decode(Ciphertext, n, m, d);
System.out.println("解密结果:" + Plaintext);
}
//产生大素数
public static void ProducePrime(JTextField prime) {
BigInteger n = new BigInteger("0");
Random r = new Random();
do {
n = new BigInteger(512, 5, r);
prime.setText(n.toString());
} while (MillerRobin(n) == false);
}
//Miller Robin素性检验
public static boolean MillerRobin(BigInteger n) {
int time = 1000;
BigInteger m = n.mod(new BigInteger("2"));
if (m.equals(new BigInteger("0"))) {
return false;
}
int s = 0;
int k = 0;
BigInteger t = n.subtract(new BigInteger("1"));
while (t.mod(new BigInteger("2")).equals("0")) {
t.divide(new BigInteger("2"));
++s;
}
for (int i = 0; i < time; ++i) {
BigInteger a = new BigInteger(100, new Random()).mod(
n.subtract(new BigInteger("3"))).add(new BigInteger("2"));
BigInteger b = modex(a, t, n);
if (b.equals(new BigInteger("1")) == false
&& b.equals(n.subtract(new BigInteger("1"))) == false) {
k = 1;
while (k == s
&& b.equals(n.subtract(new BigInteger("1"))) == false) {
b = b.multiply(b).mod(n);
if (b.equals(new BigInteger("1"))) {
return false;
}
++k;
}
if (b.equals(n.subtract(new BigInteger("1"))) == false) {
return false;
}
}
}
return true;
}
//模幂运算
public static BigInteger modex(BigInteger a, BigInteger b, BigInteger n) {
BigInteger m = new BigInteger("1");
while (b.equals(new BigInteger("0")) == false) {
if (b.mod(new BigInteger("2")).equals(new BigInteger("1"))) {
m = m.multiply(a).mod(n);
}
a = a.multiply(a).mod(n);
b = b.divide(new BigInteger("2"));
}
return m;
}
//求逆运算
public static BigInteger inverse(BigInteger a, BigInteger b) {
BigInteger n1 , n2 , n3, m, t, b1;
n1 = new BigInteger("1");
n2 = new BigInteger("0");
b1 = b;
while (b.equals(new BigInteger("0")) == false) {
m = a.divide(b);
n3 = n1.subtract(m.multiply(n2));
if (https://www.360docs.net/doc/303389943.html,pareTo(new BigInteger("0")) != -1) {
n3 = n3.mod(b1);
} else {
n3 = b1.subtract(n3.multiply(new BigInteger("-1")).mod(b1));
}
n1 = n2;
n2 = n3;
t = b;
b = a.mod(b);
a = t;
}
if (a.equals(new BigInteger("1"))) {
return n1;
} else {
return new BigInteger("0");
}
}
//加密
public static String Encode(String Plaintext, BigInteger n, int nLen, int m, JTextField e) {
BigInteger r = new BigInteger("0");
StringBuffer outBuf = new StringBuffer();
int i, j, k;
for (i = 0; i < Plaintext.length(); i = j) {
BigInteger t = new BigInteger("0");
for (j = i; j < i + nLen && j < Plaintext.length(); j++) {
t = t.shiftLeft(16);
long num = Plaintext.charAt(j);
t = t.add(BigInteger.valueOf(num));
}
r = modex(t, new BigInteger(e.getText()), n);
String buf = new String();
for (k = 0; k < m; ++k) {
long num = (r.and(BigInteger.valueOf(65535))).longValue();
r = r.shiftRight(16);
buf = (char) (num) + buf;
}
outBuf = outBuf.append(buf);
}
return outBuf.toString();
}
//解密
public static String Decode(String Ciphertext, BigInteger n, int m, JTextField d) {
StringBuffer outBuf = new StringBuffer();
BigInteger r = new BigInteger("0");
int i, j;
for (i = 0; i < Ciphertext.length(); i += j) {
BigInteger t = new BigInteger("0");
for (j = 0; j < m && j + i < Ciphertext.length(); j++) {
t = t.shiftLeft(16);
long num = (long) (Ciphertext.charAt(j + i));
t = t.add(BigInteger.valueOf(num));
}
r = modex(t, new BigInteger(d.getText()), n);
String buf = new String();
while (https://www.360docs.net/doc/303389943.html,pareTo(new BigInteger("0")) > 0) {
long num = (r.and(BigInteger.valueOf(65535))).longValue();
buf = (char) (num) + buf;
r = r.shiftRight(16);
}
outBuf = outBuf.append(buf);
}
return outBuf.toString();
}
}
2.3测试结果:
P:129036805470851517375614397900032888596537198498489613936254861169557 280794177755476583936161903531948987784914983448340462980850402666689 13843973354103033
Q:965485259575386626661798155084845386764376902206479716964206598369971
506074458894922536120328881558956967066309443036648783409751809379053 0180407555360339
公钥:1133142713903219484415537969751
私钥:289229897767689634195491655141643249544903709281685759316055760288297 329286785308503278756568252277106589199437078007305924525623679341478 908797523966221390308041636992564515935685594854485373424597837714855 144013790195492262743427356815741901651405003362999246563628660918125 34177904849175286307833237971415
输入要加密字符串:
密码学算法RSA
加密结果:偮钘?兄埅????烄証箕???霑痘????啛猝市????鎈????釤?????????????筕???酪? ??霧?羳???鑮だ
解密结果:密码学算法RSA
《应用密码学》课程试卷(2)参考答案
2008——2009学年第一学期 课程名称:应用密码学使用班级:信息安全06级1、2、3班 命题系别: 网络工程学院 命题人:张仕斌、张金全、万武南 第一题 填空(共15个空,每空1分,计15分) 1、128,160 2、已知明文攻击、选择明文攻击 3、双钥体制或者公钥密码体制或者非对称密码体制 4、m序列 5、128,192,256 6、会话密钥,密钥加密密钥 7、同步流密码 8、分组链接(CBC)模式,密码反馈(CFB)模式 9、1408 第二题 判断题(共10题,每题1分,计10分) 1、√ 2、√ 3、× 4、√ 5、× 6、× 7、× 8、√ 9、×10、× 第三题 单项选择(共10题,每题2分,计20分) 1、D 2、B 3、A 4、A 5、D 6、C 7、B 8、C 9、B 10、C 第四题(本题由三个小题组成,共16分) 1、简述RSA算法;(4分) 提示:给出密钥产生过程、加密过程、解密过程及各过程中需要注意之处。 2、在RSA算法密钥产生过程中,设p=19,q=13,取公钥e=7,求私钥d;(要求:给出必要计算过程。6分) 3、设RSA算法的参数选择如上题所述,求消息m=41所对应的密文;(要求:给出必要计算过程。6分)
解:1)密钥的产生 ①选两个保密的大素数p和q。 ②计算n=p×q,φ(n)=(p-1)(q-1),其中φ(n)是n的欧拉函数值。 ③选一整数e,满足1 青岛大学2017年硕士研究生入学考试试题 科目代码:930科目名称:应用密码学(共3页) 请考生写明题号,将答案全部答在答题纸上,答在试卷上无效 一、填空题(本大题共6道小题,每空2分,共30分) 1.密码体制是完成加密和解密功能的密码方案或密码算法。一个密码体制通常 由以下5个部分构成:明文空间;密文空间;;加密算法与。 2.密码体制的分类有很多种,根据加密和解密所使用的密钥是否相同,可以将 密码体制分为:和。 3.20世纪40年代末,C.Shannon(香农)在遵循Kerckhoff原则前提下,提出 了设计密码系统的两个基本方法:和。 4.数据加密标准(DES)算法是一种采用传统的代替和置换操作加密的分组密 码,明文以比特为分组,密钥长度为比特,有效密钥长度为比特,迭代轮数为。 ?;m和n的5.设2332 5772 ==,则m的欧拉函数()= m n 2357,25711 m 最大公约数为,最小公倍数为。 6.MD5算法是由RSA的创始人Rivest设计开发的,该算法能接收任意长度的 消息作为输入,以比特分组来处理输入文本,输出比特的散列值。 二、选择题(本大题共10道小题,每小题3分,共30分) 1.1949年,()发表题为《保密系统的通信理论》的文章,为密码系统建立 了理论基础,从此密码学成了一门科学。 A、Shannon B、Diffie C、Hellman D、Shamir 2.AES结构由一下4个不同的模块组成,其中()是非线性模块。 A、字节代换 B、行位移 C、列混淆 D、轮密钥加 3.下面()不是Hash函数具有的特性。 A、单向性 B、可逆性 C、压缩性 D、抗碰撞性 4.Alice收到Bob发给他的一个文件的签名,并要验证这个签名的有效性,那 么验证算法中Alice选用的密钥是()。 A、Alice的公钥 B、Alice的私钥 C、Bob的公钥 D、Bob的私钥 5.设在RSA的公钥密码体制中,公钥为(e,n)=(13,35),则私钥d=()。 第1页,共3页 东华2011~2012学年《应用密码学》试卷 (回忆版) 一. 单选题 1. 以下关于非对称密码的说法,错误的是() A. 加密算法和解密使用不同的密钥 B.非对称密码也称为公钥密码 C. 非对称密码可以用来实现数字签名 D. 非对称密码不能用来加密数据 2. 在RSA密钥产生过程中,选择了两个素数,p=17,q=41,求欧拉函数Φ(n)的值() A. 481 B. 444 C. 432 D. 640 3. 假如Alice想使用公钥密码算法发送一个加密的消息给Bob,此信息只有Bob 才能解密,Alice使用哪个密钥来加密这个信息?() A.A的公钥 B. A的私钥 C. B的公钥 D. B的私钥 4. 以下基于大整数因子分解难题的公钥密码算法是?() A. EIGamal B. ECC C. RSA D. AES 5. 以下哪种算法为不可逆的数学运算 A.MD5 B.RC4 C.IDEA D.DES 6. MAC和对称加密类似,但是也有区别,以下哪个选项指出了MAC和对称加密算法的区别? A.MAC不使用密钥 B.MAC使用两个密钥分别用于加密和解密 C.MAC是散列函数 D.MAC算法不要求可逆性而加密算法必须是可逆的 7. HMAC使用SHA-1作为其嵌入的散列函数,使用的密钥长度是256位,数据长度1024位,则该HMAC的输出是多少位? A. 256 B. 1024 C. 512 D. 160 二.填空题 1. DES加密算法的明文分组长度是位,密文分组长度是位;AES分组长度是位;MD5输出是位;SHA-1输出是位。 2. 如C=9m+2(mod26),此时假设密文C=7,则m= . 3.已知RSA加密算法中,n=21,e=5,当密文c=7时,求出此时的明文m= 4.Hmac的算法表达式是。 5.假设hash函数h的输出为k位,则散列结果发生碰撞的概率为 6. DES加密算法是结构,AES算法是结构。 三解答题 1.解释说明什么是零知识证明 2.Hash函数h,请分析h 特性和安全要求 RSA加密解密的设计与实现 上海电力学院 《应用密码学》课程设计 题目: RSA加密解密的设计与实现 院系:计算机科学与技术学院 专业年级:级 学生姓名:李正熹学号: 3273 指导教师:田秀霞 1月 8日 目录 目录 1.设计要求 2.开发环境与工具 3.设计原理(算法工作原理) 4.系统功能描述与软件模块划分 5.设计核心代码 6.参考文献 7. 设计结果及验证 8. 软件使用说明 9. 设计体会 附录 1.设计要求 1 随机搜索大素数,随机生成公钥和私钥 2 用公钥对任意长度的明文加密 3 用私钥对密文解密 4 界面简洁、交互操作性强 2.开发环境与工具 Windows XP操作系统 Microsoft Visual C++ 6.0 1.创立rsa工程 2.在rsa工程中创立 3273 李正熹cpp文件 3.设计原理 RSA算法简介 公开密码算法与其它密码学完全不同,它是基于数学函数而不是基于替换或置换。与使用一个密钥的对称算法不同,公开密钥算法是非对称的,而且它使用的是两个密钥,包括用于加密的公钥和用于解密的私钥。公开密钥算法有RSA、Elgamal等。 RSA公钥密码算法是由美国麻省理工学院(MIT)的Rivest,Shamir和Adleman在1978年提出来的,并以她们的名字的有字母命名的。RSA是第一个安全、实用的公钥密码算法,已经成为公钥密码的国际标准,是当前应用广泛的公钥密码体制。 RSA的基础是数论的Euler定理,其安全性基于二大整数因子分解问题的困难性,公私钥是一对大素数的函数。而且该算法已经经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这不恰恰说明该算法有其一定的可信度。 4.系统功能描述与软件模块划分 功能: 2019 年汕头大学应用密码学期末复习资料 (本次考试题型全部是问答题,有的题中包含计算,无选择填空,共八道大题)PS:本复习资料仅代表2019 年考试内容,老师年年会微调考试内容,但大体方向不变。本资 料删去无用内容,所有出现的内容均为重点,基本涵盖了所有内容。 资料由往年师兄师姐的精华加以整理,内容以老师PPT 为主,加本人的考后整理增加部分复习要点。 第一章概述 信息安全的目标和背景,为什么要学密码学? 密码学是信息安全学科的核心,密码学就是研究与信息安全相关方面诸如保密性、完整性、实体鉴别、抗抵赖性的数学理论与技术。 信息安全的三个基本目标(考题): 保密性:消息能够被安全地传送,即窃听者不能阅读发送的消息 完整性:消息的接收者应该能够验证正在传递的消息过程中有没有被修改,入侵者不能用假消息代替合法的消息。 可用性:即保证信息和信息系统随时为授权者提供服务,而不要出现非授权者滥用却对授权者拒绝服务的情况 信息安全技术产生的前提(考题): 不可靠的网络传输 阐述古典密码学中的两种主要技术以及公钥密码学思想。 答:代换(Substitution)和置换(Permutation)是古典密码学中两种主要的技术。代替技术就是将明文中每一个字符替换成另外一个字符从而形成密文,置换技术则是通过重新排列明文消息中元素的位置而不改变元素本身从而形成密文。 公钥密码的思想:密码系统中的加密密钥和解密密钥是可以不同的。由于并不能容易的通过加密密钥和密文来求得解密密钥或明文,所以可以公开这种系统的加密算法和加密密钥,用户则只要保管好自己的解密密钥。 密码算法的安全性(考题) 无条件安全:无论破译者有多少密文,给出无限的资源,他也无法解出对应的明文。 计算上安全:破译的代价超出本身的价值,破译的时间超出了信息的有效期。 对称密码又可以分成: 流密码和分组密码 分组密码每次对一块数据(Block)加密 流密码每次对一位或一字节加密 第二章数论基础 1.掌握 Euclid 辗转相除法 2.解一次同余计算式 (不会单独出一道题考你,会整合在 RSA 那章中出现,两个方法都必须掌握) (a,b)即表示求 a,b 的最大公约数 计算实例如下图 RSA加密算法加密与解密过程解析 1.加密算法概述 加密算法根据内容是否可以还原分为可逆加密和非可逆加密。 可逆加密根据其加密解密是否使用的同一个密钥而可以分为对称加密和非对称加密。 所谓对称加密即是指在加密和解密时使用的是同一个密钥:举个简单的例子,对一个字符串C做简单的加密处理,对于每个字符都和A做异或,形成密文S。 解密的时候再用密文S和密钥A做异或,还原为原来的字符串C。这种加密方式有一个很大的缺点就是不安全,因为一旦加密用的密钥泄露了之后,就可以用这个密钥破解其他所有的密文。 非对称加密在加密和解密过程中使用不同的密钥,即公钥和私钥。公钥用于加密,所有人都可见,私钥用于解密,只有解密者持有。就算在一次加密过程中原文和密文发生泄漏,破解者在知道原文、密文和公钥的情况下无法推理出私钥,很大程度上保证了数据的安全性。 此处,我们介绍一种非常具有代表性的非对称加密算法,RSA加密算法。RSA 算法是1977年发明的,全称是RSA Public Key System,这个Public Key 就是指的公共密钥。 2.密钥的计算获取过程 密钥的计算过程为:首先选择两个质数p和q,令n=p*q。 令k=?(n)=(p?1)(q?1),原理见4的分析 选择任意整数d,保证其与k互质 取整数e,使得[de]k=[1]k。也就是说de=kt+1,t为某一整数。 3.RSA加密算法的使用过程 同样以一个字符串来进行举例,例如要对字符串the art of programming 进行加密,RSA算法会提供两个公钥e和n,其值为两个正整数,解密方持有一个私钥d,然后开始加密解密过程过程。 1. 首先根据一定的规整将字符串转换为正整数z,例如对应为0到36,转化后形成了一个整数序列。 2. 对于每个字符对应的正整数映射值z,计算其加密值M=(N^e)%n. 其中N^e表示N的e次方。 3. 解密方收到密文后开始解密,计算解密后的值为(M^d)%n,可在此得到正整数z。 4. 根据开始设定的公共转化规则,即可将z转化为对应的字符,获得明文。 4.RSA加密算法原理解析 下面分析其内在的数学原理,说到RSA加密算法就不得不说到欧拉定理。 欧拉定理(Euler’s theorem)是欧拉在证明费马小定理的过程中,发现的一个适用性更广的定理。 首先定义一个函数,叫做欧拉Phi函数,即?(n),其中,n是一个正整数。?(n)=总数(从1到n?1,与n互质整数) 比如5,那么1,2,3,4,都与5互质。与5互质的数有4个。?(5)=4再比如6,与1,5互质,与2,3,4并不互质。因此,?(6)=2 以下是我对《应用密码学》这本书的部分学习笔记,比较简单。笔记中对现代常用的加密技术进行了简单的归类和解释,有兴趣的同学可以看一下,没看过的同学就当普及知识了,看过的同学就当复习了。笔记里面可能有错别字,有的话请各位看客帮忙指正。 第1章密码学概述 1-1、1-2 1.密码技术的发展历史大致可以划分为三个时期:古典密码、近代密码和现代密码时期。 2.公元前440多年的斯巴达克人发明了一种称为“天书”的加密器械来秘密传送军事情报。这是最早的移位密码。 3.1919年德国人亚瑟·谢尔比乌斯利用机械电气技术发明了一种能够自动编码的转轮密码机。这就是历史上最著名的德国“埃尼格玛”密码机。 4.1949年香农的奠基性论文“保密系统的通信理论”在《贝尔系统技术杂志》上发表。 5.1977年,美国国家标准局正式公布实施了美国的数据加密标准(DES)。 6.1976年11月,名美国斯坦福大学的著名密码学家迪菲和赫尔曼发表了“密码学新方向”一文,首次提出了公钥密码体制的概念和设计思想。 7.1978年,美国的里韦斯特(R.L.Rivest)、沙米尔(A.Shamir)和阿德勒曼(L.Adleman)提出了第一个较为完善的公钥密码体制——RSA体制,成为公钥密码的杰出代表和事实标准。 8.2000年10月,比利时密码学家Joan Daemen和Vincent Rijmen提出的“Rijndael数据加密算法”被确定为AES算法,作为新一代数据加密标准。 1-3 1.密码学的主要任务:密码学主要为存储和传输中的数字信息提供如下几个方面的安全保护:机密性、数据完整性、鉴别、抗抵赖性。 2.密码体制中的有关基本概念: 明文(plaintext):常用m或p表示。 密文(ciphertext):常用c表示。 加密(encrypt): 解密(decrypt): 密码算法(cryptography algorithm):简称密码(cipher)。 实验四 RSA加解密算法的实现 一.实验目的 1、对算法描述可进行充分理解,精确理解算法的各个步骤。 2、完成RSA软件算法的详细设计。 3、用C++完成算法的设计模块。 4、编制测试代码。 二.实验内容 1.实验原理及基本技术路线图(方框原理图) 加密过程: 第一步,用户首先输入两个素数p和q,并求出 n = p*q,然后再求出n的欧拉函数值phi。 第二步,在[e,phi]中选出一个与phi互素的整数e,并根据e*d ≡1(mod phi),求出e的乘法逆元。至此我们已经得到了公开密钥{e,n}和秘密密钥{d,n}。 第三步,让用户输入要进行加密的小于n一组正整数(个数不超过MAXLENGTH=500),输入以-1为结束标志,实际个数存入size中,正整数以clear[MAXLENGTH]保存。 第四步,对第三步所得的明文clear[MAXLENGTH]进行加密。遍历clear[size],对每一个整数用以下算法进行加密,并将加密后的密文保存在Ciphertext[MAXLENGTH]中。 注意:此处不能用m2[j] = clear[j] ^ e整数的幂,因为当e和clear[j]较大时,会发生溢出,至使出现无法预料的结果。 第五步,输出加密后的密文。 解密过程: 第一步,根据在以上算法中求出的解密密钥[d,phi],对加密后的密文Ciphertext[MAXLENGTH]进行解密,结果保存在DecryptionText[MAXLENGTH]中,算法如下: 第二步,输出对加密前的明文和加密并解密后的密文进行比较,判断两个数组是否一致,从而得知算法是否正确。 2.所用仪器、材料(设备名称、型号、规格等) 计算机一台、vc6.0 3.实验方法、步骤 #include 2019年汕头大学应用密码学期末复习资料 (本次考试题型全部是问答题,有的题中包含计算,无选择填空,共八道大题) PS:本复习资料仅代表2019年考试内容,老师年年会微调考试内容,但大体方向不变。本资料删去无用内容,所有出现的内容均为重点,基本涵盖了所有内容。 资料由往年师兄师姐的精华加以整理,内容以老师PPT为主,加本人的考后整理增加部分复习要点。 第一章概述 信息安全的目标和背景,为什么要学密码学? 密码学是信息安全学科的核心,密码学就是研究与信息安全相关方面诸如保密性、完整性、实体鉴别、抗抵赖性的数学理论与技术。 信息安全的三个基本目标(考题): 保密性:消息能够被安全地传送,即窃听者不能阅读发送的消息 完整性:消息的接收者应该能够验证正在传递的消息过程中有没有被修改,入侵者不能用假消息代替合法的消息。 可用性:即保证信息和信息系统随时为授权者提供服务,而不要出现非授权者滥用却对授权者拒绝服务的情况 信息安全技术产生的前提(考题): 不可靠的网络传输 阐述古典密码学中的两种主要技术以及公钥密码学思想。 答:代换(Substitution)和置换(Permutation)是古典密码学中两种主要的技术。代替技术就是将明文中每一个字符替换成另外一个字符从而形成密文,置换技术则是通过重新排列明文消息中元素的位置而不改变元素本身从而形成密文。 公钥密码的思想:密码系统中的加密密钥和解密密钥是可以不同的。由于并不能容易的通过加密密钥和密文来求得解密密钥或明文,所以可以公开这种系统的加密算法和加密密钥,用户则只要保管好自己的解密密钥。 密码算法的安全性(考题) 无条件安全:无论破译者有多少密文,给出无限的资源,他也无法解出对应的明文。 计算上安全:破译的代价超出本身的价值,破译的时间超出了信息的有效期。 对称密码又可以分成: 流密码和分组密码 分组密码每次对一块数据(Block)加密 流密码每次对一位或一字节加密 第二章数论基础 1.掌握Euclid辗转相除法 2.解一次同余计算式 (不会单独出一道题考你,会整合在RSA那章中出现,两个方法都必须掌握) (a,b)即表示求a,b的最大公约数 计算实例如下图 RSA加密算法的基本原理 1978年RSA加密算法是最常用的非对称加密算法,CFCA 在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。 RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest,Adi Shamir,Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。 RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表: 可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。(4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数, 《应用密码学》习题和思考题答案 第4章 密码学数学引论 4-1 编写一个程序找出100~200间的素数。 略 4-2 计算下列数值:7503mod81、(-7503)mod81、81mod7503、(-81)mod7503。 解:7503mod81=51 (-7503)mod81=30 81mod7503=81 (-81)mod7503=7422 4-3 证明:(1)[]))(m od (m od )(m od )(m od m b a m m b m a ?=? (2)[][])(m od ))(m od ())(m od (m od )(m m c a m b a m c b a ?+?=+? 证明: (1)设(mod )a a m r =,(mod )b b m r =,则a a r jm =+(j 为某一整数),b b r km =+(k 为某一整数)。于是有: [](mod )(mod )mod ()(mod )a b a m b m m r r m ?= ()()() ()() ()() 2()(mod )mod mod mod a b a b a b a b a b m r jm r km m r r r km r jm kjm m r r m ?=++=+++= 于是有:[]))(m od (m od )(m od )(m od m b a m m b m a ?=? (2)设(mod )a a m r =,(mod )b b m r =,(mod )c c m r =,则a a r jm =+(j 为某一整数),b b r km =+(k 为某一整数),c c r im =+(i 为某一整数)。于是有: []()()()()[]()()22()mod (mod ) (mod ) mod mod a b c a b c a b a a a c b c a b a c a b c m r jm r km r im m r jm r km r im m r r r im r km r r r jm kjm r jm ijm m r r r r m ???+=++++????????=++++??=+++++++=+ []()()()()()[]()(mod )()(mod )(mod ) mod mod mod mod a b a c a b a c a b m a c m m r jm r km m r jm r im m m r r r r m ?+?=+++++????=+ 于是有:[][])(m od ))(m od ())(m od (m od )(m m c a m b a m c b a ?+?=+?2017年青岛大学应用密码学考研专业课真题硕士研究生入学考试试题
应用密码学试题
RSA加密解密的设计与实现
汕头大学应用密码学期末复习资料
RSA加密算法加密与解密过程解析
《应用密码学》学习笔记
实验四RSA加解密算法的实现
汕头大学应用密码学期末复习资料
RSA加密算法的基本原理
应用密码学习题答案
RSA加解密算法C语言的实现