区块链技术与应用:02-BTC-密码学原理

2023-04-22,,

本文为个人整理笔记,知识点来源于北京大学肖臻老师的《区块链技术与应用》公开课视频:https://www.bilibili.com/video/BV1Vt411X7JF?from=search&seid=11990345748014503507&spm_id_from=333.337.0.0

BTC-密码学原理


比特币称为加密货币(crypto-currency),但实际上加密货币是不加密的,区块链上所有的交易是公开的。

比特币主要用到了密码学中的两个功能:哈希函数和签名。

一、哈希函数(cryptographic hash function)


密码学中,哈希函数有两个重要性质:哈希碰撞和hiding

1、哈希碰撞(collision resistance)

   x≠y,H(x)=H(y)

哈希碰撞指的是不同的输入,得到的哈希值是相同的。

哈希碰撞理论上是不可避免的,因为输入空间是远远大于输出空间的。比如现在给定256位的哈希值,那么我们的输出空间为2^256,输出空间是无限大的。但是没有什么高效的办法可以人为地输入不同值,使得获取的哈希值是一样的。只有一种蛮力的方式,brute-force,遍历所有输入范围去获取。

理论上是无法证明哈希函数具有哈希碰撞的性质,只是通过实践发现哈希函数发现不了人为制造哈希碰撞的方法。当然也有例外,目前MD5已经被破解了,存在可人为制造哈希碰撞的方法。

哈希碰撞这个性质的作用:没有办法可以篡改内容,而不被检测出来。比如:一个文件存在某个云存储服务器上,如何判定文件是否被篡改。上传之前,会算一个哈希值存在本地,下载之后再去算一个哈希值,比对之前的值,如果是一样的,则说明文件没有被篡改。

2、hiding

hiding指的是哈希函数的计算是单向的,不可逆的。X→H(X),输入X,可以获取哈希值H(X),但是通过H(X)是推不出输入值x的。除非用穷举的方式,所以成立的前提是输入的空间要足够得大,且取值概率是均等,则难以破解。

结合哈希碰撞的性质,可以实现digital commitment,也可以称为digital equivalent of a sealed envelope。现实生活中,可以理解为:预测可能影响结果,比如股市走向,大v预测走向,可能引领一堆人去买,也可能导致有人趁机做套。所以预测结果是不可提前公开的。那么,如何验证哈希值正确与否?需要一个第三方公证机构,事先保管好哈希值。

常用的方法是输入+一个随机数,再去取哈希。

3、Puzzle friendly

除了密码学要求的两个性质以外,比特币中还要求哈希函数的另一个性质,叫做Puzzle friendly。是指哈希值计算的事先是不可预算的,看着输入是看不出来输出的,即无法人为地输入使得哈希值在指定的某一个区间内。

后面会讲到比特币挖矿,挖矿就是找到一个随机数nonce,nonce会跟区块块头的其他信息一起作为输入,得到一个哈希值,使其小于等于指定的目标值target。挖矿的过程就是一直不停地去试各种随机数,使其输出的哈希值在既定范围内。挖矿很难,验证很容易,验证只需要用挖矿得到的输入值做一次哈希运算,得到的值在既定范围内即可。

  比特币用到的哈希函数是SHA-256(Secure Hash Algorithm),我们前面说的三个性质,SHA-256都是满足的。

二、签名


1、账户管理和加密方式

讲签名之前,需要先讲下比特币系统中的账户管理。

日常生活中,开立账户需要带好自己的证件去银行办理开户,这是一种典型的中心化账户管理。而比特币是去中心化的,不存在银行这样的中心机构,每个用户可以自己在本地开户,创建一个公钥和私钥。用户在本地的公私钥对,就是一个账户。

对称加密:公私钥的概念来源于非对称的加密(asymmetric encryption algorithm)。一开始的加密是对称的,即两个人拥有同一个密钥encyption key,用户A将信息用该密钥加密后发送给用户B,用户B收到信息后使用同一密钥解密。对称加密方式下,密钥的传输是个问题,不能在网络上明文传输,容易泄露。

非对称加密:所以出现了非对称加密,加密用的是公钥,解密用的是私钥。还是之前的例子,用户A给用户B发信息,通过用户B的公钥加密信息。用户B接收到信息后,通过用户B自身的私钥解密。即非对称加密用的是同一个人的公私钥对,这样做的好处是公钥是可以公开的。简单理解,公钥相当于银行账号,私钥相当于银行卡密码,我可以通过私钥去交易。

2、签名

前面说到比特币的信息是公开不加密的,那要公私钥有什么用呢?即用于本段落要说明的签名。

比如A转给B10个比特币,怎么证明是A发起的,而不是别人冒名顶替的呢?发起者A可以用私钥签名,接受者B用发起者A的公钥验证发起人身份。

此外,还存在一个安全问题,公私钥都是自己在本地生成的,有没有可能两个人的公私钥重复了,导致可以盗取他人资产的情况?这种概率理论上是存在的,实际上是微乎其微的,可以忽略不计的。不过比特币计算的每一步需要好的随机源,任何一步没用好的随机源,都可能导致私钥泄露。

区块链技术与应用:02-BTC-密码学原理的相关教程结束。

《区块链技术与应用:02-BTC-密码学原理.doc》

下载本文的Word格式文档,以方便收藏与打印。