首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果区块链是一个人,那么密码算法就是他的骨骼

谈币 | 说链 | 一方天地

-币链天-

哈希算法

哈希算法在区块链系统中的应用可谓是相当广泛了,几乎贯穿到区块链系统的方方面面:比特币通过公钥计算出钱包地址需要使用哈希算法,梅克尔树结构本身就是一颗哈希树,甚至是以太坊中的挖矿算法也使用了哈希算法。

哈希算法究竟是个啥东西咧?说白了就是通过一种方法,将一段任意输入的字符串计算出一个单独的“序列号”,而整个过程是单向的,即无法再通过一个算法还原出原始数据。它能够起到一个类似于身份证号的作用,非常适合一些身份验证的场合。

一般来说,为了保证哈希函数在密码学上的安全性,需要满足3个条件:

1 抗冲突:输入不同的字符串,则不能生成相同的结果。

2 信息隐藏:如果知道了哈希函数的结果,不可能逆向推导出输入的字符串。

3 可隐匿性:如果有人希望 哈希函数输出一个特定的值,只要输入的部分足够随机,在合理的时间内都不可能破解。

区块链中的哈希算法

1. 区块哈希:

都知道区块链结构的数据具有不可篡改性,这其实就是哈希算法的功劳。区块链中的哈希算法就是对区块头进行哈希计算,得出某个区块的哈希值,用这个哈希值可以唯一确定某一个区块,相当于给区块设定了一个身份证号,各区块之间就是通过这样一个身份证号来进行串联的。比如一共有10个区块,如要更改3号区块的数据,则4号就不能与3号连接,区块链会断开,从而导致篡改无效。如果篡改了4号,那么就要继续篡改5号,以此类推,如果区块链很长很长,想更改之前的历史数据几乎是不可能事件。

2. 梅克尔树:

梅克尔树在不同的区块链系统中有着不同的细节,但本质是一样的,我们以比特币中的梅克尔树来说明。比特币中的梅克尔树称为二叉梅克尔树,而且每一个区块都有自己的梅克尔树, 每条交易事务都会计算出一个哈希值,直到计算出最后一个根哈希值。

如果你看不懂上面的阐述,可以参考这样一个例子:当我们签订一份很多页的合同时,通常都会在每页合同上盖章,只不过每页的章都是一模一样的,这就给作弊留下了无限的可能。如果稍微改变一下做法,给每页合同盖上一个“数字印章”,并且每一页上的数字印章都是前一页印章用哈希算法生成的。以此类推,我们就不难发现有2个好处:我们能直到信息是否被篡改。我们还能知道是第几页或者第几块的信息被篡改了。

公开密钥算法

公钥和私钥即相当于区块链中的两把钥匙。对于一段需要保护的信息,通常使用公钥来进行加密,用私钥完成解密,这种加密方法就称之为公开密钥算法。自从非对称加密算法诞生以来,人们发现一些数学函数及其适用与这种算法,比如椭圆曲线加密算法。这些数学函数具有某种难度:由输入算输出很容易,但是从输出计算输入几乎不可能。比特币是使用了椭圆曲线加密算法作为公共密钥编码的基础,事实上在很多区块链系统中都是使用椭圆曲线加密算法。

密码算法在区块链系统中的重要性,相当于整个体系统的骨骼。如果没有骨骼,毫无疑问,整个体系就会坍塌。目前已经被应用在以下方面:

1 账户地址生成:

首先生成一对公钥和私钥,公钥可以作为对外公开的账号,却又只能用与之对应的私钥匹配才能验证通过,因此这种方式生成的地址,先天就具备可验证性。

2 价值转移保卫:

无论是比特币、以太坊、超级账本还是其他区块链系统,如果想成果发送一笔带有价值的数据,必须解决两个基本问题:一是证明数据是真正发出者发送的,二要确保只有接收者才能解码这笔数据。这两点要求,就可以通过公开密钥算法完美解决,发出者使用自己的私钥进行签名,再使用接收者的公钥进行一段加密,保证了只有接收者才能解开密码。而接收者通过发出者的公钥先进行身份验证,最后再用自己的私钥才能解开这个公钥。这样保证 了不被别人截获或者说即使被截获了也无妨,因为别人没有对应的私钥来解码。

3 完整性证明:

在节点同步区块链数据时,通过构建的交易哈希树,就能验证数据是否一致。

4 零知识证明:

要想证明自己拥有某笔资产,你改怎么做?通常思路自然是提交自己的密码,看是否可以解锁账号。但是这样的话,自己的密码就泄露了,交易内容也可能就此公开,完全没有隐私可言。这时该怎么办?此时的密码算法就起到了非常大的作用,只要解码一段儿与交易内容相关、但是又不泄露真正交易内容的编码,只要能解码成功,就能证明自己的所有权了。简而言之,就是在不泄露信息本身内容的情况下,证明自己知道这个秘密。

以上只是列举了一些常见的应用点,在实际应用中,还有很多地方是非常巧妙的。尤其是比特币一开始通过公钥生成钱包地址的做法,虽然现在开起来没什么大不了的,然而换做当年,很难设计出如此绝妙的注意。

传统的技术,加上创新的用法,真的可以产生非常强大的威力。

长亭外,古道边,芳草币链天,

晚风拂柳笛声残,看一朵碧莲。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180420A1B8YW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券