刷知乎时看到一篇文章,很感兴趣,来学习一下!

转载文章:ed25519加密签名算法及应用

初次使用Github时都需上传本地的公钥,这时需要提前在本地生成密钥对,使用的是ssh-keygen命令:

ssh-keygen -C "your_email@example.com"

该命令属于OpenSSH,win10系统自带,linux一般也自带,且支持多种加密签名算法,其中也支持ed25519:

介绍

ed25519是一种EdDSA签名,基于SHA-512和Curve25519,可以看出他的命名取自EdDSA和Curve25519的前半和后半。

  • EdDSA(Edwards-curve Digital Signature Algorithm)是基于扭曲爱德华兹曲线(twisted Edwards curves)的一类签名算法,

  • Curve25519是扭曲爱德华兹曲线的一种。

爱德华兹

爱德华兹(Harold Edwards)是美国数学家,从事数论、代数以及数学历史和哲学工作,1936-2020,享年84岁。

  • 爱德华兹20岁毕业于威斯康星大学麦迪逊分校
  • 21岁获得哥伦比亚大学文学硕士学位
  • 25岁获得哈佛大学博士学位
  • 曾在哈佛大学和哥伦比亚大学任教,30岁加入纽约大学,66岁成为名誉教授,76岁成为美国数学学会成员。

看看大佬‍♂️的经历,膜拜~

主要著作有高级微积分、黎曼函数、费马最后定理等书籍。

前NBC新闻记者、作家罗琳(Betty Rollin)是爱德华兹的妻子,和小野洋子(Ono Yoko)是同学,而小野洋子是披头士乐队列侬(John Lennon)的妻子。

附上来自纽约大学的介绍:https://www.math.nyu.edu/faculty/edwardsd/

椭圆曲线

形如\(y^2=x^3+ax+b\) 的曲线,关于更多椭圆曲线的介绍参考:

1、https://zhuanlan.zhihu.com/p/35618744

2、https://www.cnblogs.com/pam-sh/p/16564541.html

爱德华曲线

爱德华兹曲线,d=-30

形如\(x^2+y^2=1+dx^2y^2\) 的曲线,可以称为爱德华兹曲线,被爱德华兹于2007年研究发表,二元二次曲线,看起来非常工整。

扭曲爱德华兹曲线

扭曲爱德华兹曲线,a=8,d=4

形如 \(ax^2+y^2=1+dx^2y^2\) 的曲线,可以称为扭曲爱德华兹曲线,其中\(a,d≠0,a≠d\)。字如其名,多了常数 a ,可以理解为加入这个常数 a 后曲线相应地变形了。

蒙哥马利曲线

蒙哥马利曲线,B=0.25,A=2.5

形如 \(By^2=x^3+Ax^2+x\) 的曲线。看到这里,我相信当年椭圆曲线对数学家来说无疑是新大陆,加个常数,研究一下特性,就可以用自己的名字命名了。【~】

Curve25519

蒙哥马利曲线,B=1,A=486662

\(y^{2}=x^{3}+486662 x^{2}+x\),图像很不直观了,是蒙哥马利曲线的实例,其中 \(p=2^{255}−19\) ,因此命名为曲线25519,2005年被伯恩斯坦发表。

ed25519曲线

\(-x^{2}+y^{2}=1-\frac{121665}{121666} x^{2} y^{2}\),是扭曲爱德华兹曲线的实例,和Curve25519可以相互转化。

25519系列曲线自2005年发表以来,除了学术界无人问津。2013年斯诺登曝光棱镜计划后,人们发现美国安全局有可能实现基于P-256曲线的Dual_EC_DRBG算法后门,并怀疑P曲线的常数是特意选出的,方便美国安全局破解该算法。此后,25519曲线代替P-256曲线被广泛应用,OpenSSH迅速增加了对25519系列的支持。

EdDSA

基于ed25519曲线的EdDSA签名算法的公钥较短,为32个字节。四核2.4GHz的cpu每秒可以签名109000次,哈希碰撞攻击无效。总而言之,ed25519签名算法是一个高速、高安全性的签名算法。

