目录
基本原理
加密哈希:
公钥加密:
希望有人向你发送只有你才能打开的加密文档/消息时使用 PKC
希望向其他人发送加密文档/消息并证明它确实由你发送时使用 PKC
使用 PKC 和加密哈希对文档/消息进行数字签名
交易哈希链使用数字签名转让数字资产所有权;每个交易记录都保留有对哈希链中上一个交易的加密反向链接
Merkle 树:
基本原理
区块链的基本原理理解起来并不复杂。首先来看三个基本概念:
交易(Transaction):一次对账本的操作,导致账本状态的一次改变,如添加一条转账记录;
区块(Block):记录一段时间内发生的所有交易和状态结果等,是对当前账本状态的一次共识;
链(Chain):由区块按照发生顺序串联而成,是整个账本状态变化的日志记录。
想象一下你和一群爱借钱的朋友。每个人都有一本账本,上面记录着所有的交易和账户余额。这个账本是分布在每个人手里的副本,而不是交给某个人拿着账本。
每当有人想要进行一次交易,比如转账给其他人一定数量的金币,他们会把这个交易写在自己的账本上,并通知其他人。其他人会验证这个交易是否有效,比如检查发送人是否有足够的金币进行转账。如果交易被验证通过,它就会被添加到每个人的账本上,表示账本的状态发生了变化。
为了确保每个人的账本都保持一致,我们约定一些规则。首先,每个人在记录交易时必须按照相同的顺序进行,就像是按照时间顺序排队一样。其次,每个人会把自己已验证的交易打包成一个“区块”,并把这个区块连接到之前的区块上,形成一个链条。
现在,每个人都有了相同的账本副本,每个区块都记录了之前的区块的信息。这样,任何人都可以通过检查每个区块的信息来验证整个账本的有效性。如果有人试图篡改账本的某个区块,那么所有人都会注意到,因为区块的哈希值会发生变化,从而破坏了整个账本的连续性。
这个共享账本游戏的关键在于共识。当有人想要添加一个新的区块时,其他人会一起参与确认这个区块的有效性,并达成共识。只有在达成共识后,新的区块才会被添加到每个人的账本上。
这就是区块链系统的运作原理。通过分布式的账本副本、按照特定的规则记录交易和形成区块链,区块链系统实现了一个安全、透明和去中心化的数据记录方式。
加密哈希:
加密哈希的作用是创建一个唯一的指纹或标识,用于表示输入数据。无论输入数据有多大或多小,哈希函数都会生成相同长度的哈希值。这意味着即使输入数据发生微小的改变,生成的哈希值也会完全不同。
加密哈希有几个重要的特性。首先,它是单向的,意味着无法从哈希值还原出原始数据。这使得哈希值成为一种安全的方式来存储密码或其他敏感信息,因为即使黑客获得了哈希值,他们也无法轻松地将其转换回原始数据。
其次,加密哈希是不可逆的。这意味着无法通过观察哈希值来推断出输入数据的内容。哈希函数的设计使得即使输入数据发生微小的变化,其生成的哈希值也会有很大的差异。
最后,加密哈希应该是唯一的。这意味着不同的输入数据应该生成不同的哈希值。即使两个输入数据只有一个字节的差异,它们生成的哈希值也应该完全不同。
以下是使用 SHA-256 算法对各种长度的字符串进行哈希处理
有时,哈希值会进行双重哈希处理。也就是说,通过应用第二轮 SHA-256 算法
公钥加密:
希望有人向你发送只有你才能打开的加密文档/消息时使用 PKC
首先,我们来看一下公钥和私钥。公钥是可以被分享给其他人的密钥,而私钥是保密的,只有密钥的所有者知道。这两个密钥是通过数学算法生成的,它们之间有一个特殊的关系。
假设Alice想要向你发送一个加密的消息。你首先生成一对公钥和私钥,并将公钥发送给Alice。Alice使用你的公钥来加密她想要发送的消息。
现在,即使消息被加密,只有你拥有与公钥配对的私钥,才能解密消息。这是因为私钥是唯一能够解密使用公钥加密的消息的密钥。
希望向其他人发送加密文档/消息并证明它确实由你发送时使用 PKC
当你希望向其他人发送加密文档或消息,并且希望能够证明这些文档或消息确实是由你发送的时候,你可以使用公钥加密和数字签名这两个方法。
使用公钥加密时,你会生成一对密钥:公钥和私钥。你将公钥分享给其他人,而私钥只有你自己能够访问。其他人可以使用你的公钥来加密他们想要发送给你的文档或消息。一旦文档或消息被加密,只有你拥有的私钥才能解密它们,这样确保了只有你能够读取原始内容。
使用 PKC 和加密哈希对文档/消息进行数字签名
生成密钥对:首先,你需要生成一对密钥:公钥和私钥。通常,你会使用一个密钥生成算法来生成这对密钥。公钥可以与其他人分享,而私钥必须保持机密,只有你自己能够访问。
哈希处理:对于要进行数字签名的文档或消息,你需要使用加密哈希算法对其进行哈希处理。加密哈希算法会将文档或消息转换为一个固定长度的哈希值。常用的加密哈希算法包括SHA-256和SHA-512等。
私钥加密:使用你的私钥对哈希值进行加密。这个加密操作会生成一个数字签名,这个签名是唯一与你的私钥相关联的加密值。
发送签名和文档/消息:将数字签名和原始文档或消息一起发送给接收方。确保这些信息在传输过程中是安全的,以防止篡改。
公钥解密:接收方使用你的公钥对数字签名进行解密。解密操作将得到解密后的哈希值。
哈希验证:接收方使用相同的加密哈希算法对接收到的文档或消息进行哈希处理,得到一个新的哈希值。
比较哈希值:接收方将解密后的哈希值与新生成的哈希值进行比较。如果两个哈希值匹配,那么说明文档或消息没有被篡改过,并且数字签名有效。
使用 PKC 和加密哈希验证文档/消息
交易哈希链使用数字签名转让数字资产所有权;每个交易记录都保留有对哈希链中上一个交易的加密反向链接
交易哈希链是一种用于转让数字资产所有权的机制,它使用数字签名来验证交易的有效性,同时通过保留对上一个交易的加密反向链接来确保交易记录的完整性。
在交易哈希链中,每个交易都会被记录并与一个唯一的哈希值相关联。这个哈希值是通过对交易的内容进行加密哈希处理而生成的。这样做可以确保交易的完整性,因为即使交易的内容发生微小的更改,哈希值也会发生变化。
Merkle 树:
Merkle 树是一种生成 Merkle 根哈希的二叉哈希树;此数据结构可以有效添加叶节点,并计算新 Merkle 根,而无需完全重新计算