Curve25519加解密与Ed25519加密签

  • 几种著名的椭圆曲线的方程和对应的实际应用
  • Curve25519加密解密
    • 算法论文详解
  • Ed25519 数字签名机制
  • Curve25519加解密 和 Ed25519加验签的使用
    • Curve25519
    • Ed25519
  • 25519曲线和ECC曲线的联系和区别
  • RSA加解密与加验签
  • 参考链接:

几种著名的椭圆曲线的方程和对应的实际应用

  1. 魏尔斯特拉斯曲线和基于魏尔斯特拉斯曲线的若干种椭圆曲线公钥算法
    y2=x3+ax+by^2 = x^3 + ax +by2=x3+ax+b
    利用上面的圆锥曲线构造密钥算法。
  2. 蒙哥马利曲线和基于蒙哥马利曲线的Curve25519密钥协商算法
    蒙哥马利曲线:By2=x3+Ax2+xB y^{2} = x^3 + A x ^2 + xBy2=x3+Ax2+x, 其中A,B∈KA, B \in KA,B∈K,且B(A2−4)≠0B(A^2 - 4) \neq 0B(A2−4)​=0
    Curve25519曲线:y2=x3+486662x+by^2 = x^3 + 486662x +by2=x3+486662x+b, 由素数2255−192^{255} - 192255−19定义素数域
  3. 爱德华曲线和基于爱德华曲线的Ed25519数字签名算法
    爱德华曲线:x2+y2=1+dx2y2x^2 + y^2 = 1 + d x^2 y^2x2+y2=1+dx2y2
    Ed25519曲线:−x2+y2=1−121665121666x2y2-x^2 + y^2 = 1 - \frac{121665}{121666} x^2 y^2−x2+y2=1−121666121665​x2y2

Curve25519加密解密

出于安全性的考虑,在原本明文传输的基础上需要对传输内容进行加密,首先,curve25519是一个不对称加密算法,需要前后端相配合,双方一起使用该加密算法,逻辑如下:

  • 前端使用generateKeyPair得到自己的公钥和私钥,用自己前端的公钥去交换后端的公钥

  • 后端使用generateKeyPair得到自己的公钥和私钥,将后端的公钥返回给前端,同时,用自己的私钥和前端的公钥生成shareKey

  • 前端用前端的私钥和后端的公钥生成前端的shareKey

  • 前端用shareKey将请求进行加密,在使用AES进行第二次加密

  • 后端首先使用AES进行解密,再使用生成的shareKey对前端的请求进行第二次解密,格式符合要求则,使用shareKey进行加密,然后AES加密,传输给前端

  • 前端拿到数据,第一步使用AES进行解密,第二步使用shareKey进行解密
    算法样例详解如下:

算法论文详解

详见参考地址:Curve25519: new Diffie-Hellman speed records

Ed25519 数字签名机制



Curve25519加解密 和 Ed25519加验签的使用

Curve25519

Curve25519 是目前最高水平的 Diffie-Hellman函数,适用于广泛的场景,在密码学中,Curve25519是一个椭圆曲线提供128位安全性,设计用于椭圆曲线Diffie-Hellman(ECDH)密钥协商方案。它是最快的ECC曲线之一,并未被任何已知专利所涵盖。

  • 实例化:

    Curve25519 cipher = Curve25519.getInstance(Curve25519.BEST)
    
  • 生成秘钥对:

    Curve25519KeyPair keyPair = cipher!!.generateKeyPair()
    byte[] privateKey = keyPair.getPrivateKey()
    byte[] publicKey = keyPair.getPublicKey()
    
  • 生成共享秘钥:

    byte[] temp = cipher!!.calculateAgreement(publicKey,privateKey)
    

Ed25519

Ed25519是一个数字签名算法,签名和验证的性能都极高, 一个4核2.4GHz 的 Westmere cpu,每秒可以验证 71000 个签名,安全性极高,等价于RSA约3000-bit。签名过程不依赖随机数生成器,不依赖hash函数的防碰撞性,没有时间通道攻击的问题,并且签名很小,只有64字节,公钥也很小,只有32字节。

  • 实例化:

    KeyPairGenerator edDsaKpg = new KeyPairGenerator()
    
  • 生成秘钥对:

    KeyPair keyPair = edDsaKpg.generateKeyPair()
    PrivateKey privateKey = keyPair.getPrivate()
    PublicKey publicKey = keyPair.getPublic()
    
  • 生成共享秘钥:

    //签名
    byte[] setSign(byte[] data){EdDSAEngine edEng  = new EdDSAEngine();edEng.initSign(privateKey);edEng.setParameter(EdDSAEngine.ONE_SHOT_MODE);edEng.update(data);byte[] enEdata =  edEng.sign();return enEdata;
    }
  • 验签

    //验证
    Boolean verifySign(String:data,String:signData){String mKey = "签名时的秘钥";EdDSAEngine edEng  = new EdDSAEngine();EdDSANamedCurveSpec spec = EdDSANamedCurveTable.getByName(ED_25519);    edEng.initVerify(new EdDSAPublicKey(new    EdDSAPublicKeySpec(base64Dec(mKey), spec)));edEng.setParameter(EdDSAEngine.ONE_SHOT_MODE);edEng.update(data.getBytes());Boolean isSuccess = edEng.verify(base64Dec(signData));return isSuccess;
    }

25519曲线和ECC曲线的联系和区别

  • Curve25519(X25519)是进行蒙哥马利曲线(Montgomery Curve)迪菲赫尔曼秘钥交换的椭圆曲线算法。
  • Ed25519是进行爱德华曲线(Edwards Curve)数字签名的椭圆曲线算法。

