ZILLIQA白皮书中文翻译 第三部分 加密层

译者声明:本文内容为翻译ZILLIQA英文版白皮书,个人阐述均有注明。个人水平有限,如有错误,请不吝指正,谢谢!

第三部分  加密层

加密层定义了ZILLIQA中使用的加密原语,与其他几个区块链平台类似,ZILLIQA依靠椭圆曲线加密技术进行数字签名,并使用内存硬散列函数进行工作量证明。在本白皮书中,我们广泛使用SHA3 哈希函数来呈现我们的设计。

SHA3最初基于Keccak,而Keccak现在已广泛用于不同的区块链平台,特别是以太坊。在不久的将来,我们可能会为了与其他平台进行更好的对接转而使用Keccak算法。

A. Schnorr签名

ZILLIQA采用基于椭圆曲线的Schnorr签名算法(EC-Schnorr)作为基本签名算法。我们使用secp256k1曲线实例化该方案。而目前,比特币和以太坊均使用ECDSA作为签名算法。我们选择EC-Schnorr而不是ECDSA有几个好处,理由如下:

1. 非延展性

通俗地说,非延展性意味着使用给定私钥,一条消息只生成一组签名。对相应的公钥来说,攻击者很难对同一条消息生成不同的签名。与可延展性的ECDSA不同,EC-Schnorr已被证明是非延展性的。

2. 多重签名

多重签名方案允许多个签名者将他们在消息上的签名“聚合”成一个简单签名,该签名可以对同样“聚合”了所有授权方公钥的那个简单公钥进行认证。EC-Schnorr本身就是一种多重签名方案,而ECDSA允许以一种不太灵活的方式创建多重签名。

当消息需要多重签名时,ZILLIQA使用基于EC-Schnorr的多重签名来减少签名大小。多方都是通过签名来认可数据,而较小的签名在我们的共识协议中显得尤为重要。

3. 速度

EC-Schnorr比ECDSA更快,因为后者需要计算大量的逆模,而前者则不需要。EC-Schnorr确切的密钥生成、签名和验证程序在附录A中给出。在附录中,我们还将介绍EC-Schnorr是如何用作多重签名方案。

B. 工作量证明

ZILLIQA仅用PoW来防止Sybil攻击和生成节点标识。这与现有的许多将PoW作为共识机制的区块链平台(比特币和以太坊)不同。ZILLIQA采用了Ethereum 1.0中使用的PoW算法Ethash。

Ethash是一种内存硬散列函数,旨在让GPU能轻松挖矿,而专用ASIC机器却很难挖矿。为实现这一目标,Ethash算法需要大量内存(单位为GB)和I/O带宽,以便无法在专用计算硬件(ASIC机器)上,并行计算(这里的“计算”在书中直译是调用该函数,指Ethash算法)。

简单来说,Ethash算法将数据(例如块头)和64位的随机数nonce作为输入,生成256位摘要。该算法由如下四个步骤组成:

1. 生成seed(种子)

Seed是一个SHA3-256摘要,在每生成30000个区块后更新,这里每次更新的间隔时间也被称为一个epoch。对于第一个epoch的Seed来说,它计算了一系列的32个字节(256位)的0的哈希值。而其他epoch则是计算上一个Seed的SHA3-256哈希值。

 2. 生成缓存

将Seed(种子)通过SHA3-512哈希算法生成一个伪随机缓存。缓存的大小随着epoch线性增加,其初始大小为16 MB。

3. 生成数据集

再使用缓存生成一个数据集,数据集中的每一“项”仅依赖于缓存中少量的项。数据集每个epoch更新一次,矿工不必频繁地对其更改。数据集的大小也随着epoch线性增加,其初始大小为1 GB。

4. 挖矿和验证

挖矿包括获取数据集的随机切片并将它们一起哈希计算。验证则是使用缓存,重新生成计算该哈希值所需的特定数据集。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值