8. 何为ECC

news2024/11/26 12:20:08

非对称加密

在我们认知里面,通常说到非对称加密,就会弹出2个词,RSA和ECC,做过对称加密的都非常清楚,RSA其实就是模指运算。用公钥来加密,私钥来解密;私钥签名,公钥验签。但是提到ECC的实际使用,很多人就摸不着头脑了,因为一般标准代码库里面,根本没有ECC加解密的词汇。

以下是golang代码库里面的加密,发现,大部分加密都有,就是缺了ECC,但是我们可以看到,有几个类似ECC的字样。

ECC的概念

其实,ECC只是个Elliptic Curve Cryptography,翻译过来就是椭圆曲率密码学,这里我们不深入理解里面的数学算法,只讲核心应用。

既然名字是个密码学,就是个概念的意思。里面最最核心的东西就是 

A1 * B2 = B1 * A2

公式的理解

非对称加密,就是有公钥和私钥,我们假设秘钥对A,其中A1是私钥, A2是公钥。  秘钥对B,B1是私钥,B2是公钥。

那使用同一根曲线生成出来的2对不同的秘钥,始终都满足这个公式:A1 * B2 = B1 * A2

这里画个重点,“同一根曲线”。在生成公私钥时,选择的一条曲线。

我们以下面Golang的代码来讲解这个特性:

func TestEcdh(t *testing.T) {
	curve := elliptic.P256()
	pri1, x1, y1, _ := elliptic.GenerateKey(curve, rand.Reader) // 随机生成秘钥A, x1, y1 为公钥A2,pri1为私钥A1
	pri2, x2, y2, _ := elliptic.GenerateKey(curve, rand.Reader) // 随机生成秘钥B, x2, y2 为公钥B2,pri2为私钥B1

	ret1, ret11 := curve.ScalarMult(x1, y1, pri2)  // B1 * A2
	ret2, ret22 := curve.ScalarMult(x2, y2, pri1)  // A1 * B2

	fmt.Println("ret1:", ret1)
	fmt.Println("ret2:", ret2)

	fmt.Println("ret11:", ret11)
	fmt.Println("ret22:", ret22)
}

// Run result
=== RUN   TestEcdh
ret1: 26996158176686521373743015083149004542435294973837101268950353997964087993718
ret2: 26996158176686521373743015083149004542435294973837101268950353997964087993718
ret11: 50996642934285637232692495514710136619292820085348488595432751403713569264240
ret22: 50996642934285637232692495514710136619292820085348488595432751403713569264240

curve := elliptic.P256() // P384, P521

其实,这就是选择一根曲线,我们可以理解为RSA里面选择1024,2048,4096或者……

那利用这个特性,我们就可以client端和server端,同时各自生成一对秘钥A和B,然后互发公钥A2,那这样,2边拿到公钥后,和自己的私钥进行"乘法"运算,就能得到一个相同的值,利用这个相同的值,作为AES对称秘钥。后面的数据传输,就可以使用这个AES对称秘钥进行了。

所以,ECC更加算是用于秘钥交换,而不是个加密功能。

基于这个功能,实际的常见的使用场景有:

  1. TLS里面秘钥交换
  2. Applapy token解密
  3. 以太坊里面用到的Ecies加密

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

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

相关文章

【数据结构】链表 linked list

一、什么是链表 零散的内存空间存储,由元素和指针组成 二、常用操作 1.原理 access:通过next指针遍历 时间复杂度:O(N) search:通过next指针遍历 时间复杂度:O(N) insert:找个新的内存空间存储新元素…

学习HCIP的day.10

十、对BGP一些情况的总结: 1、路由条目不优特殊情况: 在BGP协议中,存在一种无法优秀的路由条目;假设R4路由表中存在一条非BGP产生的到达5.5.5.5的路由条目,且该条目用于R4与R5建立BGP邻居关系;那么之后R5…

【Linux网络】搭建LNMP架构

搭建LNMP架构 一、编译安装MySQL服务二、安装Nginx服务三、安装配置PHP解析环境四、部署Discuz社区论坛Web应用五、部署博客论坛应用六fpm进程优化 一、编译安装MySQL服务 1.安装MySQL环境依赖包 yum -y install gcc gcc-c ncurses ncurses-devel bison cmake2、创建运行用户 u…

地震勘探基础(三)之地震波的时距曲线

时距曲线 在反射波地震勘探中,一般是在地面激发地面接收,激发点到接受点的距离称为炮间距(offset),用 x x x表示。如果炮间距为0,称为自激自收。 单道接收:激发一次只在一个位置上接收地震波。…

在线ps网页版推荐,让你摆脱安装包的烦恼

在设计领域,Photoshop的地位多年来一直是不可动摇的,其强大的功能可以毫不夸张地说:只有你想不到的,没有PS做不到的。但强大如PS,也有自己的小局限性:处理矢量图相对较弱,更难掌握。今天&#x…

微信小程序——监听页面滑动(一)onPageScroll

微信小程序——手把手教你学会监听页面滑动 知识回调(不懂就看这儿!)场景复现核心干货如何进行页面监听了解onPageScroll实际使用onPageScroll 知识回调(不懂就看这儿!) 知识专栏专栏链接微信小程序专栏ht…

