IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 安全算法介绍 -> 正文阅读

[网络协议]安全算法介绍

介绍

解决数据传输的安全性问题

要解决的问题

四个问题

  1. 窃听
    ○ 加密:如 共享,公开,混合,交换等都是解决窃听的问题,而不管其他问题
  2. 假冒
    ○ 消息认证码(不👌),而且比数字证书更弱一点,无法解决事后否认的问题
    ○ 数字签名(不👌)
    ○ 数字证书(比较👌)
  3. 篡改
    ○ 消息认证码(👌)
    ○ 数字签名(👌)
  4. 事后否认
    ○ 数字签名(👌)

其中数字签名存在 “无法确认公开密钥的制作者” 的问题,需要使用 数字证书 技术
数字证书 相比较于 数字签名,也就是引入了第三方认证而已

Hash

特征

  1. 定长
  2. 内容相同,Hash 值相同
  3. 内容相似,不导致 Hash 值相似
  4. Hash 冲突
  5. 不可逆
  6. 算法相对简单,求取效率高

一些 Hash 算法

MD5,SHA-1,SHA-2
其中 MD5 和 SHA-1 有安全隐患,不推荐使用

共享密钥加密(对称加密)

加密和解密都用相同的密钥

不安全:

传输密钥,不是很安全

一些共享密钥加密算法

凯撒密码,AES,DES,动态口令

公开密钥加密(非对称加密)

使用公钥和私钥
可以使用 数字证书 来防止中间人攻击,确认公钥发送方的身份

不安全:

会发生中间人攻击,替换公钥,因为无法确定公钥是谁发的

其他问题:

不容易找到相应的加密算法
加密比较耗时,这个问题可以使用混合加密解决

加密算法需要满足的条件:

  1. 可以使用某个数值对数据进行加密
  2. 可以使用另一个数值对数据进行解密
  3. 两个数值不能相互推算得出

一些公开密钥加密算法

RSA(较为广泛),椭圆曲线加密算法

混合加密

主要用来解决:
共享加密密钥传输不安全
公开加密计算速度慢的问题

使用公开加密的公钥加密共享密钥的密钥,以保证共享加密的密钥的传输安全
然后信息的加密使用共享密钥

SSL 协议就使用了这样的混合加密方法
SSL 协议进行升级后正式命名为 TLS,也常被称为 SSL/TLS 协议
相应的 HTTPS 也使用了该混合加密方法

迪菲-赫尔曼密钥交换

用来交换密钥,其实本质上并没有交换密钥,所以又被称为 “迪菲-赫尔曼密钥协议”
是另一种解决共享密钥传输不安全的方法

我感觉可以称为 合成密钥加密

主要步骤:

  1. 传输 P
  2. A,B 为两个私钥,为甲和已所持有
  3. 甲合成 AP,已合成 BP
  4. 相互传输 AP,BP
  5. 甲合成 ABP,已合成 ABP,将 ABP 作为共享密钥来使用

传输的为 P,AP,BP,无法合成 ABP,所以传输是安全的

当然,需要有相应的算法来保证:

  1. 可以合成,且可以多次合成
  2. 合成后就无法获取合成的因子,也就是 AP 无法获取单独的 A 或 P
  3. 合成不用按照顺序,而只和因子有关,也就是 AP+B = BP+A

数学原理:

离散对数问题目前没有解
根据素数 P、生成元 G 和 “GX % P” 求出 X

消息认证码

实现 认证 和 检测篡改 两个功能,但无法解决 事后否认 的问题,因为 A 和 B 双方都可以生成认证码
● 类似于 Hash 校验,而且在 Hash 里参杂了密钥

步骤

  1. 安全传输一个共享密钥,可以使用混合加密,或是迪菲-赫尔曼进行传输
  2. A 在发送的时侯,使用算法计算:密文+密钥 = 认证码,将认证码一起发送
  3. B 收到消息,使用相同的算法计算,比较认证码是否和 A 发送的相同
    其中认证码计算的方法有:HMAC(最广泛),OMAC,CMAC

数字签名

主要处理 事后否认 的问题,也可以防止 篡改,假冒
但是由于不知道公钥的制作者到底是谁,所以无法彻底防止假冒,那其实 消息认证码 也有这样的问题
使用 公开密钥加密 来进行数字签名,只是现在私钥是用来加密的,公钥是用来解密的
严格来说,也有使用加密运算以外的计算方法来生成签名的情况
使用私钥加密,公钥解密,并不是所有的公开密钥加密都可以反着用,但是 RSA 可以

过程

  1. A 准备公开密钥,将公钥发送给 B
  2. A 使用私钥对消息或是消息的 Hash 值进行加密,并将结果一起发送给 B
  3. B 对密文使用公钥进行解密,比较 A 发送的消息
  4. 如果一样则说明一定是 A 发送的,无法事后否认,否则就可能发生了 篡改,假冒的情况

数字证书

其中网站有 服务器证书,其实就是数字证书,其中使用的个人信息就是域名
目的是在数字签名的基础上,让第三方(CA认证中心)证明某个公钥的身份信息

过程

  1. A 向 CA 申请证书,想让 CA 证明一个公钥是自己的
  2. A 将自己的信息和公钥交给 CA 认证中心,CA 使用自己的私钥根据 A 的信息为 A 生成数字签名
  3. CA 将A的信息和生成的数字签名放在一起,这就是 A 的数字证书,然后提供自己的公钥,供 B 去验证
  4. B 收到 A 提供的数字证书,使用 CA 的公钥进行解密验证,对照信息,并且确认解密后的信息确实是 A

问题:

B 怎么确认 CA 的公钥就是 CA 的?
CA 的公钥也是一个证书,是由更高级的 CA 颁发的,这样一层一层,最上层的 CA 为 root CA,也就是根认证中心,根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。
这样的一层一层认证机构,这一系列的技术规范被统称为 公钥基础设施 。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 01:21:54  更:2022-09-30 01:24:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:25:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码