数据和安全①加解密理论概述

理论知识盘点

举个例子:小明和小红是一对情侣,他们要通过网络,相互发送一些消息;

                  由于有一些私密消息,不想让其他人看到,所以要做到防窃听

                   同时如果消息被修改也是他们不想看到的,所以要做到防篡改/伪造;

                     防窃听和防篡改分别对应加密和签名,共同构成数据安全屏障。

 

加密和签名的区别

1、加密对内容进行保护,防止其他人查看。

2、签名是确认信息由发送者发送,不是第三方拦截发送。

3、签名算法一般不可逆,加密算法可逆,因要解析出加密的信息。

 

密码存储策略演进

互联网早期的密码都使用明存储,存在巨大的安全漏洞;以下后续发展

明文密码 安全漏洞巨大

hash算法 md5/sha256 -----暴力破解 彩虹表和加盐 -->

加盐hash算法 GPU 并行计算暴力破解

慢hash算法 (CPU和RAM密集型Bcrypt)(Scrypt 自定义硬件攻击)

通过控制计算强度慢的恰到好处,从成本(资源和时间)上考虑

 

哈希算法和签名

Hash(散列)函数/算法:将任意长度的数据映射到有限长度的域上。直观解释起来,就是对一串数据进行杂糅,输出另一段固定长度的另一串数据,作为这段数据的特征(指纹),Hash算法主要用于消息摘要和签名;

hash的两大特性:

抗碰撞能力:对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

抗篡改能力:对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会非常大。

Hash算法:MD5、SHA-1、RipeMD-160、SHA-256、SHA-512 (BouncyCastle)

例如:hashMap的hash算法注重速度,对碰撞没什么要求;

但是如果用hash算法对密码进行存储就对抗碰撞和抗篡改和很高的要求;

 

可逆加密和不可逆加密

可逆加密

可逆加密是指经过加密过后的信息可以通过对应的密钥反向解析还原信息内容,常见的就是我们上面所说的对称加密和非对称加密。

常见的对称加密算法:AES、DES、3DES、Blowfish、IDEA、RC4、RC5、RC6

常见的非对称加密算法:RSA、DSA(数字签名用)、ECC(移动设备用)、Diffie-Hellman、El Gamal

不可逆加密

和可逆加密相反,不可逆加密是指经过加密过后的信息是无法反向解析还原信息内容。

比如我们为了保证用户资料的安全,存在数据库的用户密码一般是用不可逆的加密算法进行加密,这样就算系统管理员得到了用户加密过后的密码,也无法通过解密还原用户的真实密码。

常见的不可逆加密算法: MD5、SHA、HMAC

RSA加密和RSA签名是两个概念:公钥负责加密,私钥负责解密; 私钥负责签名,公钥负责验证

Hash算法一般也叫散列算法/摘要算法;将任意长度的输入通过散列算法变换成固定长度的输出;

 

对称和非对称加密

互联网早期数据传输都使用明文传输,很容易窃取其中的内容;

对称加密: 加密和解密使用相同的秘钥,客户端需要秘钥解密,秘钥会在网络上传播。

密钥长度直接决定加密强度,DES算法由于密钥过短,可以在短时间内被暴力破解,不安全。

对称加密相对非对称加密效率高;当然加密强度越强,加密和解密的过程就越慢;

使用对称加密,用于加解密的秘钥会在网络上进行传播,不太安全,但是使用得当,也是一种数据加密传输的方式。

非对称加密:分为公钥和私钥,向一方发送数据之前,请求它的公钥,用公钥加密后发送数据,只有私钥能够解密。

非对称加密的典型算法就是RSA算法,它的密钥有256/512/1024/2048/4096等不同的长度。长度越长,密码强度越大,当然计算速度也越慢。使用512bit的RSA加密时,明文长度不能超过53字节,使用1024bit的RSA加密时,明文长度不能超过117字节,这也是为什么使用RSA的时候,总是配合AES一起使用,即用AES加密任意长度的明文,用RSA加密AES口令。

基础非对称加密

这时A向B发送信息的整个签名和加密的过程如下:
1、A先用自己的私钥(PRI_A)对信息(一般是信息的摘要)进行签名。
2、A接着使用B的公钥(PUB_B)对信息内容和签名信息进行加密。
这样当B接收到A的信息后,获取信息内容的步骤如下:
1、用自己的私钥(PRI_B)解密A用B的公钥(PUB_B)加密的内容;
2、得到解密后的明文后用A的公钥(PUB_A)解签A用A自己的私钥(PRI_A)的签名。
从而整个过程就保证了开始说的端到端的唯一确认。A的签名只有A的公钥才能解签,这样B就能确认这个信息是A发来的;A的加密只有B的私钥才能解密,这样A就能确认这份信息只能被B读取。

升级版非对称加密

非对称加密和对称加密比起来,它非常的慢,所以我们将对称加密和非对称加密结合起来;
将对称加密所使用的密钥通过非对称加密的方式传递出去,在消息的传输中使用对称加密;

 Https和证书

