Signature - 签名

发送者用其私钥签名文件的Hash,接收者用发送者的公钥解密,如果解密出的字符串与文件Hash相同,则可以确认是发送者发的。

假设这个公钥是另一个人的,那么不能验证成功。

如果文件不对,那么Hash对不上。

因此人、物都能验证。

MerkleTree - 哈希树

P2P下载中常常会把文件分块,每一块算出一个Hash,然后拼接起来,再算一个Hash,这个Hash被称为根哈希

如果其中一部分的数据变化,相应的子哈希就产生变化,根哈希也产生变化。

用途

从P2P网络下载一个文件时,如果Hash对不上,可以把文件分成多块,分别比较各部分的Hash。

找出有错误的部分,重传,而不用重新传输整个文件

MerkleDag

大概长这样

PoW - 工作量证明

PoW的传统用法是对抗垃圾邮件,每次发送邮件都需要进行一定的耗时运算,接收者才会接受。

那么在区块链上,每个客户端只接收带有工作量证明的区块。

矿工持续竞争产生区块,可能会有假的区块产生,这样就产生了区块链的分支。比特币中正常矿工只承认长的分支。

其他节点是不承认这个假的分支的,所以这个节点除非算起来比主链快,就是超过50%的算力,才可能控制整个比特币。

这些分支不被全网承认,意味着全部的算力付之东流,所以很少有人会制造假的区块。

CID - Content Identifier

https://proto.school/#/data-structures/04

CID 是一种内容编址方式,应用于IPFS。

1
2
3
4
5
6
7
8
9
10
+------------------------------+
| Codec |
+------------------------------+
| |
| Multihash |
| +----------+---------------+ |
| |Hash Type | Hash Value | |
| +----------+---------------+ |
| |
+------------------------------+

结构如上

Codec

Codec,指明如何解析数据。

Git、Bitcoin都使用内容编制技术,但哈希函数不同,CID可以创建一种通用系统。

Multihash

https://github.com/multiformats/multihash

Self identifying hashes

自标识哈希