如果要更动,唯一的办法就是硬分叉! 拿以太坊为例,以太坊的共识层写入了哪些密码学的场景呢? 除了区块的加密签名和 Merkle Tree 的哈希外,还有交易签名和客户端的验证。如果有任何人想要在这些点上做改动,例如将以太坊公私钥的哈希算法 keccak-256 换成其他签名算法,那么唯一的办法就是提一个 EIP (Ethereum Improvement Proposal),然后等待、祈祷这个提案被排入硬分叉之中。因为写在协议层的内容,就是全网的所有用户都必须遵从的规则。 然而硬分叉往往需要非常长的时间,以 EIP 152 为例,这是一个 2016 年就提出的提案,希望将签名算法 BLAKE2 加入以太坊中,但直到 2019 年底的伊斯坦布尔提案中才被加入到升级的内容当中,整整历时 3 年之久。 从刚才 EIP 152 的例子中我们还会发现另一个限制,那就是在以太坊上如果要使用虚拟机不支持的密码学原语,几乎是不可能的。因为对于以太坊虚拟机而言性能是一大限制,光是简单的运算,就能够消耗大量的 gas。 因此我们如果回顾以太坊上历次的分叉,就可以发现从家园(HomeStead)的硬分叉升级开始,以太坊就不断地把所有可能常用到的密码学原语,例如 sha256 hash、ripenmd160hash 等持续的通过预编译(precompiled)的方式,加入到底层的虚拟机中。这点在拜占庭(Byzantium)或者伊斯坦布尔(Istanbul)的升级中也可以看到。以太坊通过硬分叉的形式,来预编译密码学原语以及这些密码学原语运算的 gas 定价。 如果不通过预编译合约在节点先进行实现,那么许多签名算法的智能合约部署将花费非常非常高的 gas 费,导致其根本无法部署。例如 EIP 196、 EIP 197 之所以被采纳,就是预见了 zkSNARK 需要大量的 gas 进行链上的运算。因此预先将这些加密算法,如椭圆曲线加法、乘法和配对验证等编译进了底层的 EVM 中,好让这些计算成本可以节省下来。所以,我们可以说在以太坊上除了已经做了预编译的签名算法外,其余的加密算法基本上是没办法使用的。 上述这些固化的密码学使用方式,对于开发者而言是一个很大的限制。 由于交易和客户端的签名验证都被写入共识层,因此验证工具和流程都必须按照规定的加密算法进行。例如在比特币或以太坊中,如果我们要创建一个账户,那么我们依旧需要管理一组新的密钥对。 对于想要带来良好用户体验的开发者而言,这样会产生很多的限制,并且需要通过其他方式,去弥补固化的底层设施带来的不友善的用户体验。比如在创建助记词之后,我们可以在某些钱包中使用 FaceID (如 imToken),比如在 ABC Wallet 中,用户起初只需要靠像手机里的六字验证码就能够登入,等你真的觉得你需要把私钥或助记词导出了,再进行导出和备份。 (责任编辑:admin) |