区块链

Tendermint源码阅读(四)

2018-09-20  本文已影响77人  印随2018
关注点:Ed25519算法

一、算法介绍

以下部分摘自https://www.sohu.com/a/154323745_99901444

Curve25519/Ed25519/X25519 是著名密码学家 Daniel J. Bernstein 在 2006 年独立设计的椭圆曲线加密 /签名 /密钥交换算法,和现有的任何椭圆曲线算法都完全独立,其中Ed25519用于签名,可在区块链中进行签名,Stellar就是使用了Ed25519作为签名算法的

25519 系列曲线自 2006 年发表以来,除了学术界无人问津, 2013 年爱德华·斯诺登曝光棱镜计划后,该算法突然大火,大量软件,如 OpenSSH 都迅速增加了对 25519 系列的支持,如今 25519 已经是大势所趋,可疑的 NIST 曲线迟早要退出椭圆曲线的历史舞台,目前, RFC 增加了 SSL/TLS 对 X25519 密钥交换协议的支持,而新版 OpenSSL 1.1 也加入支持,是摆脱老大哥的第一步,下一步是将 Ed25519 做为可选的 TLS 证书签名算法,彻底摆脱 NIST 。

安全性高,一个椭圆曲线加密算法就算在数学上是安全的,在实用上也并不一定安全,有很大的概率通过缓存、时间、恶意输入摧毁安全性,而 25519 系列椭圆曲线经过特别设计,尽可能的将出错的概率降到了最低,可以说是实践上最安全的加密算法。例如,任何一个 32 位随机数都是一个合法的 X25519 公钥,因此通过恶意数值攻击是不可能的,算法在设计的时候刻意避免的某些分支操作,这样在编程的时候可以不使用 if ,减少了不同 if 分支代码执行时间不同的时序攻击概率,相反, NIST 系列椭圆曲线算法在实际应用中出错的可能性非常大,而且对于某些理论攻击的免疫能力不高, Bernstein 对市面上所有的加密算法使用 12 个标准进行了考察, 25519 是几乎唯一满足这些标准的算法。

25519 系列曲线是目前最快的椭圆曲线加密算法,性能远远超过 NIST 系列,而且具有比 P-256 更高的安全性。

二、Tendermint中的应用

源码
tendermint/abci/example/kvstore/helpers.go

1 // RandVal creates one random validator, with a key derived
2 // from the input value
3 func RandVal(i int) types.ValidatorUpdate {
4   pubkey := cmn.RandBytes(32)
5   power := cmn.RandUint16() + 1
6   v := types.Ed25519ValidatorUpdate(pubkey, int64(power))
7   return v
8 }

源码
tendermint/abci/types/pubkey.go

9 func Ed25519ValidatorUpdate(pubkey []byte, power int64) ValidatorUpdate {
10  return ValidatorUpdate{
11      // Address:
12      PubKey: PubKey{
13          Type: PubKeyEd25519,
14          Data: pubkey,
15      },
16      Power: power,
17  }
18 }

RandVal()函数的作用是随机生成一个validator的配置,从第四行可以看出,代码直接使用了一个32字节的随机数据作为PublicKey,在14行中,也直接把PublicKey的类型设置为PubKeyEd25519,这就是ED25519算法的优势在tendermint中使用的一个实例。

上一篇下一篇

猜你喜欢

热点阅读