密码学_ECC椭圆曲线加密算法

news2025/1/23 10:23:59

算法介绍

        椭圆加密算法(ECC)是一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。公钥密码体制根据其所依据的难题一般分为三类:大素数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全,RSA加密算法也是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用。常用于通讯加密,数字签名等。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。bitcoin以及漂亮国gov都在用。相当好,但是由于后门问题等一些原因还未大量普及。

知识概念

        椭圆曲线

        公式如下图

        a,b的取值满足

 下图为曲线的某一a,b值对应的坐标图

        当我们在曲线上随机取点A,B,其连线的延长线交于曲线上另外一点,交点点根据X轴的镜像对称,得到点C,点C再和A连线,又和曲线有个交点,此交点再镜像X轴得到点D,如此反复k次,得到最后一个点Q,该算法的难题就是,你知道起始点A,终点Q,但是你不知道中间经历了多少次运算,即正向算出Q点很简单,逆向算出k的值(也就是运算次数)很难。

以上是A.B两个点,可以表示成A+B=C(这里不是简单的加运算,是数学运算,例如求斜率,求交点等)

那么如果AB两点无限接近,那么就等于一个A点做切线再镜像,可以表示成A+A=2A(这里不是简单的加运算,是数学运算,例如求斜率,求交点等)

点乘:Q=kP Q点就是最后的一个点,P点就是起点A.

 DH(Diffie-Hellman密钥协议算法)

           Diffie-Hellman密钥协议算法是一种确保共享密钥KEY安全穿越不安全网络的方法,它是OAKLEY的一个组成部分,由Whitefield与Martin Hellman在1976年提出。这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥。然后可以用这个密钥进行加密和解密。但是注意,这个密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。双方确定要用的密钥后,要使用其他对称密钥操作加密算法实际加密和解密消息。

ECDH

椭圆曲线的特征加入DH算法的思想后,被称为ECDH,大致流程如下

这就是ECDH的密钥交换算法。ECDHE的话是指临时性使用。

ECC加解密过程                                            

r:表示随机数

M:表示明文

Q:表示公钥(终点)

P:表示起始点

k:私钥

Q=kP :即起点P经过k次运算得到Q点

