# 抗量子区块链和加密货币全分析Part 2 

By [abcmint.eth](https://paragraph.com/@abcmint) · 2021-12-28

---

在第二部分，我们将进一步了解区块链中使用的数学概念。 理解这些概念对于理解本系列接下来的部分非常有帮助。 所以请耐心听我说。 我们将跳过实际的数学，只解释概念。 即使你不喜欢数学，也应该会很有趣。

如上一章所述，使用了两个数学概念。 哈希算法和公钥密码学

什么是哈希算法？

哈希算法，或者说哈希函数，是一个数学公式，它可以将一个数据量减少到一个较小的数据量，并带有一定数量的字符。 无论输入的数据有多大，结果总是一样的大小。 所以，无论你的输入是一部数字电影，一个mp3，还是几行文字，输出的字符量总是一样的。 这个大小是什么，取决于所使用的哈希函数。

下面是一些例子，使用散列算法 "SHA256"。

如果输入是 "Blockchain"

输出为：625da44e4eaf58d61cf048d168aa6f5e492dea166d8bb54ec06c30de07db57e1

如果输入的是上面那段话，（从"A哈希\[...\] 算法 "SHA256"："）。

则输出为 973f48304184375dd6d78a84b756b2f6d15940d337c45078990be0ccd073dfcf

因此，无论输入什么，输出的字符数都是固定的（对于SHA-256来说，总是64个字符）。

读者可以在这里玩玩这个概念：[https://www.xorbin.com/tools/sha256-hash-calculator。](https://www.xorbin.com/tools/sha256-hash-calculator%E3%80%82)

区块链中使用的是什么类型的哈希算法？

有很多不同的哈希函数。 在区块链中，我们使用了一种叫做 "加密 "哈希函数的哈希函数。 这些哈希函数具有某些属性，使它们被认为是安全的，适合区块链。 最重要的属性是：

计算速度：这是非常明显的。 计算输出的速度越快，处理交易的效率就越高。

确定性：使用相同的输入总是导致相同的输出，无论你尝试多少次。

即使输入的微小变化也会彻底改变输出。 例如，同样使用SHA-256。

单向哈希函数。 这意味着从输出中推导出输入应该是接近不可能的。 这里接近不可能的意思是说，它需要的时间远远超过人的一生。 理论上是可能的，但需要的时间太长了，所以也就无所谓了。

耐碰撞。 这意味着，两个不同输入的结果会有相同的输出，这应该是接近不可能的。 接近不可能的意思在这里又是指：有可能，但机率太小，所以在实践中可以称为不可能。

以上所有的特质使得这类哈希函数适合用于区块链。

哈希在区块链中的使用有两种方式。

为了节省空间，同时存储公钥。 有些区块链（不是全部）只公布公钥的哈希值。 所以你个人有一个完整的公钥，但在区块链上，资金是存储在公钥的哈希值上。

为了"总结"，同时证明最后一个区块的真实性。 一个完整的区块，它所包含的所有信息都会被哈希。 这意味着它的大小被减少到一行字符。 下一个区块包含了前一个区块的哈希值，以及该区块的所有交易和一些其他信息。 然后该区块再次被哈希，以此类推。 由于每一个被哈希的东西内容的微小变化都会完全改变哈希的结果，这意味着你不能在现有的链中插入一个伪造的区块，甚至不能在一个交易中做微小的改变。 你甚至无法改变前面一个区块中的一个数字，因为这样一来，该区块的哈希值就会发生变化，你需要改变所有后续区块的所有哈希值。 因此，如果你要改变一个有签名的块中的一些东西，你将无法快速地进行必要的计算，以赶上后续的块。

什么是公钥密码学？

私钥密码学是用来签署和认证交易的。 它通常被称为签名方案。 使用数学算法，生成一个密钥对：一个公钥和一个私钥。 这些密钥是一组字符。 私钥用于创建一个数学签名，以验证您发送的任何消息或交易。 接收者使用公钥来验证签名（同样通过数学）。 签名对于每条消息或交易来说都是唯一的，类似于哈希函数，哪怕是消息中的一个小变化，都会使签名不匹配，验证失败。 即使只是更改或删除消息中的一个字符，签名也不会匹配。 这样一来，消息可以在不安全的网络上发送，同时还能保证消息的真实性和原始性。

区块链中的公钥加密技术？

在区块链中，公钥密码学（签名方案）的使用方法如下。 在一个安全的环境（钱包）中，生成一个密钥对：一个公钥和一个私钥。 私钥你为自己保留。 如果你想从你的地址发送资金，你将使用私钥登录你的钱包并创建一个签名。

公钥可以被公开。 正如关于散列功能的部分所描述的那样，一些区块链只将公钥以散列形式发布到安全空间。 在该系统中，资金被注册到你的公钥的哈希值。 但只要你想发送交易，你就需要将你的公钥以原始形式公开。 这是因为如果没有公钥，区块链网络就无法验证你交易的真实性。 公钥包含在交易中，这样网络就会收到公钥。 只有在你想提现的时候才需要公开公钥的原始形式，但如果你想接收资金就不需要了，因为接收资金不需要你的签名。 所以只要你不从你的地址提取资金，你就不需要公布你的原始公钥。

所以公钥签名系统让你可以通过不安全的网络，向不认识你的人发送交易，同时还能证明你是被授权发送该交易的，同时还能验证消息是没有变化的。

所以消息/交易不是加密的。 而是公开传输的，但是是经过签名的，而且是以一种认证的方式，不可伪造。

公钥密码学有几种类型。 EDCSA是区块链中最常用的。

总结：区块链本身是通过使用哈希算法来安全工作的。而用户和区块链之间的通信则是使用公钥密码学，也就是所谓的签名方案安全地进行的。区分这一点很重要，因为下一篇文章将介绍区块链的抗量子特性。区块链中使用的哈希算法将被证明是不需要担心的事情，而区块链中使用的签名方案在数学上被证明在量子计算机发展道路上却存在一定的风险。

---

*Originally published on [abcmint.eth](https://paragraph.com/@abcmint/part-2)*
