当前位置: 首页 > news >正文

计算机网络-HTTP相关知识-RSA和ECDHE及优化

HTTPS建立基本流程

  • 客户端向服务器索要并验证服务器的公钥。
  • 通过密钥交换算法(如RSA或ECDHE)协商会话秘钥,这个过程被称为“握手”。
  • 双方采用会话秘钥进行加密通信。

RSA流程

RSA流程包括四次握手:

  • 第一次握手:客户端发送支持的TLS版本、生成的Client Random和支持的密码套件列表。
  • 第二次握手:服务器处理确认TLS协议版本,然后发送生成的Server Random、密码套件列表(包括密钥交换算法、签名算法、对称加密算法、对称加密算法分组方式和摘要算法)以及服务器的数字证书(包含公钥)。
  • 第三次握手:客户端处理验证证书真伪,生成会话密钥(由Client Random + Server Random + pre-master key组成以保证随机性),然后发送服务器公钥加密过的刚生成的pre-master key(预主密钥),告诉服务端之后使用加密方式发送消息,并发送之前所有发送的数据做个摘要,并使用会话密钥加密,以验证可用性。
  • 第四次握手:服务器处理生成会话密钥,然后发送告诉客户端之后使用加密方式发送消息,并发送之前所有发送的数据做个摘要,并使用会话密钥加密,以验证可用性。

RSA缺陷

RSA的主要缺陷是没有前向安全性。这意味着如果一个会话的秘钥被泄露,那么所有以前的会话都可能被解密。

DHE算法

  • DHE算法基于离散对数问题,即对于 aimodp=b,当 p 很大时,已知 a、b 无法快速获得 i ,时间复杂度为 O(p​) ,但是如果正向计算(已知 a、i,求b )是可以做到 O(logp) 的。
  • DHE算法的流程如下:
    • 双方确定模数P和底数A。
    • 各自随机生成私钥i,j作为指数。
    • 通过 Bi=Aimodp、Bj=Ajmodp 得到公钥并交换。
    • 以 K=Bij=Bjimodp 为会话密钥。
  • 在static DH算法中,一方私钥是固定的,无法保证前向安全,所以有了DHE,其中E就是 ephemeral 临时的。
  • DHE算法的缺点是虽然保证了前向安全性,但是需要大量乘法,性能不佳。

ECDHE算法

  • ECDHE算法基于椭圆曲线上的加法,对于椭圆曲线上一点 A,过A的一条切线与圆锥曲线相交,交点关于x轴对称的点记为2A。
  • ECDHE算法的流程如下:
    • 双方确定椭圆曲线和曲线是基点G。
    • 各自随机生成私钥d1、d2。
    • 计算公钥 Q1=d1G、Q2=d2G并交换。
    • 计算得到 d1Q2=d2Q1 中的x相同的(预主密钥)。
  • ECDHE算法的优势是利用了ECC圆锥曲线特性,计算量更少,前向安全性,ECDHE 允许 TLS False Start 即在第三次挥手之后可以直接进行数据传输。

ECDHE流程

ECDHE流程包括四次握手:

  • 第一次握手:客户端发送支持的TLS版本、生成的Client Random和支持的密码套件列表。
  • 第二次握手:服务器处理确认TLS协议版本,生成私钥、公钥,然后发送生成的Server Random、密码套件列表(类型同RSA)、服务器的数字证书、选定的圆锥曲线以及对应公钥。
  • 第三次握手:客户端处理生成私钥、公钥,会话密钥 = Client Random + Server Random + ECDHE计算出的点的x坐标 保证随机性,然后发送圆锥曲线公钥(客户端公钥加密)、告诉服务端之后使用加密方式发送消息、之前所有发送的数据做个摘要,并使用会话密钥加密,验证可用性。
  • 第四次握手:服务器处理生成会话密钥,然后发送告诉客户端之后使用加密方式发送消息、之前所有发送的数据做个摘要,并使用会话密钥加密,验证可用性、Session Ticket 会话复用。

