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

密码学学习笔记(十八):Diffie–Hellman (DH) 密钥交换

DH算法是第一个密钥交换算法,也是第一个得到形式化描述的公钥密码算法。

群论

DH密钥交换算法基于数学中的群论,群论也是当今大多数公钥密码的基础。

要使集合及其运算成为一个群,需要满足以下性质:

  • 封闭性:群中两个元素运算的结果仍是集合中的元素。比如,对于群中的两个元素a和b,a*b也是群中的元素。
  • 结合律:多个元素同时进行运算时,可以按任何顺序执行运算。比如,对于群元素a,b和c,a(bc)和(ab)c运算得到的是相同的群元素。
  • 单位元:群中有且仅有一个元素是单位元,单位元与群中任一元素运算时都不会改变该元素。例如,我们在乘法群中将单位元定义为1,那么对于任何群元素a,都有a*1=a。
  • 逆元:群中的元素均有逆元,群元素及其逆元的运算结果等于单位元。所有的群元素都存在逆元。比如,对于任何群元素a,都存在一个逆元素a^{-1},使得a\times a^{-1}=1

模乘

DH密钥交换算法使用模乘这种特殊运算。

模运算可以参考我之前写的博客

密码学学习笔记(七):Modular arithmetic - 模算数_kingofyb的博客-CSDN博客、

DH密钥交换

没有共享密钥的双方可以使用此协议建立共享密钥。

Alice随机挑选在Z_{p}^{*}里的a, 计算g^{a} mod p并将其发送给Bob。

Bob随机挑选在Z_{p}^{*}里的b, 计算g^{b} mod p并将其发送给Alice。

现在Alice知道a和g^{b}所以她可以计算:

S=(g^{b})^{a}=g^{ab} mod p

Bob知道b和g^{a}所以他可以计算同样的S:

S=(g^{a})^{b}=g^{ab} mod p

他们有一个共同的秘密𝑆 现在,可以使用KDF计算共享密钥。

密钥交换安全性

  • 防窃听安全:
    对手可以看到所有通信,并旨在区分密钥和随机密钥。在实践中,对手可能能够拦截和修改通信。比如中间人(MitM)攻击。
  • 针对MitM攻击的安全性:
    对手可以查看和修改(删除、添加、更改)通信,并旨在区分密钥和随机密钥

DH密钥交换安全性

根据DH密钥交换算法的工作原理,算法参与者需要协商一个素数p和群生成元g作为公共参数。素数p应该尽可能越大越好。由于DH密钥交换算法的安全性基于离散对数问题的困难性,因此对离散对数问题的最佳攻击直接影响到DH算法的安全性。在实践中,通常将p设置为2048比特的素数。

𝑔, 𝑝 是公开的,窃听者也会得到g^{a},g^{b} 

对于大模量𝑝:

  • g^{a},g^{b}很难计算得出a或者b - 离散对数(DL)问题
  • g^{a},g^{b}很难计算得出g^{ab} - 计算Diffie-Hellman(CDH)问题
  • g^{a},g^{b}更难计算得出随机值中的g^{ab} - 决策Diffie-Hellman(DDH)问题

所以这两个短暂的秘密𝑎, 𝑏 以及最终共享的秘密𝑆 对于窃听者来说很难计算𝑆 “看起来很随意”

但是Diffie–Hellman不能保证身份验证,因此不能防止中间人攻击,因此Diffie–Hellman必须始终与身份验证机制一起使用

中间人对抗(Man In The Middle Attack)Diffie–Hellman

中间人(MitM)可以拦截和修改消息,向Alice假装自己是Bob,并向Bob假装自己是Alice
最后,Alice认为她正在与Bob分享一个秘密,Bob认为他正在与Alice分享一个机密,但两人都与密探分享了不同的秘密

如果Alice和Bob使用他们共享的秘密生成通信密钥,MitM可以读取所有内容

相关文章:

密码学学习笔记(十八):Diffie–Hellman (DH) 密钥交换

DH算法是第一个密钥交换算法,也是第一个得到形式化描述的公钥密码算法。 群论 DH密钥交换算法基于数学中的群论,群论也是当今大多数公钥密码的基础。 要使集合及其运算成为一个群,需要满足以下性质: 封闭性:群中两…...

Linux —— 进程间通信(管道)

目录 一,进程间通信 二,管道 匿名管道 命名管道 一,进程间通信 进程间通信(IPC,InterProcess Communication),即在不同进程之间进行信息的传播或交换;由于一般进程用户地址空间是…...

python常用

环境配置 conda Conda自动补全 在终端激活conda环境的时候按tab不能自动补全activate和环境名。安装后可用tab进行补全。 安装 conda-bash-completion 插件:GitHub 安装方法: conda install -c conda-forge conda-bash-completion常用命令 #创建虚拟…...

jeecg如何创建报表并配置到菜单中

当使用jeecg创建单表之后,需要进行报表显示,并把报表配置到菜单中,该如何操作呢?下面进行详细讲解。这里以课程表这张表为例进行讲解。 一.表单创建完成,并配置好菜单栏。具体步骤略,如下图: 二.创建积木报表 1.左侧边栏展开低代码开发菜单,进入报表设计器栏目 2.进…...

Servlet+JDBC实战开发书店项目讲解第12讲:会员管理功能

