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

转载文章: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. MNN框架在WIN10上的部署

    一.为什么要做 刚进公司,实习期反正主管要求什么我就做什么....自己反正也比较感兴趣,故开始查看官方文档.下述的一切都是基于官方提供的"语雀文档"内的指令进行的,会对自己部署MN ...

  2. Codeforces 777 题目研讨

    题目连接 A B C D E 题目分析 A 难度:普及− 题面翻译: 给你三张牌:\(0\),\(1\),\(2\). 最初选一张,然后依次进行 \(n\) 次交换,交换规则为:中间一张和左边的一张, ...

  3. php的各种序列化对比

    php的各个序列化反序列化对比如下 function 10万条记录的序列化并写入(ms) 10万条记录文件读取并反序列化(ms) 100条记录序列化并写入(ms) 100条记录文件读取并反序列化(ms ...

  4. Python prometheus_client使用方式

    #!/usr/bin/env python # -*- coding: utf8 -*- import socket,re from prometheus_client import generate ...

  5. Codeforces Round 892 (Div.2)

    A. United We Stand 题解 赛时想复杂了 题目要求我们保证数组\(c\)中的数不是数组\(b\)中任意一个数的因子 我们考虑将最小值置于数组\(b\)即可 const int N = ...

  6. PostgreSql Docker 主从热备,异步流复制方案

    环境说明 Docker Windows 11 PostgreSql 16 方案步骤 0. 宿主机准备: 找个地方创建一个文件夹用来挂载容器中数据库Data文件夹,这里我用的是: C:\Users\Ad ...

  7. 《JavaScript 模式》读书笔记(7)— 设计模式3

    这一篇,我们学习本篇中最为复杂的三个设计模式,代理模式.中介者模式以及观察者模式.这三个模式很重要!! 七.代理模式 在代理设计模式中,一个对象充当另一个对象的接口.它与外观模式的区别之处在于,外观模 ...

  8. powershell禁止系统运行脚本

    错误信息: set-executionpolicy remotesigned set-executionpolicy : Windows PowerShell 已成功更新你的执行策略,但在更具体的作业 ...

  9. aspirate 工具

    dotnet tool aspirate https://www.nuget.org/packages/aspirate/0.1.40-preview 作为全局工具安装 dotnet tool ins ...

  10. 金TECH频道|最近备受关注的“应用重构”到底是什么?

    "金TECH频道"旨在为您分享中电金信助力行业数字化转型的最新产品业务动态.技术观点洞察与应用实践案例.让我们在这里,与行业发展同频共振,共筑数字新基石.