Abstract:本篇文章介绍密码学中的重要内容。首先是加解密算法,总体分为对称加密算法和非对称加密算法,这两者的区别在于对称加密算法用一个秘钥进行加密解密,通信双方需要协商秘钥,Diffle-Hellman协议便是用于对称加密体制中的秘钥协商的,而非对称加密算法用不同的秘钥进行加解密。对称加密算法又分为流密码和分组密码,两者的区别在于是否对明文分进行分组加密。流密码的代表是RC4,分组密码有DES和AES,DES的加解密过程要经过16轮Feistel 结构,AES的加解密过程要经过字节代换,行位移,列混合等等。对称加密双方要协商秘钥,秘钥管理压力很大,因此引入了非对称加密。非对称加密的代表是RSA和ECC算法,RSA是基于大整数分解困难问题,ECC基于椭圆曲线离散对数问题,相较与RSA而言,ECC的秘钥更短,更适用于公交卡等小容量的硬件设施。第二个部分讲到散列函数,密码学中的散列函数与数据结构中的散列函数有所不同,安全的散列函数要求有三个特点:第一单向性,强无碰撞性,压缩性。目前主流的散列函数有MD5,SHA-0,SHA-1等。第三个部分介绍了基于散列函数的数字签名,它的作用是为了进行身份认证以及保护数据的完整性。数字签名算法有RSA和DSS,RSA是一种既可以用于加密又可以用于签名的算法,DSS算法基于离散对数困难问题。最后一个部分介绍了数字证书,其目的是保证公钥不会被冒充。
目录
加解密算法
1.对称加密
- 对称加密模型中,加密解密使用同一个秘钥,类别有流密码和分组密码。
- 1.流密码:一次一密,逐比特加密
- RC4:秘钥调度算法+伪随机密码生成算法
- 2.分组密码:对明文进行分组加密
- DES:循环 16 轮的 Feistel 结构, 明文分组长度和初始密钥长度都是 64 位
- AES:字节代换+行位移+列混合+轮秘钥加
- Diffle-Hellman秘钥交换协议:基于对称加密算法,在互联网上为发送方和接收方协商一个秘钥。
- 对称加密的弊端:秘钥分发繁杂,花费的代价高,多人通信时,需要消耗大量的秘钥。
2.非对称加密:
非对称加密至的是加密解密使用不同的秘钥
RSA算法:基于大整数分解困难问题
ECC算法:基于椭圆曲线离散对数的困难问题,与大整数分解问题相比,椭圆曲线离散对数问题要困难很多,ECC的特点是秘钥短(秘钥短的好处),安全性高。
散列算法
散列函数是最常见的一种加密方式,具有代表性的散列算法有:MD4,MD5,SHA-0,SHA-1
- 散列函数的性质
- 强无碰撞性:两个不停的变量一定对应两个不同的hash函数值
- 单向性:由自变量求函数值容易,由函数值反求自变量很难
- •散列函数可将任意长度的比特串映射到一个定长的比特串(摘要,指纹)
构造安全的hash函数是一件很困难的事情!
数字签名
数字签名的作用:用于确认发送者的身份和保护数据完整性
- 过程:比较两个消息摘要是否相等!
- A通过hash函数生成一个消息摘要
- A用自己的私钥给消息摘要加密生成数字签名
- A发送数字签名和消息
- B用A的公钥处理数字签名得到消息摘要(能用A的公钥解开说明消息确实是A发送的
- B通过hash对消息计算生成消息摘要
- B对比这两个消息摘要,一个是公钥解密数字签名得到的消息摘要,一个是直接对消息hash得到的消息摘要,如果一样说明数据没有被篡改,这时候接收数据。
- 前面算法:
- RSA(RSA既可以用来非对称加密,也可以用来做数字签名)
- DSS(只能用来签名,不能用来加密),基于离散对数困难问题
数字证书
- 数字证书的作用:确定公钥没有被伪造,证明公钥和发送方的绑定关系
- 认证中心(CA):具有公信力的机构,我发送方提供数字证书
-
数字证书的生成:
-
A将自己的身份信息和公钥发送给认证中心CA
-
CA将A的身份信息和公钥生成一个用CA的私钥加密的数字签名,并组合成一个数字证书给A
-
- 数字证书的使用:
- A在发送时,将自己的证书附在信件后面
- B收到后,先将证书中的数字签名取下来用CA的公钥解密,得到消息摘要,用hash函数对其他信息进行运算得到另一个消息摘要,对比两个消息摘要,如果相同说明公钥确实是A的。