数据加密和解密概述
传输层协议:TCP,UDP,SCTP
port:进程地址,进程向内核注册使用某端口(独占)
同一主机上的进程间通信:IPC, message queue, shm, semerphor
不同主上的进程间通信:socket
client ip:port <-- --> service ip:port
clentip:55673 <-- --> service ip:80
监听模式:LISTEN (ip:port)
安全的目标:
- 保密性:confidentiality,确保通信信息不被任何无关的人看到
- 完整性:integrity,实现通信双方的报文不会产生信息丢失
- 可用性:availability,通信任何一方产生的信息应当对授权实体可用
攻击类型:
- 威胁保密性的攻击:窃听、通信量分析;
- 威胁完整性的攻击:更改、伪装、重放、否认
- 威胁可用性的攻击:拒绝服务(DoS)
解决方案
技术(加密和解密)、服务(用于抵御攻击的服务,也即是为了上述安全目标而特地设计的安全服务)
加密和解密
- 传统加密方法:替代加密方法、置换加密方法
- 现代加密方法:现代块加密方法
服务
- 认证机制
- 访问控制机制
密钥算法和协议
- 对称加密
- 公钥加密
- 单向加密
- 密钥交换
Linux系统上述功能解决方案:OpenSSL(ssl),GPG(pgp)
GPG是gpg协议的实现,OpenSSL是ssl协议和加密加密库的实现
加密算法和协议:
对称加密:
加密和解密使用同一个密钥
DES:Data Encryption Standard,数据加密标准
3DES:Triple DES,DES的增强版,比DES多3个数量级
AES:Advanced Encryption Standard,高级加密标准 (128bits, 192bits, 256bits, 384bits)
商业:Blowfish,Twofish,IDEA,RC6,CAST5
特性:
- 加密、解密使用同一个密钥
- 将原始数据分割成为固定大小的块,逐个进行加密
缺陷:
- 密钥过多
- 密钥分发困难
公钥加密
密钥分成公钥和与之配对的私钥
公钥:从私钥中提取产生;可公开给所有人;pubkey
私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key;
特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
用途:
- 数字签名:主要在于让接收方确认发送方的身份
- 密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方
- 数据加密:这种直接使用公钥加密算法来实现通信时数据的保密性的方式并不常用,因为这种方式要比使用对称加密慢上3个数量级,不推荐。
算法:
RSA:名称由RSA三个提出者(Ron Rivest, AdiShamir, Leonard Adleman)的姓氏首字母组合而成,这种算法的可靠性由对极大整数做因数分解的难度决定;RSA既能实现数字签名,又能实现加解密。
DSA:Digital Signature Algorithm,即数字签名算法,又称DSS(Digital Signature Standard, 数字签名标准);DSA仅能实现数字签名,不能用于加解密。
单向加密
即提出数据指纹,只能加密,不能解密
特性:
定长输出:提取出来的数据量是定长的,与进行加密的数据的量无关
雪崩效应:初识条件的微小改变会引起加密结果的巨大变化
功能:用于实现数据完整性的验证
算法:
md5:Message Digest 5,即信息摘要,'5'是版本号;取出的特征码定长为128bits
sha1:Secure Hash Algorithm 1,即安全哈希算法,'1'是版本号;取出的特征码定长为160bits
sha224:secure hash algorithm,224bits
sha256:secure hash algorithm,256bits
sha384:secure hash algorithm,384bits
sha512:secure hash algorithm,512bits
注意:CentOS 5用户密码加密使用的是md5,CentOS 6/7用户密码加密使用的是sha512.
密钥交换: IKE(Internet Key Exchange)
- 公钥加密:常见的算法有RSA等
- DH(Deffie-Hellman):Deffie-Hellman(迪菲-赫尔曼)算法
- 其他用于实现密钥交换的算法有:ECDH(椭圆曲线DH)、ECDHE(临时椭圆曲线DH)等
一般的过程:
1.Alice生成随机自然数a、随机大质数p和原根g;
2.Alice计算,计算结果为A,并把p,g,A发送给Bob;
3.Bob生成随机自然数b,根据Alice发过来的p,g,计算,计算结果为B;
4.Bob把B发送给Alice,并计算,计算结果为K;而Alice计算,计算结果也为K;
5.Alice和Bob以K值作为密钥进行通信。
一次加密通信的过程
加密和发送过程:
1、当发送方Alice有数据要发送给Bob时,为了确保数据能够完整地发送至Bob,首先需要使用单向加密算法去计算出这段要发送的数据的特征码;
2、为了便于Bob收到数据之后可验证身份,发送方Alice使用本地私钥加密这段特征码,并将加密后的特征码附加在数据后面;
3、为了确保通信过程是保密的,发送方Alice生成一个临时的对称密钥,并使用这个对称密钥加密整段数据;
4、发送方Alice获取Bob的公钥,再使用Bob的公钥加密来加密刚才生成的临时的对称密钥,并把加密后的对称密钥附加在整段加密数据后面,而后发送给Bob。
接收和解密过程:
1、接收方Bob收到数据之后,先使用自己的私钥去解密这段加密过的对称密钥(由Alice生成);
2、接收方Bob用解密得到的对称密钥去解密整段(发送方用对称密钥)加密的内容;此时接收方Bob得到Alice发送给自己的数据和加密后的特征码;
3、接收方Bob用对方Alice的公钥去解密这段特征码,如果能解密出来,则发送方的身份得到验证(没错,就是Alice发送的);
4、接收方Bob再用同样的单向加密算法去计算这段数据的特征码,与解密得到的特征码进行比较,如果相同,则数据完整性得到验证,否则说明数据有可能被篡改或被破坏。
PKI:Public Key Infrastructure(公钥基础设施)
- 签证机构:CA,负责签署证书
- 注册机构:RA,负责接收签署证书的申请
- 证书吊销列表:CRL,负责公开所有已经吊销的证书
- 证书存取库:CR,负责将公开所有已申请的证书的相关信息
证书
为了统一数字证书的格式,国际电信联盟(ITU-T)制定了数字证书标准--X.509,即数字证书的格式遵循X.509标准。在X.509v3版本中,定了数字证书的结构以及认证协议标准。
版本号,序列号,签名算法ID,发行者名称,有效期限,主体名称,主体公钥,
发行者的惟一标识,主体的惟一标识,发行者的签名
数字证书授权机构--CA
前面的加密通信过程中能够保证通信过程的保密性、通信数据的完整性,但这是以双方(Alice和Bob)能够在此之前可靠地获取对方的公钥为前提的。如果不能保证能够可靠获取对方公钥,那么就有可能出现中间人攻击(Man-in-the-middleattack,缩写:MITM)。假设这个中间人是Eve,Eve就可以分别与Alice和Bob建立联系,而这时Alice获取的是“假的”Bob公钥,而Bob获取的是“假的”Alice公钥;这时候Alice和Bob在毫不知情的情况下进行通信,但其实他们之间数据包的转发是经由Eve的。
上述的通信过程中缺失的一环在于通信双方不能保证可靠地获取对方的公钥,因此,为了保证可靠地获取通信对方的公钥,于是就有了数字证书认证机构(CertificateAuthority,缩写:CA)。CA就是为了能够保证通信双方能够可靠获取对方的公钥,而特地设定的一个双方公信的第三方可信机构。
为了避免出现上述一环的缺失,Alice和Bob可向公信的CA申请有效的证书,并由CA分别颁发给Alice和Bob,其中这个证书中的信息包括了证书拥有者的名称、公钥、证书的有效期等信息,而CA还会提取证书中信息的特征码,并用CA自己的私钥进行加密,再把加密后的特征码附加在证书中最后面。此后,当双方通信时,Alice和Bob双方都把自己的证书发给对方,并都分别使用CA的公钥去解密证书中的特征码,如果能解密,则说明证书的确由他们所信任的CA机构所颁发;接着使用同样的单向加密算法去提取证书中信息的特征码,与解密出来的特征码进行比较,如果两者相同,说明证书内容完整,没有被篡改或破坏,而对方的证书中就有对方的公钥。
但这又引入了一个问题,Alice和Bob如何可靠地获取CA的呢?显然,不能基于网络通信的方式获取CA的公钥(一切基于网络的传输都是不可靠的),而应该当面交易。全球有多个CA机构,这些CA的数量是有限、基本固定的;它们彼此之间存在互信链,也就是说CA的信任关系是可以传递的。为了管理方便,全球有一个根CA,它与其他CA是从属关系。
为了解决通信主机能够可靠获取CA的公钥,CA需要自签一份证书,就是CA自签名证书,在证书信息中包括了CA的名称、CA的公钥等,通信主机(这里是Alice和Bob)需要获取CA证书,这样才能获取CA公钥以及其他的CA信息,并能通过CA证书来验证其他通信主机的证书是否可靠。CA证书的获取需要通过当面交易来实现,而微软公司直接在windows操作系统上集成了在全球具有公信力的CA证书,但在Linux中一般不内置CA证书,需要自己通过可靠手段获取。
虽然通过上述手段可以极大地保证通信过程的安全性,但仍然存在问题,例如在这整个通信过程中使用的某种算法出现漏洞依然不够安全。
上述的通信过程中缺失的一环在于通信双方不能保证可靠地获取对方的公钥,因此,为了保证可靠地获取通信对方的公钥,于是就有了数字证书认证机构(CertificateAuthority,缩写:CA)。CA就是为了能够保证通信双方能够可靠获取对方的公钥,而特地设定的一个双方公信的第三方可信机构。
CA如何在A和B通信之间发挥作用?
基本过程:
1、首先,在A和B通信之前需要互相发送证书;
2、A和B之间协商通信过程中要使用的加密算法(对称加密、公钥加密、单向加密、密钥交换);
3、开始验证证书
1)用CA的公钥去解密CA的签名,如果能解密,则说明证书来源可靠;
2)用同样的单向加密算法计算出证书中信息的特征码,与解密得到的特征码进行比较;如果两者相同,则说明证书完整性可靠;
3)检查证书的有效日期是否在当前时间的合理范围内;如果证书过期了则不会被认可;
4)检查证书的主体名称与期望通信的对方是否一致;如果不一致则不会被认可;
5)检查证书是否被吊销过;如果没有吊销则可使用该证书,否则证书不会被认可。
本博客参考:https://blog.csdn.net/qq_22030347/article/details/69573207