ed25519加密签名算法及应用
刷知乎时看到一篇文章,很感兴趣,来学习一下!
转载文章: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加密签名算法及应用的更多相关文章
- 利用Openssl进行RSA加密签名算法
加密(签名)的过程是(M的e次方)mod n,在这里我们把消息M假定为一个数字,但实际上消息一般为字符串,所以必须有一个将字符串转化为数字的规则,并且要让这个数字的大小和n相当(也不能比 n大).这样 ...
- 复习做UWP时涉及到的几种加密签名相关
本人菜鸟一枚,大学里凭兴趣学了一点WP的皮毛,后来又幸运(或者不幸)的进了一家专注于Windows生态的公司做了一段时间的UWP.在博客园写点自己遇到的东西,作为分享,也作为自己的备忘,如果有错误的地 ...
- 【转】js生成接口请求参数签名加密
js生成接口请求参数签名加密 签名算法规则: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=v ...
- twitter 授权过程
转自:http://blog.csdn.net/yangjian8915/article/details/11816669 官方的流程图如下: 下面开始一步步讲解,如何获取最终的access_toke ...
- 【.NET】.NET MVC4 微信扫一扫功能实现-附全部代码
写在前面的 首先在调用微信的JS-SDK接口的时候需要仔细阅读一下官方的注意事项,否则可能事倍功半.这里先大概概述一下主要的流程,首先,使用微信扫一扫需要一个已经通过认证的公众号:其次,需要知道 ...
- 谈HTTPS中间人攻击与证书校验(一)
一.前言 随着安全的普及,https通信应用越发广泛,但是由于对https不熟悉导致开发人员频繁错误的使用https,例如最常见的是未校验https证书从而导致“中间人攻击”,并且由于修复方案也一直是 ...
- 使用Frida简化Android端应用安全测试
@author : Dlive 在对Android应用进行Web漏洞测试时,经常遇到一种情况:HTTP传输的数据带有签名字段 处理这种情况的方法通常是逆向签名算法,但是如果算法在so中,而且so加壳了 ...
- 【密码学】CSP的概念
CSP加密服务提供者(Cryptographic Service Provider)具有一下几个特点: CSP是真正执行密码运算的独立模块 物理上一个CSP由两部分组成:一个动态连接库,一个签名文件 ...
- 【转】密码学 :CSP的概念
转:[密码学]CSP的概念 CSP加密服务提供者(Cryptographic Service Provider)具有一下几个特点: CSP是真正执行密码运算的独立模块 物理上一个CSP由两部分组成:一 ...
- TLS1.3 认证和秘钥建立握手环节的分析
1.ClientHello 中的参数 ClientHello---{ Random_C .extension } 在 extension中的扩展中包含 ( supported_version ...
随机推荐
- RT-Thread Studio刚新建工程后直接打开main.c编译就board.c里产生报错,解决办法
如题,RT-Thread Studio刚新建工程后直接打开main.c编译就产生报错. 具体为:刚新建了一个stm32F407ZGT6和一个STM32F103RCT6的工程,之后啥代码也没有改,直接打 ...
- pytest框架之fixture
1.在进行接口关联时,一般很多个接口共用一个上行接口(例如)登录,可以使用fixture定义一个测试夹具,将登录的接口写在框架的conftest.py文件中: @pytest.fixture(scop ...
- PA1-碎碎念
part 1 8.27 方便管理,主要是想熟悉下git的操作 先创建并且切换到一个新的分支: git commit --allow-empty -am "before starting PA ...
- js+jquery实现贪吃蛇经典小游戏
项目只使用到了html,css,js,jquery技术点,没有使用游戏框架,下载本地直接双击index.html 运行即可体验游戏效果. 项目展示 进入游戏 游戏开始 游戏暂停 html文件 < ...
- linux 查看进程的bin文件所在路径
1.获取进程pid ps aux |grep nginx|grep master|grep -v grep|awk '{print $2}' 2.根据进程pid 获取 bin路径 方法a pwdx p ...
- 方法区回收过程与GC的并发与并行
主要回收废弃常量和无用的类 废弃常量包括字面量.类或接口.方法.字段的符号引用等 废弃指的是没有任何地方引用这个常量. 无用的类 满足的三个条件: 1.没有该类的任何实例存在 2.加载该类的Class ...
- ASP.NET Core 9.0 中新增的MapStaticAssets() 中间件
前言 在Core 9.0版本中新增的内容不算多,除了内置OpenAPI 外 应该就属MapStaticAssets中间件最有价值了,最初MapStaticAssets主要是为了解决Blazor静态资源 ...
- 【读书笔记】 深入理解JVM第三版 JVM 运行时数据区
JVM 内存管理 堆 (Heap)线程共享 方法区 (Method Area)线程共享 虚拟机栈(VM Stack) 线程私有 本地方法栈 (Native Method Stack)线程私有 程序计数 ...
- 在PlatformIO IDE中对ESP32的CPU主频等进行配置
前言 rt,有一天开发中需要尽可能发挥ESP32的全部性能,提高主频自然是首选,在Arduino IDE中修改主频很方便,但在PlatformIO IDE中修改主频的方法网上说的却很少,今天就总结一下 ...
- Intel Pin初探
1.在/home/hf/Desktop/pin/pin-3.30-98830-g1d7b601b3-gcc-linux/source/tools/ManualExamples/目录下写自己的pinto ...