文章目录
HTTP介绍
- HTTP,超文本传输协议,超文本指的是HTML
- HTTP目前版本是1.1,定义在RFC2616规范上
- 在HTTP中,客户端通过Socket技术创建一个TCP/IP连接,并连接到服务器
- 就算是我们把内容加密,但是HTTP头部信息也是安全关注点之一
- 用户访问网站一般会经过互联网服务商,服务商有时会在响应中加上一段HTML代码当广告
密码学
1.基础
- HTTPS本质上是对密码学算法的组合
- 在密码学中,一般使用消息验证码(MAC)算法来保证完整新
- 在密码学中,一般使用数字签名来确认身份
- OpenSSL项目包含了底层密码库和命令行工具,Linux一般自带
2.随机数
- 单纯从软件层面无法生成完全不一样的随机数,为了实现真正不可重现性,需要基于物理设备或物理现象
- 对于真正的随机数生成器,内部数值来自外部设备,叫做熵
- 对于伪随机数生成器,内部数值来自模拟的数值,叫做种子
- 随机数生成器一般会尽可能寻找更多的熵和种子
3.Hash算法
- 一些基础的密码学算法(加密基元)构成更多的密码学算法,协议以及应用程序
- 密码学Hash算法就是一个非常重要的加密基元,它和一般Hash算法不同,多了更多的特性
- 基于密码学Hash算法产生的其他密码学算法
- 密码学Hash算法的公式 hash(入参) = 摘要,散列,或者叫指纹
- 密码学Hash算法的特性
- 相同入参,出参一样
- 一个算法,不管入参长度,出参长度总是一样的
- 不可逆
- 很难找到两个不同的消息,结果一样
- 两个不同的入参得到相同的出参,就代表发生了hash碰撞
- 密码学Hash算法分类
- MD5 本质上不安全,大量运算会产生碰撞
- SHA,包括SHA-1 SHA2 SHA-3 一般SHA2就安全了
4.对称加密算法
- AES是对称加密算法的标准算法
- 对称加密算法有两种类型,块密码算法和流密码算法
4.1 流密码算法
- 密钥流一个流式的二进制字符串,和入参变成的二进制串进行按位进行异或
- 密钥流是由密钥生成,基于同一个密钥,加密者和解密者有着相同的密钥流
- 流密码算法不安全,建议使用块密码算法
4.2 块密码算法
简单来说,就是把明文分块,每块要固定长度,不够的化就进行填充,然后进行加密
4.3 填充标准
我们这里已PKCS#7为例,如果填充的字节长度是3,那么填充就是030303,这样就可以方便的看出填充到底有几位
5.消息验证码
对称加密算法能够解决机密性问题,但是无法确保完整性,攻击者可以修改密文,接收方解密出来的就不是原文了
通过Hash算法生成摘要,攻击者可以同时更改消息和摘要,来达到篡改消息的目的,Hash算法能做完整性校验,但是不能避免消息被篡改,消息验证码因而诞生了
MAC值 = mac (消息 + 秘钥)
秘钥需要双方共同维护一个,然后通过比较MAC值来防止消息被篡改
结合对称加密和MAC算法,可以提供机密性和完整性的模式叫做AE加密模式
6.非对称加密算法
- 因为性能比较差,一般用于秘钥协商或者数字签名
- 最经典的是RSA算法
- 公钥和私钥一般以文件的形式提供
- 同样的明文,同样的秘钥,经过RSA加密,每次的密文都不是一样的
7.密钥
- 密钥的分类
密钥要保证足够的长度以及不可预测性
8.密钥协商算法(如何在网络中传输秘钥)
- 什么是会话秘钥
- 作用是为了加密解密通讯数据
- 在通讯数据之前通过密钥协商算法客户端和服务端协商出会话秘钥,一旦连接关闭,秘钥消失
⑴RSA密钥协商算法(完全客户端控制)
- 服务端发送公钥给客户端
- 客户端通过公钥加密会话秘钥,然后发给服务器端
- 公钥是完全公开的,不能确认是哪个客户端发送的,因而会出现抵赖
⑵DH密钥协商算法
通讯双方任何一方无法独自计算出一个会话密钥,通讯双方各自保留一部分关键信息,再讲另外一部分信息告诉对方,双方有了全部信息才能计算出相同的会话秘钥
9.椭圆曲线密码学
秘钥越长,性能越低,因而有了椭圆曲线密码学(ECC)来提高性能
ECC极短的秘钥能够提供很大的安全性
- 可以和DH秘钥协商算法组合形成ECDH秘钥协商算法
- 结合数字签名DSA形成ECDSA数字签名算法
10.数字签名
-
RSA和DSA都可以实现数字签名
-
数字签名有以下几个特点
- 防篡改 MAC算法也有这个特点
- 防抵赖 消息签署者不能抵赖
- 防伪造 MAC算法也有这个特点
-
数字签名的处理流程包括签名生成和签名验证
-
签名生成(发送者)
- 对消息计算摘要
- 用私钥对摘要值进行签名得到签名值
- 将原始消息和签名值一起发送给接受者,原始消息不需加密,因为数字签名不是为了加密
-
签名验证(接受者)
- 拆分出消息和签名值A
- 用公钥对消息进行运算,得到摘要值B
- B和A比较&#