加密: 选择随机数r,将消息M生成密文C,C=(rP,M+rQ)
2、选定⼀
解密: M+rQ-k(rP) = M+r(kP)-k(rP) = M
由于椭圆曲线是连续性的,不适用于密码学。所以要将其转化成 离散的有限域。
        在密码学中,有限域GF(p)是一个很重要的域,其中 p为素数(因为当p为素数时,才能保证集合中的所有的元素都有加法和乘法逆元(0除外) 。简单来说,GF(p)就是 mod p, 因为一个数模p后,结果在[0, p -1]之间,即该域中有p个元素。对于元素a和b,那么(a+b) mod p和(a*b)mod p,其结果都是域中的元素。 GF(p)里面的加法和乘法都是平时用的加法和乘法。GF(p)的加法和乘法单位元分别是0和1,元素的加法和乘法逆元都很容易理解和求得,这里就不展开讲了,《密码编码学与网络安全》书中有详讲的。

 

        
        将椭圆曲线公式的取值做出限制,例如x,y的范围,x,y均为整数,运算结果向上上取整,设置p的值后,方程两边对p取模后,曲线将被限制在一个区域内,如下图,在取整后将成一个离散的有限域(绘图工具原因,看起来还有连续的,其实都是一个一个点了)。这个域里面的点的总数量n就叫做这个曲线的阶。

 最后,还有个问题,就是公钥Q(终点)是一个坐标点,怎么把它转换为序列值呢,就是将y值作为奇偶校验放在x值的前面就行了。由于主要了解原理,关于乘法逆元,阿贝尔群,以及椭圆曲线计算公式等知识这里不在说明,大家感兴趣的可以单独下来研究。

作图不易,转载请说明,学海无涯,若有错误,希望大家不吝赐教。

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

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

相关文章

【jQuery】常用API——jQuery样式操作

一、操作 css 方法 jQuery 可以使用 css 方法来修改简单元素样式。1. 参数只写属性名,则是返回属性值$(this).css(color);2. 参数是属性名,属性值,逗号分隔,是设置一组样式,属性必须加引号,值如果是数字可以…

Go基础学习

文章目录回看下历史环境安装和开发工具:基础语法:go的注释:变量定义:简短定义模式Go的变量交换匿名变量(空白标识符):变量的作用域:iota常量计数器数据类型布尔类型数值型整数浮点数…

新冠COVIN-19流感病患轨迹追溯

实验背景 冬季是流感的高发季节,现已知某流感病毒的传播力很强,政府部门也陆续公开了部分流感确诊患者(后续简称“病患”)的非隐私信息,这部分数据为相关研究人员研究该流感病毒的传播与防控提供了重要的数据支撑。 然…

Linux网站服务实操练习

作者简介:一名99年软件运维应届毕业生,正在自学云计算课程。宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。创作不易,动动小手…

python:打包package

简介 把模块打包成package,可以进行分发和安装。 packaged的打包和安装一、package层次架构二、 package的打包和安装1. 创建setup.py2. 打包package3. 安装package一、package层次架构 其中mypackage为进行打包的文件夹,文件夹下包含多个脚本&#xff1…

钢铁行业应用APS生产排产系统的好处

1 钢铁行业APS生产排产系统设计的主要业务流程 全局一体化计划:主要负责订单交期评审与应答、销产转换、主生产计划、铁水需求计划,该计划的最终目标是对各个分厂的日计划提出整体要求。主要对口业务部门为公司生产计划排程部门。 各个工段厂区的一体化…

SpringCloud微服务项目实战 - 4.自媒体平台(博主后台)

“我读过很多书,但后来大部分都忘记了,你说这样的阅读究竟有什么意义?” “当我还是个孩子时,我吃过很多食物,现在已经记不起来吃过什么了。但可以肯定的是,它们中的一部分已经长成我的骨头和肉。” 系列文…

LaoCat带你认识容器与镜像(三【上】)

有道是每逢佳节倍惰怠 ~,春节期间随缘更新吧 ~ 本章内容 Docker挂载数据卷相关。 本文实操全部基于Ubuntu 20.04 宿主机 > linux服务器本身 前边章节就介绍过Docker数据卷相关的知识点,也特别强调了生产环境一定要记得挂载数据卷,编程的小…

【前端】Vue项目:旅游App-(11)city:添加热门数据、动态修改索引栏、点击跳转、显示城市

文章目录目标过程与代码添加热门数据热门数据样式索引栏索引监听点击、保存数据、回退首页跳转到city页、显示城市效果总代码修改的文件city.jscurrentGroupCity.vuehome.vue目标 上一篇以indexBar的形式显示了数据:【前端】Vue项目:旅游App-&#xff0…

【Kubernetes 企业项目实战】01、使用 kubeadm 安装 K8s-v1.23 高可用集群

目录 K8s-v1.23 安装环境规划 kubeadm 和二进制安装 k8s 适用场景分析 一、初始化安装 k8s 集群的环境 1.1 初步的环境初始化 1.2 配置主机之间无密码登录 1.3 关闭交换分区 swap 提升性能 1.4 修改机器内核参数 1.5 配置阿里云的 repo 源 1.6 配置安装 k8s 组件需要…

python调试器 ipdb

文章目录1. 介绍1.1 常用调试方式1.2 安装 ipdb2. 用法3. 命令3.1、查看源代码3.2、添加断点3.3 添加临时断点3.4 清除断点3.5、打印变量值3.6、逐行调试命令3.7、非逐行调试命令3.8 跳出函数,跳入函数3.9、查看当前函数所有参数3.10 打印变量的值3.11、打印变量类型…

11. 盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例…

【openGauss】在openEuler(ARM架构)上安装openGauss(单机版)

一、系统版本介绍 当前案例中的openGauss安装,底层操作系统为openEuler-20.03-LTS版本,当前openGauss对Python版本兼容性最好的是Python 3.6版本与Python 3.7版本,该实验使用的openEuler版本自带Python 3.7.4,不需要再自行安装 二…

光电探测器怎么选

想要挑选光电探测器,首先应该理解探测器的重要的几个指标。 实际看一个光电探测器吧 输入输出接口三个部分,光纤输入,射频输出,电源供电 数据手册 捡几个难理解的说说,详细推导解释这里不赘述了,难理解的…

【二】Netty 搭建简单的http服务

Netty 搭建简单的http服务Netty 简介代码展示netty 依赖NettyServer netty 服务端启动类MyChannelInitializer 设置编码解码器,并添加自己的业务方法MyClientHandler 实现自己的业务方法。主要方法 是读取到数据后处理效果展示服务端打印截图采用Postman 测试 截图N…

JDBC 实现增删改查的实际操作,很简单

大家好&#xff0c;今天给大家分享一下JDBC 实现增删改查的实际操作 我们还是使用的Maven的方式&#xff0c; 首先要创建一个干净的Maven webapps项目 看这个就可以了 要导入相关的依赖 <dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connec…

如何使用 HTML5 Web 连接到 VMware vSphere Hypervisor

本文将向你展示如何在计算机上连接 VMware vSphere Hypervisor 7.0.3,VMware vSphere Hypervisor 7.0.3 也称为 ESXi 7.0.3。 连接 ESXi 7.0.3 下载工具以管理 ESXi 主机服务器连接 ESXi 7.0.3 服务器下载工具以管理 ESXi 主机服务器 现在不需要任何工具来管理 ESXi 7.0.3,从…

1.8周报

SourceURL:file:///home/mrl/文档/1.8周报.docx 周报 代码行数&#xff1a; 周一 611 周二 672 周三 524 周四 528 周五 450 周六 545 周日 564 遇到的问题&#xff1a; 系统配置问题&#xff1a; 在升级安装python3时&#xff0c;由于操作失误&#xff0c;导…

数据脱敏实战经验

1. 创建隐私数据类型枚举&#xff1a;PrivacyTypeEnum2. 创建自定义隐私注解&#xff1a;PrivacyEncrypt3. 创建自定义序列化器&#xff1a;PrivacySerializer4. 隐私数据隐藏工具类&#xff1a;PrivacyUtil5. 注解使用这两天在整改等保测出的问题&#xff0c;里面有一个“用户…

如何将.md文件转换为pdf

目录 1.step1&#xff1a; 安装Visual Studio Code&#xff08;简称VScode&#xff09; 2.step2&#xff1a; 安装定制化插件 3.step3&#xff1a; 进入预览窗口模式 4.step4&#xff1a; 进行格式转换 1.step1&#xff1a; 安装Visual Studio Code&#xff08;简称VScode&a…