作者:上海交大教授、密码学家 来学嘉
与密码算法密不可分的区块链
首先,区块链是密码算法搭起来的,所以说它和密码算法是不可分割的。另一方面,反过来区块链又对密码学有贡献,它对密码学的发展提供了一些新的思路或者新的方向。最后捎带提一些我们常用的术语,应该怎么样建立正确的认识。
区块链本质是什么呢,是全局分布而且同步的账本,大家都有一个一样的东西。这套东西能验证账本内容,而这些内容是每个人都可以验证的。同时还能保证账本中放的是交易,你又能验证交易是不是合法。
说到区块链不得不提到比特币,因为区块链是从比特币来的。比特币是分布式电子系统,利用网络在没有事先信任情况下实现交易支付。
比特币的交易通过数字签名链来实现,然后把这些交易记录放到一个数据库,一个共同验证的数据库,就是区块链。密码里有几个基本的密码函数,数字签名、Hash函数还是最常用的,其中最古老的叫做加密,但比特币没有加密。
比特币是什么东西,其实就是我们常说的地址。谁知道私钥谁就拥有比特币,因为我有私钥,可以对它做操作,做支付,这就是交易。
支付就是很简单,因为我有私钥,可以选一个想给的人,把他的地址拿过来,把我的签名和地址、钱绑到一起,就表明转到他那儿。因为他有他的私钥,可以用他的私钥接着往下做交易。
持有者对前期交易和收款人的地址做签名,就是交易。这个过程是可以公开验证的,因为数字签名的一个特性就是只有知道私钥的人,才能够生成签名,而其他人都可以验证,而且只能验证,这样的话就有一种抗抵赖的功能。
数字货币有一个很大的问题,就是copy的问题,因为一个文件和它的拷贝件是不可区分的,这样的话,电子货币原则上完全可以重复使用。这样的货币系统就失去了它的意义,所以需要一个方法防止双花问题。
传统解决方案是靠一个第三方,必须经过银行检查这个钱是否用过。比特币想了一个更好的办法,为了防止重复花费,就把所有用过记录全部公开,这样的话就无法重复使用了。公开记录的数据库就叫做账本,或者Blockchain,区块链就是这样来的。也就是说,区块链是比特币为了防止双花,而提出的一种系统。
这个记账的过程我们把它叫做挖矿,其实挖矿这个东西比较有意思在于,它做了好几件事:
一,挖矿要验证新出现的交易是合法的;
二,要把这些验证过的交易记录下来,放到账本里面进行记账,产生一个新的区块链。
在产生新区块的同时,实际上又生成新的货币。挖矿从密码学角度讲,它是很有意思的一个过程。最后,它又运用一个密码函数,Hash函数单向性控制挖矿的速度。用代码控制了挖矿的难度,实际上是控制Hash函数,函数码0的个数,因为Hash是单向函数,计算的过程实际上是破译的过程。破译的难度可以控制,每10分钟生成一个新的区块。
密码学——因为区块链而更加“值钱”
看下来就知道了,区块链就是用密码算法搭起来的。经过数字签名的链保证交易正确,然后Hash函数保证完整性和不可篡改,保证数据可以验证及其可信性。Hash函数单向性可以用来控制货币的生成速度,这是一方面。另一方面,区块链的形成对密码学又产生新的贡献,做出我们一些过去做不到的事情。
有了区块链以后,密码学“值钱”了,过去密码学是赔钱的,密码是保护数据用的,成本比较高。但有了区块链后,密码学就变成值钱的东西。因为我们通过生成符合某些条件的Hash码,经过一些密码函数计算结果变成了钱。同时,有了区块链,有了比特币这类应用后,这些做密码的人突然好像吃得开了,所以说密码学“值钱”了。密码函数还有勒索软件,勒索软件是什么东西,就是把密码函数算一下,把你的文件变成一个密文,问你要比特币。
真正从学术和技术上来讲,密码学真正贡献在哪里呢,就是Non-Repudiation(不可否认性)。图示这五个性质是ISO定义的安全服务要素。保密性就是加密,认证真实性就是数字签名,完整性就是Hash函数。Non-Repudiation是不可否认性、抗抵赖,数据函数只有一个性质,其他人只能验证。数字签名为抗抵赖提供一个证据。
密码学过去实现不了抗抵赖,区块链出来之后就有意思了,你就发现区块链本身提供了抗抵赖的平台,因为区块链就是我们现在可信第三方,大家都服从它。链上说什么就是什么,很自然就可以起到抗抵赖的作用,这也是比特币中的双花问题。
还有一种,我们过去做不到的事情是抗捏造。这件事情过去密码算法也做不到,因为密码学里用的是单向函数,必须已经有了数据之后才能实现某些功能。区块链就把你过去做的事情全部记下来,你想捏造,捏造不出来,大家只认账上的东西。总之来说,区块链就给密码学中或者安全中需要的抗抵赖、抗捏造,从这个角度讲提供了一套完整的解决方案。
安全服务里这一大块实际上是密码的东西,但有了区块链后密码学的作用又能更多一点,因为区块链是由密码函数构造,对密码学起了促进作用,在抗抵赖、抗捏造方面有了新的方法。
常用术语的正确理解
看了比特币构造之后,用了签名、Hash就是没有用加密,不管怎么说,首先基本的区块链、比特币没有加密,尽量避免用加密货币这个词。但是另一方面完全公开的内容又让区块链应用受到限制,很多人不愿意把他干的事情全部公开,让每个人知道。我们现在干的事情就是把加密功能放到区块链里,但这就麻烦了,区块链特性是公开可验证,参与人都可以验证这件事情,我接受记账才有效。
这时候用了保密,就是说验证人看不到内容,还要承认他,怎么办呢,密码学的方法就是零知识证明、环签名等等,过去我们认为高精尖技术都堆到这里来了,虽然比较困难,但它又解决了很多实际问题。
很多人都在说区块链的去中心化,仔细想想,区块链根本没有去中心,而是重新建立了一个中心,大家就认这个唯一的中心,更强的中心,就是链本身,大家只认数据。
或者说我们重新造一个上帝作为中心,所谓去中心,理解的角度是从比特币来讲。比特币去掉了发行货币的银行作为中心,也就是在交易时没有中心了。但真正用区块链实际上是创造出了一个中心。所以“去中心化”这个词用起来也要当心。
无论是POW还是POS,真正共识、唯一的共识,就是我们参与者只认可最长链的内容。POW、POS等等本质上是记账权,是在比特币中挖矿的结果,挖矿的目的是为了验证交易,同时因为验证交易的行为获取奖励,就是创造新的比特币。
什么叫公有链呢,公有链就是每个人都有记账权,全民投票。联盟链是只有大股东才有投票权、记账权。私有链是老板记账,回到中心化。有了这些东西后,再来看看公有、联盟、私有角度,看看区块链什么地方能用。从区块链角度讲,记账功能和交易功能是相对独立的两件事情,也就是这边记账,那边是账本里交易。如果是公有链,交易也是公开的,那就是比特币。
如果是私有链,交易也是私有,只有特定人才能干,其实就是数据库,没什么新鲜的。用得最多是联盟链,有权限限制的各种交易和有权限限制的记账功能。从应用角度讲,这句话很重要,即区块链真正意义是什么,它重建了信任机制。
上个月天津海关的一个区块链跨境贸易平台上线,用的就是平安壹账链,我刚好参与这个项目。这个项目干了什么事情呢,就是把境内境外买方卖方,还有银行、物流这些都放到一个链上。通过这个链,任何一方都可以看看相关的内容是否可信。比如卖方,从买方购买记录、物流记录、银行记录等看出是否相信他,银行也从记录里看出是否给他贷款。
总结一下,密码学搭建了区块链,区块链反过来给密码学增加了新功能,以及从这个角度理解,一些常用的词要如何正确使用。