ServletJDBC实战开发书店项目讲解第12讲:会员管理功能 实现思路: 显示会员列表: 创建一个管理页面,用于显示所有会员的信息。在后端,创建一个Servlet来处理显示会员列表的请求。在该Servlet中,通过JDBC从数…...

java面向对象——继承以及super关键字

继承的概念 1. 被继承的类称为父类(超类),继承父类的类都称为子类(派生类) 2. 继承是指一个对象直接使用另一个对象的属性和方法,但是能继承非私有的属性和方法;(1) 构造方法不能被继承。(2) 但…...

[机缘参悟-101] :IT人 - 遵从世界本源的样子,不带个人情感、道德、认知倾向,接纳一切,你就拥有无限的力量

目录 道的本义 如来的本义 观音的本义 无为而治本质是顺势而为 儒家的本质 感悟: 道的本义本质:天地的力量和运行规律 "天地以万物为刍狗"是出自《道德经》第五十章的一句话。在这句话中,"天地"指的是宇宙&#x…...

C++--深度理解智能指针

PS:智能指针简单应用看这里 http://t.csdn.cn/qN7IK 1.智能指针的介绍 在C中,智能指针有三个版本,分别为: auto_ptr unique_ptr shared_ptr 这三个版本的智能指针中,shared_ptr最为完善,auto_ptr基本上没有太大用…...

Spring Boot使用MySQL的默认连接池

笔者在近期秋招面试的时候被问到了这个问题,现在简单梳理一下便于后期重新回顾,并加深记忆。 Spring Boot 默认使用的数据库连接池是 HikariCP(开源库地址)。 HikariCP 是目前性能最好的连接池之一,它具有高度的性能、可靠性和可扩展性&…...

conda使用教程

Conda介绍 conda可以理解为一个工具,也是一个可执行命令,其核心功能是包管理和环境管理。包管理与pip的使用方法类似似,环境管理则是允许用户方便滴安装不同版本的python环境并在不同环境之间快速地切换。 conda的设计理念 conda将几乎所有…...

什么是LLM大语言模型?

什么是LLM大语言模型? 大语言模型(英文:Large Language Model,缩写LLM),也称大型语言模型,是一种人工智能模型,旨在理解和生成人类语言。它们在大量的文本数据上进行训练&#xff0…...

jenkins同一jar包部署到多台服务器

文章目录 安装插件配置ssh服务构建完成后执行 没有部署过可以跟这个下面的步骤先部署一遍,我这篇主要讲jenkins同一jar包部署到多台服务器 【Jenkins】部署Springboot项目https://blog.csdn.net/qq_39017153/article/details/131901613 安装插件 Publish Over SSH 这…...

(四)Doceke安装MySQL镜像+Docker启动MySQL容器

Doceke安装MySQL镜像/Docker启动MySQL容器 一、doceke安装MySQL镜像 切换到root用户,su root 。 1、启动Docker 启动:sudo systemctl start docker 停止:systemctl stop docker 重启:systemctl restart docker 查看docker运行…...

Android Studio:Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7

原项目使用jdk8&#xff0c;升级gradle后出现的该问题。 java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7at org.codehaus.groovy.vmplugin.VMPluginFactory.<clinit>(VMPluginFactory.java:43)at org.codehaus.gro…...

Spring Clould 搜索技术 - elasticsearch

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初识ES-什么是elasticsearch&#xff08;P77&#xff0c;P78&#xff09; 1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能…...

android核绑定cpuset配置与检测进程所在核cpuset方法

一、开机阶段 开机有如下阶段。抛开开机动画需要的audio、surfaceflinger等进程&#xff0c;大部分android程序是在/data分区加载完整以后开始加载。所以cpuset的配置可以在 post-fs-data之后。注意&#xff0c;init.rc的不同阶段脚本都可能覆盖前面配置的cpuset。配置好检查与…...

Lnton羚通关于如何使用nanoPC-T4 安装OpenCV?

nanoPC-T4 安装 OpenCV Note: OpenCV has been pre-installed in FriendlyCore/FriendlyDesktop (Version after 201905) and does not require manual installation. Please download the latest FriendlyCore/FriendlyDesktop Image file from the following URL: http://do…...

内存泄漏:前端开发者的噩梦——内存泄露的原因及排查

在前端开发中&#xff0c;内存泄漏是一个常见但令人头疼的问题。它会导致应用程序变得缓慢&#xff0c;不稳定&#xff0c;最终可能崩溃。本文将介绍内存泄漏的概念、常见泄漏原因以及如何排查和预防内存泄漏。 什么是内存泄漏&#xff1f; 内存泄漏是指应用程序中的内存被错…...

高效使用ChatGPT之ChatGPT客户端

ChatGPT客户端&#xff0c;支持Mac, Windows, and Linux 下载地址见文章结尾 软件截图 Windows: Mac&#xff1a; 说明 chatgpt桌面版&#xff0c;相比于网页版的chatgpt&#xff0c;最大的特色是支持历史聊天对话记录导出&#xff0c;且支持三种格式&#xff1a;PNG、PDF、…...

【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据

【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据 文章目录 【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据前言出现的背景一、TDSQL-C数据库是什么&#xff1f;二、TDSQL-C 的特点三、TDSQL-C的应用场景四、基于TD…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...