1.1 背景知识

对称加密:加密解密使用同一密钥,加解密速度快。随着人数增多,密钥数量急增n(n-1)/2

非对称加密:使用公私钥配对加解密,速度慢。公钥是从私钥中提取出来的,一般拿对方公钥加密来保证数据安全性,拿自己的私钥加密来证明数据来源的身份。

单向加密:不算是加密,用于生成独一无二的校验码(也称为指纹、特征码)保证数据的完整性和一致性。如MD5,SHA。具有雪崩效应,任何一点数据的改变,生成的校验码值变化非常大。

互联网数据安全可靠的条件:

1.数据来源可信。即数据发送者身份可信。

2.数据具备完整性。即数据未被修改过。

3.数据安全性。即数据不会被泄漏,他人截获后无法解密。

1.2 互联网数据加密的细节

对数据加密的方法有三种:对称加密、私钥加密和公钥加密。三种方法只靠其中任意一种都有不可容忍的缺点,因此考虑将它们结合使用。

考虑这三种加密算法的特性,公私钥加密速度慢,对称加密快,所以可以首先对数据部分使用对称加密。再进一步考虑,公钥大家都可以获取,所以使用自己的私钥加密的数据被截获后直接就被破解,因此使用对方的公钥加密,但是公钥加密慢,所以只对对称密钥部分加密。

解密时使用自己的私钥解密第一层得到对称密钥后加密的数据,再使用对称密钥解密即可获得最终数据。

如下图所示分别是加密和解密的全过程。

加密的方法很多,但是上述方法是综合考虑互联网安全后成熟的加密方法。

使用上述方法加密保证了数据的安全性,但是还未保证数据的完整性、一致性以及数据来源的可靠性。

1.3 互联网数据签名的细节

在保证了数据的安全性后,还需要保证数据的完整性、一致性以及数据来源的可靠性。

对于数据的完整性和一致性,使用单向加密算法,通过hash函数计算出数据独一无二的校验码,这个校验码称为“信息摘要(Message Digest)”。

对于数据来源可靠性,使用自己的私钥加密即可验证身份,因为获得数据后使用公钥不能解密的就证明数据不是配对私钥加密的。但是私钥加密速度慢,所以只用私钥加密摘要信息,加密后的摘要信息称为“数字签名(Signature)”。

用户获得签名后的数据首先使用数据来源方的公钥解密,这样获得了数据和信息摘要部分,并确认了数据来源的可靠性。由于这时候数据部分是没有被加密的,所以用户也可以使用同种单向加密算法计算出摘要信息,然后对比来源方的摘要信息和自己生成的摘要信息,如果相等则证明数据完全未被修改过,是完整一致的。

因此只要使用数字签名就能保证数据来源的可靠性、数据的完整性和一致性。

如图所示分别是数字签名和确认数据的全过程。

1.4 互联网数据安全传输的细节

要在互联网上安全传输数据,要保证数据来源可靠、数据原始未被修改过、数据丢失不泄密。

如果数据传输双方张三和李四不在意数据丢失的泄露性,那么可以不对数据进行加密,只要数字签名即可,即使被中间人王五截获了甚至截获后修改一番再发送给李四也无所谓,因为李四可以根据数字签名验证数据的来源及数据的完整性,发现被修改后大不了不用了。现在互联网上提供下载的软件就是这种机制,不管软件是否被截取,只要安装者能验证即可。

但是如果在意数据泄漏呢?就需要将数字签名和加密结合起来使用。有两种方案:1.先对数据加密,再对加密后的整体进行数字签名2.先对数据进行数字签名,再对签名后的整体进行加密。

在互联网上基本使用第二种方法,用户最终只对数据部分进行校验而不对加密后的数据进行校验。具体细节如下:首先进行数字签名,再使用对称加密加密签名后的整体,然后使用对方的公钥只加密对称密钥部分。这样即保证了加密速度,还保证了数据的安全性、可靠性和完整性。

解密时反向进行即可。如图所示。

但是这时还有一个漏洞,问题出在数字签名过程中私钥加密以及后面公钥解密的不安全性。图中李四在拿公钥A解密的时候,这个公钥A真的是张三的公钥吗?也许张三传输公钥给李四的过程中被王五截断,王五声称自己是张三并把自己的公钥给了李四,然后王五用自己的私钥对木马程序进行签名,进行对称加密后再使用李四的公钥加密,最后传输给李四,这样一来李四对木马程序是完全信任的。

如何解决这个漏洞呢?只要保证李四获得的公钥A真的是来源于张三即可,如何保证呢?互联网之下,数据传输的两端可能谁都不认识谁,谁也不相信谁,所以最终还是依靠公益性的第三方组织——CA。

1.5 CA、PKI以及信任CA

