实训3 信息加密与哈希函数
-
实验目的
理解加密系统的概念。
掌握经典加密的主要方法。
理解混淆与扩散的概念。
掌握DES加密的主要方法。
了解非对称加密的重要意义。
掌握RSA加密算法的主要思想与使用方法。
理解数字签名的作用及生成方法。
-
实验准备及注意事项
1.硬件:装有Windows操作系统的计算机1台。
2.软件:C/C++编译环境、DES Tool、RSATool2v17、Hash Tool。
3.关键程序代码和实验结果以截图的形式进行保留。
-
实验背景
“密码”或“加密系统”用于“加密”数据。
对于原始的未加密的数据,我们称之为“明文”。
对于加密的结果,我们称之为“密文”。
通过称为“解密”的过程,我们把密文恢复成原始的明文。
古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。古典密码学的两种加密思路如下:
- 替换密码
简单替换密码加密是通过将当前字母替换为在常规字母表中第n个位置之后的那个字母来完成的。较复杂的替换密码是为字母表建立映射关系,由此可以产生更大的密钥空间。
- 换位密码
换位密码不对任何明文内容进行替换,而是通过换位(打乱顺序)的方法进行加密。典型的换位密码是双换位密码,这种加密方案首先要将明文写在一个给定大小的矩阵中,然后对行和列依据特定的序列进行置换操作。
混淆(confusion):使密文与密钥的关系尽可能复杂化,使得对手即使获取了许多明文和对应的密文,以及关于密文的一些统计特性,也无法推测密钥。
扩散(diffusion):让明文中的每一位影响密文中的许多位,或者说让密文中的每一位受明文中的许多位的影响。这样可以隐蔽明文的统计特性。当然,理想的情况是让明文中的每一位影响密文中的所有位,或者说让密文中的每一位受明文中所有位的影响。
分组密码:可以看成经典的电报密码本加密技术的现代传承,其中由密钥来决定电报密码本的选择。一次加密一组数据,密钥长度为一组数据的长度。
DES加密:
DES加密是三大著名且经典的加密算法之一,为分组对称加密算法。DES算法(或国产等效算法)在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC(消息鉴别码Message Authentication Code)校验等。
DES(Data Encryption Standard)是分组对称密码算法。DES采用了64位的分组长度和56位的密钥长度,它将64位的输入经过一系列变换得到64位的输出。解密则使用了相同的步骤和相同的密钥。参与加密的长度为56位,密钥空间含有2^56个密钥。
DES算法利用多次组合替代算法和换位算法,分散和错乱的相互作用,把明文编制成密码强度很高的密文,它的加密和解密用的是同一算法。
DES算法是一种分组加密机制,将明文分成N个组,然后对各个组进行加密,形成各自的密文,最后把所有的分组密文进行合并,形成最终的密文。
3DES算法:
3DES即三重数据加密算法,相当于是对每个数据块应用三次DES加密。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击。
3DES使用3个密钥,对明文先使用key1进行des加密形成密文1,接着使用key2对密文1进行解密形成密文2,最后使用key3对密文2进行加密形成密文3。即:密文=EK3(DK2(EK1(明文))),明文=DK1(EK2(DK3(密文)))。
3DES标准定义了三种密钥选项:
密钥选项1:三个密钥是独立的。
密钥选项2:K1和K2是独立的,而K3=K1密钥选项3:三个密钥均相等,即K1=K2=K3密钥选项1的强度最高,拥有3 x 56 = 168个独立的密钥位。
密钥选项2的安全性稍低,拥有2 x 56 = 112个独立的密钥位。该选项比简单的应用DES两次的强度较高,即使用K1和K2,因为它可以防御中途相遇攻击(英语:meet-in-the-middle attack)。
密钥选项3:等同于DES,只有56个密钥位。这个选项提供了与DES的兼容性,因为第1和第2次DES操作相互抵消了。该选项不再为国家标准科技协会(NIST)所建议,亦不为ISO/IEC 18033-3所支持。
MD5算法:
英文名:Message Digest Algorithm V5。
中文名:消息摘要算法第五版。
算法的输入:任何长度的字节流。
算法的输出:16字节值(有时会以32位十六进制字符表示)。
算法特点:加密过程不需要密钥,加密后的数据无法被解密。只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。所以不存在密钥的管理与分发问题。
算法流程:相当复杂。
算法应用:文件一致性验证、数字证书、访问认证。
RSA算法的理论基础:
大素数乘积的因子分解问题,即将两个大素数相乘十分容易,但对其乘积进行因式分解却极其困难,因此可以将乘积作为加密密钥公开(由素数、模运算、费马小定理、欧拉定理、扩展欧几里得算法可进行推导)。
RSA算法流程:
密钥生成方法
1、随机生成两个大的质数p和q,p不等于q,计算N=pq。
2、根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)。
3、任意选定一个整数e(e不是必须为质数),要求e与(p-1)(q-1)互质,且e小于(p-1)(q-1)。
4、通过公式d×e ≡ 1 (mod (p-1)(q-1))来计算d。
5、将p和q销毁。
6、此时,(N,e)作为公钥使用,(N,d)作为私钥使用。
密钥使用方法
1、接收方在本地生成一对公钥(N,e)和私钥(N,d)。
2、接收方将公钥(N,e)发布到公共空间中,自己留存私钥(N,d)。
3、想要给接收方发送数据的人通过公钥加密数据。
4、接收方收到加密数据后通过私钥解密。
加密方法
1、将消息分组,每组分别加密(即分组加密)。
2、每组消息用以下公式计算:
其中:n为明文,e和N为公钥,余数c为密文。
3、将多组密文组织到一起即形成加密的消息。
解密方法
1、接收方收到加密消息后,将密文分组。
2、每组用以下公式来解码:
其中:c为密文,d和N为私钥,余数n为明文。
3、将每一组明文拼合,得到最终的消息。
-
实验任务 公钥加密算法
RSA算法的数学原理
1、阅读RSA.cpp中的代码,了解其实现方法。
2、调试运行RSA.cpp,选择两个不同的素数。
3、根据生成的d和e验证公式d×e ≡ 1 (mod (p-1)(q-1))。
4、输入要加密的数。
5、验证密钥是否有效(加密解密的计算过程和结果是否正确)。
利用RSA-Tool加密消息
1、运行RSA-Tool,点击Start按钮,滑动鼠标生成一个随机数。
2、点击Generate生成一对大质数p、q及N=p×q。
3、自己选定一个可用的整数e。
4、点击Calc.D生成d。
5、至此创建了一对公钥和私钥。
6、将公钥(N,e)发送给小伙伴,小伙伴利用该公钥进行消息加密并发回密文。
7、利用私钥对小伙伴发来的密文进行解密。
注:加密时仅需要e和N,解密时仅需要d和N。
利用RSA算法实现对称密钥的安全分配
1、小A同学准备一些文字(信件),选择一个密钥利用DES-Tool对文字进行加密得到密文1。
2、小B同学运行RSA-Tool,生成公钥和私钥,将公钥发送给小A同学,私钥自己留存。
3、小A同学利用小B同学的公钥对加密信件时使用的对称密钥进行加密,得到密文2。将密文1和密文2一同发送给小B同学。
4、小B同学首先用自己的私钥解密密文2,接着利用解密密文2得到的对称密钥在DES-Tool中解密密文1,得到原始文字内容。
5、具体流程可参考下图。
利用RSA算法生成数字签名
1、小A同学运行Hash-Tool,生成某文件的MD5值。
2、小A同学利用RSA Tool对生成的MD5值进行私钥加密(反向使用RSA算法,Generate生成密钥后将D和E交换位置,再用test进行加密)。
3、小A同学将公钥、文件和加密后的MD5一起发送给小B同学,由小B同学验证数字签名的正确性(软件中先激活test按钮,再填写公钥进行解密)。
4、具体流程可参考下图。