介绍
解决数据传输的安全性问题
要解决的问题
四个问题
- 窃听
○ 加密:如 共享,公开,混合,交换等都是解决窃听的问题,而不管其他问题 - 假冒
○ 消息认证码(不👌),而且比数字证书更弱一点,无法解决事后否认的问题 ○ 数字签名(不👌) ○ 数字证书(比较👌) - 篡改
○ 消息认证码(👌) ○ 数字签名(👌) - 事后否认
○ 数字签名(👌)
其中数字签名存在 “无法确认公开密钥的制作者” 的问题,需要使用 数字证书 技术 数字证书 相比较于 数字签名,也就是引入了第三方认证而已
Hash
特征
- 定长
- 内容相同,Hash 值相同
- 内容相似,不导致 Hash 值相似
- Hash 冲突
- 不可逆
- 算法相对简单,求取效率高
一些 Hash 算法
MD5,SHA-1,SHA-2 其中 MD5 和 SHA-1 有安全隐患,不推荐使用
共享密钥加密(对称加密)
加密和解密都用相同的密钥
不安全:
传输密钥,不是很安全
一些共享密钥加密算法
凯撒密码,AES,DES,动态口令
公开密钥加密(非对称加密)
使用公钥和私钥 可以使用 数字证书 来防止中间人攻击,确认公钥发送方的身份
不安全:
会发生中间人攻击,替换公钥,因为无法确定公钥是谁发的
其他问题:
不容易找到相应的加密算法 加密比较耗时,这个问题可以使用混合加密解决
加密算法需要满足的条件:
- 可以使用某个数值对数据进行加密
- 可以使用另一个数值对数据进行解密
- 两个数值不能相互推算得出
一些公开密钥加密算法
RSA(较为广泛),椭圆曲线加密算法
混合加密
主要用来解决: 共享加密密钥传输不安全 公开加密计算速度慢的问题
使用公开加密的公钥加密共享密钥的密钥,以保证共享加密的密钥的传输安全 然后信息的加密使用共享密钥
SSL 协议就使用了这样的混合加密方法 SSL 协议进行升级后正式命名为 TLS,也常被称为 SSL/TLS 协议 相应的 HTTPS 也使用了该混合加密方法
迪菲-赫尔曼密钥交换
用来交换密钥,其实本质上并没有交换密钥,所以又被称为 “迪菲-赫尔曼密钥协议” 是另一种解决共享密钥传输不安全的方法
我感觉可以称为 合成密钥加密
主要步骤:
- 传输 P
- A,B 为两个私钥,为甲和已所持有
- 甲合成 AP,已合成 BP
- 相互传输 AP,BP
- 甲合成 ABP,已合成 ABP,将 ABP 作为共享密钥来使用
传输的为 P,AP,BP,无法合成 ABP,所以传输是安全的
当然,需要有相应的算法来保证:
- 可以合成,且可以多次合成
- 合成后就无法获取合成的因子,也就是 AP 无法获取单独的 A 或 P
- 合成不用按照顺序,而只和因子有关,也就是 AP+B = BP+A
数学原理:
离散对数问题目前没有解 根据素数 P、生成元 G 和 “GX % P” 求出 X
消息认证码
实现 认证 和 检测篡改 两个功能,但无法解决 事后否认 的问题,因为 A 和 B 双方都可以生成认证码 ● 类似于 Hash 校验,而且在 Hash 里参杂了密钥
步骤
- 安全传输一个共享密钥,可以使用混合加密,或是迪菲-赫尔曼进行传输
- A 在发送的时侯,使用算法计算:密文+密钥 = 认证码,将认证码一起发送
- B 收到消息,使用相同的算法计算,比较认证码是否和 A 发送的相同
其中认证码计算的方法有:HMAC(最广泛),OMAC,CMAC
数字签名
主要处理 事后否认 的问题,也可以防止 篡改,假冒 但是由于不知道公钥的制作者到底是谁,所以无法彻底防止假冒,那其实 消息认证码 也有这样的问题 使用 公开密钥加密 来进行数字签名,只是现在私钥是用来加密的,公钥是用来解密的 严格来说,也有使用加密运算以外的计算方法来生成签名的情况 使用私钥加密,公钥解密,并不是所有的公开密钥加密都可以反着用,但是 RSA 可以
过程
- A 准备公开密钥,将公钥发送给 B
- A 使用私钥对消息或是消息的 Hash 值进行加密,并将结果一起发送给 B
- B 对密文使用公钥进行解密,比较 A 发送的消息
- 如果一样则说明一定是 A 发送的,无法事后否认,否则就可能发生了 篡改,假冒的情况
数字证书
其中网站有 服务器证书,其实就是数字证书,其中使用的个人信息就是域名 目的是在数字签名的基础上,让第三方(CA认证中心)证明某个公钥的身份信息
过程
- A 向 CA 申请证书,想让 CA 证明一个公钥是自己的
- A 将自己的信息和公钥交给 CA 认证中心,CA 使用自己的私钥根据 A 的信息为 A 生成数字签名
- CA 将A的信息和生成的数字签名放在一起,这就是 A 的数字证书,然后提供自己的公钥,供 B 去验证
- B 收到 A 提供的数字证书,使用 CA 的公钥进行解密验证,对照信息,并且确认解密后的信息确实是 A
问题:
B 怎么确认 CA 的公钥就是 CA 的? CA 的公钥也是一个证书,是由更高级的 CA 颁发的,这样一层一层,最上层的 CA 为 root CA,也就是根认证中心,根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。 这样的一层一层认证机构,这一系列的技术规范被统称为 公钥基础设施 。
|