区块链教程

Chapter 0 Overview

| 关于   «  0.1. 理解区块链   ::   目录   ::   0.3. 区块与节点  »

0.2. 密码学与区块链

0.2.1. 使用密码学:它几乎是随机的

在本节中,我们将讨论密码学如何成为区块链、加密货币以及任何其他涉及区块链的应用的基本部分。 密码学主要有两种融入方式。 第一种我们已经看到了:使用标准密码学算法生成哈希码。 为什么要这样做?我们接下来解释。 稍后,我们将讨论密码学如何允许一个看似矛盾的事情: 一方面,人们可以执行发送消息和进行交易等任务,同时保持匿名(如果他们愿意),而 另一方面,消息或交易的接收者可以确信他们正在打交道的"身份"。

0.2.2. 生成哈希码

我们经常想要为某些信息生成哈希码。 具体来说,我们将接受任意长度的字符串并生成一个固定长度的数字作为返回。 如引言中所述,在本教程中我们假设将使用 SHA-256 来创建一个 256 位(或 64 个十六进制字符)的代码。

SHA-256 有两个关键特性,我们依靠它们使系统安全。 首先,给定一个哈希码,没有实际的方法可以恢复用于生成它的原始字符串的任何信息。 SHA-256 将有效地将原始字符串切片和切块,以至于不保留任何有意义的信息。 我们永远不需要撤销哈希过程来恢复用于创建代码的原始消息。 (事实上,据任何人所知,这是不可能的。 密码学系统依赖于这一点才能安全工作。) 第二个重要属性是输入字符串的微小变化会导致结果哈希值的不可预测变化。 例如,交换输入字符串中的两个字母将以不可预测的方式更改结果哈希码。 增加一个字母(如将'a'更改为'b')也将以不可预测的方式更改结果哈希码。 这个属性不仅是确保没有人可以从哈希中推断出原始信息所必需的, 而且这个属性对于比特币等系统使用的"工作量证明"概念也至关重要(参见 挖矿)。

0.2.3. 加密和解密

我们依赖的第二个基本密码学服务是安全加密消息的能力。 这意味着可以将字符串(任意长度)提供给加密过程,结果输出字符串不能用于推断原始消息。 但与哈希不同,必须有一种方法来解密消息。 当给定解密密钥时,过程可以逆转,可以从加密字符串中恢复原始消息。 因此,当然我们使用与用于创建哈希码的 SHA-256 算法不同的加密/解密算法。 首先,加密消息不是预确定的固定长度(如果要包含来自原始可变长度消息的所有信息,它不能是固定长度的)。

区块链系统经常使用 公钥密码学 来"识别"参与者并确认哪个参与者发起了消息或交易。 同时,这个过程允许参与者保持其"现实世界"身份的秘密,同时仍然让所有其他相关方相信他们有权进行给定的交易。

首先,参与者生成一对协调的密钥: 他们的公钥和他们的私钥。 他们使用密码学哈希函数来完成这个,出于通常的原因,即结果哈希不能被逆向工程。 密钥的关键在于它们彼此功能相反。 也就是说,你可以使用任何一个来加密消息,然后使用另一个来解密消息。 然后参与者将发布公钥,并将私钥保密。

所以现在,参与者可以使用私钥加密他们在消息或交易上的签名。 任何拥有公钥的人(应该是任何感兴趣的人,因为公钥 meant to be exactly that -- public)都可以轻松验证参与者签署了它。 他们通过使用公钥解密加密签名来完成这个。 结果应该是发送者声称用来标识自己的任何内容。 同时,任何没有私钥的人在计算上都不可能签署消息并将其冒充为参与者签署的。 因为如果有人尝试,那个公钥只会解密为乱码。 这在公钥身份系统中对于验证谁发起了消息(如金融交易)至关重要。 请注意,这意味着我们可以知道持有与该私钥匹配的私钥的人确实加密了签名(因此有权进行此交易)。 但这并不意味着我们知道这个人是谁,除了他们持有私钥这一事实之外。 这就是允许用户匿名的原因。 你知道他们在那个公钥生态系统中的公共角色,但你不一定能将其与他们的"现实世界"身份联系起来。

现在我们将演示所谓的 RSA 加密如何用于完成这个。 要看看这是如何工作的,你应该输入一些你想要加密然后解密的消息。 我们建议你输入一些真实的短语而不是乱码字符,这样你可以轻松看到解密是否正确完成。

接下来,我们为你生成了公钥和私钥。 你将使用这些来签署消息并解密你上面输入的消息。 我们让你轻松复制和粘贴,只需点击你想要使用的密钥右侧的按钮来复制它。

在真实应用中,你会把你的公钥公开。 这样,任何想验证某条消息确实来自你的人都能做到。 或者,任何想给你发送只有你能阅读的消息的人也能做到。 这是因为当用公钥加密消息时,只有匹配的私钥才能解密它。 对于本例,假设有人想用你的公钥来加密你在上面输入的消息。 把公钥复制到框中,你会看到消息已被加密。

我们现在将用你的私钥来解密你的消息。 当有人给你发送用你的私钥签名的消息时,你将能够用你的私钥解密它。 这就是为什么 RSA 加密是一种非对称算法——你只能用公钥加密消息,而用你自己的私钥解密它们。

在真实的公钥/私钥系统中,你绝不会想让任何人找到你的私钥! 因为如果他们找到了,那么他们将能够假装是你(这意味着他们可以进行你的所有交易,比如操作与此私钥关联的银行账户)。 或者,他们将能够读取用你的公钥加密的消息,因此这些消息只 intended 为你解密。

你可以看到这个过程是可逆的。 只需反转上面小部件中公钥和私钥的使用,看看这可以双向进行。

   «  0.1. 理解区块链   ::   目录   ::   0.3. 区块与节点  »

关闭窗口