ECDH 算法

news2024/9/28 1:21:15

一、简介

ECDH全称是椭圆曲线迪菲-赫尔曼秘钥交换(Elliptic Curve Diffie–Hellman key Exchange),主要是用来在一个不安全的通道中建立起安全的共有加密资料,一般来说交换的都是私钥,这个密钥一般作为“对称加密”的密钥而被双方在后续数据传输中使用。

ECDH是建立在这样一个前提之上的,给定椭圆曲线上的一个点P,一个整数k,求Q=KP很容易;但是通过Q,P求解K很难。

二、DH密钥交换原理

网上一个经典的场景,Alice和Bob要在一条不安全的线路上交换秘钥,交换的秘钥不能被中间人知晓。
首先,双方约定使用ECDH秘钥交换算法,这个时候双方也知道了ECDH算法里的一个大素数P,这个P可以看做是一个算法中的常量。

P的位数决定了攻击者破解的难度

还有一个整数g用来辅助整个秘钥交换,g不用很大,一般是2或者5,双方知道g和p之后就开始了ECDH交换秘钥的过程了。

Alice知道了共用参数p和g,生成私有整数a作为私钥,公钥算法一般是公钥加密,私钥解密,公钥给对方来加密数据,拿到密文后私钥解密查看内容正确性,这个时候Alice直接通过线路告诉Bob自己的私钥a显然既不合理也是一件风险很大的事。 这个时候Alice需要利用p,g,a通过公式 g a m o d p = A g^a mod p = A gamodp=A生成A作为公钥传递。

Bob通过链路收到Alice发来的p,g,A,知道了Alice的公钥A。这个时候Bob也生成自己的私钥b,然后通过公式 g b m o d p = B g^b mod p = B gbmodp=B生成自己公钥B。 在发送公钥B前,Bob通过 A b m o d p = K A^b mod p = K Abmodp=K生成K作为公共秘钥,但是并不发送给Alice,只通过链路发送B。

Alice收到Bob发来的公钥B以后,同样通过 B a m o d p = K B^a mod p = K Bamodp=K生成公共秘钥K,这样Alice和Bob就通过不传递私钥a和b完成了对公共秘钥K的协商。

请添加图片描述

三、说明示例

  1. Alice和Bob同意使用质数p和整数g:

p = 83 , g = 8 p = 83, g = 8 p=83,g=8

  1. Alice选择秘钥 a = 9 a = 9 a=9, 生成公钥 g a m o d p = A g^a mod p = A gamodp=A 并发送

( 8 9 ) m o d 83 = 5 (8^9) mod 83 = 5 (89)mod83=5

  1. Bob选择秘钥 b = 21 b = 21 b=21, 生成公钥 $g^b mod p = B $并发送

( 8 2 1 ) m o d 83 = 18 (8^21) mod 83 = 18 (821)mod83=18

  1. Alice计算 B a m o d p = K B^a mod p = K Bamodp=K

1 8 9 m o d 83 = 24 18^9 mod 83 = 24 189mod83=24

  1. Bob计算 B a m o d p = K B^a mod p = K Bamodp=K

5 2 1 m o d 83 = 24 5^21 mod 83 = 24 521mod83=24

至此24就是双方协商出来的秘钥。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32速成笔记—IWDG

文章目录 一、IWDG简介二、STM32的IWDG2.1 STM32的IWDG简介2.2 喂狗2.3 IWDG框图 三、IWDG配置步骤四、IWDG配置程序4.1 IWDG初始化程序4.2 喂狗 五、应用实例 一、IWDG简介 独立看门狗(Independent Watchdog, IWDG),什么是看门狗&#xff1…

【二叉树part06】| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

目录 🎈LeetCode654.最大二叉树 🎈LeetCode617.合并二叉树 🎈LeetCode700. 二叉搜索树中的搜索 🎈LeetCode98. 验证二叉搜索树 🎈LeetCode654.最大二叉树 链接:654.最大二叉树 给定一个不重复的整数数…

林客本地生活商城小程序开发

本地生活商城小程序的市场前景非常广阔。近年来,随着移动互联网技术的普及和人们消费观念的变化,越来越多的消费者开始通过手机进行线上购物。本地生活商城小程序恰好满足了用户对于便捷、快速、个性化购物体验的需求,具有以下优势&#xff1…

1752_使用Perl实现目录遍历

全部学习汇总: GreyZhang/speed_emacs: Try to make a new emacs configuration which is fast even on windows! (github.com) 关于Perl和Python的优劣我不去做什么分析,也不去发表什么深入的见解。我个人的学习过程是先Perl后Python再回到Perl。因为工…

【2023.6.26】记达梦数据库基于信创服务器麒麟OS报错与优化

