在一次网络通讯或者是进程通讯中,若是传输数据采用明文的方式,那么很容易被第三方"窃听"到,安全性难以保障。算法
而所谓加密是让数据从明文变成密文,传输过程当中是密文,传送过去以后对方接收到的也是密文。——能够理解为密文就是乱码,看不出内在的任何意义,一般也都是逐位对应的。安全
在接收方接收到密文以后只有把它还原为原来的样子才能够理解对方说的具体是什么,此过程就叫作解密。服务器
所谓系统的安全要实现的目标应该包括:机密性-confidentiality,完整性-integrity 和可用性-availability;在通讯中威胁到上述三者的***行为分别有:网络
1.威胁机密性的***行为:窃听、嗅探、扫描、通讯量分析ide
2.威胁完整性的***行为:更改、假装、重放、否定工具
3.威胁可用性的***行为: 拒绝服务(DoS)性能
针对各类威胁安全性***行为,咱们分别从技术层面和服务层面出发,有不一样的解决方案。编码
技术:数据的加密和解密;服务:安全服务;加密
今天来初探Linux世界里的加密和解密是怎么一回事;spa
加密须要两个东西,算法+密钥;
加密的算法分为四类:
对称加密算法-通俗的说就是 用什么密钥加密就用同一个密钥进行解密;
其优点所在就是加密速度较快;但劣势也很是明显:
对称加密没法保证完整性。被截获了,随破解不出来里面的密文是什么,可是,截获者插入一些字符篡改内容,再发送给接收者;接收者在接收到被篡改的密文之后,解密出来,发现内容彷佛没有什么意义,此时,怎样肯定此密文就是本身信任的对方发送过来的呢?因此完整性是没法获得保证的。
这种算法的主流算法有:DES,AES,3DES等等;
公钥加密算法-采用公钥加密,私钥解密;
公钥加密也叫作非对称加密,加密解密采用同一组的公钥和私钥。
先来解释一下什么是公钥私钥:
私钥(seceret key|private key):是经过特定的工具建立生成;由使用者本身留存。务必保证其私密性;
公钥(public key):从私钥中提取生成,能够公开给全部人使用;
这种方式加密的数据安全等级高,代价就是密钥很长,从512位、768位、1024位、2048位、4096位、8192位不等;由此也对系统的性能提出了更高的要求,例如此种加密技术的RSA的发展彷佛遇到了瓶颈。所以,不多用公钥加密算法来加密大批量的数据;
单项加密算法 - 提取数据特征码,只能由明文计算出密文,也就是只可加密不能解密;
所以此种算法的功能就是保证数据的完整性,防止被篡改;
常见的算法:md五、SHA1(安全hash算法)、SHA二、SHA25六、SHA5十二、SHA3(目前最新的)
密钥加密算法-IKE
所谓IKE:
一、IPsec使用IKE来完成对等体之间的认证和密钥的生成以及交换
二、协商和维护安全关联(SA)参数
三、SA是一个集合,包含了加密算法,认证方式等等
四、经过认证,防止假装***
五、自动产生密钥,并自动更新密钥
六、动态,安全的交换密钥
在实际应用里,通讯双方数据加密进行如下步骤:
1.通讯双方互相交换证书,并到信任的CA进行证书验证;
2.发送方使用某种对称加密算法对数据进行加密;对加密后的数据使用单向加密,计算其特征值;发送方再用本身的私钥加密此特征值,以证实数据来源的可靠;发送方使用接收方的证书加密对称密钥;
3.接收方在收到数据后,先使用本身的私钥解密对此密钥;而后使用发送方的公钥特征值,再利用相同的单向加密算法;
不使用SSL/TLS的HTTP通讯,就是不加密的通讯。全部信息明文传播,带来了三大风险。
(1)窃听风险(eavesdropping):第三方能够获知通讯内容。
(2)篡改风险(tampering):第三方能够修改通讯内容。
(3)冒充风险(pretending):第三方能够冒充他人身份参与通讯。
SSL/TLS协议是为了解决这三大风险而设计的,但愿达到:
(1)全部信息都是加密传播,第三方没法窃听。
(2)具备校验机制,一旦被篡改,通讯双方会马上发现。
(3)配备×××书,防止身份被冒充。
SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,而后用公钥加密信息,服务器收到密文后,用本身的私钥解密。
它将将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。这样保证了公钥不会被篡改;
数字证书里包含的内容:
拥有者的名称
拥有者所提交的公钥
有效期
证书的版本号
证书的序列号
签发算法ID
签发CA的名称
主体名称
发证者惟一标识
发证者的数字签名
扩展信息
所以,SSL/TLS协议的基本过程是这样的:
(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话密钥"。
(3) 双方采用"对话密钥"进行加密通讯。
前两步也叫握手阶段 - handshake
SSL/TSL的handshake的四个阶段:
1.客户端向服务器索要证书并验证;
client_hello发送的信息内容:
支持的协议版本,如:TLS V1.2...
客户端生成的随机数,可能在以后充当加密的密钥;
支持的加密算法,如AES,sha...
协商各自支持的压缩算法。非必
2.双方协商生成会话密钥;dh算法交换密钥
Server_hello的内容:
确认使用的加密协议的版本号。
服务器生成一个随机数,稍后用于生成会话密钥
确认加密算法及压缩算法;
3.双方采用生成的会话密钥进行安全加密的通讯;
客户端验证服务器证书,在确认无误后,取出其公钥;
验证服务器证书须要验证下述内容:
验证发证机构CA;
验证证书的完整性;
验证证书的持有者信息;
验证证书的有效期
验证证书的吊销列表;
客户端发送信息给服务器:
1.一个随机数,用于服务器上的公钥加密
2.编码格式变动的通知,表示随后的信息都将用双方已经协商好的加密算法和密钥进行加密发送;
客户端握手结束;
4.双方互相通告握手结束的信息;
服务器会收到客户端发送来的这次握手阶段的第三个随机数 Pre-Master_key
计算本次会话所用到的会话密钥,向客户端发送相关信息;
编码变动通知,表示随后的信息都将用双方已经协商好的加密算法和密钥进行加密发送;
服务器端握手结束;
接下来,客户端与服务器进入加密通讯,就彻底是使用普通的HTTP协议,只不过用"会话密钥"加密内容。