奇妙的安全旅行之ECC算法

hi,大家好,我是开发者FTD。今天我们来介绍一下非对称加密算法的ECC算法。

ECC 算法简介

ECC 是 Elliptic Curves Cryptography 的缩写,意为椭圆曲线密码编码学。和RSA算法一样,ECC算法也属于公开密钥算法。最初由 Koblitz 和 Miller 两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。

ECC 算法的数学理论非常深奥和复杂,在工程应用中比较难于实现,但它的单位安全强度相对较高,它的破译或求解难度基本上是指数级的,黑客很难用通常使用的暴力破解的方法来破解。RSA算法的特点之一是数学原理相对简单,在工程应用中比较易于实现,但它的单位安全强度相对较低。因此,ECC算法的可以用较少的计算能力提供比RSA加密算法更高的安全强度,有效地解决了“提高安全强度必须增加密钥长度”的工程实现问题。

ECC 算法工作原理

近年来,人们对ECC的认识已经不再处于研究阶段,开始逐步进入实际应用,如国家密码管理局颁布的SM2算法就是基于ECC算法的。下面我们来认识一下ECC的工作原理。

密码学中的椭圆曲线

定义

在有限域 Fp 中定义一个椭圆曲线,常用
y2=x3+ax+by^2 = x^3 + ax + b y2=x3+ax+b
Fp 中只有p个元素,p为素数

Fp 中,
a+b≡c(modp),a×b≡c(modp),a/b≡c(modp)a+b≡c (mod \quad p),a×b≡c (mod \quad p),a/b≡c (mod \quad p) a+bc(modp)a×bc(modp)a/bc(modp)

4a3+27b2≠0(modp)4a^3 + 27b^2 ≠0 (mod\quad p) 4a3+27b2=0(modp)

a,b是小于p的非负整数

x,y 属于0到p-1间的证书,曲线标记为 Ep(a,b)

阶:椭圆曲线上一点P,存在正整数n,使得nP=O∞,则n为P的阶,若n不存在,则P是无限阶的,有限域上定义的椭圆曲线上所有点的阶都存在。

椭圆曲线难题

K=kGK = kG K=kG

其中K,G为Ep(a,b)上的点,k为小于n的整数,n是点G的阶,给定k和G,计算K容易,但是给定K和G,求k就很难了!

因此,设K为公钥,k为私钥,G为基点。

ECC 算法加密过程
  1. A选定一条椭圆曲线Ep(a,b),并取曲线上一点作为基点G

  2. A选择一个私钥k,并生成公钥K=kG

  3. A将Ep(a,b)和k,G发送给B

  4. B收到后将明文编码到Ep(a,b)上一点M,并产生一个随机数r

  5. B计算点C1=M+rK,C2=rG

  6. B将C1,C2传给A

  7. A计算C1-kC2=M+rkG-krG=M

  8. A对M解码得到明文

攻击者只能得到Ep(a,b),G,K,C1,C2,没有k就无法得到M。

ECC 算法签名验签流程
  1. A选定一条椭圆曲线Ep(a,b),并取曲线上一点作为基点G

  2. A选择一个私钥k,并生成公钥K=kG

  3. A产生一个随机数r,计算R(x,y)=rG

  4. A计算Hash=SHA(M),M‘=M(modp)

  5. A计算S=(Hash+M’k)/r(modp)

  6. B获得S和M’,Ep(a,b),K,R(x,y)

  7. B计算Hash=SHA(M),M’=M(modp)

  8. B计算R’=(Hash*G+M’K)/S=(HashG+M’*kG)*r/(Hash+M’k)=rG=R(x,y),若R’=R,则验签成功。

以上加解密和签名验签流程只是一个例子,具体应用时可以利用K=kG这一特性变幻出多种加解密方式。

ECC 算法实现

定义椭圆曲线上的点(x,y):

