数字签名机制 - ED25519
ED25519 是一种 EdDSA 算法,是一种在扭曲爱德华兹曲线(Twisted Edwards curves)上使用 Schnorr 机制来实现的一种数字签名机制。它具有速度快,密钥较短,安全性高等优点。
数字签名机制 - Schnorr Scheme
数字签名机制 - ED25519
本文中所有出现的变量,小写字母表示标量,即一个数字,在这里指整数;大写字母表示离散对数问题中的参数,例如:椭圆曲线中的点。
椭圆曲线密码学(ECC)是基于离散对数问题中的椭圆曲线而设计的。现行的 ECC 算法多用于替代 RSA 算法,以提升原始算法的安全性与性能。相比较 RSA,ECC 的性能较高,密钥长度较短,然而实现难度较大。在 ECC 算法基础上构建的数字签名算法被称为 ECDSA 算法,经过 NIST 批准的曲线有多条,例如 secp256r1,secp256k1 等。但现有的 ECC 算法中的曲线被指存在后门。
EdDSA 从某种意义上来说也属于椭圆曲线密码学,不同的是它采用扭曲爱德华兹曲线作为椭圆曲线,同时采用的签名机制也不同于 ECDSA 算法。EdDSA 的重要实现 ED25519 是 Daniel J. Bernstein 等人设计的 EdDSA 算法,采用的曲线参数完全公开,并说明了参数选取的意义,保证曲线中并未内置后门。同时 ED25519 采用 Schnorr 机制作为签名的构建方式,使得签名与验证的性能得到了巨大的提升。
ED25519 算法
在现有的方案 ED25519 种,采用了将参数 R,公钥 Y,与消息体 M 进行哈希作为随机数 r2。具体的 ED25519 公私钥生成与签名验证的方式如下:
公私钥生成
当前根据 ED25519 协议中密钥长度 b,被选择为 256;生成元为 G ;哈希函数 H() 为 SHA512;M 是被签名的信息;l 是一个质数,满足 lG=0。
随机选择一个长度为 b 为的二进制数作为私钥 a。
对 a 的进行哈希,产生一个长度为 2b 的值为 h=H(a),其中 h0…hb−1 为 x,用于产生公钥 ,hb…h2b−1 为随机数 k 。
将 x0,x1,x2 置 0,xb−1 置 0,xb−2 置 1。
计算公钥 Y=xG。
其中 a 为私钥,Y 为公钥。
签名流程
进行签名时,需要私钥 a,执行公私钥生成算法,得到公钥 Y,随机数 k。
计算随机数 r=H(k,M)。
计算随机点 R=rG。
计算签名 s=(r+H(R,Y,M)x)modl。
其中得到的 (R,s) 便是得到的数字签名。
其中 s 相当于前文所述 Schnorr 签名方案中的 s ,r 相当于 r1 ,H(R,Y,M) 相当于 r2。这里的哈希函数 H() 便充当了随机数预言机。
验证流程
进行验证时,验证者只需要知道公钥 Y,签名 (R,s), 消息 M 即可验证签名过程是否正确。
验证 sG=R+H(R,Y,M)Y 是否成立,即可验证签名是否正确。
其中 s 相当于前文所述 Schnorr 签名方案中验证公式中的 s ,G 为生成元,H(R,Y,M) 为 r2 ,其余部分一一对应。
安全考量
在 ED25519 的算法设计中,通过使用密码学哈希函数来代替伪随机数发生器,避免了签名算法的使用者因为采用的随机数生成器不够随机化而产生的安全问题。ED25519 的实现除去私钥的生成之外,签名过程已经完全脱离对随机数发生器的依赖,避免了因为随机化问题而导致密钥的泄露与安全性问题。
Post author: Tiannian Du
Post link: https://tiannian.github.io/2018/12/28/cryptography/ed25519/
Copyright Notice: All articles in this blog are licensed under BY unless stating additionally.
本文来自博客园,作者:晴云孤魂,转载请注明原文链接:https://www.cnblogs.com/cnhack/articles/16600732.html

浙公网安备 33010602011771号