目录

前言

基本认知

数字签名

spec256k1

spec256r1

ed25519

ECDSA七宗罪

EdDSA的诞生

参考


前言

基本认知

  • spec256r1、spec256k1、ed25519都是签名算法,而且是具体数字算法的实现。
  • spec256k1、spec256r1都属于椭圆曲线数字签名算法ECDSA(Elliptic Curve Digital Signature Algorithm)签名的具体实现,只是椭圆曲线函数不同。是由 NIST(National Institute of Standards and Technology)这个组织确定的。
  • ed25519属于EdDSA (Edwards-curve Digital Signature Algorithm) 签名算法的具体实现,是由ANFS组织推进的ed25519密钥体系相关进展。

数字签名

  • 数字签名的核心是私钥加签、公钥验签;加签是利用私钥对数据进行签名生成签名值,验签是从签名中恢复公钥的过程。
  • 数字签名在以太坊中有三种用途。首先,签名证明私钥的所有者,暗示着以太坊账户的所有者,已经授权支付ether或执行合约。其次,授权的证明是_undeniable_(不可否认)。第三,签名证明交易数据在交易签名后没有也不能被任何人修改。

下图是各加密货币采用的签名算法的现状,可见除了想起项目NEO采用还采用spec256r1,多数是spec256k1。

spec256k1

特定的椭圆曲线称为secp256k1,即曲线 y² = x³ + 7 在有限域 (⼜名伽罗瓦域)。

spec256r1

secp256k1和secp256r1都是ECDSA(椭圆曲线数字签名算法)曲线的参数,区别是他们所使用的随机质数不同,目前行业内对于r1算法的安全性存疑。

ed25519

ed25519是基于扭曲爱德华曲线Edwards25519和SHA-512的EdDSA签名机制。

其中Edwards25519曲线是Bernstein等人在2006年提出的蒙哥马利曲线Curve25619的等价变换形式, Curve25519的提出是为了加速ECDH的计算。之所以采用Curve25519的等价变换形式而不是直接利用Curve25519的原因在于ECDH与EdDSA依赖 的点群运算不同,这可以看成是为上层协议适配中层点群运算的经典示例.另外两个曲线在底层有限域的选取中也充分考虑了快速实现与应用编码问题.而Ed25519的签名设计则将ECDSA中常见的随机数问题纳入考量,直接在签名机制内部解决了随机数产生的问题。

curv25519⽤于加密,x25519⽤于密钥交换,ed25519是基于25519曲线的签名。起初⽆⼈问津, 2013 年爱德华·斯诺登曝光棱镜计划后,该算法突然⼤⽕,⼤量软件,如OpemSSH都迅速增加了对 25519 系列的⽀持。

ed25519是⽬前最快的椭圆曲线加密算法,性能远远超过 NIST 系列,⽽且具有⽐ P-256 更⾼的安全性。ed25519是⼀个数字签名算法,签名和验证的性能都极⾼, ⼀个4核 2.4GHz 的 Westmere cpu,每秒可以验证 71000 个签名,安全性极⾼,等价于RSA约3000-bit。

签名过程不依赖随机数⽣成器,不依赖hash函数的防碰撞性,没有时间通道攻击的问题,并且签名很⼩,只有64字节,公钥也很⼩,只有32字节。

BANKIA已成功采用ed25519加密算法,实现链上数据安全传输,ed25519 的安全性在 RSA 2048 与 RSA 4096 之间,性能在数十倍以上。

Ed25519也确实引入了一个在基于secp256k1或者secp256r1的ECDSA签名机制中不存在的问题.一个由于椭圆曲线的余因子(cofactor)不为1导致的问题,使得Monero中可以八花一笔交易(问题已经被修正).secp256k1和secp256r1的余因子为1,所以无需考虑余因子的问题,也不会引发安全问题.而Edwards25519的余因子为8,此时就不得不在应用时将余因子纳入考量的范畴.而余因子为8也部分影响了Ed25519签名机制的设计.

ECDSA七宗罪

  1. 如果签名过程中随机数值泄露, 则任何知道该随机数值的⼈可以使⽤该随机数产⽣签名值恢复私钥

  2. 如果同一个用户对两个不同的消息签名时,采用了相同的随机数,则则任何⼈都可以通过两个签名值恢复出私钥

  3. 如果两个用户执行ECDSA签名时采用了相同的随机数,则两人中的任何一方可以推算出另一方的私钥

  4. 如果相同的私钥和随机数被同时用于ECDSA签名和Schnorr签名,则任何⼈都能够恢复出私钥

  5. ECDSA签名值的可锻造性带来的安全隐患

  6. ECDSA签名值的DER编码的不唯一性会带来的安全隐患

  7. 如果验签时不要求提供被签名的消息,则任何人都可以伪造签名值

EdDSA的诞生

ECDSA安全以及执行效率的问题, 要求在工程手段之外更为深度的改进, 一个自然的方向是重新构建椭圆曲线以及签名机制以便在多个层次上同时改进: 改进底层算术运算加速中层点群运算, 中层点群运算适配上层协议, 并在上层签名机制设计时同时考虑 ECDSA 签名机制的问题与局限性加以避免. EdDSA (Edwards-curve Digital Signature Algorithm) 签名机制是这个研究方向上的成果。

EdDSA 签名机制是 Bernstein 等人在 2012 年设计的基于爱德华曲线 (Edwards Curves) 的数字签名算法。EdDSA 签名机制是 Schnorr 签名机制的一个变种, 其设计初衷是在不牺牲安全性的前提下提升签名/验签速 度, 并同时解决前述的 ECDSA 在应用方面存在的一些问题.

