特别地,https://slowli.github.io/ed25519-quirks/ 这个网站的内容很清晰。

1. signature in EdDSA

详细的EdDSA签名和验签过程可参看 rfc8032 Edwards-Curve Digital Signature Algorithm (EdDSA)



参照博客Schnorr signature (Schnorr 签名)数学原理类似,签名过程如下:

  • A=kGA=kGA=kG, kkk is private, A is public key, G is a standard elliptic-curve point.
  • R=rGR=rGR=rG, rrr 为 random-once随机数,每次需分别单独生成,R is public。
  • h=Hash(R∣∣A∣∣m)h=Hash(R||A||m)h=Hash(R∣∣A∣∣m), mmm is the message to be signed.
  • s=r+khs=r+khs=r+kh, (R,s)(R,s)(R,s) is the signature for message mmm.

∵sG=rG+khG=R+hA\because sG=rG+khG=R+hA∵sG=rG+khG=R+hA
∴R=sG−hA\therefore R=sG-hA∴R=sG−hA

验签时,(R,s),A,m,G(R,s),A,m,G(R,s),A,m,G均已知,其中的A/G/RA/G/RA/G/R均为elliptic-curve point, 且为节省空间,A/RA/RA/R已compress。sss为scalar值。具体的验签过程如下:

  • h=Hash(R∣∣A∣∣m)h=Hash(R||A||m)h=Hash(R∣∣A∣∣m)
  • compress(sG−h∗decompress(A))?=Rcompress(sG-h*decompress(A))\ \ ?= Rcompress(sG−h∗decompress(A))  ?=R

以上验签过程支持fast batch verification以及fast batch forgery identification.

For elliptic-curve signatures at a 2b2^b2b security level it is standard practice to use about 2b2b2b bits for hashes, scalars, and field elements, and to compress points to single coordinates. EdDSA and Schnorr’s system then have the same signature size, about 4b bits.

(R,s)(R,s)(R,s) 为EdDSA格式的签名,(R,h)(R,h)(R,h)为Schnorr格式的签名。相比于ECDSA,去掉了求倒数的操作。

对于Schnorr格式的签名,当选择bbbbits的Hash函数时,最终Schnorr格式的签名可减少至3b3b3b bits.

decompress需要有额外的求平方根运算,为节约verify的验证时间,也可传递未被压缩的public keys和未压缩的签名。decompress解压缩的细节可参看博客edwards25519 point压缩及解压缩算法,求平方根运算见博客有限域内的平方根求解原理解析及curve25519-dalek中的实现.

基于Pairing-based的签名,其长度更小,大约为2b2b2b bits,但是pairing-based的验签速度要比elliptic-verve的验签速度慢一个数量级。

参考资料:
[1] 论文《Faster batch forgery identification》
[2] 博客Schnorr signature (Schnorr 签名)数学原理
[3] Edwards-Curve Digital Signature Algorithm (EdDSA)
[4] https://slowli.github.io/ed25519-quirks/
[5] https://yondon.blog/2019/01/01/how-not-to-use-ecdsa/

elliptic-curve签名验证verify signature in EdDSA相关推荐

  1. Elliptic Curve Cryptography: finite fields and discrete logarithms

    转载自:https://andrea.corbellini.name/2015/05/23/elliptic-curve-cryptography-finite-fields-and-discrete ...

  2. Halo中的elliptic curve cycle

    1. 引言 Bowe等人2019年论文<Halo: Recursive Proof Composition without a Trusted Setup>. 该论文中的部分verific ...

  3. Elliptic Curve Cryptography: 轻轻的学

    Elliptic Curve Cryptography: 轻轻的学 Elliptic curves Algebraic addition Scalar multiplication Multiplic ...

  4. Elliptic curve cryptography

    原文来自wiki 翻译参照Bing在线翻译 - - 部分翻译 Elliptic curve cryptography From Wikipedia, the free encyclopedia Jum ...

  5. Elliptic curve Diffie–Hellman

    原文地址:https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman Elliptic curve Diffie–Hellm ...

  6. Hashing to elliptic curve算法改进

    1. 引言 前序博客有: ECDSA VS Schnorr signature VS BLS signature 第3节"BLS签名" 私钥pkpkpk,对应的公钥为P=pk×GP ...

  7. Emacs: Failed to verify signature archive-contents.sig或gpg: 无法检查签名:没有公钥

    背景 我在Ubuntu18.04上安装emacs使用,不过并不是最新版的emacs,版本号25.2.2.我本安装一个软件包company,用来自动补全.但是找遍了提供的软件包,也没有发现有,而且软件包 ...

  8. Elliptic Curve Cryptography (ECC) and Pairings 椭圆曲线密码学与配对

    本文是Dan Boneh 和Victor Shoup所写书籍A Graduate Course in Applied Cryptography的笔记. The group of points of a ...

  9. 椭圆曲线加密(Elliptic Curve Cryptography, ECC)

    近年来,国内外的科研人员面向设备资源受到限制的多种场景提出了很多基于ECC的认证密钥协商协议.虽然各协议应用场景不尽相同,但解决的问题和最终的目标都较为类似,可以归纳为在性能开销尽可能小的前提下,安全 ...

最新文章

  1. 关于浮点数的json解析
  2. 关于举办第十五届全国大学生 智能汽车竞赛的通知
  3. Block的副本放置策略
  4. shell 脚本不能执行多条?何解
  5. 普通的java类型是指,String是一个很普通的类 - Java那些事儿
  6. 【Elasticsearch】推荐一个同步Mysql数据到Elasticsearch的工具
  7. 区块链宠物社区Pawtocol与去中心化社交网络memeunity达成合作
  8. 一点Python学习资源
  9. 图像调优1:清晰度相关参数MTF,SFR,MTF50,MTF50P 以及TVL的概念以及换算说明
  10. Java服务端支付宝对接(详细)
  11. 大功率H桥电机驱动板电路设计方案 此大功率直流电机驱动板采用ir2103驱动芯片
  12. 计算机网络冗余码计算
  13. 经典算法题-----猴子吃桃的问题
  14. sdn交换机与普通交换机区别—Vecloud
  15. html中footer怎么写,HTML DOM Footer用法及代码示例
  16. 数字华容道有解的条件
  17. 苹果推史上最便宜iPhone,在于恐惧中国手机持续抢夺市场
  18. HTML二级下拉菜单常见样式以及常见问题
  19. 2022.6.20-6.26 AI行业周刊(第103期):新的小生命
  20. Wannafly挑战赛4,C题割草机,(模拟)

热门文章

  1. Java泛型的重要目的:别让猫别站在狗队里
  2. Ping过程的完全解析
  3. java.net.UnknownHostException:
  4. 【黏住用户的不是小红书,而是它背后的那些人】
  5. Java的链式编程(支持lombok)
  6. 批处理-----2.常用特殊符号
  7. [Web前端]第一次作业
  8. ESP32开发-LVGL显示图片
  9. 《MYSQL是怎样运行的》笔记|配置文件|系统变量|字符集|InnoDB存储结构|数据页结构|索引结构与使用|数据目录|表空间|连表原理|查询优化|BufferPool|事务|redo与undo|锁
  10. Windows下,Sublime text 在GoSublime中支持goimports