一、场景描述 OS:银河麒麟V10(GUI)CPU:鲲鹏920达梦数据库:V8 (基于平台信创:麒麟V10、鲲鹏架构)金蝶中间件:V9 二、达梦数据库报错记录 报错1:(SWT:18564&…

基于Java削面快餐店点餐服务系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

cmd中输入npm install,回车——安装node modules依赖,出现报错的【解决方法】

目录 1.正常情况是: 2.当前问题: 3.解决方法: 当拿到一个前端项目的代码文件夹的时候,想要启动项目。 如果项目的代码文件夹里面没有node modules文件夹: 需要打开cmd,然后在里面输入 npm install (可…

c++初始化列表和静态成员

文章目录 一、初始化列表二、静态(static)成员 一、初始化列表 类对于成员变量的赋值有两种方式 函数体内赋值初始化列表 函数体内赋值就是直接在构造函数中赋值即可,而初始化列表它是较为特殊的一种方式! 初始化列表是在构造函数()之后以:开始,然后后…

查询穿梭框实现

技术栈: 使用vue3 的composition api 和 tsx 进行开发 一、需求描述 点击编辑,显示穿梭框: 可将左侧维度拖动至右侧,已选维度可上下拖动调整顺序。 二、需求分析 1、状态传递过程 我们首先来分析一下,整个流程中的…

魔改xxl-job,彻底告别手动配置任务!自动注册xxljob定时任务

xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单、支持分布式等优点,让它广泛应用在我们的项目中,解决了不少定时任务的调度问题。 我们都知道,在使用过程中需要先到xxl-job的任务调度中心页面上,配置执行器…

WiFi模块测试|高通QCA9531方案WiFi模块网页配置说明-SKW99/SKW100

本篇以高通QCA9531方案无线路由WiFi模块SKW99为例,简单介绍 高通方案无线路由WiFi模块的软件使用。友情提示:多图,请在WiFi环境下阅读。 以SKW99为例,在SKW99规格书找到模块系统框图、PIN脚图及各个PIN脚的描述定义;之…

AutoSAR系列讲解(入门篇)3.4-RTE对Ports的支撑(下)

一、C/S接口的实现 之前在第二章AppL中讲过了C/S接口,这里再更加深入的说明一下其实现的原理:首先,C/S接口就是客户/服务接口,这个接口就是客户来调用服务 端的操作的一个接口。也就是我写着写着,发现我想要调用一个函…

【Figma技巧】布尔变量控制图层显隐

用2023年6月22日更新的Figma最新功能,实现按钮控制图层显隐的交互。 实现效果 步骤 1. 创建本地变量 点击右侧面板中的Local variables弹出变量面板,点击底部Create variable按钮,创建一个Boolean布尔变量。 本案例中,我需要分…

从0开始Jmeter接口测试实战

在之前的文章中给大家介绍过接口测试文档和接口测试用例示例,本文基于Jmeter工具给大家介绍一下如何实现接口测试用例:包括发起Http请求,绕过登陆,验证响应。JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架…

Python|Pyppeteer操作浏览器,弹出文件选择框,实现自动选择“指定文件”(14)

前言 本文是该专栏的第14篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 使用pyppeyeer操作浏览器的时候,可能有时候会遇到这样的情况,如下图所示: 通过程序脚本自动点击某个按钮之后,触发一个弹出框,需要输入对应的文件路径。经验丰富的同学,可能会想到…

深入浅出 - 单例模式

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌ Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收…

【MySQL】幽深不可测,登此方觉心

详解Mysql安装教程 一、MySQL基础 1、MySQL是什么? MySQL是一种用关系型数据库管理系统的软件。它是一种开源数据库,可以利用它来存储、管理和访问各种类型的数据。MySQL可用于多种应用程序,包括网站、电子商务系统、移动应用程序、企业级应用程序等…

Clickhouse物化视图原理和使用详解

前言 ClickHouse广泛用于用户和系统日志查询场景中,主要针对于OLAP场景,为业务方提供稳定高效的查询服务。在业务场景下,数据以不同的格式、途径写入到clickhouse。用传统JOIN方式查询海量数据,通常有如下痛点: 每个查询的代码冗…

【Java】ConcurrentHashMap1.8源码保姆级解析

目录 ConcurrentHashMap 1.8的优化 初始化流程 扩容流程 读取数据流程 计数器的实现 ConcurrentHashMap 1.8的优化 存储结构的优化 数组链表 -> 数组链表红黑树 写数据加锁的优化 扩容的优化(协助优化) 计数器的优化 LongAddr -> Cell[] 分…

力扣算法练习(二)

主要参考自力扣官网解法 1.最长回文子串(5) 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s "babad" 输出:"bab"…