栈和队列高频面试题(必刷): 用队列实现栈 用栈实现队列 实现循环队列 括号匹配

文章目录 用队列实现栈用栈实现队列实现循环队列括号匹配 用队列实现栈 题目描述: 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。 实现 MySt…

新项目 使用 IDEA 搭建后端环境 及 搭建是可能遇到的 问题 及解决方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 新项目 使用 IDEA 搭建后端环境 及 搭建是可能遇到的 问题 及解决方法 前言 提示:这里可以添加本文要记录的大概内容: 新项目 使用 IDEA 搭建后端环…

【群智能算法改进】一种改进的沙丘猫群优化算法 改进沙丘猫群算法 改进SCSO[2]【Matlab代码#36】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始沙丘猫群优化算法2. 改进沙丘猫群算法2.1 非线性自适应参数2.2 Cauchy变异策略2.3 最优邻域扰动策略 3. 部分代码展示4. 仿真结果展示5. 资源获取6. 参考文献 【获取资源请见文章第5节:资源获取】 1.…

华为OD机试真题B卷 Java 实现【光伏场地建设规划】,附详细解题思路

一、题目描述 祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区;整体上常年光照良好,但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站,生产清洁能源。对每平方公里的土…

主动打包、高效管理的主题工具:逐浪HMS主题大师1.5-即速推送、华为小组件缓存优化、锁屏提取、资源审计、技术秘笈,移动主题设计利器

主动打包、高效管理的主题工具:逐浪HMS主题大师1.5-即速推送、华为小组件缓存优化、锁屏提取、资源审计、技术秘笈,移动主题设计利器 主动打包:逐浪HMS主题大师1.3-即速推送、华为小组件缓存优化、锁屏提取、资源审计、技术秘笈,移…

【经验分享】uniapp项目GIT如何忽略unpackage文件

最近的uniapp项目踩了个坑,就是建完项目,提交代码后,运行发布微信小程序,生成了unpackage里的build文件,这个时候提交总是提交一堆编译后的文件,甚至造成冲突。即使在.gitignore文件中写入忽略unpackage目录…

C++ 小区物业管理系统(QT图形界面)

目录 一、项目介绍 二、项目展示 三、源码分享 一、项目介绍 小区物业管理系统 (一)课题内客 该系统要求建立某小区物业管理系绕,并具有排序﹑查找﹒计算﹑显示等功能,通过此课题,熟练掌握文件﹐指针的各种操作,以及一些算法思…

某内Java课程(整套视频+课件)

某内Java课程 需要整套视频文件(视频课件):(V: t_shopnet) 1 FUNDAMENTALO1 01: 对象和类(上)(6 am.mp4 01: 对象和类(上) (6 pm.mp4 02: 对象和类(下) (3) am .mp4 02: 对象和类(下) (3) pm.mp4 引用类型数组、继承的意义 (上) (3) am.mp403…

SOLIDWORKS流程模拟: 需要多少个CPU核心?

客户经常会问,他们应该为SOLIDWORKS Flow Simulation购买什么工作站,以尽可能快地解决他们的计算流体力学(CFD)问题。遗憾的是,这个问题后面往往有一个无法实现的期望,如 "一切都需要在10分钟内解决&q…

十分钟读懂Stable Diffusion运行原理

AIGC 热潮正猛烈地席卷开来,可以说 Stable Diffusion 开源发布把 AI 图像生成提高了全新高度,特别是 ControlNet 和 T2I-Adapter 控制模块的提出进一步提高生成可控性,也在逐渐改变一部分行业的生产模式。惊艳其出色表现,也不禁好…

逆向python窃密软件

python发布的软件包一般逆向方法是,先使用pyinstxtractor获取到关键性pyc文件,再使用pycdc(又叫Decompyle++)将pyc文件反汇编成py源代码文件。 pyinstxtractor使用方法 将反编译的 Python 源打印到标准输出 python pyinstxtractor.py <filename>pycdc使用方法 对照…

BBC Studios 和 Reality+ 联手将节目《疯狂汽车秀》和《异世奇人》带入 The Sandbox 元宇宙

双方将携手在元宇宙推出一系列基于 BBC 世界著名品牌和节目的沉浸式体验。 今天标志着一个 The Sandbox 元宇宙的历史性时刻&#xff01;我们非常高兴地宣布&#xff0c;通过与 BBC Studios 和 web3 专家 Reality 的合作在 The Sandbox 平台带来全新体验&#xff0c;玩家可以与…

Franklin-Reiter相关消息攻击

文章目录 知识导入&#xff1a;题一题目描述&#xff1a;题目分析&#xff1a; 题二题目描述&#xff1a;题目分析&#xff1a; 题三题目描述&#xff1a;题目分析&#xff1a; 收获与体会&#xff1a; 知识导入&#xff1a; 总结&#xff1a; Franklin-Reiter相关消息攻击(Fra…

数据库管理-第七十九期 儿童节惊魂(20230601)

数据库管理 2023-06-01 第七十九期 儿童节惊魂1 主板挂了&#xff1f;2 时间同步3 数据库参数4 ACFS5 两个错误总结 第七十九期 儿童节惊魂 6月第一天&#xff0c;又是儿童节&#xff0c;加上客户现场来了不少娃&#xff0c;也有一些客户家里有娃去参加活动了&#xff0c;所以…