HTTPS优化

  • 硬件优化

    • 升级CPU,加快密钥计算。
    • 选用支持 AES-NI 特性的 CPU。
  • 软件优化

    • openssl升级。
    • linux内核升级。
  • 协议优化

    • 选用 ECDHE 密钥交换,支持 TLS False Start。
    • 选择 x25519 椭圆曲线,该曲线是目前计算最快的椭圆曲线。
    • 有CPU支持就选AES,如果没有就选择ChaCha20。
    • 安全性要求不是很高使用 AES128 代替 AES256。
    • 升级TLS1.3,将第一、三次握手合并,两次握手之后即可加密传输。密钥交换算法仅留下了支持前向安全性的ECDHE,仅留下了几个安全性高的密码套件,0RTT会话复用。
  • 证书优化

    • 选择椭圆曲线(ECDSA)证书,而不是 RSA 证书,相同安全程度下ECDSA密钥更短。
  • 会话复用

    • Session ID:双方会在内存缓存会话密钥,并用唯一的 Session ID 来标识,Session ID 和会话密钥相当于 key-value 的关系,定时过期。客户端再次连接时,hello 消息里会带上 Session ID,服务器收到后就会从内存找,如果还有就继续使用,省略后续挥手过程。占用服务器内存。
    • Session Ticket:首次连接后的第四次挥手加密会话密钥作为  Ticket 发给客户端。服务器收到 Ticket 后判断有效期,有效就恢复会话。在 TLS1.3 中把 Ticket 和 HTTP 请求一同发送给服务端即可,我们称之为Pre-shared Key(PSK)。
    • 重放攻击:如果中间人截获了客户端使用会话重用技术的 POST 请求,会导致服务器被恶意修改。应对方法包括设定过期时间,只对GET请求等使用会话复用。

相关文章:

  • Unity类银河恶魔城学习记录11-15 p117 Ice and Fire item Effect源代码
  • 【详细介绍WebKit的结构】
  • 缓存最佳实践
  • Pointnet++改进即插即用系列:全网首发OREPA在线重新参数化卷积,替代普通卷积 |即插即用,提升特征提取模块性能
  • Fractions Again?!(UVA 10976)
  • linux系统编程 线程 p1
  • C#字典学习笔记
  • 实验:基于Red Hat Enterprise Linux系统的创建磁盘和磁盘分区(二、三)
  • zabbix图表时间与服务器时间不一致问题
  • android——枚举enum
  • 软件测试工程师面试汇总功能测试篇
  • Spring中BeanFactoryPostProcessor详解
  • WordPress 6.5 “里贾纳”已经发布
  • 舞蹈网站制作分享,舞蹈培训商城网站设计案例分享,wordpress主题分享
  • kafka broker
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 03Go 类型总结
  • css布局,左右固定中间自适应实现
  • ES6简单总结(搭配简单的讲解和小案例)
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • java中的hashCode
  • PHP 小技巧
  • Quartz初级教程
  • React组件设计模式(一)
  • spring + angular 实现导出excel
  • Terraform入门 - 3. 变更基础设施
  • vue-router 实现分析
  • web标准化(下)
  • 阿里云购买磁盘后挂载
  • 使用Gradle第一次构建Java程序
  • 正则表达式
  • ​520就是要宠粉,你的心头书我买单
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)ssm码农论坛 毕业设计 231126
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (杂交版)植物大战僵尸
  • .Net FrameWork总结
  • .net 程序发生了一个不可捕获的异常
  • .Net 知识杂记
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET基础篇——反射的奥妙
  • @EventListener注解使用说明
  • @font-face 用字体画图标
  • @SuppressWarnings(unchecked)代码的作用
  • @Validated和@Valid校验参数区别
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [C#]使用C#部署yolov8的目标检测tensorrt模型
  • [C++] sqlite3_get_table 的使用
  • [C++]C++入门--引用
  • [HackMyVM]靶场 Quick3
  • [IE编程] 如何编程清除IE缓存