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 ...
随机推荐
- 13.Kubernetes核心技术Ingress
Kubernetes核心技术Ingress 前言 原来我们需要将端口号对外暴露,通过 ip + 端口号就可以进行访问 原来是使用Service中的NodePort来实现 在每个节点上都会启动端口 在访 ...
- ext 库及 pb_ds 在 OI 中的应用
ext 库在 OI 中的应用 写一个帖子,防止以后忘了. pb_ds 部分 pb_ds 万能头 #include<bits/extc++.h> 来包含 ext 库中所有的头文件(例如 pb ...
- VLAN技术
VLAN是虚拟局域网的缩写,它是一种将网络设备(如交换机.路由器等)分割成多个虚拟网络的技术.每个VLAN都是一个独立的广播域,使得可以在同一物理网络上创建多个逻辑网络,从而提高网络的安全性和灵活性. ...
- python 递归比较两个文件夹
以下 import filecmp, os def compare_folders(folder1, folder2): dcmp = filecmp.dircmp(folder1, folder2) ...
- memcached简介及java使用方法
一. 概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二. 适用场合 1. 分布式应用 ...
- Blazor 组件库 BootstrapBlazor 中Markdown组件介绍
组件介绍 Markdown组件是tui.editor的封装,所以所有内容均基于tui.editor. 默认状态下样子如下所示: 其代码如下: <Markdown Language="@ ...
- 理解Java BlockingQueue
数据结构与算法是天生一对. BlockingQueue叫做阻塞队列,在Java线程池相关的实现中有广泛的使用. BlockingQueue实现的功能如下: 当队列为空时,往队列中读数据将被阻塞. 当队 ...
- MySQL底层概述—4.InnoDB数据文件
大纲 1.表空间文件结构 (1)表空间Tablesapce (2)段Segment (3)区Extend (4)页Page (5)行Row 2.Page结构 (1)页结构各部分说明 (2)页结构整体划 ...
- 雪碧图的魔力:优化CSS动画场景
什么是雪碧图 雪碧图(CSS Sprites),是一种网页图像处理技术,它将多个小图标或图像合并成一个大的图像文件.这种方法允许浏览器通过一次HTTP请求加载多个图像,而不是为每个小图标单独发起请求. ...
- idea中yaml文件中文乱码问题解决
idea打开yaml,或是properties文件,出现中文乱码. 解决步骤: 打开notepad++ ,新建iso-8859-1编码的空文件 将乱码文件通过notepad++直接打开,把正常显示的代 ...