TLS/SSL

TCP (Transmission Control Protoco) 传输层控制协议

TLS (Transport Layer Security) 传输层安全协定

SSL (Secure Socket Layer) 安全套接层

 

HTTP(Hypertext Transfer Protocol) 基于 TCP 协议,无连接,每次连接只处理一个请求,结束后断开连接;无状态,无法保持用户状态,使用 cookie 和 session 解决。

HTTPS(HTTP over TLS/SSL) 安全的 http 协议,HTTP 协议和 TCP 协议之间增加了 TLS/SSL 保证数据的安全传输。

历史进程:

1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
1996年,SSL 3.0版问世,得到大规模应用。

1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。

2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 
1.2的修订版。

TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持

Https 安全性

HTTP 协议的不安全性体现在 3 个方面:

风险

描述

https解决方案

窃听风险

攻击者可以获知消息内容

消息加密

篡改风险

攻击者可以篡改消息内容

消息摘要

冒充风险

攻击者可以冒充其他人参与通信

CA 身份认证

CA 不可信

信任的 CA 乱签发证书

证书锁

中间人攻击

中间人攻击(Man-in-the-middle Attack,MITM)指的是攻击者在链路上伪装自己,与通讯双方分别建立联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。

SSL的升级版TLS---中间人攻击 --> 引入信任的第三方机构CA---->CA机构乱签发 权威性不足

----->证书锁 影响升级TLS

综上,对称加密通信 + 非对称加密交换密钥 + CA 认证身份 + 证书锁锁定证书指纹 共同保证了 https 的安全性。

 

Https的单向验证和双向验证

单向验证是客户端验证服务端证书是否可信;

双向验证是客户端和服务端相互验证对方的证书是否可信;

1、client hello客户端发送请求(支持加密和摘要算法、协议版本等 + 随机数A)向服务端请求信息

2、server hellio 服务端发送(选择的加密算法、协议等 + 服务端证书 + 随机数B)

如果是双向认证: 服务端还会请求客户端证书

3、客户端接收到信息,用内置在操作系统中的CA机构公钥判断信息是否合法

4、验证通过后,客户端使用服务端公钥对信息加密(随机数C)

如果是双向验证:客户端向服务端发送客户端证书(服务端使用步骤3判断信息时候合法)

5、服务端接收到消息根据随机数A B C生成对称加密秘钥MS,发送消息通知开始加密通讯

6、客户端同样根据随机数A B C生成对称加密秘钥MS,验证消息无误后双方开始通讯

 

证书

服务端 Server 将自己的消息(消息内容大致包括电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等)进行摘要之后,发给 CA 机构 AUTH 签发证书;

 证书格式

SSL 证书格式普及,PEM、CER、JKS、PKCS12

.DER .CER,文件是二进制格式,只保存证书,不保存私钥。

.PEM,一般是文本格式,可保存证书,可保存私钥。

.CRT,可以是二进制格式,可以是文本格式,与 .DER 格式相同,不保存私钥。

.PFX .P12,二进制格式,同时包含证书和私钥,一般有密码保护。

.JKS,二进制格式,同时包含证书和私钥,一般有密码保护。

证书链

现在大的 CA 都会有证书链,证书链的好处一是安全,保持根 CA 的私钥离线使用。第二个好处是方便部署和撤销,即如果证书出现问题,只需要撤销相应级别的证书,根证书依然安全。

根 CA 证书都是自签名,即用自己的公钥和私钥完成了签名的制作和验证。而证书链上的证书签名都是使用上一级证书的密钥对完成签名和验证的。

自签证书

一般我们不想花钱的话,就自己生成ca证书,自己做自己的CA机构为自己担保,因此无法内置在系统当中,因此我们通常会在客户内置一个证书文件,自己进行校验。

简单来说,握手流程需要两对密钥对:

一对 CA 的密钥对 JKS_A,由 CA 机构维护,通常他的公钥内置在 os 中,用来签名服务端信息摘要,保证服务端公钥的真实性,避免中间人攻击。

一对服务器的密钥对 JKS_B,他是握手过程中随机生成的,然后用「它的公钥及其他内容」的摘要去向 CA 实时签发证书,用来进行对称密钥的加密传输。

自签名证书就是不走 CA 机构,而是自己生成一对密钥对 JKS_C,他的作用就好比 CA 的密钥对 JKS_A,也是为了保证公钥的真实性,握手过程和原来一样,只是我们不需要去 CA 签发证书了,用自己的 JKS_C 签发就可以了;同样因为 JKS_C 是我们自己的密钥对,公钥没有被内置在 os 中,所以此时需要我们自己把 cert 文件(JKS_C 的公钥)放到本地,自己完成原本由 os 完成的 CA 校验任务。

 

参考如下:

                      https://www.liaoxuefeng.com/wiki/1252599548343744/1255943717668160

                      https://www.cnkirito.moe/spring-security-6/

                      https://www.zhihu.com/question/26762707

                      https://www.jianshu.com/p/6c46ef63c407

                  

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值