class Pare {long x;long y;public Pare() {super();}public Pare(long x, long y) {super();this.x = x;this.y = y;}//加法public Pare add(Pare pare) {if (this.x == Integer.MAX_VALUE) {//为无穷大时O+P=Preturn pare;}Pare res = new Pare();if (this.y == pare.y && this.x == pare.x) {//相等时long d = moddivision(3 * this.x * this.x + EccUtil.e.a, EccUtil.e.p, 2 * this.y);res.x = d * d - 2 * this.x;res.x = mod(res.x, EccUtil.e.p);res.y = d * (this.x - res.x) - this.y;res.y = mod(res.y, EccUtil.e.p);} else if (pare.x - this.x != 0) {long d = moddivision(pare.y - this.y, EccUtil.e.p, pare.x - this.x);res.x = d * d - this.x - pare.x;res.x = mod(res.x, EccUtil.e.p);res.y = d * (this.x - res.x) - this.y;res.y = mod(res.y, EccUtil.e.p);} else {//P Q互逆,返回无穷大res.x = Integer.MAX_VALUE;res.y = Integer.MAX_VALUE;}return res;}//减法public Pare less(Pare p) {p.y *= -1;return add(p);}//乘法public Pare multiply(long num) {Pare p = new Pare(this.x, this.y);for (long i = 1; i < num; i++) {p = p.add(this);}return p;}//求余,解决负号问题public long mod(long a, long b) {a = a % b;while (a < 0) {a += b;}return a;}//求余取商(a mod b)/c/*public long moddivision(long a, long b, long c) {a = mod(a,b);while(a%c != 0) {a += b;}a = a/c;return a;}*/public long moddivision(long a, long b, long c) {a = mod(a, b);c = mod(c, b);a = a * EccMath.exgcd(c, b);return mod(a, b);}@Overridepublic String toString() {return EccTools.obox(EccTools.long2hexStr(this.x), 4) + " " + EccTools.obox(EccTools.long2hexStr(this.y), 4);}
}

加密:

//加密
public Message encryption(Pare g, Pare pbk, Pare word) {pbk = g.multiply(privatekey);//公钥int d = new Random().nextInt(1024);//随机数Pare dg = g.multiply(d);Pare dp = pbk.multiply(d);Pare send = word.add(dp);return new Message(dg, send);
}

解密:

//解密
public Pare decryption(Message m) {Pare pab = m.pa.multiply(this.privatekey);Pare result = m.pb.less(pab);return result;
}

查看完整代码请访问:

https://github.com/ForTheDevelopers/JavaSecurity

ECC 算法优势:

  • 更适合于移动互联网:ECC 加密算法的密钥长度很短(256位),意味着占用更少的存储空间,更低的CPU开销和占用更少的带宽。目前手机已经越来越普及,随着越来越多的用户使用移动设备来完成各种网上活动,ECC 加密算法为移动互联网安全提供更好的客户体验。

  • 更好的安全性:ECC 加密算法提供更强的保护,比目前的其他加密算法能更好的防止攻击,使你的网站和基础设施比用传统的加密方法更安全,为移动互联网安全提供更好的保障。

  • 更好的性能: ECC 加密算法可以用较短的密钥长度来提供更好的安全。例如,256 位的 ECC 密钥加密强度等同于 3072 位 RSA 密钥的水平(目前普通使用的 RSA 密钥长度是 2048 位)。其结果是你以更低的计算能力代价得到了更高的安全性。经国外有关权威机构测试,在 Apache 和 IIS 服务器采用 ECC 算法,Web服务器响应时间比 RSA 快十几倍。

  • 更大的IT投资回报:ECC 可帮助保护您的基础设施的投资,提供更高的安全性,并快速处理爆炸增长的移动设备的安全连接。 ECC 的密钥长度增加速度比其他的加密方法都慢(一般按 128 位增长,而 RSA则是倍数增长,如:1024 – 2048 - 4096),将延长您现有硬件的使用寿命,让您的投资带来更大的回报。

总结

由于ECC加密算法在安全性、实现代价和应用效率上较RSA算法都有明显的优势,目前已经被多家国际标准组织所接受,ECC加密算法替代RSA加密算法,成为行业或组织的公钥密码标准的趋势已经形成,并已有国家(美国、日本、韩国和欧洲一些国家)在国家密码标准中采用了ECC算法体系。我国的国密算法SM2就是基于ECC算法的。

本文初步介绍了ECC算法的基本原理和实现步骤,由于本人水平有限,如有纰漏,还请指正。

参考

1,ECC算法介绍

2,解读ECC加密算法

关于作者
  • GitHub:https://github.com/ForTheDevelopers

  • 掘金:https://juejin.cn/user/1204720472953022/posts

  • CSDN:https://blog.csdn.net/ForTheDevelopers

  • segmentfault:https://segmentfault.com/u/for_the_developers

