⚗️

【密码学01】从哈希和公钥密码学到比特币

零、比特币的诞生

传统金融交易是以信用为基,就不可避免会导致出现违约风险,商家和消费者需要互相警惕被对方欺诈,可逆转的交易方式(reversible transaction)为买卖双方都增添了难以消除的交易风险。
为了尽可能的减少信息差、减少交易风险,交易费用不得不增加。在提高交易双方的安全感的同时,高昂的交易费用也对交易规模有所限制,略显随意的小规模交易被市场摒弃。
而电子支付系统中的比特币交易,不再是以信用为基础,而是借助加密技术来开展双方点对点交易(Peer-to-Peer),从实现效果来看,比特币交易不可逆转。使用点对点的、分布式的时间戳服务器(Timestamps Server,后做详细解释)去生成基于算力的证明,并按照时间顺序记录每条交易。理论上,只要系统节点(Honest Nodes)比系统入侵者掌握更多的CPU算力,该系统就能稳定运营。

一、哈希函数

1.哈希函数的含义

哈希函数(Hash Function),也叫散列函数,是指将长度可变的输入(消息、数据块等)通过哈希算法,转换成固定长度的输出的一个过程。该过程的输出值被称为哈希值。在这里提供一个简单的哈希计算器,供大家体验学习

2.哈希函数的性质

  • 正向简单:从一个输入值计算出哈希值是简单的,高效的。
  • 逆向困难:从一个哈希值倒推出输入值是困难的。
  • 异入异出:不同的输出值一般将计算得出不同的哈希值。
  • 变动敏感:即使一个输入值发生微小的变动,计算得出的哈希值也会产生巨大的变化

3.哈希函数的类别

  • SHA系列
SHA(Secure Hash Algorithm),是美国国家标准与技术研究院(NIST)和国家安全局(NSA)设计的一类标准的哈希算法。SHA系列算法主要包括3类,分别被命名为SHA-1,SHA-2,SHA-3。其中,SHA-2包括SHA-224,SHA-256,SHA-384,SHA-512。比特币采用的就是SHA-256的哈希算法。
  • MD系列(不安全)
  • 国密算法

4.哈希函数的应用

  • 消息验证
为了确认消息发出后是否被篡改,消息发送方可以借助非对称加密,将消息进行加密后,并将该消息及其哈希值一并发送给消息接收方;消息接收方根据收到的消息进行哈希运算,并与受到的哈希值进行比较,从而便可以判断消息是否被篡改、伪造或者出现差错。
  • 唯一标识
为了方便区分各种消息或文件,可以通过哈希计算得出其哈希值,并将哈希值作为消息或文件的唯一标识

二、公钥密码学和转账交易

比特币交易是如何进行的呢?
首先需要解释一下比特币的账户系统。比特币的账户系统使用
在比特币交易系统中,一次交易发生时,数字币需要在之前记录的末尾附加记录数字签名(digital signatures)—— 即上一笔交易的哈希值(Hash,后做详细解释),以及新所有人公钥(Public Key)。这就形成了信息链,每次交易信息中都包含上次交易信息。
notion image
为了检查是否有每笔交易的准确性(避免单币多重支付),每一次交易后,交易记录会被公开宣布,所有节点参与者会认同其所接受的同一且唯一的交易历史。
因此每个待确定交易在被证明有效发生前,需要当前的交易信息被大多数节点认同其符合交易历史。

三、打包交易:默克尔树

1. 默克尔树的含义

默克尔树(Merkle Tree)是哈希函数不断通过递归计算而得到的一个数据集合。

2. 默克尔树的形成过程

notion image
 
如上图,假设我们有A B C D四个数据块,将这四个数据块创建对应的默克尔树。
第一步,将每个数据块分别进行哈希运算,得到的结果我们成为叶节点(leaf);
第二步,将相邻的两个叶节点,也即哈希块,分别作为“左子树”和“右子树”,将它们串联作为哈希算法的输入,进行哈希运算,得到上一个父节点;
第三步,重复第二步,直到得到一个单一的哈希值,从而形成了一棵完整的默克尔树

3. 默克尔树的应用

  • 可信计算
  • P2P下载
  • 简化支付验证

四、区块链

时间戳提供了上述假设成立的可能。通过为一组(block)记录(record)的哈希打上时间戳,继而把哈希值向所有节点广播,时间戳可以证明记录的存在,并且每个时间戳在其哈希值种包含着之前的时间戳。
notion image
而在当前区块基础上,寻找并生成新的哈希值并非易事。系统采取了一个工作证明(Proof of Work)的计算方式,在当前区块中增加一个随机数(Nonce),并在此基础上,找到一个满足给定条件的哈希值,该寻找过程没有任何捷径,只能通过算力不断随机计算。
notion image
一旦满足条件的哈希值被某个节点计算寻找出,该链条就会得到延长,这条最长链会向其他所有节点进行广播,然后此链形成新的共识,不得发生任何改变。
更具体而言,如果希望改变时间戳网络中的一个信息(攻击系统以谋求数据篡改和欺骗),则需要重新完成该信息之后所有节点的哈希运算,并且还需要追赶并反超最长链的工作,这在占据大多份算力的节点系统中,是不可能发生的。

五、总结

总结来看,网络(Network)运行的步骤如下:
1. 所有新的交易向所有节点广播; 2. 每个节点将新交易打包到一个区块; 3. 每个节点开始为此区块找一个具备难度的工作证明; 4. 当某个区块找到其工作证明,它就要将此区块广播给所有节点; 5. 众多其他节点当且只当以下条件满足才会接受这个区块:其中所有的交易都是有效的,且未被双 重支付; 6. 众多节点向网络表示自己接受这个区块的方法是,在创建下一个区块的时候,把被接受区块的哈希当作新区块之前的哈希
节点始终认为最⻓链是正确的那个,且会不断向其添加新数据。

六、思考

毫无疑问,比特币通过结合哈希和公钥密码学创造了一个去中心化账本。但是让我们回到比特币创立的初衷,减少信息差、减少交易风险,交易费用,这些比特币真正做到了吗?目前比特币的TPS(Transaction Per Second, 每秒交易次数)仅为7左右,相比之下Visa网络的TPS已经上千;非法资金转移、随着比特币价格水涨船高的交易费用,都是比特币面临的现实问题。面对这些问题,许多新公链蓬勃发展,提供更高的TPS、更低的交易费用,还有像闪电网络这样基于比特币的Layer2来提高交易性能。

贡献者

  • 万晓强
  • 陈通
  • 张劲松

推荐资料:

Video preview
王思远 张华:《区块链概论》,北京大学出版社

Other notes:

Hash
🪙
Brief intro. for bitcoin