区块链力学 – 散列函数

散列函数广泛用于区块链技术中,以确保整个区块链的完整性,从而快速验证大型数据集的有效性。本文旨在探索哈希函数的属性以及它们与区块链的关系。

哈希

哈希函数是一个函数,它接收和任意数量的数据并将其转换为一组位数(SHA-256为256位),然后可以表示为十六进制字符串。

那句话实际意味着什么,让我告诉你。说我想记录一些数据,例如你的大学证书。让我们说这是数据,“Bob Smith,Economics,1st Class Honors”。如果我把它通过哈希函数(SHA-256),这就是我得到的41f93fab9e5178270a40cb5182e1e94ad1e4cd8fa4b0878dc372032fbd9c1e9b。

那么为什么这很重要,首先让我告诉你当我通过在前面的例子中添加一个完整的停止做一个小的改变时哈希发生了什么。“鲍勃史密斯,经济学,一等荣誉。”收益率1dcbad0d283eadccd76d63f1a23d3100c5d0268f6c499be37eac91827a26fa7e这是一个完全不同的哈希。这意味着对消息的任何更改(注意这是位级别,即任何位超越)将导致完全不同的散列。因此,我们可以使用哈希来确保数据的完整性。由于散列是确定性的(它总是会返回给定输入的相同输出),因此如果结果散列相同,我们可以确定消息没有改变。

虽然上面例子中的数据只是一个句子想象,如果我有一份50页的合约,我需要加上区块链,那就是我要上传的大量数据。而不是我签署合约我可以签署合约的哈希。对合约的任何更改都将导致更改哈希,这将使数字签名无效。

区块链通过将块与每个新块中前一个块的散列链接在一​​起来确保链的完整性。当每个块被签名时,先前的块散列包含在该签名中。如果块被更改,则块将改变,因为下一个块将引用先前的块散列,下一个块散列也将改变。这将向上级联到当前块,这意味着您可以仅通过当前块散列检查整个区块链的完整性。

散列函数属性

散列函数必须具有某些属性,其中一些我已经触及过。首先,哈希函数必须能够获取任何大小的输入并将其转换为固定大小的输出。该过程必须是高效可计算的。这意味着散列消息不应花费很长时间来计算它在实际应用程序中有用。

散列函数应该具有3个安全属性。首先它应该是抗冲击的。散列函数产生固定大小的输出并接受任何大小的输入。因此,输入数量无限,输出数量仅为2×2(对于SHA-256)。因此存在哈希冲突,问题是任何人都可以找到它们。如果没有人能够找到产生相同散列(H(x)= H(y))的两个不同的值x和y(x= y),则称散列函数是抗冲突的。

下一个属性是隐藏属性,这意味着给定H(x)确定x的值是不可行的。由于x的值有时来自集合列表,例如让我们使用0到100之间的检查结果。在这种情况下,通过自己计算哪个哈希很容易确定哪个哈希与哪个结果有关,因为我们只需要完成100个计算。因此,我们需要从一个足够大的集合中选择x,使得x作为任何值的概率可以忽略不计。

为了实现这一点,我们将x与随机的256位值连接起来。隐藏属性现在必须满足给定的H(k | x),其中k是随机256位值,并且(k | x)是k与x连接,确定x是不可行的。隐藏属性是关于阻止不良行为者访问机密。

最后的属性是益智友好。该属性与伪造有关,假设在方程H(k | x)= y中找到值x,则提供值k和y。虽然这可能听起来与隐藏相似,但存在差异。隐藏k没有设置因此我不受它约束。

SHA-256

由于SHA-256是比特币使用的哈希函数,我认为值得快速解释这个函数是如何工作的。首先,它接收消息并将其分解为512位的块。因为消息很可能不是512的因子,所以它还为最终块添加了一些填充。该填充由一些零位后跟一位后跟64位长度字段组成。随机的256位值和第一个块通过压缩函数来产生新的256位值。然后将该值与下一个块组合并通过压缩功能。此循环一直持续到最后一个块,产生最终的256位散列。

在区块链中哈希

正如我已经说过的,哈希使我们能够通过检查设置长度字符串而不是单独检查数据集的每个字节来确保区块链的完整性并验证大量数据。我们可以将数据存储在链外,但仍然能够验证数据集是否经过数字签名。这大大节省了计算量,并实现了大规模采用区块链技术所需的速度。


本文感谢普林斯顿大学和比特币和加密货币价格提供有关散列函数的信息

原文:https://medium.com/blockchaintechnologies/blockchain-mechanics-hash-functions-8cbbded6d883

提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