另外一篇文章也提到:在 Apple 最近发布的iOS 安全白皮书中,讲述在 Apple 生态系统中广泛使用 ECDSA。通过 iMessage 发送的消息使用 ECDSA 进行签名,而 iCloud 钥匙串同步依赖于 ECDSA。越来越多的技术将 ECDSA 用于安全性,包括端到端加密消息服务TextSecure和CryptoCat。

  • 安全性与RSA相当,且密钥更短!

密钥的安全性取决于其大小和算法。有些算法比其他算法更容易破解,并且需要更大的密钥才能获得相同的安全级别,破解 RSA 密钥需要考虑一个很大的数字。随着硬件的进步以及量子计算的出现,我们越来越擅长分解大量数字【大数分解问题】,破解ECDSA密钥需要解决椭圆曲线离散对数问题 (ECDLP),自从 Koblitz 和 Miller 在 1985 年独立引入以来,数学界在改进算法以解决这个问题方面没有取得任何重大进展。

这意味着使用 ECDSA,可以获得与 RSA 相同级别的安全性,但密钥更小。由于几个原因,较小的键比较大的键更好:较小的密钥具有更快的生成签名的算法,因为数学涉及较小的数字,更小的公钥意味着更小的证书和更少的数据来建立 TLS 连接,这意味着更快的连接和更快的网站加载时间。

使用

  • java

ECDSA签名算法,封装在JDK中,且只在JDK1.7之后才有

public static void main(String[] args) throws Exception {
//生成公钥私钥
KeyPair keyPair1 = getKeyPair();
PublicKey publicKey1 = keyPair1.getPublic();
PrivateKey privateKey1 = keyPair1.getPrivate();
//密钥转16进制字符串
String publicKey = HexUtil.encodeHexString(publicKey1.getEncoded());
String privateKey = HexUtil.encodeHexString(privateKey1.getEncoded());
System.out.println("生成公钥:"+publicKey);
System.out.println("生成私钥:"+privateKey);
//16进制字符串转密钥对象
PrivateKey privateKey2 = getPrivateKey(privateKey);
PublicKey publicKey2 = getPublicKey(publicKey);
//加签验签
String data="message";
System.out.println("消息:"+data);
String signECDSA = signECDSA(privateKey2, data);
System.out.println("签名:"+signECDSA);
boolean verifyECDSA = verifyECDSA(publicKey2, signECDSA, data);
System.out.println("验签结果:"+verifyECDSA);
}

  • c++

使用openSSL库

int main()
{
generateKey_test();
sign_test();
verify_test();
return 0;
}

程序见github

参考

1、https://en.wikipedia.org/wiki/EdDSA

2、https://datatracker.ietf.org/doc/html/rfc8032

3、https://blog.csdn.net/xujunkai66/article/details/104801346

4、https://blog.csdn.net/qq_41987680/article/details/124888222

