随笔 - 21  文章 - 0 评论 - 0 阅读 - 9084
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

本文为个人整理笔记,知识点来源于北京大学肖臻老师的《区块链技术与应用》公开课视频: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的公钥验证发起人身份。

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

 

posted on   12345zjl  阅读(257)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示