联系作者
  • 微信号:ForTheDeveloper

  • 公众号:ForTheDevelopers

在这里插入图片描述

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

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

相关文章

奇妙的安全旅行之国密算法

hi&#xff0c;大家好&#xff0c;我是开发者FTD。今天我们来介绍一下我们国家密码局制定的加密算法 — 国密算法。 为什么要制定国密算法&#xff1f; 密码算法是保障信息安全的核心技术&#xff0c;尤其是我国最关键的银行业核心领域长期以来都是沿用MD5、3DES、SHA-256、R…

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(二)

远控木马 SET 同时集成了木马生成工具&#xff0c;可以生成木马并调用MSF框架对远程主机进行控制。直接使用MSF生成木马并控制主机的可参考之前另一篇博文&#xff1a;渗透测试-Kali入侵Win7主机。 控制主机 1、运行 SET&#xff0c;选择创建攻击载荷和监听器&#xff1a; 2…

wdnas群晖nas_西数WD NAS红盘 WD140EFFX 14TB HDD和 SA500 1TB SSD开箱拆解评测

前言每个NAS系统都应该配备足够容量的硬盘&#xff0c;以满足数据存储需求。WD Red 西数红盘存储空间高达14TB&#xff0c;可以为需要构建大容量和高性能NAS存储方案的用户提供解决方案。WD Red西数红盘14T运行安静且热量低&#xff0c;其采用的NASware 3.0技术提高了兼容性、集…

奇妙的安全旅行之加密算法(完整版)

hi&#xff0c;大家好&#xff0c;我是开发者FTD。之前我在公众号写了一个工作中常用加密算法系列的文章终于肝完了&#xff0c;为了方便小伙伴们查看和收藏&#xff0c;我将这个系列汇集整理成了一个PDF文档&#xff0c;有需要的小伙伴可以关注公众号&#xff0c;在公众号后台…

智能车s3010舵机工作电压_全国大学生智能车竞赛决战南京信息工程大学

未来网高校频道8月25日讯(记者 杨子健 通讯员 唐翠梅 方向 张峰 曾雅俊)8月24日上午&#xff0c;由中国自动化学会主办&#xff0c;南京信息工程大学承办的第十五届全国大学生智能汽车竞赛创意组总决赛、第十五届全国大学生智能汽车竞赛华东赛场预决赛开幕仪式在学校东苑体育馆…

直接拿来用!GitHub10个开源免费的后台管理面板

hi&#xff0c;大家好&#xff0c;我是开发者FTD。今天要给大家介绍几个GitHub上开源免费好用的后台管理面板&#xff0c;大家在平时工作中&#xff0c;一定不可避免的会开发一些业务管理控制后台&#xff0c;如果从零开始完整的做一套不是一件很容易的事情&#xff0c;还好Git…

人名和成绩一起排序_EXCEL基础知识——排序功能的使用

排序筛选可能是大家工作中最常用的数据处理方式了&#xff0c;它能很快地从大到小完成排序&#xff0c;并且筛选除你想要的数据。从简单的排序筛选到高级筛选你会哪几步呢&#xff1f;一起来看看。一、简单排序下面这组数据&#xff0c;我们想要将数学成绩从大到小的排序&#…

android骰子游戏代码_真神器!不用手写一行代码就能做网站~

点击上方“Python编程时光”&#xff0c;选择“加为星标”第一时间关注Python技术干货&#xff01;制作网站用什么&#xff0c;Dreamweaver 还是 Fireworks&#xff1f;现在&#xff0c;用 GPT-3 就可以。一位来自旧金山的程序员小哥做了款名为 debuild.co 的网页制作软件&…

一文带你读懂计算机进制

hi&#xff0c;大家好&#xff0c;我是开发者FTD。在我们的学习和工作中少不了与进制打交道&#xff0c;从出生开始上学&#xff0c;最早接触的就是十进制&#xff0c;当大家学习和使用计算机时候&#xff0c;我们又接触到了二进制、八进制以及十六进制。那么大家对进制的认识和…

切换分支 如何判断 是否完成_如何判断展览公司是否专业?

可以看出&#xff0c;展会装修目前市场上的展览设计公司数量非常庞大&#xff0c;许多公司目前正在从事这方面的业务。对于每个人来说&#xff0c;展览设计公司之后有很多好处&#xff0c;所以当你继续选择时&#xff0c;选择面会变得更加广泛。无论人们如何选择展览设计公司&a…