CA是数字证书颁发机构,申请者提交自己的公钥和一些个人信息(如申请者国家,姓名,单位等)给CA,CA对申请者的这些信息单向加密生成摘要信息,然后使用自己的私钥加密整个摘要信息,这样就得到了CA对申请者的数字签名,在数字签名上再加上CA自己的一些信息(如CA的机构名称,CA层次路径等)以及该证书的信息(如证书有效期限),就得到了所谓的数字证书。

过程如下图。

如果某用户信任了该CA,就获取了该CA的公钥(实际上信任CA的其中一个作用就是获取CA公钥),使用该公钥解密数字证书就可以验证申请者的信息以及申请者公钥的可靠性(申请者的公钥只被CA的私钥加密,解密该私钥后只是需要验证可靠性)。

这里的关键是CA使用自己的私钥给申请者加密,那么如何保证CA是可信并且合法的呢?根CA是通过自签署数字证书的方式标榜自己的可信性和合法性,第一级子CA由根CA颁发合法数字证书,第二级直至所有的子CA都由上一级子CA颁发数字证书。对于多级子CA只需要信任根CA即可,因为获取了根CA的公钥,可以解密第一级子CA的证书并获取验证第一级子CA的公钥,层层递进,最终获取到为申请者颁发数字证书的机构并获取它的公钥。

正是这些根CA和子CA组成了PKI。

信任CA后,每次接收到需要解密传送过来的数字证书时,还要去该颁发机构指定网站的证书吊销列表(CRL)中查询该证书是否被吊销,对于吊销后的证书应该不予以信任,这是信任CA的第二个作用。导致证书被吊销的可能性不少,例如申请者的私钥被黑客获取,申请者申请吊销。

1.6 数字证书类型和内容

PKI的两种实现方式TLS和SSL使用的证书格式都是x509,TLSv1和SSLv3基本等价,只不过SSL实现在OSI 4层模型中的应用层和传输层的中间,TLS实现在传输层。

还有PKI的另一种实现方式GPG使用的不是x509。

数字证书中包含的信息有:申请者的公钥,证书有效期,证书合法拥有人,证书如何被使用,CA的信息,CA对申请者信息的数字签名。

1.7 SSL握手机制

有了CA颁发的数字证书后,通信机制就和下图的机制完全不同了。

上图中每一段数据都签名加密,有了数字证书后实际上已经验证了身份,不需要每一段数据都签名,这能提升效率。在上图中的漏洞是无法确认获取的公钥A是否可信,有了数字证书后已经能够确认公钥A是可信的。但问题是公钥A本来是用来解密数字签名的,有了数字证书后不需要数字签名了,那公钥A不是多余的吗,如果多余,那把公钥A交给CA是不是也是多余的呢?

不多余,因为SSL的握手机制和数字签名机制完全不同。以下是单向验证机制,只验证服务端。

第一步:Visitor给出协议版本号、一个客户端随机数(Client random),以及客户端支持的加密方法。

第二步:Server确认双方使用的加密方法,以及一个服务器生成的随机数(Server random)。

第三步:Server发送数字证书给Visitor。

第三步:Visitor确认数字证书有效(查看证书状态且查询证书吊销列表),并使用信任的CA的公钥解密数字证书获得Server的公钥,然后生成一个新的46字节随机数(称为预备主密钥Pre-master secret),并使用Server的公钥加密预备主密钥发给Server。

第四步:Server使用自己的私钥,解密Visitor发来的预备主密钥。

第五步:Visitor和Server根据约定的加密方法,使用前面的三个随机数(客户端随机数+服务端随机数+预备主密钥)生成对称密钥——主密钥(也称为对话密钥session key),用来加密接下来的整个对话过程。

第六步:之后所有的数据只需要使用“对话密钥”加密即可,不再需要多余的加密机制。

注意:

1.在SSL握手机制中,需要三个随机数(客户端随机数+服务端随机数+预备主密钥);

2.至始至终客户端和服务端只有一次非对称加密动作——客户端使用证书中获得的服务端公钥加密预备主密钥。

3.上述SSL握手机制的前提单向验证,无需验证客户端,如果需要验证客户端则可能需要客户端的证书或客户端提供签名等。

Server和Visitor通信,Server把数字证书发给Visitor,最关键的一点是Visitor要保证证书的有效性,通过查看证书状态并去CA的吊销列表查看Server的证书是否被吊销。只有Server的证书可用了,才保证了第一环节的安全性。

可以看出,使用SSL比前文介绍的“数字签名+加密”简便多了,将身份验证和密钥生成在会话的开始就完成了,而不需要每次的数据传输过程中都进行。

