区块链是否真如我们想象的那般安全?

更新日期: 2019-10-19 阅读: 2.3k 标签: 区块链
来源:Medium
翻译:头等仓(First.VIP)_Saline 

“《麻省理工科技评论》的一篇文章《曾被誉为不可破解的区块链如今正遭受黑客攻击》已举例证明,如今区块链已成功被黑客攻破。因此我认为,随着区块链技术变得更易于人们使用,安全性将很可能成为区块链落地方面的一个重点问题,那些频繁与区块链打交道的领头公司应更加注意。区块链在不同商业领域应用的越多,就会有越多的人意图发现其漏洞并加以利用。  ”

(注:如今,要写一篇关于区块链的文章实在令人无从下手。因为你做出的预测很可能会在几年后被无情推翻。因此本文不会做出任何预测,也不会对区块链技术的未来发表意见。本文仅探讨关于区块链的一些基本安全问题。  )

在探讨为什么区块链不像大家认为的那样安全之前,首先来概述下这项技术所基于的一些概念和机制。


通过模糊及加密实现安全性

在保护任何东西(尤其是信息)时,人们通常运用模糊及加密这两种方式来实现安全性。

在日常生活中,人们通常对模糊的概念最为熟悉。此概念包括隐藏信息,不让除了需要知道该信息以外的人知道。比如将纯文本密码文件隐藏在计算机的远程文件夹中,其他人很难发现自己能够访问你的计算机。但这种通过隐藏实现安全性的方法不是那么经常用了。其原因很简单:秘密总是有办法被发现的。

而加密则是将信息位置公开,但对数据进行加密,只有拥有解密密钥的人才能访问。

加密的最早用例之一可以追溯到古罗马时代,那时古罗马人利用字母移位的方式来发送军事信息。打个比方,如果将字母移位数设为3,则单词“ hello”可以用“ khoor”来表示(头等仓注:在字母表中,h后三位字母为k,e后三位字母为h,以此类推)。因此,重要消息被如此编码后,就可以放心交由不知道该n值的信使发送。就算这个信使被半途截获,敌方得到了该消息,也不知道该如何破解。放在如今,要破解这个代码似乎很容易,但在古代,这种方法是当时加密技术的巅峰。不过如今的加密函数要复杂得多,人们可以运用各种机智巧妙的方法来生成几乎牢不可破的代码。

区块链就是使用了某一种信息加密方法,即哈希函数(下文会介绍)。加密的数据区块被记录在区块链中,只有那些拥有正确密钥的人才能访问链中的各个区块。


随机性

随机性是所有加密函数(包括哈希)的一个非常重要的方面。加密函数严重依赖于随机数据生成。随机生成的数据或种子不依赖于任何人,而由计算机创建。由于必须知道随机种子才能解密哈希,因此这使得加密函数更难以被破解。

计算机中随机生成的数据为区块链提供支持。为使数据更安全,随机字符串会被附加到区块数据中,然后该区块再被添加到公共账本中。从表面上看,这种方法好像很不错。使用随机字符串生成器似乎无懈可击,可大大降低区块链被黑客攻破的几率。

然而,由于这些随机数据由计算机生成,这就引出了一个问题,它们并不是真正随机的。机器不像人类那样有随机性的概念。计算机反而是使用公式来生成“随机”数据。它们遵循一个能够产生分布均匀的随机字符串的公式,在我们看来,它们似乎是随机值。但实际上,随机性只是我们的一种幻想罢了。无论这一公式有多么完美,由公式产生的随机值永远不会做到真正随机。数学函数只能产生经计算的值。

这一事实对区块链来说并不是一个好预兆。随机性漏洞在黑客社区中人尽皆知,且已被多次利用以发起攻击。

那怎样才能够实现真正的随机性?我们可以自然生成随机值而非通过数学公式吗?我敢说,即使在自然界,也没有什么是真正随机的。任何事情,即使是亚原子粒子间看似随机的相互碰撞,都是可以预测的(但这需要物理学家和哲学家去用心钻研)。


哈希


哈希的工作原理这里就不多加赘述了。对哈希函数不甚了解的用户可以去维基百科搜索查看。它概述得十分到位。

区块链通过大量使用哈希来对区块进行加密,经加密的区块会被添加到公共账本中。一个区块在被添加到区块之前,必须经过以下流程:

1.使用哈希函数对新区块中的数据进行加密。

2.向步骤1的加密区块添加随机数据(字符串)。

3.将步骤2的合并数据进行再哈希。

4.将步骤3的哈希值与难度级别进行对比。如果不达标,则更改步骤2中的随机字符串,然后重复以上步骤。

5.当最终哈希值达标(包括难度),该区块就会被添加到链上及公共账本中。

尽管这些步骤十分安全,但哈希通常存在两个问题:冲突和暴力破解。

哈希函数之所以会发生冲突,是因为它总是会产生固定长度的输出。一个256位的哈希函数总是会产生长度为256个字符的输出。因此,经加密的信息最终的长度都为256个字符。无论是对单词“ hello”进行哈希计算,还是对整本百科全书进行哈希计算,得出的哈希值虽然各不相同,但长度都为256个字符。

