嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

区块链初入门- 第1部分

在各式各样时事和网络的炒作下,你可能会产生这样的印象:区块链有望结束疾病,贫困和饥饿,同时开启世界和平的黄金时代。虽然它可能不是一些营销部门会让你相信的灵丹妙药,但它是一种可靠的工具,可为许多应用提供可靠的解决方案。

Blockchain_Redstone_129e37111b37dfd555b6f556d4e76a91a4022e4b.jpg

要确定哪些应用程序适合区块链(和哪些不适用),我们需要了解区块链背后的理论及如何实施。在本文中,我将提供大家需要了解的内容的“实用摘要”,让读者自行决定这项令人兴奋的技术。

起源

与大眾的观点相反,区块链并没有跳跃,或完全形成和装甲,也不如中本聪的思想那般出现一些现代的、基于软件的雅典娜那样从中本聪的思想。

原始概念可以追溯到1991年由Stuart Haber和W. Scott Stornetta撰写的题为“如何为数字文档加时间戳”的论文,他们在这篇论文中讨论了如何对数字数据加时间戳的问题,以便回溯变得不可行 (或转发日期)数据一旦盖章。

在几乎任何数字化都很容易被骗的时代,对于想要使用网络技术中实现从协作,远程工作到数字交易,对所有的工程师来说,这是一个大难题。

Haber和Stornetta开发的安全概念是由Satoshi Nakamoto(无论他或她是否会成为)创建的比特币作基礎。

Genesis Block

关于什么构成区块链,有许多松散相关的定义,但我将使用的定义如下:

“一个不断增长的记录列表,称为块,使用密码术链接和保护。”

记录链接和保护的方式是使用称为散列的技术。 我们将在稍后讨论这个问题,但是现在,您可以将哈希算法视为需要一个数据块“指纹”的东西。 像指纹一样,哈希是(接近)唯一的。

最低限度可行的块将包含至少3件事:

fig1_-_block_f8dd0b3461e3c52f83845010854551d5a3679b31.png

DATA“数据”可以是你喜欢的任何东西,虽然它通常只是一小部分元素:历史上已经在纸和墨水分类帐中输入的东西。 这可以包括诸如金融交易信息,用于运输容器的位置的GPS坐标或医院患者的心率和血压的记录。 它也可以是空值或空值,以表明在特定时间没有记录数据。

HASH“哈希”是块内容的哈希值 - 在这种情况下,它将是数据的哈希值和先前的哈希值。

PREVIOUS HASH“上一个哈希”允许我们将块加密链接在一起,从第一个块开始,称为'Genesis Block'。 Genesis Block是一种特殊情况,不会有先前的哈希,因为它是链中的第一个块:

fig2_-_chain_26665639140c21ae1578e8fd0965118d466e7fa4.png

这个到前一个块的加密链接为链提供了一个重要的属性。 例如,如果块1中的数据以任何方式被篡改,则该块的散列值将改变。 块1的新哈希值将不再与块2中存储的“先前哈希”的值匹配,并且可以容易地检测和标记,以便可以拒绝该更改。

它以这种方式将块链接在一起,以确保存储数据的完整性。

在这一点上可能浮现在脑海中的两个问题是“..但是你不能以某种方式伪造哈希值吗?”或“..你不能只是通过链条来改变所有'先前的哈希值 “隐藏篡改的价值观?”

为了理解为什么这些东西都不具备计算可行性,我们需要对哈希算法的本质有所了解。

哈希算法的要求

如果哈希算法在区块链中有效,则有五个要求:

  1. 确定性 - 输入到算法的相同数据将始终产生相同的哈希值结果。
  2. 单向 - 无法从散列重建原始数据。
  3. 雪崩效应 - 即使对原始数据进行尽可能小的更改也会产生完全不同的哈希值。
  4. 快速计算 - 将算法应用于数据块需要最少数量的处理器周期来产生结果,从而允许快速完成计算。
  5. 碰撞容忍 - 当数据集超过算法可用的总组合时,将发生重新使用的散列:碰撞。 这应该是非常罕见的情况,并且算法不允许强制冲突,这将允许数据伪造。

遵循这些约束的哈希算法将获取任何长度的输入数据 - 从字母'a'到整个百科全书的内容 - 并快速返回固定长度输出,这是数据的代表性指纹。 理想情况下,安全散列与随机映射无法区分,即使数据中的最小变化也会产生完全不同的散列。 您可以使用此在线SHA256哈希生成器获得有关其工作原理的经验感受。

 

彩虹表:虽然散列函数是单向的,意味着原始数据无法从散列输出重建,但算法的确定性特性如(安全散列算法)SHA256意味着如果您已经知道(或可以缩小) 通过检查已知输入的哈希输出列表,可以相对快速地确认您拥有正确的数据。黑客攻击密码的最后一道防线就是将它们存储在哈希形式中。但是,广泛使用的彩虹表将常见密码与其哈希输出相关联,允许黑客通过简单地遍历表来轻松提取弱密码和通用密码,直到找到哈希值。对此进行防御是通过在散列之前向密码添加其他字符序列来“腌制”散列,以使最常见的彩虹表无效。

碰撞阻力

碰撞阻力是散列算法强度的真正衡量标准。 它衡量两个不同输入产生相同结果散列的可能性有多大。

根据鸽子原理(pigeonhole principle),我们猜测如果我们有多个n个可能的哈希值,那么如果我们有一个多于n(即n + 1)个输入,那么我们很可能得到一个共享哈希值。 对于SHA256,它等于2256 (or 6436)个可能的哈希值。

不幸地,宇宙比简单的直觉更有悖常理。 概率定律,特别是所谓的生日悖论(Birthday Paradox)(又名生日问题)告诉我们,大数碰撞的真实概率是n的平方根。 这意味着我们可以“只”在碰撞可能之前计算2128个哈希值。

从某种角度来说,如果我们有一台计算机每秒计算232个哈希值,那么碰撞前需要296秒。 这大概是2.5 x 1021年:比目前的宇宙年龄估计(1.4 x 1010年)还要多,而且远远超过了24/7全天候运行的计算机的保修期。

数学有更多,有些人试图利用生日攻击和类似的碰撞攻击,但就我们的目的而言,足以知道到目前为止,SHA256已抵制这些类型的攻击。

 

总结

我们已经研究了区块链如何使用散列函数将数据块连接在一起以保护数据的基本理论。 在第2部分中,我们将讨论挖掘,如何在P2P网络中分布运营区块链以及它们如何处理错误、攻击或错误及攻击。

Mark completed his Electronic Engineering degree in 1991 and worked in real-time digital signal processing applications engineering for a number of years, before moving into technical marketing.