不知道大家是否还记得我曾经介绍过的“哈希”(也叫散列)的概念(见文“区块链是如何保持数据一致性的”),这个概念大家随便百度一下也能查到,哈希简单用一句话来讲,就是:将任意长度输入的字串可转换成一个固定长度的字串,通过原始字串可以很容易地算出转换后的字串,通过转换后的字串很难还原出原始字串。
具体更多内容可去上面链接的文章查看。这里重点要提的是,一般哈希函数有两个很重要的特性:
1. 对于任意m作为输入,得到输出的结果,很难找到另一个输入m' (m'不等于m),使得m'的Hash结果也为同样的输出,即Hash(m) = Hash(m')。这一性质成为广义碰撞抵抗性。
2. 进一步,很难找到任意两个m和m',使得Hash(m) = Hash(m')。这里我们没有固定的m和m',因此这一要求比第一个要求更为严格。这一性质成为严格碰撞抵抗性。
比如,比特币代码里经常使用的哈希算法是SHA256,这个算法就满足上面两个碰撞抵抗特性。对比特币而言,第一个特性的重要性在于,针对每一个生成的区块,均有唯一的哈希值,这样才能把所有区块进行有效链接,形成一个链条;第二个特性的重要性在于,对于一个区块链条,很难破解每个区块里指向的上一区块的哈希值,从而保证了区块链的完整。
如下图所示:

但是,神奇的东西来了。在哈希函数的研究领域了,有一个非常特殊的哈希函数叫做“变色龙哈希函数”(Chameleon Hash Function)。这个函数的特点是:
传统加密哈希函数很难找到碰撞。但变色龙哈希函数可以人为设下一个“弱点”或者“后门”:掌握了它就能轻松找到碰撞(ChamelelonHash(m)=ChamelelonHash(m'),其中m不等于m')。
这虽然破坏了上面列出的哈希函数的两个碰撞抵抗性,但是对于大部分人而言,这些特性依然存在,这个哈希依然是安全的。
这种神奇的哈希函数,有点类似于公私钥对,所有人都可以通过一个给定的公钥生成变色龙哈希,且满足碰撞抵抗性,但是有一个人有一个私钥可以解开这个公钥,并对内容m进行篡改,但生成的哈希不变,即找到一个碰撞。
变色龙哈希函数利用了两个很重要的数学指数特性,看如下公式可能更简单明了:
指数特性一: g^a*g^b = g^(a+b)
举例来讲,就是:2^3乘以2^2等于2^5,即8*4=32
指数特性二: (g^a)^b = g^(ab)
举例来讲,就是: (2^2)^3等于2^6,即4^3=64
基于以上特性,变色龙哈希函数的计算过程是:
假设一个区块原内容为m,有个人知道这个哈希的“后门”或“私钥”为x,这个“私钥”对应的公钥为h=g^x。生成变色龙哈希对应的随机数为r,则此时该区块的哈希值为:
H(m)=g^m*h^r
现在将内容m篡改为m',现在希望找到一个随机数r',使得H(m')=H(m)。r'的求解过程是:
H(m)=g^m*h^r=g^m*g^(xr)=g^(m+xr)
H(m')=g^m'*h^r'=g^m'*g^(xr')=g^(m'+xr')
所以,已知m,m',x,r,则r'=(m+xr-m')/x
或许不少人都绕晕了。心想谁吃饱了撑的设计这样“违背原则”的哈希函数呢?
如果区块链采用这样的哈希函数,就如同上面这种例子,那区块的内容被篡改了也不会被发现啊,因为即便对于区块链网络里的节点,它们在共识的时候,节点也不会完全比对区块的整个内容,而仅仅是通过判断哈希值来进行校验的。所以,共识不会发现这种问题,它们认为一切正常。
那这样的话,区块链技术所宣称的“不可篡改”特性岂不是不存在了?区块链的可信基础在哪里?大家不必担心,目前我们所能见到的区块链技术基本都使用的是非常安全的,具备碰撞抵抗性的哈希函数,比如比特币是sha256,莱特币是scrypt。
但是,世间之事不奇不有。这不,埃森哲公司推出了一个所谓“可编辑的区块链”的企业级区块链产品,目的是当出现差错的时候,可以直接对区块内容进行修改。这种操作的需求背景是:对于企业内部的应用,特别是对于金融机构,人为的差错是很可能的,对企业而言,具备对某些操作进行回退的能力是非常重要的,而目前的区块链技术都具备“不可篡改”特性,因此无法支撑这种业务场景。

为此,埃森哲公司还特地申请了专利。另外,按照埃森哲的说法,对于以前出现的以太坊TheDao被攻击损失惨重的问题,如果采用这种“可编辑区块链”技术,则完全可以避免损失,而不必进行硬分叉,造成分裂。
神奇吧!
其实,对于变色龙哈希函数,还有很多重要的应用,也有大量的研究论文,比如代理签名、不可传递的股权转让等。
所以,区块链到底会怎么发展,以后的数字世界到底是什么样子,我们任何时候都不要太绝对!
网友评论