因此,哈希函数冲突指的是两个或多个字符串映射为相同的256哈希值。尽管256位字符串(或任何其他有限长度字符串)的排列组合非常多,但仍然存在映射到相同哈希值的情况(虽然有限)。此外,文本数是无限的,你可以通过在字符串的末尾添加一个“a”,以将它与其他文本区分开来。因此,每个经过哈希函数的字符串与其他字符串存在无限次的冲突。这就意味着,你甚至无需知道原始字符串,只需从与原始字符串拥有相同哈希输出的无数个字符串找出一个,即可破解加密或制造安全漏洞。

另外,用暴力破解哈希值其实很常见,尤其是在字符串较短的情况下。如果你拥有一个长度为n个字符的加密哈希值,另外拥有一本涵盖了所有长度为n个字符的哈希值的预填充字典,那么你就可以轻松破解这个加密哈希值。或者你也可以从长度为1的字符串开始计算,算到n,并将输出与加密值进行对比。如果得出结果相匹配,就可以知道原始字符串的值。通过长时间运行一台算力强大的计算机,你可以预填充拥有n字符的较大哈希值。

《麻省理工科技评论》的一篇文章《曾被誉为不可破解的区块链如今正遭受黑客攻击》已举例证明,如今区块链已成功被黑客攻破。因此我认为, 随着区块链技术变得更易于人们使用,安全性将很可能成为区块链落地方面的一个重点问题,那些频繁与区块链打交道的领头公司应更加注意。 区块链在不同商业领域应用的越多,就会有越多的人意图发现其漏洞并加以利用。

不管区块链看起来多么安全,都无法阻挡黑客。没有什么能够阻挡黑客。这是因为该技术所基于并构建的某些概念并不像大多数人想象的那样安全。如上文所述,哈希和随机字符串生成器都存在缺陷。

虽然随机字符串生成器缺乏真正的随机性,以及哈希函数可能出现冲突和暴力破解,这些现在听起来可能有些牵强,但随着将来计算机算力得到显著提高,人工智能得到普遍应用,量子计算飞跃发展,以及机器成本的下降,如果有充足的资源,破解一条区块链并非天方夜谭。

就像其他基于密码学的技术一样,它越流行,就会被找出越多的安全漏洞。

原文 https://www.8btc.com/article/516238

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/6497

相关推荐

以太坊发展简史

在 以太坊在Serenity (ETH 2.0) 阶段来临之前经历的升级和硬分叉。通过本文将了解到升级或分叉发生的时间,加入那哪些特性。时至今日当我们鸟瞰区块链技术的发展,它仍旧算得上是一个新事物。

区块链开发中使用的最流行的编程语言

我们目前正处于一个新兴的区块链开发行业中。区块链技术处于初期阶段,然而这种颠覆性技术已经成功地风靡全球,并且最近经历了一场与众不同的繁荣。由于许多资金充足的项目现在急于建立区块链网络并在其上部署分散的应用程序

200行JS代码实现超级简单的区块链,带你入门区块链

本文通过JavaScript源码实现一个简单的区块链框架,带你入门区块链的相关知识。区块链的基本概念非常简单:一个分布式数据库维持不断增长的有序记录列表。

从概念到底层技术,一文看懂区块链架构设计(附知识图谱)

区块链作为一种架构设计的实现,与基础语言或平台等差别较大。区块链是加密货币背后的技术,是当下与VR虚拟现实等比肩的热门技术之一,本身不是新技术,类似Ajax,可以说它是一种技术架构,所以我们从架构设计的角度谈谈区块链的技术实现。

区块链开发的11种顶级编程语言

区块链是一种去中心化,安全且非常快速的技术,已经在商业世界引起轰动。随着大量的区块链项目正在开发和部署在互联网上,区块链开始走向世界。已经有一些公司试图在其他人的基础上发展。

区块链的六大层级结构

众所周知, 区块链 是 比特币 的底层技术,那么这个底层技术又是怎么分层级结构的呢?在前面我们介绍了区块链的四大核心技术是其独特的数据结构、分布式存储、密码学和共识机制。今天我们就来聊聊区块链结构的六个层级结构

DAG:区块链行业下一个引爆点?

DAG是Directed Acyclic Graph的缩写,是一种运用拓扑排序的直接图像数据结构。这种数据结构能够在数据压缩中找到最优解,因此在实际中被广泛地运用于数据处理等领域

用JavaScript写一个区块链

几乎每个人都听说过像比特币和以太币这样的加密货币,但是只有极少数人懂得隐藏在它们背后的技术。在这篇博客中,我将会用JavaScript来创建一个简单的区块链来演示它们的内部究竟是如何工作的

使用javascript实现小型区块链

区块链概念狭义:区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码方式保证的不可篡改和不可伪造的分布式账本。

什么是挖矿?

区块链中经常会听到挖矿这个名词,因为它和现实中的挖矿不一样,所以很多人对这个词很费解。为什么那么多人去挖矿呢?因为挖矿成功后会有奖励。为什么挖矿需要大量的矿机呢?因为有大量的哈希计算。这个计算的过程就被称为挖矿

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!