《区块链技术与应用》01 BTC 密码学原理

这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理,以及部分延伸的思考。文末附有公开课链接。

原课程有26个视频,笔记内容对其进行了合并归纳,共16篇内容,更多可以访问本人主页:

https://mirror.xyz/0xAAF87dC0576EA47B8214f9248b55c081bD9E7CAc

本篇内容主要回答以下两个问题:

1、比特币中使用的哈希函数的密码学原理是什么?

2、这其中的密码学原理又有什么样实际的应用?

哈希函数有两个性质

性质一:哈希碰撞Collision resistance

1、含义

  • 两个不同的输入,可能有相同的输出。因为输入是无限的,但是输出是有限的。

  • 比如对于256位数的输出,有2的256次的可能性,但是输入是无限可能的。

  • 那在输出结果相同的情况下,想要找出当时不同的输入,也有一种暴力的办法,穷尽所有的可能,即brute-force.

2、应用:甄别信息是否被篡改

  • 方法:文件上传云端之前,本地算出一个哈希值,下载的时候再算一个,如果哈希值是一致的,可以认为内容没有被篡改。

  • 潜在假设:(1)暴力破解的成本很高,很难实现。(2)本地的哈希算法是一致的。

  • 影响应用的情况:(1)量子计算或者科技进一步发展,使得计算机的算力极大地提升,暴力破解可低成本快速实现,哈希碰撞就不可以这么应用了。(2)本地的哈希函数被篡改。

性质二:hiding

哈希函数是单项的不可逆的,给定一个x可以算出H(x),但是无法从H(x)反推出x。 前提:输入空间足够大,分布比较均匀,暴力破解的成本很高,很难实现。 两个性质结合,可以实现digital commitment, digital equivalent of a sealed envelope

比特币的哈希函数还需要第三个特性:puzzle friendly

  • 含义:哈希值的计算是不可提前预测的

  • 举例:想得到一个256位的哈希值,k个0+后面剩下的数,事先不知道哪个输入可以得出这个哈希值。

  • 挖矿:找随机数nonce,与区块链的其他信息一起作为输入,得出的哈希值小于等于某个阈值。区块链是一个一个区块组成的链表,每个区块有块头block header

  • 挖矿的过程:H(block header)≤target 挖矿的过程就是不停地试随机数,nonce作为header的一部分,算一次就行,使得整个block header得出的哈希值在target space里面

  • 挖矿很难,验证很容易,difficult to solve, but easy to verify 比特币的哈希函数:SHA-256:SHA-secure hash algorithm

公钥私钥与签名 开户的过程,指的就是创立一对公钥和私钥。(public key, private key)

  • 非对称加密Asymmetric encryption algorithm 传统的加密是对称的加密,需要有安全的渠道把密钥给到双方。密钥的分发不是很方便。 非对称加密的解决办法是创立一对密钥。加密用的是公钥,解密用的是私钥。 加密和解密用的是同一个人的公钥和私钥。

  • 使用场景 公钥可以公开,通讯的对方只要知道公钥就行,自己使用私钥进行解密。 公钥类似银行账号,对方知道公钥就可以转账,用户自己私钥类似于密码,用了私钥可以取钱。

  • 私钥的用处:签名 验证签名用的是公钥,签名用的是私钥。 产生相同的公钥和私钥,如果是256位,相同的概率微乎其微。 有个前提:需要有好的随机源。a good source of randomness 比特币生成和签名的时候,都需要有好的随机源。 对一个数据源进行哈希,然后对哈希值进行签名。

视频原文地址

https://www.bilibili.com/video/BV1Vt411X7JF?spm_id_from=333.337.search-card.all.click&vd_source=6807dc8dcddb18fe6db9d949c12b670c