在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文介绍YOUChain 加密签名方面的思考和方案,go-bls 库已于 github 开源,项目地址:[https://github.com/youchainhq/go-bls] YOUChain 签名方案的考虑1 面临的问题 YOUChain所采用的共识机制,是基于VRF的一种新型PoS共识。对基于PoS的共识,基本上都存在一个对区块做签名投票的机制,所有这些投票信息,都需要存储及随区块广播。 考虑一个采用secp256k1签名方案的例子,这时单个签名的大小是 64 字节,如果有100个账户给一个区块投票,则仅签名数据就至少62.5KB。这个数据量必须得认真对待。 关于此问题,我们需要考虑,能否减少(压缩)一个区块的签名投票数据,以减轻存储及网络通信负担? 对多个签名进行压缩的技术,已知的包括阈值签名(Threshold signature, 也有翻译叫“门限签名”)方案和BLS签名方案。其中阈值签名方案需要有一个复杂的初始化过程,并且要求参与者集合稳定(若参与者集合发生变更,则必须重新进行一轮全局初始化),这对于YOUChain这种最终将完全去中心化的公链来说,是无法接受的。BLS签名方案也是实现签名聚合的一种主要技术,而这也是我们重点评估并考虑采用的技术。 2 BLS简介 BLS签名方案是由Boneh-Lynn-Shacham三人于2001年提出的一种椭圆曲线签名方案,具有一些良好的特性,最重要的就是“签名聚合”:多个签名可以聚合成单个签名,聚合后的签名长度就是单个签名的长度。基于这些特性,BLS签名方案在多签及签名聚合、m/n多签等方面都能提供很好的支持。 2.1 BLS的基本原理 BLS签名的核心,是椭圆双曲线配对(Elliptic curve pairings)函数,也称双线性映射(bilinear maps)函数。要了解BLS的基本原理,重点是理解配对函数的性质。首先,我们需要一下基本知识: 1.椭圆曲线密码学定义了两个运算:曲线上两个点的加法运算 +,以及一个整数与曲线上的一个点进行的标量称法运算 ,其具体定义当前不需深究,只需要记住这些运算的结果也是曲线上的点。 定义配对函数e(P,Q),如果函数满足以下性质,则e(P,Q)就是一个双线性映射函数(其中大写字母表示曲线上的点,小写字母除了e为函数标识外,均为标量): 1.e(P, Q + R) = e(P, Q) * e(P, R) 也就是,配对函数对曲线上的运算满足交换律、结合律、分配率以及上面第3条性质。 在配对函数的基础上,令私钥为一个私密的整数 k, 则公钥为 P=kG,对消息 m ,将其映射为曲线上的一个点,记为 H,则签名 S=kH 。 签名的验证过程,即验证 e(P,H)=e(G,S) 是否成立。 证明为: e(P, H)= e(kG, H)= e(G, kH) = e(G, S) 对于签名的聚合,假设聚合签名 S=S1+S2+…+S100,其中每个子签名都是不同 秘钥对 对同一个消息的签名(分别对不同消息签名也是可以的,那样验证时需要知道每个公钥对应的消息)。 则对聚合签名的验证为 e(G,S)=e(P1,H)e(P2,H)…*e(P100,H) 。 2.2 pairing-friendly curves Barreto-Naehrig curve, 2005年提出,简称 BN curve。 目前比较多的BLS实现是基于Barreto-Naehrig curve的,即上表中 BN 开头的曲线。这些曲线的安全性目前打了些折扣。比如,BN256 (签名长度是256 bits),原来预期是能达到 128 bit的安全性,但是在2016年的时候,Kim 和 Barhulescu提出了一种新算法:the extended tower number field sieve (exTNFS),大幅降低了解决FFDLP(有限域离散对数问题)的复杂度,使得 BN256 所提供的安全性从预计的128 bits降低到了大约 100 bits。见上表。参考 https://crypto.stackexchange.com/questions/22835/are-barreto-naehrig-curves-suitable-for-pairing-based-cryptography、https://moderncrypto.org/mail-archive/curves/2016/000740.html 2.3 BLS签名标准草案 2.3.1 简介 根据标准草案,BLS实现上有两种策略(不同的侧重点): 最小化签名大小。签名放在G1中,公钥放在G2中,G1/E1的表达更紧凑。 2.3.2 实现现状 标准草案介绍了BLS签名当前的实现现状(只介绍了基于 BLS12-381 的实现,因为BN256安全性不够): Algorand:https://github.com/algorand/bls_sigs_ref 3 YOUChain 中的考虑 目前BLS的技术实现还不是很成熟,其安全性还没有得到严格验证; 综合考虑,YOUChain将重点考虑以下应用方案: 用户账户体系,采用成熟稳定、高性能的 secp256k1 签名方案; 4 参考&引文 BLS签名方案:https://www.iacr.org/archive/asiacrypt2001/22480516.pdf |
请发表评论