经常见到RSA、MD5、SHA系列算法,另外还有数字摘要、数字签名、数字证书等名词,以及对称加密与非对称加密。他们之间到底是什么关系呢?下面就通过这篇文章来梳理一下。
一、加密算法
加密算法,简而言之就是一种能够把原始内容加密,然后再解密获得原始内容的算法。
加密算法可以划分为如下两类:
1.对称加密
对称加密可以理解为加密与解密都使用同一套算法(即密钥)。
上图是一个经典对称加密算法。采用字母移位的办法对原始字符串进行转换,解密时再根据之前的移位,转换为原始字符串。可以根据此种算法,设计一个密码机,输入移位n,自动进行编码与解码。
在谍战电视剧中经常出现你争我抢的密码本,加密与解密双方使用同一个密码本对要传递的内容进行加解密,这也是一种对称加密算法。
对于对称加密在实际使用中的问题,可以通过如下样例来说明。
假如淘宝网的登录密码传输部分使用的是对称加密算法。此时,张三、李四、还有王五同学需要访问淘宝。那么,服务器就需要生成3个不同的密钥,比如张三的密钥为移5位,李四的密钥为移6位。如果全部都用一个密钥,显然张三用自己的密钥可以解密其它人加密后的密码。对于服务器来讲,有多少个用户就得维护多少组密钥,这样做显然是不合理的。
- 常用的对称加密算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。
- 百度百科:对称加密
2.非对称加密
针对于对称加密存在的问题,使用非对称加密即可完美的解决。
由上图可以看出,左侧的对称加密为A、B、C、D四个用户分别分配了一个密钥,而右侧的非对称加密(也叫公开密钥加密技术)为A、B、C、D四个用户分配了相同的密钥。
非对称加密的密钥分为公钥
和私钥
,其中公钥和私钥都可以加密与解密。特别的是,公钥所加密的内容只有私钥能够解密。这样,对于服务器来讲,只需要把公钥分发给所有客户,自己保存好私钥即可。
- 常用的非对称加密算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
- 百度百科:非对称加密
二、摘要算法
首先需要指明的是,摘要算法不属于加解密算法。
对摘要两字可以理解为对信息主体的浓缩。这种浓缩是一个不可逆的过程。
可以在这些地方使用摘要算法:明文密码取摘要后把摘要存入数据库、文件断点续传与秒传(用文件摘要确定唯一性)、不在网络中传输密码(密码做摘要后传输,在服务器端取出密码用相同的摘要算法计算摘要后再跟客户端传过来的摘要比对)
- 常用的摘要算法有:MD5、SHA1、SHA256、SHA384、SHA512
- 百度百科:摘要算法
三、数字签名
数字签名可以理解为摘要算法
与非对称加密
的综合使用。
数字签名可以对应为经常见到的骑缝章(经常有人喜欢把名字写在书的侧面)。数字签名需要说明是谁编写的报文,同时证明报文未被篡改过。
通过上图,可以清楚的看出,使用摘要算法
来证明报文未被篡改过,使用非对称加密
来说明是谁写的报文。
百度百科:数字签名
四、数字证书
我们可以通过非对称加密可以解决报文裸奔的问题。
试想,有这么一个场景,服务器A分发一个公钥给客户端B,正常情况下很OK。此时A和B之前有个中间代理C,A和B之间的所有数据传输都要经过C来中转。C被黑客控制,C把自己的公钥发给B(B误以为是A的),C收到B传输给A的消息,先用自己的私钥解密,获得明文。然后用A的公钥加密密文再转发给A。
这里就牵涉到一个问题,B怎么确定收到的公钥的确是A的,而不是别人伪造的?现实中的身份证,要想确定身份证是否是真实的,去权威机构(也就是公安局)查一下就行了。
数字证书也是这个原理,需要一个权威机构来颁发。以此来证明这个公钥到底是谁的。
上图是百度的数字证书,详细标明了颁发者、使用者、有效期、加密算法等信息。
资料:“数字签名”(digital signature)和"数字证书"(digital certificate)到底是什么?
My Blog:http://muchstudy.com
不讲欧拉函数和取模运算是说不清楚rsa的加密解密过程的 单项散列算法也不唯一,存在多对一情况 量子通信才是现阶段绝对的信道安全
@CarlosRen 的确是这样的,摘要算法从理论上就做没办法做到唯一性,实际上通过碰撞,即使两个不同内容的文件也能产生相同的摘要,记得很早之前百度网盘就有这么一个bug。写这篇帖子的目的是希望把目前HTTP安全相关的东西归类整理一下,形成一棵树后方便大脑存取。另外,有了这棵树可以更方便的丰富叶子。所以,没有讨论RSA加密解密算法实现数学原理以及摘要算法存在的问题。
逼气四姨
感谢分享
多谢楼主,正需要~
@albert 推荐图解密码技术一书,思维导图整理一下书的目录,思路要全面一些
@CarlosRen 搜了一下,这书刚出第三版,看了一下目录,的确是满满的干货,抽空弄来看看
@albert 我画的不太好,但是基本的根是根据属性来建立,技术只是应对威胁的表象,不要陷进去
@CarlosRen 从更实用的角度去分类,学习了