Tech Blog

SmartX前瞻规划使用ed25519密钥体系

By 2019年12月6日 No Comments

25519 系列曲线自 2006 年发表以来,除了学术界无人问津, 2013 年爱德华·斯诺登曝光棱镜计划后,该算法突然大火,大量软件,如OpemSSH都迅速增加了对 25519 系列的支持,如今可疑的NIST曲线迟早要退出椭圆曲线的历史舞台,而 25519 已经是大势所趋。

25519曲线有如下几个特点:

  • 算法各参数的选择直截了当,非常明确,没有任何可疑之处,相比之下目前广泛使用的椭圆曲线是按照 NIST的 系列标准,方程的系数使用来历不明的随机种子 c49d3608 86e70493 6a6678e1 139d26b7 819f7e90 生成的,非常可疑,疑似后门。
  • 一个椭圆曲线加密算法就算在数学上是安全的,在实用上也并不一定安全,有很大的概率通过缓存、时间、恶意输入摧毁安全性,而 25519 系列椭圆曲线经过特别设计,尽可能的将出错的概率降到了最低,可以说是实践上最安全的加密算法。例如,任何一个 32 位随机数都是一个合法的 X25519 公钥,因此通过恶意数值攻击是不可能的,算法在设计的时候刻意避免的某些分支操作,这样在编程的时候可以不使用 if ,减少了不同 if 分支代码执行时间不同的时序攻击概率,相反, NIST 系列椭圆曲线算法在实际应用中出错的可能性非常大,而且对于某些理论攻击的免疫能力不高, Bernstein 对市面上所有的加密算法使用 12 个标准进行了考察, 25519 是几乎唯一满足这些标准的。
  • 25519 系列曲线是目前最快的椭圆曲线加密算法,性能远远超过 NIST 系列,而且具有比 P-256 更高的安全性。Ed25519是一个数字签名算法,签名和验证的性能都极高, 一个4核2.4GHz 的 Westmere cpu,每秒可以验证 71000 个签名,安全性极高,等价于RSA约3000-bit。签名过程不依赖随机数生成器,不依赖hash函数的防碰撞性,没有时间通道攻击的问题,并且签名很小,只有64字节,公钥也很小,只有32字节。

25519系列曲线是著名的密码学家Daniel J. Bernstein在2006年独立设计的一套包含签名 /加密 /密钥的椭圆曲线交换算法。其中curv25519用于加密,x25519用于密钥交换。ed25519则用于基于25519曲线的签名。

为什么不使用secp256k1而使用ed25519?

基于椭圆曲线secp256k1的ECDSA由于Bitcoin中的部署,逐渐成为区块链项目中默认的签名机制. 然而在Bitcoin诞生的时期, 工程项目中更多采用基于一条名为secp256r1的椭圆曲线的ECDSA签名机制, Bitcoin中最初采纳secp256k1的真正原因已不可知,我们只能进行揣测, 也许是secp256r1曲线中可能埋藏的由NSA引入的算法后门, 也许是非常适合secp256k1支持的自同态映射能够加速签名验证过程的特性.

在区块链场景中应用基于secp256k1的ECDSA,带来了诸多方面的挑战,稍有不慎,就可能在区块链网络中引发安全问题,或者数字货币资产的损失. 回顾区块链发挥过程中踩过的坑,我们总结了基于secp256k1ECDSA签名机制在区块链场景中应用时的七宗罪:

  • 如果签名过程中随机数值泄露, 则任何知道该随机数值的⼈可以使⽤该随机数产⽣签名值恢复私钥
  • 如果同一个用户对两个不同的消息签名时,采用了相同的随机数,则则任何⼈都可以通过两个签名值恢复出私钥
  • 如果两个用户执行ECDSA签名时采用了相同的随机数,则两人中的任何一方可以推算出另一方的私钥
  • 如果相同的私钥和随机数被同时用于ECDSA签名和Schnorr签名,则任何⼈都能够恢复出私钥
  • ECDSA签名值的可锻造性带来的安全隐患
  • ECDSA签名值的DER编码的不唯一性会带来的安全隐患
  • 如果验签时不要求提供被签名的消息,则任何人都可以伪造签名值

在介绍ECDSA七宗罪的原理之外,还介绍了应对措施. 值得一提的是, Craig Wright (澳本聪)曾经利用上述的第7个问题,伪造中本聪的签名,并进而以此宣称自己是中本聪。

在各种安全问题之外, ECDSA签名机制也拥有非常适合区块链场景的特性,比如可以从签名值中恢复出公钥, 利用这个特性可以缩减每笔交易的大小,以太坊中利用了这个特性。

为了规避上述几个问题,以及获得更高的性能,smartx开发的过程当中几经考量决定抛弃了secp256k1而采用安全性和性能表现更好的ed25519。

SmartX对25519的进一步使用

25519曲线被许多著名的开源软件使用,例如:著名的私密聊天软件signals,还有著名的匿名货币monero。不仅如此,许多匿名网络系统比如i2p都基于25519系列的曲线。

Smartx的定位是娱乐社交,在通讯层会使用到加密和匿名功能,从长远规划考虑我们将原有密钥体系secp256k1更新为ed25519,以此来构建SmartX的高性能通讯网络,未来可根据不同业务的需求灵活应用于加密场景、匿名场景。