加密和ssl机制细节的更多相关文章

  1. python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题

    python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题 一丶爬虫概述       通过编写程序'模拟浏览器'上网,然后通 ...

  2. 加密、签名和SSL握手机制细节

    openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.1 背景知识 对称加密     :加密解密使用同一密钥,加解密速度快.随 ...

  3. TCP和TLS/SSL会话细节

    TCP数据段格式说明TCP建立连接和断开连接细节Https如何保证通信安全一次Https网络请求通信细节网络数据包分析工具wireshark的使用问题:SYN.ACK.FIN具体含义是什么?TCP建立 ...

  4. 加密传输SSL协议7_SSL协议概述

    SSL(Secure Sockets Layer) SSL的功能,可以在通信的双方中建立一个加密的通信通道 同时还可以确认通信的双方是不是就是其声称的人,防止被钓鱼. SSL在网络协议栈中的位置:可以 ...

  5. 加密传输SSL协议6_验证公钥

    如上图所示,我怎么能确定我手里的公钥就是我心中的接收方的公钥呢?怎么防止被钓鱼呢? 解决的办法就是引入一个第三方,一个权威机构,一个我们都相信的机构. 验证公钥,Digital Certificate ...

  6. 加密传输SSL协议2_传统加密

    原本到了睡觉的时间,但是做完了SSL的笔记还有GCC和Oracle等的好多的笔记,所以刻苦一点. The Priciple of Encryption/Decryption --conventiona ...

  7. MsSQL使用加密连接SSL/TLS

    说明 应用程序通过未加密的通道与数据库服务器通信, 这可能会造成重大的安全风险.在这种情况下, 攻击者可以修改用户输入的数据, 甚至对数据库服务器执行任意 SQL 命令. 例如,当您使用以下连接字符串 ...

  8. 单点登录 SSO, 自动登录 , java 加密,ssl原理, Tomcat配置SSL

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 单点登录的英文简称为SSO(single sign on),单点登录功能使得用户只要登录 ...

  9. SQL Server使用加密连接SSL/TLS (转载)

    说明 应用程序通过未加密的通道与数据库服务器通信, 这可能会造成重大的安全风险.在这种情况下, 攻击者可以修改用户输入的数据, 甚至对数据库服务器执行任意 SQL 命令.例如,当您使用以下连接字符串时 ...

随机推荐

  1. Oracle AWR报告提取方法

    本文旨在用来指导项目人员自行提取Oracle数据库的AWR报告. 1.当前连接实例的AWR报告提取:@?/rdbms/admin/awrrpt 2.RAC的其他实例AWR报告提取:@?/rdbms/a ...

  2. js 静态私有变量

    特权方法:有权访问私有变量和私有函数的公有方法.在私有作用域中定义私有变量或函数,可以创建特权方法,如下: 示例1 (function(){ //私有变量和私有函数 var privateVariab ...

  3. Java 之 内部类

    (static修饰的成员属于整个类,而不属于单个对象) 定义:将一个类放到另一个类的内部定义,这个在内部定义的类就叫做内部类(也有的成嵌套类),包含内部类的类被称为外部类(也有的称宿主类). 1.非静 ...

  4. 我的第一个Node web程序

    NodeJS的流行也带来了开发由前端转到全栈,前端不再局限于页面如何展现,用户如何操作,也设计到整个应用的架构以及业务流程. 本篇来简单的通过实例,讲述node中web开发的模式. 参考来自<N ...

  5. 动作之CCActionInterval(持续动作)家族

    持续动作,顾名思义,就是该动作的执行将持续一段时间.因此持续动作的静态生成函数,往往附带一个时间值Duration. 持续动作类名后缀:一般有两种后缀,一种是To,一种是By.To表示最终达到的目标值 ...

  6. win7访问windows server 2003服务器出现未知的用户名或者错误的密码(转载)

    直接放答案,感谢网友提供答案,否则自已还一直在纳闷,为什么? win7系统的安全机制限制了登陆.只要系统时间和win2003服务器的系统时间相差很多,系统就会阻止其登陆,并显示错误信息:"未 ...

  7. (我国的省—市—区)三级联动数据库.sql

    # MySQL-Front 5.1  (Build 2.7) /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE */; /*!40101 SET SQL_MODE='' */ ...

  8. JSCapture实现屏幕捕捉

    JSCapture 是用纯 JavaScript 和 HTML5 实现的屏幕捕捉库. 能够随意在浏览器或者桌面视频进行截图, JSCapture 使用 getUserMedia 来实现屏幕捕获. 当前 ...

  9. workerman例子无法工作

    现象 workerman已经正常启动,但是按照官网写的例子或者下载的demo无法工作,例如页面打不开,socket连接失败等 解决方法 一般这种workerman启动没报错,但是无法打开页面或者无法连 ...

  10. Centos6.8 安装git

    1.下载安装包 wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz 2.安装依赖 sudo yum - ...