二月:冷清的春节

hi&#xff0c;大家好&#xff0c;我是开发者FTD。二月份就这么悄无声息的过完了&#xff0c;时间真的过得太快了&#xff0c;而且二月份还比其他月少了几天&#xff0c;再加上春节的时间&#xff0c;感觉就更快了。按照惯例&#xff0c;今天也对二月份做个总结&#xff0c;以迎…

python 除法取模_跟我一起学python | 探究05

算术运算、比较运算、赋值运算、位和位运算、运算优先级python里的算术运算我们最熟悉的计算就是算术运算&#xff0c;加减乘除等。在python的算术运算中&#xff0c;除了四则运算外&#xff0c;还有幂运算、取模、取整运算。什么是取模、取整运算呢&#xff1f;取模和取整运算…

中有atoi函数吗_C++ 多态的实现及原理,深挖vptr指针,手动调用虚函数

什么是多态&#xff1f;父类指针即根据指向的不同对象&#xff0c;响应同一消息(函数调用)&#xff0c;产生不同行为。多态三要素&#xff1f;1&#xff0c;继承2&#xff0c;虚函数重写3&#xff0c;父类指针(引用)指向子类对象多态的实现很简答&#xff0c;让我们来看一段代码…

一文带你读懂base64编码

hi&#xff0c;大家好&#xff0c;我是开发者FTD。相信很多同学在工作中&#xff0c;经常会用到Base64编码&#xff0c;那大家知道为什么会有Base64编码吗&#xff1f;我们为什么要使用它呢&#xff0c;它又是怎么实现的呢&#xff1f;下面就让我们来一起深入探究一下Base64编码…

不显示参数名_第51p,万能参数与返回值,Python中函数的返回值

大家好&#xff0c;我是杨数Tos&#xff0c;这是《从零基础到大神》系列课程的第51篇文章&#xff0c;第三阶段的课程&#xff1a;Python进阶知识&#xff1a;详细讲解Python中的函数&#xff08;四&#xff09;>函数的参数与返回值&#xff08;下篇&#xff09;。函数是非常…

阿里云服务器安装JDK指南

hi&#xff0c;大家好啊&#xff0c;好久不见&#xff0c;最近阿里云双十一做活动&#xff0c;很多博主都在做购买返现活动&#xff0c;不知道大家有没有去白嫖他们一个服务器&#xff0c;服务器买来可以用来学习一下服务器搭建&#xff0c;应用部署等等&#xff0c;可以做的事…

销售流程图_工作流程图网络图模板,招聘销售合同库存,完整设计拿来就用

Hello大家好&#xff0c;我是帮帮。今天跟大家分享一组工作流程图模板&#xff0c;招聘销售合同库存&#xff0c;完整设计拿来就用。为了让大家能更稳定的下载模板&#xff0c;我们又开通了全新下载方式(见文章末尾)&#xff0c;以便大家可以轻松获得免费模板和收费模板。メ大家…

协议详解_I2C协议详解

I2C通信协议I2C通信协议的基础简介I2C「Inter-integrated Circuit」总线支持设备之间的短距离通信&#xff0c;用于处理器和一些外围设备之间的接口&#xff0c;它只需要两根信号线来完成信息交换。I2C最早是飞利浦在1982年开发设计。I2C是同步传输信号&#xff0c;关于同步和异…

http 302错误_http面试题

作者&#xff1a;忘れられたくない出自&#xff1a;SegmentFault 思否原文&#xff1a;segmentfault.com/a/1190000024538846http状态码分类1xx服务器收到请求2xx请求成功3xx重定向4xx客户端错误5xx服务端错误常见状态码200 成功301 永久重定向302 临时重定向304资源未被修改40…

controller属于哪一层_孺教网分享|家长层次有五层,家长们都来看看,你属于哪一层?...

经常听到这样一些话&#xff1a;养不教父之过&#xff0c;有其父必有其子。孩子是父母的影子&#xff0c;父母是孩子的第一任老师.......这些都反映了在孩子成长的过程中&#xff0c;家庭教育的重要性。而家庭教育往往体现在非智力因素方面&#xff0c;比如感恩、诚信、善良、尊…