网络安全之OpenSSL加密传输
概述:
两个计算机在互联网上通信时,它们之间发送的信息如果不经过特殊的处理,即加密机制,很容易被其他人给获取到,如果是普通的信息,那倒是无所谓,但是如果涉及到个人的私密信息,那这样岂不是很糟糕,本篇来说一下这个安全和加密机制。
加密算法和协议:
一 、对称加密:加密和解密使用同一个密钥
DES:Data Encryption Standard,56bits 3DES: AES:Advanced (128, 192, 256bits) Blowfish,Twofish IDEA,RC6,CAST5
特性:
1、加密、解密使用同一个密钥,效率高
2、将原始数据分割成固定大小的块,逐个进行加密
缺陷:
1、密钥过多
2、密钥分发
3、数据来源无法确认
二 、非对称加密算法:即公钥加密
公钥加密:密钥是成对出现
特点:
用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
1 数字签名:主要在于让接收方确认发送方身份
2 对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
3数据加密:适合加密较小数据
缺点:
密钥长,加密解密效率低下
算法:
RSA(加密,数字签名),DSA(数字签名),ELGamal
具体实现:
基于一对公钥/密钥对:用密钥对中的一个加密,另一个解密接收者 生成公钥/密钥对:P和S 公开公钥P,保密密钥S发送者 使用接收者的公钥来加密消息M 将P(M)发送给接收者接收者 使用密钥S来解密:M=S(P(M))
三、单项加密:将任意数据缩小成固定大小的“指纹”
特点:
1 任意长度输入
2 固定长度输出
3 若修改数据,指纹也会改变(“不会产生冲突”)
4 无法从指纹中重新生成数据(“单向”)
功能:
数据完整性
常见算式:
md5: 128bits、sha1: 160bits、sha224
sha256、sha384、sha512
常用工具:
md5sum | sha1sum [ --check ] file
openssl、gpg
rpm -V
密钥交换:IKE(Internet Key Exchange )
公钥加密:
DH (Deffie-Hellman):
注意:
以上所说的加密算法和协议虽然能够实现两个两个计算机之间的加密通信,可是保证不了其他计算机的干预消息。
例如:A和B是互联网上的两台主机,A拥有自己的私钥,B拥有自己的私钥,此时如若A要给B发送消息,但是第一次它并不知道谁是B,如果此时有另一台机器C告诉A说我就是B,然后把自己的公钥发送给A,A此时还以为和它通信的真的是B,然而却是A和C在通信。那么问题来了,如何确定B的身份呢?如果此时有一个双方都信任的第三方机构,由它来确认B的身份,那么问题就可以解决了,随之而来的是谁来确定这个第三方机构的身份呢,如果是一个假的机构呢?所以还需要这个机构的上级来确定它,知道到了顶层。当然这个顶层是我们所有人在心底都默认知道和了解的。
说了这么多,这个所谓的第三方机构就叫做CA,当CA每确认一台机器的时候,就会给它颁发一个证书,具体如下:
CA和证书
证书签发过程:如下图所示
- 1、A将自己的公钥发送给CA
- 2、CA在确定A的身份后,会将证书颁发给A,其中过程如下
1)CA会将应有内容整合到证书上,证书的内容结构如上。 2)然后将此内容使用单向加密算法生成特征码(用于验证证书完整性) 3)最后,CA会使用自己的私钥来对此特征吗进行加密,生成数字签名(用来验证是否为CA签署的证书),然后发给A
- 3)B的过程与A相同
当B验证A的身份时,就是通过证书来验证的,步骤如下
- 1 使用CA的公钥来解密数字签名,如果成功,则验证了CA身份
- 2 利用相同的单项加密算法来计算证书内容结构的特征码,与原来的特征码相比较,如果相同,则保证了证书的完整性
- 3 从证书内容中取出A的公钥
加密通信过程详解
第一阶段:ClientHello:客户端向服务器端发起加密通信的请求
第二阶段:ServerHello(回应)
1 确认使用的加密通信协议版本,比如tls1.2;(如果版本不一样,则拒绝通信)2 服务器端生成一个随机数,主要在稍后用户生成”会话密钥“3 确认使用的加密方法4 发送服务器证书5 索要客户端证书(不过一般服务器端都不会验证客户端)
第三阶段:
第四阶段:
1 收到客户端发来的第三个随机数-pre-master-kty后,计算生成本次会话用到的会话密钥2 向客户端发送如下消息3 编码变更通知:与上相同4 服务器端握手结束通知
此时双方已经彼此确认了对方的身份,并且建立一条安全的通道,接下来就可以传输信息了。此过程如下图所示:
(1)A-->B
(2)B收到A发送的数据后
1)使用B的要来解密对称加密的密码(如果可以解密,则保证接收放是B)2)利用解密过的对称加密密码来解密这段数据3)解密后通过利用A的公钥来解密数字签名(如果可以,则保证了数据是从A发的)4)此时,呈现在B的有两样东西,一个是原数据,还有一个是特征码。且原数据是没有加密的。此时B需要使用相同的单项加密算法对此时的原数据计算特征码,与A发送过来的特征码相比较,如果相等,则保证了原数据的完整性。
至此。信息的加密与解密过程完成。
总结:
在以上所述的过程中,个人认为有几点需要强调:
1)单项加密并不加密原数据,只是为了计算原数据的特征码。用于数据的完整性校验
2)对称加密算法加密和解密都是用同一个密钥。用于加密数据
3)公钥加密加密的是特征码。用于生成数字签名
4)证书的颁发和验证过程和数据的传输过程是两个过程