三重DES、AES
- 格式:doc
- 大小:41.00 KB
- 文档页数:6
VPN隧道的加密算法比较在计算机网络中,VPN(虚拟专用网络)是一种通过公共互联网或私有网络,在远程位置之间创建加密通信的技术。
VPN隧道是VPN连接中的重要组成部分,它负责在两个节点之间传输数据,并使用加密算法保护数据的安全性。
目前市场上存在多种不同的加密算法,本文将对其中几种常见的VPN隧道加密算法进行比较。
1.对称加密算法对称加密算法是最常见的VPN隧道加密算法之一。
它使用相同的密钥对数据进行加密和解密,加密和解密过程速度快。
其中代表性的算法有DES(数据加密标准)、3DES(三重DES)和AES(高级加密标准)。
DES是一种较旧的加密算法,由于密钥长度较短,已逐渐被3DES和AES所取代。
3DES在DES的基础上进行了三次加密,提高了安全性,但加密和解密过程速度慢。
AES是一种更为高级的加密算法,提供了128位、192位和256位三种密钥长度,安全性和性能较好。
2.非对称加密算法非对称加密算法使用公钥和私钥进行加密和解密。
公钥可以被任何人获得,而私钥只能由密钥的所有者持有。
RSA算法是一种常见的非对称加密算法,它的安全性较高,但在处理大量数据时效率较低。
3.混合加密算法混合加密算法将对称加密算法和非对称加密算法结合使用,兼具了两种算法的优点。
在VPN隧道中,TLS/SSL协议常用于建立安全连接,在传输数据时使用对称加密算法进行加密。
通过使用非对称加密算法对对称密钥进行加密和解密,保证了密钥交换的安全性。
混合加密算法在安全性和性能方面取得了一定的平衡。
4.哈希和消息认证码算法在VPN中,哈希算法用于生成消息摘要,以确保数据的完整性。
常见的哈希算法有MD5和SHA-1,它们能够快速计算出固定长度的摘要。
而消息认证码(MAC)算法则通过附加密钥来提供数据完整性和身份验证,常见的MAC算法有HMAC(基于哈希算法的消息认证码)算法。
哈希和MAC算法在VPN隧道中发挥着重要的作用,确保数据在传输过程中不被篡改。
IPSec加密算法:了解DES、3DES、AES等常用方法随着信息技术的发展,网络安全问题日益凸显,尤其是在数据传输过程中,加密算法的重要性不容忽视。
IPSec(Internet Protocol Security)作为一种网络层安全协议,为数据传输提供了保密性、完整性和身份验证等保障。
而在IPSec中,加密算法则是实现这些保护功能的核心。
一、对称加密算法之DES最早应用于IPSec协议的加密算法是DES(Data Encryption Standard,数据加密标准)。
DES采用对称加密的方式,即发送方和接收方使用相同的密钥进行加密和解密。
DES的密钥长度为56位,明文的块长度为64位。
然而,随着计算机技术的进步,DES的密钥长度过短,易受到暴力破解的攻击。
为了增强安全性,人们对DES进行了改进,产生了3DES算法。
二、对称加密算法之3DES3DES(Triple Data Encryption Algorithm,三重数据加密算法)是对DES的改进版本。
它通过对明文进行三次加密,使用不同的密钥,提高了加密强度。
3DES的密钥长度可以为112位或168位,相对于DES来说更加安全。
尽管3DES在安全性上有所提升,但由于其运算速度相对较慢,逐渐被更加高效的加密算法所取代。
其中,AES成为了现代互联网传输中广泛应用的加密算法。
三、对称加密算法之AESAES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,也是目前应用最为广泛的加密算法。
AES使用的密钥长度可以为128位、192位或256位,提供了更高的安全性。
与DES和3DES相比,AES在加密速度和安全性上都有较大的提升。
这得益于AES采用的分组加密方式,将明文分成多个固定长度的块,通过不同的加密运算来实现加密过程。
由于AES的运算速度快,安全性强,因此被广泛应用在数据传输、存储介质加密以及云计算等领域。
1. Mark-1:1944年哈佛大学研制。
2. ENIAC:1946年宾州大学研制的数字电子计算机。
3. UNIVAC:1951年埃克特-莫奇莱计算机公司批量生产,被认为开辟了大型主机时代。
4. ARPANET:1983年TCP/IP协议正式成为其协议标准,标志着ARPANET演变为Internet。
5. CAD:计算机辅助设计6. CAM:计算机辅助制造7. CAE:计算机辅助工程8. CAI:计算机辅助教学9. CAT:计算机辅助测试10. IEEE:美国电子电器工程师学会11. CISC:复杂指令集计算机,这种服务器主要以IA-32体系结构(Intel架构)为主12. RISC:精细指令集计算机13. VILW:超长指令字,也成为IA-64体系结构,功能比CISC和RISC强大的多14. MIPS:表示单字长定点指令的平均执行速度,即每秒钟执行一百条指令。
15. MTBF:平均无故障时间16. MTTR:平均故障修复时间17. PCI标准:外围部件互联标准18. EPIC:简明并行指令计算技术,安腾采用的,超越CISE与RISC的最新设计理念19. JPEG:联合图像专家组标准,关于静止图像压缩编码的国际标准,它适合于连续色调、多级灰度、单色或彩色静止图像的数字压缩编码。
无损压缩采用预测压缩编码法,压缩比为4:1;有损压缩采用离散余弦变换DCT为基础的方法,压缩比为10:1—100:1,当压缩比小于40:1时基本能保持原图风貌。
20. JPEG2000:采用离散子波变换为主的多解析编码方法,压缩比高于JPEG约30%。
21. MPEG:运动图像专家组标准,由ISO/IEC制定,通常包括MPEG视频、MPEG音频和MPEG系统三部分。
速率为1.5—15Mbps。
22. C/S模式:客户机/服务器模式23. SAGE:美国半自动地面防空系统24. PDN:公用数据网25. OSI参考模型:开放系统互连参考模型26. FDDI:光纤分布式数据接口27. SNMP:简单网络管理协议28. NII:美国国家信息基础设施29. GIIC:全球信息基础设施委员会30. B-ISDN:宽带综合业务数据网31. ATM:异步传输模式32. PSTN:传统公用电话交换网33. LAN:局域网34. WAN:广域网35. MAN:城域网36. CATV:有线电视网37. SNA:系统网络体系结构38. TCP:传输控制协议39. UDP:用户数据协议40. TCP/IP模型:应用层、传输层、互联层、主机-网络层,传输层规定的两种协议:TCP与UDP41. OSI参考模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层42. Telnet:远程登录协议43. FTP:文件传输协议44. SMTP:简单邮件传输协议45. DNS:域名服务46. RIP:路由信息协议47. NFS:网络文件系统48. HTTP:超文本传输协议49. IEEE 802.16:宽带无线接入技术50. IEEE 802.11:无线局域网51. IEEE 802.15:蓝牙技术52. AC hoc:无线自组网,是一种自组织、对等式、多跳的无线移动网络。
SM4算法、AES算法、DES算法三种分组密码的基础分析 分组密码当中代表性的SM4算法、AES算法、DES算法在计算机和通信系统中起着重要的实际作用,每一种的算法都会有其独有的一份结构,讲解起来其实每一种都有很大的一个篇幅。
在这里主要是把这几种密码算法放在一起做一个简单的分析,也可以通过了解每一种算法来比较一下三者之间的差别。
那么,我们就通过了解SM4算法、AES算法、DES算法这几种有代表性的近代分组密码来讨论一下分组密码的基本理论及其在计算机和通信系统中的实际应用。
1、SM4算法 SM4密码算法是一个分组算法,其算法设计简沽,结构有特点,安全高效。
数据分组长度为128比特,密钥长度为128比特。
加密算法与密钥扩展算法均采取32轮迭代结构。
SM4密码算法以字节8位和字节32位作为单位进行数据处理。
SM4密码算法是对合运算,因此解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
SM4密码算法结构 SM4算法的基本内容有以下几方面: 基本运算:SM4密码算法使用模2加和循环移位作为基本运算。
基本密码部件:SM4密码算法使用了S盒、非线性变换τ、线性变换部件L、合成变换T基本密码部件。
轮函数:SM4密码算法采用对基本轮函数进行迭代的结构。
利用上述基本密码部件,便可构成轮函数。
SM4密码算法的轮函数是一种以字为处理单位的密码函数。
加密算法:SM4密码算法是一个分组算法。
数据分组长度为128比特,密钥长度为128比特。
加密算法采用32轮迭代结构,每轮使用一个轮密钥。
解密算法:SM4密码算法是对合运算,因此解密算法与加密算法的结构相同,只是轮密铝的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
密钥扩展算法:SM4密码算法使用128位的加密密钥,并采用32轮法代加密结构,每一轮加密使用一个32位的轮密钥,共使用32个轮密钥。
因此需要使用密钥扩展算法,从加密密钥产生出32个轮密钥。
对称分组加密算法:处理固定大小的明文输入分组,且对每个明文分组产生同等大小的密文分组。
有DES(数据加密标准)和AES(高级加密标准)、3DES。
DES:1.DES算法是一种用56位密钥来加密分组长度为64位数据的对称密钥算法(实际上函数要求一个64位的密钥作为输入,但是第8、16、24、32、40、48、56、64 等8位是校验位,使得每个密钥都有奇数个1,所以参与加密过程的只有56位)。
2.DES算法的入口参数有三个:Key:8个字节共64位,是DES算法的工作密钥;Data:8个字节64位,是要被加密或被解密的数据;Mode:DES的工作方式,有两种:加密或解密。
3.DES的解密过程和加密相似,解密时使用与加密同样的算法,不过子密钥(见文中解释)的使用次序要反过来。
DES算法的组成:初始置换函数IP、子密钥Ki及获取、密码函数F、逆置换函IP-1。
DES的明文分组长度为64位(比特)。
初始置换函数IP接受长度为64位的明文输入,逆置换函数IP-1输出64位的密文。
在子密钥的获取过程中,通过密钥置换Pc-1获取从Kl到K16共16个子密钥,这16个子密钥分别顺序应用于密码函数的16次完全相同的迭代运算中。
求密钥:PC2的压缩置换:输入:56位;输出:48位。
加密明文:扩展运算E:32位的R0扩展成48位。
然后R0(t48)与密钥K1进行异或得到48位结果。
S盒:S盒接收6位的输出,经过置换输出4位的数据。
总共输入有:48位;输出有:32位,得到R0(S32)。
对R0(S32)进行置换运算P,得到R0(P32)。
将R0(P32)与L0进行XOR运算得R1(32位)。
R1(32位)与L1(32位)构成第一轮加密后的结果。
s盒是DES算法的核心,它是算法中唯一的非线性部分,是算法安全的关键;有8个s盒,每个s盒输入6位,输出四位,即输入48位,输出32位;输入的6位中的第一位和第六位表示行数,中间四位表示列数,找到s盒中对应的数值。
软考网络工程师资料本资料是对大家几次模拟考试后,总结出来的大家通常比较容易出错的几个知识点,在这里做了一个重点集合,以便大家复习,并且避免找不到自己的弱项在哪儿。
Linux1.网络配置文件网络配置文件(1)/etc/sysconfig/network文件。
用来指定服务器上的网络配置信息的文件,包含了控制和网络有关的文件和守护程序的参数NETWORK=yes/no:表示网络是否被配置。
HOSTNAME=hostname hostname:表示服务期的主机名.例如:GETEWAY=gw-ip:表示网络网关的IP地址。
例如:192.168.0.1FORWARD_IPv4=yes/no:是否开启IP转发功能GATEWAYDEV=gw-devgw-dev:表示网关的设备名称,如eth0等HOSTNAME=hostname:主机的全限定域名NISDOMAIN=dom-name:表示NIS(2)/etc/hostname文件。
包含Linux系统的主机名称,包括完全的域名。
(3)/etc/hosts文件。
(4)/etc/host.conf文件。
指定如何解析主机域名,Linux通过解析器库来获得主机名对应的ip地址。
(5)/etc/resolv.conf文件。
配置DNS客户,它包含了主机的域名搜索顺序和DNS服务器的地址。
(6)/etc/rc.d/init.d/network文件。
Linux系统可以通过直接编辑该文件内容进行网络主机地址,子网掩码和网关的参数的配置。
安装网卡在Linux中,第一块以太网卡设备名为eth0,以后依次为eth1,eth2等,但网卡并不能直接作为硬件裸设备出现于/dev下。
(1)网络接口设置命令ifconfig.ifconfig命令命令基本格式Ifconfig Interface-name ip-address up|down例如:[root@localhost ~]# ifconfig eth0 192.168.0.5 netmask 255.255.255.0 up (2)运行不带任何参数的ifconfig命令可以显示所有网络接口的状态。
常见的加密和解密算法—DES⼀、DES加密概述 DES全称为Data Encryption Standard,即数据加密标准,是⼀种使⽤的块算法,1977年被的国家标准局确定为(FIPS),并授权在⾮密级政府通信中使⽤,随后该算法在国际上⼴泛流传开来。
需要注意的是,在某些⽂献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。
DES⼊⼝参数DES算法的⼊⼝参数有三个:Key、Data、Mode。
其中Key为7个字节共56位,是DES算法的⼯作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的⼯作⽅式,有两种:加密或解密。
DES基本原则DES设计中使⽤了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其⽬的是抗击敌⼿对密码系统的统计分析。
混淆是使密⽂的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明⽂以及密⽂之间的依赖性对密码分析者来说是⽆法利⽤的。
扩散的作⽤就是将每⼀位明⽂的影响尽可能迅速地作⽤到较多的输出密⽂位中,以便在⼤量的密⽂中消除明⽂的统计结构,并且使每⼀位密钥的影响尽可能迅速地扩展到较多的密⽂位中,以防对密钥进⾏逐段破译。
DES与3DES的区别和联系3DES(即Triple DES)是DES向AES过渡的,它使⽤3条56位的密钥对数据进⾏三次加密。
是DES的⼀个更安全的变形。
它以DES为基本模块,通过组合分组⽅法设计出分组加密算法。
⽐起最初的DES,3DES更为安全。
该⽅法使⽤两个密钥,执⾏三次DES算法,加密的过程是加密-解密-加密,解密的过程是解密-加密-解密。
3DES加密过程为:C=Ek3(Dk2(Ek1(P))) 3DES解密过程为:P=Dk1(EK2(Dk3(C))) 采⽤两个密钥进⾏三重加密的好处有: ①两个密钥合起来有效密钥长度有112bit,可以满⾜商业应⽤的需要,若采⽤总长为168bit的三个密钥,会产⽣不必要的开销。
3、3DES3.1 概述3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。
它相当于是对每个数据块应用三次DES加密算法。
由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
3.2 算法原理使用3条56位的密钥对数据进行三次加密。
3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准)。
其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文,这样:3DES加密过程为:C=Ek3(Dk2(Ek1(P)))3DES解密过程为:P=Dk1(EK2(Dk3(C)))3.3 Java中的3DES实现3DES的在Java的实现与DES类似,如下代码为3DES加密算法、CBC模式、NoPadding 填充方式的加密解密结果,参考代码如下所示:package amigo.endecrypt;import java.security.InvalidKeyException;import java.security.Key;import java.security.NoSuchAlgorithmException;import java.security.Security;import java.security.spec.InvalidKeySpecException;import javax.crypto.Cipher;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESedeKeySpec;import javax.crypto.spec.IvParameterSpec;import org.bouncycastle.jce.provider.BouncyCastleProvider;public class ThreeDESUtil {// 算法名称public static final String KEY_ALGORITHM = "desede";// 算法名称/加密模式/填充方式public static final String CIPHER_ALGORITHM = "desede/CBC/NoPadding";/*** CBC加密* @param key 密钥* @param keyiv IV* @param data 明文* @return Base64编码的密文* @throws Exception*/public static byte[] des3EncodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exceptio n {Security.addProvider(new BouncyCastleProvider());Key deskey = keyGenerator(new String(key));Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);IvParameterSpec ips = new IvParameterSpec(keyiv);cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);byte[] bOut = cipher.doFinal(data);for (int k = 0; k < bOut.length; k++) {System.out.print(bOut[k] + " ");}System.out.println("");return bOut;}/**** 生成密钥key对象* @param KeyStr 密钥字符串* @return密钥对象* @throws InvalidKeyException* @throws NoSuchAlgorithmException* @throws InvalidKeySpecException* @throws Exception*/private static Key keyGenerator(String keyStr) throws Exception {byte input[] = HexString2Bytes(keyStr);DESedeKeySpec KeySpec = new DESedeKeySpec(input);SecretKeyFactory KeyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);return ((Key) (KeyFactory.generateSecret(((java.security.spec.KeySpec) (KeySpec))))); }private static int parse(char c) {if (c >= 'a') return (c - 'a' + 10) & 0x0f;if (c >= 'A') return (c - 'A' + 10) & 0x0f;return (c - '0') & 0x0f;}// 从十六进制字符串到字节数组转换public static byte[] HexString2Bytes(String hexstr) {byte[] b = new byte[hexstr.length() / 2];int j = 0;for (int i = 0; i < b.length; i++) {char c0 = hexstr.charAt(j++);char c1 = hexstr.charAt(j++);b[i] = (byte) ((parse(c0) << 4) | parse(c1));}return b;}/*** CBC解密* @param key 密钥* @param keyiv IV* @param data Base64编码的密文* @return明文* @throws Exception*/public static byte[] des3DecodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exceptio n {Key deskey = keyGenerator(new String(key));Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);IvParameterSpec ips = new IvParameterSpec(keyiv);cipher.init(Cipher.DECRYPT_MODE, deskey, ips);byte[] bOut = cipher.doFinal(data);return bOut;}public static void main(String[] args) throws Exception {byte[] key = "6C4E60E55552386C759569836DC0F83869836DC0F838C0F7".getBytes();byte[] keyiv = { 1, 2, 3, 4, 5, 6, 7, 8 };byte[] data = "amigoxie".getBytes("UTF-8");System.out.println("data.length=" + data.length);System.out.println("CBC加密解密");byte[] str5 = des3EncodeCBC(key, keyiv, data);System.out.println(new sun.misc.BASE64Encoder().encode(str5));byte[] str6 = des3DecodeCBC(key, keyiv, str5);System.out.println(new String(str6, "UTF-8"));}}测试结果如下所示:data.length=8CBC加密解密-32 6 108 42 24 -112 -66 -344AZsKhiQvt4=amigoxie加密解密在线测试网站的3DES可选择CBC模式,无填充方式选项,采用NoPadding填充方式,加密结果如下所示:ThreeDESUtil的测试代码中打印出的加密后的byte数组为:“-32 6 108 42 24 -112 -66 -34”,正是在线测试网站返回的十六进制“e0 06 6c 2a 18 90 be de”在Java中的十进制表示(Java中byte范围为:-128~127,所以超过127的数会被转换成负数)。
基本概念1、什么是拒绝服务攻击(DoS)?拒绝服务攻击并非某种具体的攻击方式,而是攻击表现出来的结果。
攻击者借助种种手段,最终严重损耗目标系统的内存和网络带宽,使得目标系统无法为合法用户提供正常服务,它是对网络可用性的攻击。
2、网络信息安全的定义是什么?需求(核心任务)包含哪几个基本方面?分别简单说明它们的含义。
(1)定义:研究信息获取、存储、传输以及处理领域的信息安全保障问题的一门新兴学科,是防止信息被非法授权使用、误用、篡改和拒绝使用而采取的措施。
(2)六大需求:·机密性:阻止未经授权的用户非法获取保密信息。
·完整性:在未经许可的情况下,保证数据不会被他人删除或修改。
·身份认证:用户要向系统证明他就是他所声称的那个人,目的是为了防止非法用户访问系统和网络资源。
·访问控制:限制主体对访问客体的访问权限,从而使计算机系统在合法范围内使用,防止非法用户的侵入或因为合法用户的不慎操作而造成的破坏。
·不可否认:通信方必须对自己行为负责,而不能也无法事后否认,其他人也无法假冒通信方成功。
·可用性:我们要求计算机或网络能够在我们期望它以我们所期望的方式运行的时候运行。
3.什么是PPDR安全模型?它包含哪几个部分的含义?(可配合图形描述)作为一种安全模型,它有哪几个方面的特点?(1)定义:PPDR安全模型是动态的自适应网络安全模型。
(2)四个组成部分:·策略(Policy):描述系统哪些资源需要保护以及如何实现保护;·防护(Protection):通过加密机制、数字签名机制、访问控制机制等实现;·检测(Detection):是动态响应和防护的依据,通过检测来发现网络和系统的威胁以及弱点,通过循环反馈来做出及时响应。
检测可以通过入侵检测系统,数据完整性机制和攻击性检测等手段来实现;·响应(Response):通过应急策略、应急机制、应急手段等实现。
三重DES与AES一三重DES 加密算法原理与实现1 DES 算法原理DES 是一种分组加密算法。
明文分组长度为64 位。
加密得到的密文分组长度为64 位。
密钥长度64 位,8 个字节。
每一个字节的最高位用于奇偶效验,所以有效密钥长度为56 位。
其分组加密过程描述如下:①子密钥Ki的生成。
②64 位的明文经过一个初始置换IP 后,被分成左右两半部分,每个部分32 位,以L0和R0表示。
③进行16 轮迭代变换:第i 轮变换将上一轮变换所得到的结果的右半部分与第i 个子密钥Ki结合,这个过程称为 f 函数。
第i 轮变换结果的左半部分为上一轮变换结果的右半部分(即:Li=Ri-1),其右半部分为上一轮变换结果的左半部与上一轮变换结果的右半部经过F 函数处理所的结果的异或:Ri=Li-1⊕F(Ri-1,Ki)。
④16 轮变换之后左右两部分再连接起来,经过一个初始逆置换IP-1得到密文。
DES 的解密算法与加密算法完全相同,只需要将密钥的应用次序与加密时相反应用即可。
即解密过程是初始置换函IP 数接受长度为64 比特的密文输入,将16 个子密钥按照K16到K1的顺序应用与F 函数的16 轮迭代运算中, 然后将迭代的结果经由末置换函数IP-1得到64 位的明文输出。
2 两个密钥的三重DES由于DES 密钥只有56bit,易于遭受穷举时攻击。
作为一种替代加密方案,Tuchman 提出使用两个密钥的三重DES 加密方法,并在1985 年成为美国的一个商用加密标准。
该方法使用两个密钥,执行三次DES 算法,如图 2 所示。
加密的过程是加密-解密-加密,解密的过程是解密-加密-解密。
采用两个密钥进行三重加密的好处有:①两个密钥合起来有效密钥长度有112bit,可以满足商业应用的需要,若采用总长为168bit 的三个密钥,会产生不必要的开销。
②加密时采用加密-解密-加密,而不是加密-加密-加密的形式,这样有效的实现了与现有DES 系统的向后兼容问题。
因为当K1=K2 时,三重DES 的效果就和原来的DES 一样,有助于逐渐推广三重DES。
③三重DES 具有足够的安全性,目前还没有关于攻破三重DES 的报道。
3 Java 语言编程实现DES 算法3.1 子密钥的生成1) PC-1 变换。
将原密钥的各位按照PC-1 矩阵重新排列,这一过程剔除了奇偶校验位。
PC-1 如下:57 49 41 33 25 17 91 58 50 42 34 26 1810 2 59 51 43 35 2719 11 3 60 52 44 3663 55 47 39 31 23 157 62 54 46 38 30 2214 6 61 53 45 37 2921 13 5 28 20 12 42) 将排好的密钥分成两部分,前面28 位为C0,后面28 位为D03) 从i=1 开始,循环执行16 次以下步骤得到16 个子密钥。
①对Ci-1 和Di-1 进行相同位数的循环左移,得到Ci 和Di 左移的位数为:i 取数值:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 移动数:1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1②连接Ci 和Di,按照矩阵PC-2 排列选择合适的位,构成子密钥Ki,该过程将56 位压缩到48 位,PC-2 如下:14 17 11 24 1 53 28 15 6 21 1023 19 12 4 26 816 7 27 20 13 241 52 31 37 47 5530 40 51 45 33 4844 49 39 56 34 5346 42 50 36 29 32③ i=i+1,转到①,直到生成16 个全部自密钥。
3.2 对64 位明文分组加密1) 取得64 位明文,不足补齐(补0)2) 对明文各位按照IP 矩阵进行排列,矩阵为:58 50 42 34 26 18 10 260 52 44 36 28 20 12 462 54 46 38 30 22 14 664 56 48 40 32 24 16 857 49 41 33 25 17 9 159 51 43 35 27 19 11 361 53 45 37 29 21 13 563 55 47 39 31 23 15 73) 将得到的结果分为左右各32 位两部分,称为L0, R04) 从i=1 开始,循环执行16 次下列的加密过程①按照下面矩阵E 将32 位的Ri-1 扩展为48 位,所得结果称为E(Ri-1),E 阵为:32 1 2 3 4 54 5 6 7 8 98 9 10 11 12 1312 13 14 15 16 1716 17 18 19 20 2120 21 22 23 24 2524 25 26 27 28 2928 29 30 31 32 1②将E(Ri-1)和Ki 按位异或③将所得结果分为8 个部分,每个部分6 位,形成B[1],…B[8]④ S 盒替代。
S 盒是8 个子矩阵,称为S[1],….S[8],替代如下:将B[i]的第1 位和第6 位组成一个数称为R,第2、3、4、5 位组成一个数称为C,用S[i]中对应的(R,C)中的4 位数替换B[i],这样就将原来的48 位替换成32 位。
⑤ P 盒置换,按照下面的矩阵重新排列上面的结果16 7 20 2129 12 28 171 15 23 265 18 31 102 8 24 1432 2 3 919 13 30 622 11 4 25⑥将上一步处理的结果与Li-1 按位异或,得到新的Ri,该过程可以简单记为:Ri=Li-1⊕F(Ri-1,Ki)⑦ i=i+1 转④的第一步,直到完成16 次循环⑧进行IP-1 置换,将上面得到的L16R16 按照下面的矩阵进行置换:40 8 48 16 56 24 64 3239 7 47 15 55 23 63 3138 6 46 14 54 22 62 3037 5 45 13 53 21 61 2936 4 44 12 52 20 60 2835 3 43 11 51 19 59 2734 2 42 10 50 18 58 2633 1 41 9 49 17 57 25加密过程结束,解密过程是用K16,K15,…..K13.3 DES 算法的伪代码表示C[0]d[0]=PC1(KEY)FOR I=1 TO 16C[I]=LS[I](C[I-1])D[I]=LS[I](D[I-1])K[I]=PC2(C[I]D[I])L[0]R[0]=IP(PLAIN BLOCK)FOR I=1 TO 16L[I]=R[I-1]R[I]=L[I-1] ⊕F(R[I-1],K[I])CIPHER BLOCK=FP-1(L[16]R[16])4 算法安全性分析DES 算法具有相当高的复杂性, 密码函数F 的非线性性质非常好, 起到的“ 扰乱” 效果非常显著, 并且还遵循了严格雪崩准则和比特独立准则, 这使得要破译它的开销要超过可能获得的利益。
再加上其便于理解掌握,经济有效, 因此, 得到了广泛的应用。
算法具有极高的安全性, 到目前为止, 除了用穷举搜索法对算法进行攻击外, 还没有发现更有效的办法。
而56 位长的密钥的穷举空间为256, 这意味着如果一台计算机的速度是每一秒种检测一百万个密钥, 则它搜索完全部密钥就需要将近2300 年的时间。
而采用三重DES,破译它就更可想而知了。
当然, 这并不等于说是不可破解的。
而实际上, 随着硬件技术和网络的发展, 其破解的可能性越来越大, 而且, 所需要的时间越来越少。
DES 算法的有效密钥长度为56 位,因此,在实际应用中,我们应避开使用第8,16,24, (64)位作为有效数据位,才能保证DES算法安全可靠地发挥作用。
如果不了解这一点,将不能保证DES 加密数据的安全性,对运用DES 来达到保密作用的系统产生数据被破译的危险,这正是DES 算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。
二AES算法1 AES算法描述在原始的Rijndael算法中,明文分组长度和密钥长度均能被指定为128位、192位和256位.在高级加密标准规范中,明文分组长度只能是128位,密钥长度可以使用128位、192位、256位中的任意一种.AES是一个轮迭代的分组密码,每一圈包括字节替换(BS)、行移位(SR)、列混合(MC)、轮密钥加(ADK);根据密钥长度,AES有Nr=10,12,14轮,明文分组用以字节为单位,每2个字节(16位)结合,形成正方形矩阵,称为状态矩阵,在算法的每一轮中,状态矩阵的内容不断发生变化,最后的结果作为密文输出.如果密钥长度为128位,迭代轮数位10轮,则通过密钥编排程序,将128位的初始密钥扩展成1408位的新密钥,每32位结合,称为1个字,新密钥被分为44个字,前4个字是最初的初始密钥加,后40个字分别用于10轮加密运算的轮密钥加.1.1字节替换这个步骤很简单,通过一个已定义的替换表来完成.AES定义了一个S盒来实现加密变换,同时设计了一个逆S盒来实现解密变换.逆S盒是S盒的逆操作.AES的S盒置换表是由下列运算得来的:(1)初始化S盒,将第m行n列的元素初始化为0xmn.(2)将S盒中的每个字节映射为它在有限域GF(28),AES使用Z2[x]上的不可约多项式m(x)=x8+x4+x3+x+1来构造(28).(3)将S盒中的一个元素按位记为(a7a6a5a4a3a2a1a0),接着,对S盒中的每个字节中的每个位作如下的变换:bi=ai⊕a(i+4)mod8⊕a(i+5)mod8⊕a(i+6)mod8⊕a(i+7)mod8⊕ci.其中ci是值为0x63的字节的第i位,即(c7c6c5c4c3c2c1c0)=(01100011).最终得到矩阵B.1.2行移位经过字节代换后的信息仍然是一个正方形矩阵,4行4列,每个单元1个字节共8位,一共是128位.B的行通过循环左移进行置换;第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节.这使得矩阵的列进行了重新排列,在移位后的每列中,都包含有未移位前每列的一个字节.最终得到矩阵C,其仍是4行4列,每个单元1个字节共8位,一共是128位.1.3列混合这个步骤是对C的列进行复杂转换,每一列的4个元素与一个多项式相乘,并将这一列的每一个元素扩散到这一列的全部4个元素.1.4轮密钥加轮密钥加是将128位的轮密钥Ki同状态中的数据进行逐位异或操作,扩展密钥只参与了这一个变换,根据加密的轮数用相应的扩展密钥的四个数据项和中间状态矩阵上的列进行按位异或.最终形成加密后的密文E,与明文位数相同.需要注意的是,在进行第1轮操作之前,首先进行一次轮密钥加,使用的密钥是w [0,3],接着进行第1轮的字节代换,行位移,列混合,轮密钥加,使用的密钥是w[4,7],接着进行第2轮操作…,最后一轮操作只有3步:字节代换,行位移,轮密钥加,使用的密钥是w[40,43],并不再进行列混合操作.2 密钥扩展程序AES的密钥扩展工作是将初始密钥扩展为44个字组成的新序列,其中每个字为32位,分别记为w[0],w[1],w[2],w[3],…,w[43].AES首先将密钥输入到一个4*4矩阵中,每一列的4个字节组成一个字,矩阵4列中的4个字依次命名为w[0],w[1],w[2],w[3],它们构成了一个以字为单位的数组w.接着对w进行扩充,构成40个新列,构成总共44列的扩展密钥数组.新列是以递归的方式产生的,具体原则是:如果i不是4的倍数,使用w[i]=w[i -4]⊕w[i-1]方程式,如果i是4的倍数,使用w[i]=w[i-4]⊕T(w[i -1])方程式.T是一个复杂的函数,由3个部分组成:字循环,字节代换和轮常量异或.字循环是将1个字中的4个字节循环左移1个字节.字节代换将字循环的结果使用S盒进行字节代换,这里使用的S盒与加密过程中的字节代换S盒是一致的.轮常量异或是将前两步的结果同轮常量Rcon[j]进行异或,其中j 表示轮数.经过以上步骤的运算,最终产生44个字组成的新密钥,其中w[0],w[1],w[2],w[3]是原始密钥,用以在第一轮加密操作之前对明文进行加密,后40个字组成10组密钥,在每轮加密过程中作为轮密钥使用.3 AES的解密由于AES算法没有使用Feistel结构,因此AES的解密操作与DES算法不同.AES 算法的解密需要使用相应变换的逆向变换,并且各个变换的使用顺序也不一样,首先对密文使用w[40],w[41],w[42],w[43]进行轮密钥加,然后进行第1轮的解密,分别为逆行移位,逆字节代换,轮密钥加和逆列混合,直到倒数第2轮的解密,最后1轮操作只有3步:逆行位移,逆字节代换,使用w[0],w [1],w[2],w[3]进行轮密钥加.这使得对AES的解密需要两个不同的软件和硬件模块.3.1逆行位移逆行位移操作将密文分组为4*4矩阵,对矩阵进行循环右移操作.状态矩阵的第0行右移0字节,第1行右移1字节,第2行右移2字节,第3行右移3字节,最终结果仍然是一个矩阵.行移位就是将某个字节从一列移到另一列中,它的线性距离是4字节的倍数,同时这个转换确保了某列中的4字节被扩展到了4个不同的列.3.2逆字节代换AES构造了一个逆S盒,解密时需要查找逆S盒.逆S盒的构造如下:(1)初始化逆S盒,将第m行n列的元素初始化为0xmn.(2)将逆S盒中的一个元素按位记为(a7a6a5a4a3a2a1a0),接着,对逆S盒中的每个字节中的每个位作如下的变换:bi=a(i+2)mod8⊕a(i+5)mod8⊕a(i+7)mod8⊕di.(3)将逆S盒中的每个字节映射为它在有限域GF(28).3.3轮密钥加解密过程中使用的轮密钥同加密中的相同,但是其每轮使用的轮密钥加是逆向的,也就是说,加密过程中第1轮之前使用的是w[0],w[1],w[2],w[3],解密过程中第1轮之前使用的是w[40],w[41],w[42],w[43].加密第1轮使用的是w[4],w[5],w[6],w[7],解密第1轮使用的是w[36],w [37],w[38],w[39],依次类推,加密最后1轮使用的是w[40],w[41],w[42],w[43],解密最后1轮使用的是w[0],w[1],w[2],w[3].3.4逆列混合这个步骤中每一列的4个元素与一个多项式相乘,并将这一列的每一个元素扩散到这一列的全部4个元素.逆变换矩阵同正变换矩阵的乘积恰好为单位矩阵.AES被开发用于取代目前使用的数据加密标准算法,AES将是比3重DES更安全,更有效的算法.它将是21世纪联邦信息处理标准,它指定的算法能够用来保护秘密的政府信息,同时AES也将会在全世界范围内被政府以外的组织、机构和个人应用于身份验证与授权、数字签名、电子商务等领域.。