几种加密算法的比较及工作原理

引入加密/解密:

当今互联网上为了数据通信安全,双方在通信的过程中,为了保证数据的机密性,完整性,我们一般使用加密或身份验证的机制来保证数据的通信安全。

机密性:

plaintext --> 转换规则-->ciphertext  将明文转换成密文

         ciphertext --> 转换规则-->plaintext 将密文转换成明文

对称加密:提供加密算法本身,并且要求用户提供一个密钥以后,结合密钥和算法,能够将明文转换成密文。反之,之所以称为对称加密,是因为加密和解密使用的是同一个密钥,但是算法基本不是同一个。当我们通信对象很多的情况下,无法有效的对密钥进行管理,对称加密算法在一定程度上解决了数字机密性的问题,但是却没办法帮我们用户解决密钥有效管理的问题

      数据完整性:在通信过程中,为了保证数据的完整性,这里就涉及到另外一种算法:单向加密算法。单向加密算法,就是提取数据特征码的。

单向加密的特性:特征:输入一样:输出必然相同

   雪崩效应:输入的微小改变,将会引起结果的巨大改变

   定长输出:无论原始数据多大,结果大小都是相同的

   不可逆:无法根据特征码还原原来的数据

为了保证数据在传输过程中尽可能的不被第三方篡改,我们还可以把特征码进行加密。

引入密钥交换的概念:

如果双方之前从未通信,如何进行密码商定?

这里用到的机制叫做密钥交换:(Internet Key Exchange,IKE)

需要特殊的互联网协议支撑,基本密钥协议:Diffie-Hellman协议:互联网交换算法

假如Jerry和Tom将两个数据p,g在互联网上传输,p ,g 指的是大素数和生成数

 

Jerry:在本机内选择一个随机数x

Tom:在本机内选择一个随机数y

传输:

Jerry: g^x%p-->B

Tom:g^y%p-->A

接收:

Jerry:(g^y%p)^x=g^xy%p

Tom: (g^x%p)^y=g^xy%p

这个过程就是密钥交换算法

身份验证:

    引入了公钥加密算法:也称为非对称加密算法

       特征:密钥是成对的

公钥:p公钥是在私钥中提取出来的,而且是公开的

私钥:s

非对称加密算法的特征:用公钥加密的只能用与之相对应的私钥解密,反之亦然。发送方用自己的私钥加密数据,所以可以实现身份验证。发送方用对方的公钥加密数据,可以保证数据机密性。但是公钥加密算法很少用来加密数据:速度太慢。通常用来身份验证用。

既能保证数据的机密性同时又能保证对方的身份合法性:通常有单向加密算法和非对称加密算法。

常见对称加密算法:

    DES:数据加密标准  Data Encrption Standard ,56bit

    3DES: DES的改进

    AES:高级加密标准 Advanced

        AES192,AES256,AES512(默认128)   

单向加密算法:定长输出

    MD4、MD5、 SHA1、SHA192,SHA256SHA384(输出长度) CRC-32 循环冗余校验码  不提供安全性。

非对称加密:也称公钥加密 (核心功能:加密和签名)

功能:身份认证(数字签名),数据加密,密钥交换

    RSA:既可以加密,也可以签名

    DSA:只能实现签名,公开使用

    ElGamal: 商业算法,此算法提供的服务更多

A、B通信的具体过程:

A发送方:

1、计算数据的特征码(单向加密)

2、用自己的私钥加密特征码,并附加在数据后面

3、生成一个临时对称密钥

4、用此密钥结合某算法加密数据及加密数据后的特征码

5、用接收方的公钥加密此对称密钥,并附加在加密后的数据后面

6、发送至接收方

B接收方:

1、用自己的私钥解密加密的对称密钥

2、用临时对称密钥解密数据

3、用对方的公钥解密加密的特征码

4、用同样的算法计算数据的特征码,并与解密而来的特征码进行比较。

CA概念的引入:

事实上,双方的公钥传递是要向对方获取的,这个过程中也不能验证对方的身份特性,因此就需要引入第三方认证机构:CA(Certificate Authority)。

方式:发送方将自己的公钥提交给第三方,由第三方对其公钥做公证,将其信息做成一个证书,添加上第三方的签名,只要接收方认可发送方证书的可靠性,两者就可以通过证书来通信了。

证书颁发机构的总体叫做PKI(Public Key Infrastrucure)即:公钥基础设施

PKI 的核心就是CA和终端彼此间的信任关系。

通过查看证书吊销列表可以探明证书是否有效:CRL可以查看已吊销的、过期的证书或丢失的证书,保证证书安全性、和用户的合法性

目前通用证书的格式:

x509证书:包含的内容

    公钥及其有效期限

    证书的合法拥有者

    证书该如何被使用

    CA的信息

    CA签名的校验码

互联网上著名的安全机制:TLS和SSL 用的就是x509的证书。

TLS和SSL 是什么以及他们是如何实现密钥交换等功能的:

SSL:Secure Socket Layer 安全的套接字层。

版本有:SSLv2  SSLv3

https:是加密的http协议,使用的是443端口,它就是通过在tcp层和应用层加上了半个层即sslSSL只是一个库,让应用层在传输的过程中调用该库就可以实现安全传输了,众多的协议经过调用这个库也就实现了加密的功能。

TLS 是更为开源的一个加密机制,全称:Transport Layer Security 传输层安全,TLSv1的版本相当于SSL版本的SSLv3

ssl会话的建立过程:

如下我们将以http协议为例进行简单介绍ssl会话的建立过程:

http:双方在通信过程中,经过三次握手。客户端发起请求,服务器端和客户端协商建立ssl会话,服务器端将自己的证书发给客户端,客户端获取证书后要先验证(是否是信任的、完整的),客户端建立一个会话密钥,将服务器端公钥加密后的密钥传给服务器端,服务器端用这个密码加密给客户端传送。

在linux中,能够实现对称加密的工具:Openssl(基于SSL的一个开源加密工具)

Openssl:SSL的开源实现,主要包括三个部分:

libcrypto:通用加密库(提供了各种加密函数)

 libssl:TLS/SSL的实现

基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库

openssl:多用途的命令行工具。

 还可以实现私有证书颁发机构。

openssl包含很多子命令,可以实现诸多功能,基本用法如下:

openssl speed 测试对各种加密算法的速度,这是一个很好的测试工具。 enc –ciphername(加密算法的名字) [-in filename从哪个文件读进来] [-out filename加密后结果存放到哪个位置] [-pass arg] [-e加密] [-d解密] [-a对base64位进行编码] eg:对文件加密,openssl enc –des3 –a –in inittab –out inittab.des3    对文件解密:openssl –des3 –d –a –in inittab.des3 –out inittab 基于openssl提取特征码(指纹)openssl dgst –shal inittab 基于openssl生成密码串:openssl passwd -1(一,基于md5加密的) 

    总得来说,对称加密是只有一个秘钥,非对称加密是公私钥成对出现的,并且非对称加密中私钥加密能够实现验证身份的作用,ssh就是这样,而公钥加密可以保证数据的机密性,单向加密可以实现数据的完整性。

    ssl是一种对称加密,用在HTTPS中就是在应用层和传输层之间加办层ssl,这是一个库,应用层和各种协议调用这个库就可以实现加密。