专栏首页区块链中本聪什么是区块链技术?
原创

什么是区块链技术?

我们先来给区块链技术下个定义:

区块链是一种分类帐,它使用加密技术和激励措施并以防篡改的方式记录交易。这使匿名双方进行信任最小化(trust-minimized)交易,而不需要可信中介。

现在,让我们整合这些零散的知识,以便你在文章的最后对区块链技术有一个完整认识。

基元

在我们深入研究区块链之前,需要建立一些基元。基元类似于建筑材料。如果你想建造一间房子,你需要木料、螺丝、电钻和锯子。在你开始建造之前,最好对每个工具都足够了解。区块链也类似。

区块链的基本构成要素就是加密基元。

而密码学是研究在第三方(即敌人)的存在下安全通信的技术。

现代密码学被应用于网址、信用卡芯片和计算机密码之中。它用来阻止第三方(黑客,小偷等)窃取敏感数据,如信用卡信息。

第一个基本构成要素是哈希函数。

哈希函数

哈希函数是一种允许你对数据进行加密的数学函数。

哈希函数有三个属性:

它的输入可以是任意大小。

例如,我可以使用“我喜欢冰淇淋”这个短语作为输入,或者我也可以使用《战争与和平》的全部文本,两者都行。

不论使用任何大小的输入,哈希函数的特定散列算法决定了其固定大小的输出。为了让算法过于简单,我们将使用256位输出(它是比特币所使用的)。

不论我使用“我喜欢冰淇淋”这一短语作为输入,还是使用《战争与和平》的全文作为输入,两者都会产生相同大小的输出。

使用SHA 256算法,短语“我喜欢冰淇淋”(没有引号)创建输出:

138F4504A873C01D0864343FAD3027F03CA9BEA2F0109005FA4FC8C7DCC12634

从古腾堡计划(project Gutenberg)复制的整本《战争与和平》(全587,287词)创建输出:

57027F5B3877ABBE43ACB101D59E963BC2CC0E86A6EBCCC34DFD035BBF83B096

即使输入的文本长度相差146,821倍,你也可以获得相同大小的输出。这一点很酷也很有用。

函数是可高效计算的,对于任何给定的输入字符串,你可以在合理的时间内获得输出。

即使我使用《战争与和平》的整个文本作为输入,它仍然可以在较短时间内将其转换为输出。

以上是一般哈希函数的属性。一般哈希函数允许你将大量数据映射到一个小空间,这有助于存储和处理不同类型的数据。

不过,我们应把重点放在加密哈希函数上,因为它是区块链中使用的函数。

加密哈希函数有三个附加属性:

抗碰撞性(Collision Resistance)

确定隐匿性(Deterministic Hiding)

难题友好性(Puzzle Friendliness)

加密哈希函数

抗碰撞性

这里的碰撞是指两个不同的输入产生相同的输出。虽然输出大小相同,但输出本身不会与其他输出相同。“我喜欢冰淇淋”与《战争与和平》的整个文本产生相同大小的输出,但字符不同。

如果它们产生完全相同的输出,你解密了我发送给你的加密文本之后,并不会知道我是想告诉你“我喜欢冰淇淋”还是你应该阅读《战争与和平》。

值得注意的是,两个“邻近”输入不会产生邻近的输出。《战争与和平》的哈希与改变了一个字符的《战争与和平》的哈希完全不同。

使用SHA 256,整本《战争与和平》生成哈希值:

57027F5B3877ABBE43ACB101D59E963BC2CC0E86A6EBCCC34DFD035BBF83B096

如果我删除最后一个句点,但保留其他所有内容,则会生成哈希值:

E2E2E4FFD582E20474F0310C2132EAE5F2D766C6A253C1BC4AF57861095B30FA

这非常类似于混沌系统中的两个“邻近”起点非常迅速地导致两个完全不同的未来轨迹。哈希函数的这种“混乱不规则性”会产生抗碰撞性。它的输出几乎随机(理论上并不随机),因此不太可能发生碰撞。我们还能压缩数据,因为它可以将「无穷大」映射到有限空间。

这一特性在汇款时尤其重要。钱包的公钥是使用加密哈希函数从私钥生成的。谁都不希望其他人能够通过逆向工程获取公钥来计算你的私钥(因为你的钱可能被偷)。

如果没有人能找到碰撞的情况,则可以认为哈希函数是抗碰撞的。从理论上讲,我们知道碰撞的存在是因为输入的数量是无限的,但输出的数量是有限的——只有有限种方法可以排列64个字符。

但在实践中,加密哈希函数SHA 256是抗碰撞的,因为没有人发现过碰撞,并且它发生的几率是天文数字。如果人类制造的每台计算机自宇宙开始以来一直试图发现碰撞,那么它发生的可能性低于地球在接下来的两秒钟内被巨大的流星摧毁的可能性。

所以,碰撞是可能发生的,但我们首先还有很多其他更重要的问题要解决。

