几种加密算法的比较及工作原理
引入加密/解密:
当今互联网上为了数据通信安全,双方在通信的过程中,为了保证数据的机密性,完整性,我们一般使用加密或身份验证的机制来保证数据的通信安全。
机密性:
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,SHA256,SHA384(输出长度) 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层和应用层加上了半个层即ssl,SSL只是一个库,让应用层在传输的过程中调用该库就可以实现安全传输了,众多的协议经过调用这个库也就实现了加密的功能。
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,这是一个库,应用层和各种协议调用这个库就可以实现加密。