ed25519加密签名算法及应用的更多相关文章

  1. 利用Openssl进行RSA加密签名算法

    加密(签名)的过程是(M的e次方)mod n,在这里我们把消息M假定为一个数字,但实际上消息一般为字符串,所以必须有一个将字符串转化为数字的规则,并且要让这个数字的大小和n相当(也不能比 n大).这样 ...

  2. 复习做UWP时涉及到的几种加密签名相关

    本人菜鸟一枚,大学里凭兴趣学了一点WP的皮毛,后来又幸运(或者不幸)的进了一家专注于Windows生态的公司做了一段时间的UWP.在博客园写点自己遇到的东西,作为分享,也作为自己的备忘,如果有错误的地 ...

  3. 【转】js生成接口请求参数签名加密

    js生成接口请求参数签名加密 签名算法规则: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=v ...

  4. twitter 授权过程

    转自:http://blog.csdn.net/yangjian8915/article/details/11816669 官方的流程图如下: 下面开始一步步讲解,如何获取最终的access_toke ...

  5. 【.NET】.NET MVC4 微信扫一扫功能实现-附全部代码

    写在前面的    首先在调用微信的JS-SDK接口的时候需要仔细阅读一下官方的注意事项,否则可能事倍功半.这里先大概概述一下主要的流程,首先,使用微信扫一扫需要一个已经通过认证的公众号:其次,需要知道 ...

  6. 谈HTTPS中间人攻击与证书校验(一)

    一.前言 随着安全的普及,https通信应用越发广泛,但是由于对https不熟悉导致开发人员频繁错误的使用https,例如最常见的是未校验https证书从而导致“中间人攻击”,并且由于修复方案也一直是 ...

  7. 使用Frida简化Android端应用安全测试

    @author : Dlive 在对Android应用进行Web漏洞测试时,经常遇到一种情况:HTTP传输的数据带有签名字段 处理这种情况的方法通常是逆向签名算法,但是如果算法在so中,而且so加壳了 ...

  8. 【密码学】CSP的概念

    CSP加密服务提供者(Cryptographic Service Provider)具有一下几个特点: CSP是真正执行密码运算的独立模块 物理上一个CSP由两部分组成:一个动态连接库,一个签名文件 ...

  9. 【转】密码学 :CSP的概念

    转:[密码学]CSP的概念 CSP加密服务提供者(Cryptographic Service Provider)具有一下几个特点: CSP是真正执行密码运算的独立模块 物理上一个CSP由两部分组成:一 ...

  10. TLS1.3 认证和秘钥建立握手环节的分析

    1.ClientHello 中的参数 ClientHello---{   Random_C .extension }   在 extension中的扩展中包含 ( supported_version ...

随机推荐

  1. Redis中常见的数据类型及其应用场景

    五种常见数据类型 Redis中的数据类型指的是 value存储的数据类型,key都是以String类型存储的,value根据场景需要,可以以String.List等类型进行存储. 各数据类型介绍: R ...

  2. ubuntu安装fish

    换新电脑后需要安装fish命令行工具,发现总是apt install不成功,后来挂了代理才成功. 然后我想让这个fish的命令能自动导入我以前写的alias命令(点击这里),可是发现网上人家都说fis ...

  3. Java网络编程之JavaMail发送邮件和接受邮件

    JavaMail是API 是一个标准的Java扩展,它是J2EE的范畴,在J2EE开发过程中可能会需要用到这个API.在学习JavaMail之前,有必须要对现在的互联网的邮件协议进行有个大体的了解. ...

  4. JConsole 远程监控Tomcat服务

    JConsole 远程监控Tomcat服务 1.概述 JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动.如果要把一个应用以可管理的形式启动, ...

  5. Java多线程设计模式(6)两阶段终止模式

    一 Two-Phase Termination Pattern Two-Phase Termination Pattern,指的就是当希望结束一个线程的时候,送出一个终止请求,但是不会马上停止,做一些 ...

  6. Codeforces Round 901 (Div

    C. Jellyfish and Green Apple 题解 显然\(n \% m =0\),答案一定为\(0\) 如果\(n > m\),我们显然可以将\(n / m\)的苹果分给每个人,然 ...

  7. Element-Plus表格:Table自定义合并行数据的最佳实践

    " 知行合一 " -- 王阳明 在开发项目中,我们时常会用到表格,许多需求可能会要求自定义特定的行或列. 接下来,我们将探讨在实际开发中如何应对这一挑战. 本文案例采用的技术: 名 ...

  8. ClickHouse 物化视图学习总结

    物化视图 物化视图源表--基础数据源 创建源表,因为我们的目标涉及报告聚合数据而不是单条记录,所以我们可以解析它,将信息传递给物化视图,并丢弃实际传入的数据.这符合我们的目标并节省了存储空间,因此我们 ...

  9. 编写bash脚本快速kill或启动tomcat

    ​假设tomcat安装路径为 /home/tomcat,示例如下: 1. kill tomcat进程 vim kill-tomcat-force.sh set fileformat=unix path ...

  10. 完美解决idea2020一直indexing,无法操作的问题

    hello,大家好,2021年的第一篇文章,希望疫情早日过去,大家早日恢复正常生活. 今天主要分享一下在使用idea 2020.3版本开发maven项目的时候,一直出现有效件index, 有时候是sc ...