非对称加密
1.对称加密的弊端
- 密钥分发困难,可以结合非对称加密分发密钥,然后用对称加密实现大数据加密
2.RSA-非对称加密
- x509:密钥对保存的证书规范
- pem:编码规范
- base64-将数据编码成可见字符
- A-Z,a-z,0-9,+,/,=(填充)
- 一共64位不同字符进行编码转换
2.1.ASN.1抽象语法标记
- 是一种独立于计算机架构和语言的 描述数据结构的 语法标记。
- 编码规则有:BER、CER、DER、PER 等
- DER:- 对数据编码 – 二进制编码
2.2生成私钥步骤
- 使用rsa中的GenerateKey方法生成私钥
- 通过x509标准将得到的rsa私钥序列化为 ASN.1 的 DER 编码字符串
- 组织一个pem.Block块,保存私钥
- 通过pem将组织好的块编码, 并写入磁盘文件中
2.3生成公钥步骤
- 从得到的私钥对象中将公钥信息取出
- 通过x509标准将得到 的rsa公钥序列化为 ASN.1 的 DER 编码字符串
- 组织一个pem.Block块,保存公钥
- 通过pem将组织好的块编码 并写入磁盘文件
3.ECC椭圆曲线加密
-
用go语言生成密钥对的流程跟RSA类似
-
数学原理 :按照标准,一共有5种素域上的椭圆曲线:P-192,P224,P256,P384,P512
-
不管是RSA还是ECC或者其它,公钥加密算法都是依赖于某个正向计算很简单(多项式时间复杂度),而 逆向计算很难(指数级时间复杂度)的数学问题。
-
椭圆曲线依赖的数学难题是: k为正整数,P是椭圆曲线上的点(称为基点), k**P=Q , 已知Q和P,很难计算出k,(这里的*(*)不是数学里面的乘法符号)
消息认证码的使用步骤(hash防篡改)
1.前提条件
- 发送端和接收端,必须持有同一个共享密钥。
- 发送端和接收端,必须使用同一个散列函数。
2.流程:
- 发送者:
- 将原始消息,生成散列值
- 引入 共享密钥,得到 MAC值
- ((原始消息)结合 key)* 散列函数 = MAC值
- 校验者:
- 接收发送者发送的 原始消息、MAC值
- 使用原始消息、共享密钥 的到 新的MAC值
- 比对新的MAC 值与 发送者发送的 MAC
3.消息认证码 与 单向散列函数比较
- 单向散列函数:原始消息 – 散列函数 – 散列值
- 消息认证码:原始消息+key --> 散列函数 --> MAC值
4.弊端
- 密钥分发困难
- 无法引入第三方公证
- 不能防止反悔
5.改良————>数字签名
数字签名(利用椭圆曲线生成密钥对进行签名)
1.流程
- 签名
- 发送者 将 消息 生成散列值
- 使用 私钥 对散列值 “加密” --> 签名
- 发送 原始消息、签名
- 验证
- 接收 原始消息、签名
- 将 原始消息 生成散列值
- 将 接收的签名 公钥 解密 --> 散列值
- 比对
2.无法解决的问题:
- 当用户在一开始发送公钥给其他人的时候被拦截,盗取方把公钥也篡改了,发送完全假的数据给接收方。
3.数字签名改良————>加入证书CA
证书
1.生成证书和使用流程
- Bob生成密钥对
- Bob在认证机构Trent注册自己的公钥
- 认证机构Trent用自己的私钥对Bob的公钥施加数字签名并生成证书
- Alice得到带有认证机构Trent的数字签名的Bob的公钥(证书)
- Alice使用认证机构Trent的公钥验证数字签名,确认Bob的公钥的合法性
- Alice用Bob的公钥加密消息并发送给Bob
- Bob用自己的私钥解密密文得到Alice的消息
2.公钥基础设施 - PKI
- PKI只是一个总称,而并非指某一个单独的规范或规格。
- PKI组成的要素:
- 用户
- 申请证书的人:
- 生成密钥对, 也可以委托证书颁发机构(可选)
- 下载公钥证书,部署
- 发送给客户端
- 注销证书,当发现私钥泄露、丢失
- 接收证书的人:
- 首次访问 web服务器, ssl握手过程中,获取 公钥证书
- 校验证书的可信度。按照CA证书信任链 去上级颁发机构,用他的公钥验证。
- 申请证书的人:
- CA认证机构:
- 可以代为生成密钥对(可选)。将私钥发送回给用户。
- 对用户信息进行审核
- 将公钥用自己的 私钥签名 。 得到证书。 —— 颁发证书
- 吊销证书
- 仓库
- 存储证书的 数据库
- 保存吊销证书的 序列号
- 用户
3.SSL/TLS
- SSL:安全套接字层,网络传输中的加密协议,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。
- TLS:传输层安全协议,用于两个应用程序之间提供保密性和数据完整性。
- 它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1
- SSL/TLS协议提供的服务主要有:
- 认证用户和服务器,确保数据发送到正确的客户机和服务器;—>认证CA证书
- 加密数据以防止数据中途被窃取;---->加密算法
- 维护数据的完整性,确保数据在传输过程中不被改变。---->hash防篡改