作者:soledad
发布时间:2018年2月28日
网络来源:SegmentFault
首先说一下,本文不是原创,而且文字较多,如果以前你根本就没有听说过这些名词,我建议你不要看这个,因为看了也是看不懂,不如找一下阮一峰的博客,他采用类比法来讲解这些名词,更加容易懂,这不是开玩笑的
非对称密钥加解密
对于一份数据,通过一种算法,基于传入的密钥(一串由数字或字符组成的字符串,也称key
),将明文数据转换成了不可阅读的密文,这就是“加密”,同样的,密文到达目的地后,需要再以相应的算法,配合一个密钥,将密文再解密成明文,这就是“解密”。
如果加密和解密使用的是同一个密钥,那么这就 是“
对称密钥加解密
”(最常见的对称加密算法是DES
)。如果加密和解密使用的是两个不同的密钥,那么这就是“非对称密钥加解密
”(最常用的非对称加密算 法是RSA
)。
这两个不同的密钥一个叫作公开密钥(publickey
)另一个叫私有密钥(privateke
y),公开密钥对外公开,任何人均可获取, 而私有密钥则由自己保存,其实公钥和私钥并没有什么不同之处,公钥之所以成为公钥是因为它会被公开出来,产生任意份拷贝,供任何人获取,而只有服务主机持有唯一的一份私钥,从这种分发模式上看,我们不难看出其中的用意,这种分发模式实际上是web
站点多客户端(浏览器)与单一服务器的网络拓扑所决定的,多客户端意味着密钥能被复制和公开获取,单一服务器意味着密钥被严格控制,只能由本服务器持有,这实际上也是后面要提到的之所以能通过数据证书确定信任主机的重要原因之一。
如果我们跳出web
站点的拓扑环境,其实就没有什么公钥与私钥之分了,比如,对于那些使用以密钥为身份认证的SSH
主机,往往是为每一个 用户单独生成一个私钥分发给他们自己保存,SSH
主机会保存一份公钥,公钥私钥各有一份,都不会公开传播。
数字摘要
这个非常简单,我们在下载文件的时候经常会看到有的下载站点也提供下载文件的“数字摘要
“,供下载者验证下载后的文件是否完整,或者说是否和服务器上的文 件”一模一样
“。其实,数字摘要就是采用单项Hash
函数将需要加密的明文“摘要
”成一串固定长度(128位
)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,儿同样的明文其摘要必定一致。 因此,“数字摘要“叫”数字指纹“可能会更贴切一些。“数字摘要“是https
能确保数据完整性和防篡改的根本原因。
数字签名
让我们来看看有了“
非对称密钥加解密
”和“数字摘要
“两项技术之后,我们能做些什么呢?
假如发送方想把一份报文发送给接收方,在发送报文前,发送方用一个哈希函数从报文文本中生成报文摘要,然后用自己的私人密钥对这个摘要进行加密,这个加密后的摘要将作为报文的”签名
“和报文一起发送给接收方,接收方首先 用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认报文是从发送方发送且没有被遗漏和修改过!这就是结合“非对称密钥加解密
”和“数字摘要
“技术所能做的事情,这也就是人们所说的“数字签名
”技术。在这个过程中,对传送数据生成摘要并使用私钥进行加密地过程就是生成”数字签名
“的过程,经过加密的数字摘要,就是人们所说的”数字签名“!
数字签名技术就是对“非对称密钥加解密
”和“数字摘要
“两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过 程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。(注意,数字签名只能验证数据的完整性,数据本身是否加密不属于数字签名的控制范围)
综上所述,数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。
数字证书
只从”准确认证发送方身份
“和”确保数据完整性
“两个安全方面来看,数字签名似乎已经完全做到了,还有漏洞存在的可能么?有,漏洞不在数字签名技术本身, 而在它所依赖的密钥.
只有密钥是真实可靠的前提下,使用数字签名才是安全有效的。考虑这种可能的情况:在上述发送方向接收方传送报文的例子中,如果发送方所持有的公钥来路有问题或是被替换了,那么,持有对应私钥的冒充接受方就有可能接收到发送方发送的报文。
这里的问题就是:对于请求方来说,它怎么能确定它所得到的公钥一定是从目标主机那里发布的,而且没有被篡改过呢?亦或者请求的目标主机本本身就从事窃取用户信息的不正当行为呢?这时候,我们需要有一个权威的值得信赖的第三方机构(一般是由政府审核并授权的机构)来统一对外发放主机机构的公钥,只要请求方这种机构获取公钥,就避免了上述问题的发生。这种机 构被称为证书权威机构(Certificate Authority, CA
),它们所发放的包含主机机构名称、公钥在内的文件就是人们所说的“数字证书
”。
数字证书的颁发过程一般为:用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构 获得您自己的数字证书。
关于数字签名与数字证书的解释和差异,这里有一篇非常优秀的文章,介绍得浅显易懂:
中文译文:http://www.cnblogs.com/heart-…
SSL
当所有上面提及的技术介绍完之后,我们需要把它们统一起来应用于实际的网络安全传输了,因此,人们制定了一套协议,来定义有关的方方面面,这个协议就是 SSL。SSL建立通信的过程分为两个阶段:握手阶段和传输阶段,关于握手机制,在此不再赘述,网上有非常细致的介绍,此处仅贴出一张简单的示意图:
值得特别提出的是:SSL协议
在握手阶段使用的是非对称加密,在传输阶段使用的是对称加密,也就是说在SSL
上传送的数据是使用对称密钥加密的!这并不奇怪,因为非对称加密的速度缓慢,耗费资源。其实当客户端和主机使用非对称加密方式建立连接后,客户端和主机已经决定好了在传输过程使用的对称加密算法和关键的对称加密密钥,由于这个过程本身是安全可靠的,也即对称加密密钥是不可能被窃取盗用的,因此,保证了在传输过程中对数据进行对称加密也是安全可靠的, 因为除了客户端和主机之外,不可能有第三方窃取并解密出对称加密密钥!
本文原文连接:http://blog.csdn.net/bluishgl…