<aside> 💡 自定义密码学
</aside>
密码学在区块链出现之前就在互联网有非常多的应用了,比如最出名的非对称加密算法 RSA,很多互联网协议之前都是使用 RSA 的。现在 RSA 也是各个浏览器、Email 协议里使用最广泛,兼容性最好的非对称加密算法。而互联网之所以能发展到现在的规模,兼顾安全和便利,都与大量使用密码学分不开。比如浏览器里几乎都有的 SubtleCrypto,甚至在小程序环境下都能使用;而 2019 年的 WebAuthn 更是让浏览器的密码学强大到堪比硬件钱包,而使用上又非常便利(指纹、扫脸)。如果能直接使用这些设施,而不是要求用户去下载钱包插件、app,自己走流程保管助记词,dApp 的用户门槛就可以大幅度降低。
然而,主流区块链的密码学一般都是底层写死的,比如
| Chain | Hash | Signature |
|---|---|---|
| ETH | SHA-3(Keccak) | ECDSA Secp256k1 |
| BTC | SHA2-256 | ECDSA Secp256k1 |
| Polkdot | Blake2b | Ed25519 |
这些签名算法与主流的互联网用的密码学体系不兼容,没法直接使用,只能依靠重新铺设的设施。
Nervos CKB 的虚拟机是 RISC-V 兼容的,性能优化地很好,能够直接在应用层(智能合约里)部署密码学,事实上连 CKB 自己默认用的签名算法和哈希算法也是在应用层而非虚拟机底层部署的。这样我们就可以把 RSA、SHA-256 等算法部署上去,验证这些签名了,这给使用现有基础设施打下了基础。但是只有这一点还不够,还需要下面的能力:
<aside> 💡 账户抽象
</aside>
账户抽象是指将区块链账户(地址)的解锁逻辑泛化的能力。
主流区块链的解锁逻辑都比较简单直接,而且是协议层级写死的,比如 BTC / ETH 都是根据交易体和签名还原出公钥,在按照既定规则把公钥转换成地址,最后与待解锁地址匹配,一致则解锁成功,否则解锁失败。这种写死的逻辑没办法适应一些更宽泛的情况,比如签名中有 client 相关数据内置,甚至签名不是针对交易本身的。类比的话,主流区块链的解锁逻辑跟机械门锁一样,只能用一种方式打开账户的门。
在底层实现了账户抽象能力的 Nervos 拥有的是电子锁,它的解锁逻辑可以通过蓝牙或者 NFT 扩展给第三方应用(指纹,虹膜,声纹…)。比如我们就可以做到用 Email 的密码学解锁,然后按照 Email 中的指令执行合约,最简单的例子就是可以用发邮件的方式直接发送 CKB 到指定地址(或另一个邮箱),全程不需要任何「钱包」的参与。