确定隐匿性

哈希值看起来是随机的,但实际上是确定的。因此,它们的输出是可重现的,只要你使用相同的输入,就可以持续获得相同的输出。这意味着,知道输入的两方可以通过向第三方显示他们的哈希来验证对方是否知道输入。

加密哈希函数的第二个属性是隐匿性。隐匿性意味着即便给出输出,也没有可行的方法来计算输入。

也就是说,第三方观察者无法知道

138F4504A873C01D0864343FAD3027F03CA9BEA2F0109005FA4FC8C7DCC12634

的意思是“我喜欢冰淇淋。”

但是,如果我知道输入是“我喜欢冰淇淋”,那么通过检查你的哈希,我可以轻松验证你是否知道输入。

然而,如果其他人看到哈希,他们就无法使用它来计算输入。这允许知道输入的人使用散列后的输出在公共频道中安全地进行通信,而不必担心第三方观察者获取信息。

难题友好性

第三个属性是加密哈希函数的难题友好性。这意味着如果有人想要生成一个与“我喜欢冰淇淋”相同的输出的哈希,那么找到一个完全符合这一输出的另一个值是非常困难的。

生成哈希的算法是尝试每个可能的字符串,按长度排序,然后按字母顺序排序,直到得到哈希为相同值的字符串。这等于是大海捞针,所以我们得到的概率表明,小行星消灭地球上的所有生命是一个更紧迫的问题。

另一方面是加密哈希函数难以逆转(reverse)。相较于数据结构或压缩算法中使用的哈希,这是加密哈希的主要特点。

这也是区块链军备竞赛的一部分——黑客在逆向推演哈希函数方面做得越来越好,因此密码学家总是得想出更强大的哈希函数。

除此之外,难题友好属性使区块链难以篡改。如果我想替换像“我喜欢冰淇淋”这样的项,我不可能在没有其他参与者知道的情况下做到。



主链侧链开发数字货币交易所白皮书区块链浏览器跨境支付场内场外宠物挖矿游戏基金会牌照 181-4069-6008 微信电话同号

被加密哈希函数散列后,输入的微小变化也会导致输出的显著不同,从而达到防篡改的目的。

加密哈希函数看起来是随机的(因此没有碰撞),无法逆转,并隐匿输入,但同时它们又是完全确定的。这就是它们有用的原因!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 区块链技术公司——比特币对金融体系的冲击

    2008年的金融危机,充分突显了金融体系中单点失败的危险性和局限性。其可能会导致银行倒闭,甚至国家破产。

    用户2357564
  • 区块链技术详解+比特币共识会议

    第一层: 不同观点的双方或多方通过交流,事实,依据,理由到达对某件事物的认知一致。

    用户2357564
  • 智能合约没有你想的那么智能!

    为什么人们对区块链会产生如此强烈的兴趣?这是因为,在执行合约过程中,如果不再需要第三方信任,做事效率就会得到极大的提升。

    用户2357564
  • 图像检索:基于内容的图像检索技术(四)

    基于树结构的最近邻搜索方法和基于哈希的最近邻搜索方法在理论计算机科学、机器学习以及计算机视觉中是一个很活跃的领域,这些方法通过将特征空间划分成很多小的单元,以此...

    用户3578099
  • [Redis] redis的hash类型底层结构哈希表

    redis hash的底层是压缩列表 和 哈希表两种形式 ,哈希表的形式是下面这样一层层嵌套的 , 转载自公众号 CodeSheep

    陶士涵
  • 哈希算法的设计要点及应用场景

    大家好,我是多选参数的程序锅,一个正在 neng 操作系统、学数据结构和算法以及 Java 的硬核菜鸡。本篇主要介绍了哈希算法相关的内容,包括什么是哈希算法、哈...

    syy
  • AI综述专栏| 大数据近似最近邻搜索哈希方法综述(上)(附PDF下载)

    在科学研究中,从方法论上来讲,都应先见森林,再见树木。当前,人工智能科技迅猛发展,万木争荣,更应系统梳理脉络。为此,我们特别精选国内外优秀的综述论文,开辟“综述...

    马上科普尚尚
  • 哈希表的理论知识

    哈希表又称散列表,若要存储的元素个数为n,设置一个长度为m(m >= n)的连续内存单元,以每个元素的关键字为自变量,通过一个称为哈希的函数把关键字映射为内存单...

    晚上没宵夜
  • LeetCode | 你不得不了解的哈希算法 !

    问大家一个问题 。如果手机上存储了 1000 个联系人 ,现在要你给小詹打个电话 ,跟他说 ,他老婆喊他回家吃饭 。你会怎么做 ?

    小小詹同学
  • 朝花夕拾-哈希表(hashTable)

    所以在Aa,BB、Ab,BC时会出现碰撞。通过如下测试代码可以发现,他们的hashCode是相同的。

    皮皮熊

扫码关注云+社区

领取腾讯云代金券