参考

  • https://github.com/dalek-cryptography/ed25519-dalek
  • https://github.com/jpopesculian/ed25519-dalek-bip32
  • https://github.com/jedisct1/rust-ed25519-compact
  • https://github.com/w3f/hd-ed25519
  • https://github.com/ZenGo-X/multi-party-eddsa
  • https://github.com/ZcashFoundation/ed25519-zebra
  • https://github.com/RustCrypto/signatures
  • Cryptography behind cryptocurrencies
  • ECDSA在区块链应用中的七宗罪
  • docs/190722-secp256k1-ecdsa-dangers.pdf at master · coinexchain/docs · GitHub
  • 维基百科 EdDSA
  • ECDSA VS Schnorr signature VS BLS signature
  • Extended twisted Edwards curve坐标系及相互转换
  • Edwards-Curve Digital Signature Algorithm (EdDSA)
  • Cryptography behind top 20 cryptocurrencies
  • Ed25519 BIP32 · Issue #6301 · solana-labs/solana · GitHub
  • https://smith-mcf.medium.com/solana-vanity-address-using-gpus-5a68ad94d1d4
  • 区块链中的Ed25519_mutourend的博客-CSDN博客_ed25519

一文说明白ECDSA spec256k1 spec256r1 EdDSA ed25519千丝万缕的关系相关推荐

  1. 一篇文章看明白 Android 图形系统 Surface 与 SurfaceFlinger 之间的关系

    Android - SurfaceFlinger 图形系统 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 一篇文 ...

  2. 一文说明白SMC继电器的三种模式:迟滞模式,窗口模式,报警模式

    阅读时间5分钟. 有不少同学表示,不理解迟滞模式,窗口模式,报警模式. 这里花点儿时间说明一下,这三种模式按照难易程度: 1.报警模式:这种方式顾名思义,到压力报警,回到正常范围,报警消除. 简单易懂 ...

  3. 实战即时聊天,一文说明白:聊天服务器+聊天客户端+Web管理控制台。

    目录 一.前言 二.最终效果 1.聊天服务器 2.聊天客户端 3.Web管理控制台 三.需求分析 四.概要设计 1.技术选型 1)聊天服务端 2)Web管理控制台 3)聊天客户端 4)SpringBo ...

  4. 为什么H5是黑灰产高发区?一文说明白

    为什么H5是黑灰产高发区? 从我们多年的防控经验来看,H5面临的风险相对较多是有其原因的. 1.JavaScript代码特性. H5平台开发语言是JavaScript,所有的业务逻辑代码都是直接在客户 ...

  5. 一张图看明白UML类图中的6种关系

    在UML类图中,有6种关系,分别是: (1)泛化(Generalization),简单说就是父类和子类的关系,extends/: (2) 实现(Realization),简单说就是接口和实现的关系,i ...

  6. 彻底搞明白大B和小b之间的关系

  7. 透过一张图 彻底明白并查集维护与祖宗结点关系的方法

    算法详解 238.银河英雄传说(维护与祖宗结点的距离) /*** @Author: Wilson79* @Datetime: 2019年12月22日 星期日 11:43:37* @Filename: ...

  8. 一篇文章看明白 Android PackageManagerService 工作流程

    Android - PackageMangerService 分析 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 ...

  9. 一篇文章看明白 Android v1 v2 签名机制

    Android - v1 & v2 签名机制 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 一篇文章看明 ...

  10. 一篇文章看明白 Android Service 启动过程

    Android - Service 启动过程 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 一篇文章看明白 An ...

最新文章

  1. Observer设计模式【利用商品概念解释】
  2. java 权重_java实现权重随机算法
  3. ue4 classuobject没有成员beginplay_关于UE4使用的一些想法(一)
  4. 「Python」Terminal / cmd中的Python命令解释器中的pip操作
  5. Apache Flink Meetup 8.7 深圳站,企业实践 + 1.14 版本预热
  6. JSP常用Form表单控件
  7. php使用pdo操作mysql数据库实例_php使用PDO操作MySQL数据库实例_PHP
  8. ubuntu远程连接windows工具rdesktop
  9. 从 40% 跌至 4%,“糊”了的 Firefox 还能重回巅峰吗?
  10. android和java中常见 Exception
  11. 南理工计算机学院研究生课程的评价和反思(研一上)
  12. 极光IM使用教程-极光推送
  13. python生产和消费模型_【Python】python 生产/消费模型
  14. java 文件上传终止_java文件上传
  15. 我的chrome插件
  16. 用思科模拟器对交换机进行超级终端配置和Telnet远程登录配置
  17. 偏差-方差分解简要推导
  18. 用友 hr win10 java_用友u8win10安装教程_用友u8win10安装方法步骤教程_用友u8安装教程...
  19. 从零搭建Angular10项目
  20. 灵飞经4 西城八部 第二十章 倒行逆施(三)

热门文章

  1. aliyun资源编排 介绍和实例
  2. android n自带游戏,Android N玩游戏更快了 但国产ROM要等很久
  3. CentOS 无法连接网络解决办法
  4. B站视频最新下载方法
  5. 新手焊接电路板_简单电路板的手工焊接步骤解析
  6. java机票编程_携程预订机票后台java开发编程
  7. 今天生日回想这难忘的一年(应届大学生2019-2020一年的总结)
  8. 第六章:Reminders实验:第二部分[Learn Android Studio 汉化教程]
  9. 小程序码(getUnlimited,createQRCode)
  10. unity打包VR项目注意事项