25519曲线与SECG(Standards for Efficient Cryptography Group)工作组所指定的魏尔斯特拉斯曲线(Weierstrass Curve)在曲线的公式上有所不同,因此他们不兼容。
蒙哥马利曲线和爱德华曲线的算法,能做到“Time-constant”,也就是说不论他们进行运算的数值是多少,他们所花的时间是相同的,因此“时间旁路”(Time side channel)攻击就对它们无效。

RSA加解密与加验签

基本流程图:

A机构生成A的密钥对,把公钥给到B;同样的,B把自己的公钥给A。这样A在生成加密报文的时候,会用B的公钥加密明文,然后用A的私钥对明文进行加签。OK,此时只有B的私钥才能解密报文,而私钥只有B才有,即使报文被截获,第三方也无法解密。如果A的公钥是公开的(实际上可能也不公开),那么第三方能解析出报文的HASH结果,也只是Hash结果…无法获得明文。B接受到请求后,用自己的私钥解密报文,然后对报文进行验签,如果不一致,那么也不会响应请求,这样的模式,通信过程的安全性就可以得到保障了。

参考链接:

https://www.jianshu.com/p/5dba044f67b1
https://blog.csdn.net/farley119/article/details/87875201
https://blog.csdn.net/marko_zheng/article/details/100882231
https://master–eager-lamarr-59a89f.netlify.app/2018/12/28/cryptography/ed25519/
https://blog.csdn.net/zhshulin/article/details/71573542

Curve25519加解密与Ed25519加密签相关推荐

  1. 如何使用RSA 对数据加解密和签名验签?一篇文章带你搞定

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 三分割据纡筹策,万古云霄一羽毛. ...

  2. 国密SM4加解密SM2签名验签COM组件DLL

    提供给第三方软件,调用COM组件DLL方式进行实现,如delphi.PB等. 基于C#编写的COM组件DLL,可实现SM2签名验签,SM4加解密,100%适用于黑龙江省国家医保接口中进行应用. 功能包 ...

  3. C#实现RSA公钥加密私钥解密、私钥加密公钥解密以及Pcks12、X509证书加解密、签名验签

    RSA的私钥签名公钥验签可以见 http://blog.csdn.net/starfd/article/details/51917916,所以这里就没提供对应代码,具体代码如下: using Org. ...

  4. Java 实现 RSA 非对称加密算法-加解密和签名验签

    1. 非对称加密算法简介 非对称加密算法又称现代加密算法,是计算机通信安全的基石,保证了加密数据不会被破解.与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(pr ...

  5. SM2加解密、签名验签

    导论 SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,在我们国家商用密码体系中被用来替换RSA算法. 国产SM2算法,是基于ECC的,但二者在签名验签.加密解密过程中或许有些 ...

  6. 讲讲在银联电子支付工作时加解密、签名验签的那些事(纯粹的干货)。

    今天我们来讲讲系统间的交互需要哪些必要的东西才能确保互相通信会没有问题呢? 首先来看看最传统的系统交互,即两者直接互相明文传送,在这种情况下,若是被第三方拦截,会造成不可预估的影响.那么针对这种情况我 ...

  7. RSA加解密、验解签区别

    一.RSA加密简介 RSA加密是一种非对称加密.可以在不直接传递密钥的情况下,完成解密.这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险.是由一对密钥来进行加解密的过程,分别称为公钥和私 ...

  8. 国密算法SM2加解密_签名验签图形化例子

    点击上方蓝字可直接关注!方便下次阅读.如果对你有帮助,麻烦点个在看或点个赞,感谢~ 国密SM2概述 对国密算法有了解的朋友看到SM2可能会先想到非对称加密,之前的SM4是对称加密.SM4加解密使用的是 ...

  9. 【加解密】在线加密工具推荐

    最近在定位一些网络问题时,需要抓取物理口报文进行分析.但是在wan出口的报文已经被AES对称加密,抓到的报文是密文,无法确认某些关键报文是否从wan出口发出.这个定位问题带来了不便. 当时在想,我知道 ...

最新文章

  1. WifiP2pSettings工作流程
  2. atom编辑器的安装
  3. SAP PM 初级系列14 - 维修工单的凭证流
  4. Xilinx中时钟资源:模式时钟管理器(MMCM)的使用
  5. 拼装机器人感想_学习制作机器人的感想作文500字6篇
  6. java invalidate_Java Component.invalidate方法代码示例
  7. redis aof和rdb区别
  8. Visual Studio Online 终于公开上线了
  9. android.mk 强制编译,android.mk文件的编译
  10. django ajax获取数据类型,Django:使用Ajax获取模板中的数据库对象值
  11. easyui下拉框用法
  12. Ubuntu1404+Django1.9+Apache2.4部署配置1安装
  13. python复数运算程序_python复数及计算法则
  14. windows-sys:21:windows系统(win7 win10 win11)设置护眼色详细过程
  15. pip install
  16. UE4 Chunk分块
  17. Disparity(视差)简单解释
  18. 贝叶斯法则的举例分析
  19. 大吉大利,今晚吃鸡——跑毒篇
  20. v-chart折线图数据改造

热门文章

  1. 普通人如何快手直播带货;快手直播带货需要注意什么?丨国仁网络资讯
  2. 物流基础知识(十三)
  3. hiti打印机android驱动,hiti s420驱动下载
  4. STM32 使能了ReadOutProtection后再次烧录程序?
  5. python r语言 结合 部署_Win10 下安装R,rpy2,Rstudio 安装与配置 并实现Python 调用 R语言...
  6. 数学笔记——导数3(隐函数的导数)
  7. 装宽带的师傅为什么不肯装我自己买的七类网线?
  8. vb.net线程详细讲解
  9. SQL Server Len() 函数
  10. springBoot+AOP收集日志信息,自定义接口实现日志收集