《区块链技术与应用》--笔记【1-3】

一、课程简介

区块链的本质

观点1:区块链是下一代价值互联网。
观点2:世界上最慢的数据库
观点3:是一个庞氏骗局
观点4: 是一个像蒸汽机一样的伟大发明
观点5:。。。

观点有很多,既有支持者,也有反对者。支持者认为,区块链技术具有革命性的潜力,可以在各个领域实现更高效、更安全的数据管理和交易方式。然而,反对者则对区块链技术的实际应用价值持怀疑态度。他们指出,目前的区块链项目存在着诸多技术难题和实际限制,例如交易速度慢、能源消耗高、扩展性差等。同时,一些人认为,区块链技术被过度夸大,并在一些项目中被用作炒作的工具,而非真正解决问题的手段。在我看来技术发展往往会伴随着支持者和反对者的争论,这种争议往往也是促进技术进步的一种方式。同时对技术应该保持理性的态度,避免过度吹捧或贬低。区块链技术作为一种新兴技术,其在解决某些问题上具有独特的优势,不应过度吹捧,也不应过度贬低。

今年北京时间2024年4月20日8时9分,比特币于区块高度840000成功完成第四次减半,临近减半时BTC再创新高在这里插入图片描述

课程基本信息

在这里插入图片描述

课程大纲

在这里插入图片描述

在这里插入图片描述

二、 BTC-密码学原理

比特币作为区块链的典型应用,尽管被称为加密货币,但实际上其交易信息是公开可见的,包括地址、金额等。比特币的安全性和私密性来自于密码学的应用,主要是哈希函数和数字签名。哈希函数确保了区块链数据的不可篡改性,而数字签名则确保了交易的真实性和完整性。这两个密码学功能是比特币及区块链技术中至关重要的组成部分。

哈希函数((cryptographic hash function)

哈希函数是一种数学算法,它将任意长度的输入数据映射成固定长度的输出,通常是一个固定大小的字符串。这个输出通常被称为哈希值或摘要。哈希函数的一个关键特性是,对于相同的输入,无论输入数据有多大,哈希函数总是会产生相同长度的输出,并且对于不同的输入,哈希值通常是唯一的。

密码学要求哈希函数性质有两个,分别是抗碰撞性(collision resistance)和不可逆性(hiding),比特币中运用的哈希函数还要求第三个性质Puzzle friendly

抗碰撞性(collision resistance)
  • 哈希碰撞:在哈希函数中出现了两个不同的输入,但它们产生了相同的哈希值。换句话说,当两个不同的输入经过哈希函数运算后得到了相同的输出, 即给定x和y,且有x!=y,但经过哈希函数Hash(),可以得到Hash(x)=Hash(y),则称为哈希碰撞。

一般来说,哈希碰撞不可避免,因为输入空间大于输出空间。理论上可以用暴力破解(brute-force)来解决,但运算量极大

  • 抗碰撞性:对于不同的输入,哈希函数应该能够产生唯一的哈希值,即使输入的长度不同也应该如此。在实际应用中,哈希碰撞基本上难以避免,但是我们只要保证给定x,就很难找到一个y,能够在x!=y的前提下,使得Hash(x)=Hash(y)就认为其是collision resistance

对一个 message 求摘要(digest),用于检测对输入值是否篡改。如果有人改变了数据(消息m),其哈希值(H(m))也会相应地发生变化,因为即使进行了微小的修改,都会导致完全不同的哈希值。

不可逆性(hiding)
  • 不可逆性:不可逆性是指哈希函数的过程是单向的,不可逆的。给定x和Hash(),可以很容易得到Hash(x),但没有办法在已知Hash(x)和Hash()的情况下,反推出x的具体取值。
  • 前提
    • 输入空间均匀分布:让各种取值的可能性都差不多
    • 输入空间足够大:使得暴力破解的方法不可行

collision resistance和hiding结合实现digital commitment(数据保证):即首先,预测结果可以提前计算并计算其哈希值,但不会公开预测结果本身,而是只公开其哈希值。这样可以确保没有人能够提前知道预测结果,从而避免影响股市的公平性。其次,当最终结果出来后,将其结果计算哈希值,然后与之前公开的预测结果哈希值进行比对。如果两个哈希值匹配,就可以确认预测结果没有被篡改,并且验证了预测的准确性。通过这种方法,即使预测结果是通过哈希值公开的,也能够确保结果的完整性和安全性,同时不会提前泄露预测信息,保证了预测的公平性

Puzzle friendly
  • Puzzle friendly:该性质要求哈希值计算事先不可预测,仅仅根据输入很难预测出输出。例如:我们需要一个哈希值,存在于某一个范围内,只能通过不停运算查找出来。该性质保证了比特币系统中,只能通过“挖矿”获得比特币。也就是说,该性质保证了工作量证明(POW)机制可以运行下去【“挖矿难,但验证易”】(满足difficult to slove, but easy to verify)在比特币系统中采用SHA-256哈希函数,SHA指secure hash algorithm,满足哈希函数的三个性质。

签名

比特币账户管理
  • 比特币中账户管理:在中心化系统中,用户需要通过第三方机构或平台进行账户开通,这意味着用户的身份和权限受到第三方的管理和控制。然而,在比特币这样的去中心化系统中,不存在"申请账户"的概念,因为用户不需要依赖第三方来创建账户。相反,用户可以自行创建一个公钥-私钥对,这个过程通常是由用户的加密软件或钱包应用程序完成的。公钥用于接收比特币的支付,而私钥则用于对交易进行签名,以证明用户对比特币的拥有权和控制权。因此,在比特币系统中,账户的创建和管理是完全由用户自己负责的,而不需要借助于任何中心化的第三方机构。
加密体系
对称加密体系
  • 对称加密体系(symmetric encryption algorithm):最早的加密体系是对称加密 ,若两方进行通信,发送方和接收方事先商量好一个密钥(encryption key),发送发将信息加密后发送给接收方,接收方收到后用密钥解密,对称加密的前提是能有个安全的信道,将密钥安全地分发给通讯方。(弱点:密钥分发不方便)
非对称加密体系
  • 非对称加密体系(asymmetric encryption algorithm):使用了一对相关的密钥:公钥和私钥。这两个密钥是彼此相关的,但是其中一个可以公开,而另一个必须保密。
    • 公钥(Public Key):公钥是用于加密的密钥,可以公开发布。任何人都可以使用公钥来加密消息,但只有持有相关私钥的实体才能解密
    • 私钥(Private Key):私钥是用于解密的密钥,必须保密保存。只有持有私钥的实体才能解密使用公钥加密的消息。
签名
  • 签名:在比特币系统中,非对称加密的公钥和私钥用于数字签名和验证。
    • 私钥(Private Key):比特币系统中的私钥用于对交易进行签名。只有持有私钥的用户才能对其拥有的比特币进行交易签名,以证明交易的合法性和所有权。

    • 公钥(Public Key):私钥对应的公钥用于验证交易签名的有效性。比特币系统中的每个交易都包含发送者的公钥以及签名,其他用户可以使用发送者的公钥来验证签名的有效性,从而确认交易的合法性。

在比特币系统中,确保生成公钥-私钥对时使用了高质量的随机源是至关重要的。如果生成的公钥-私钥对不够随机,可能导致重复的密钥对出现,从而存在安全风险,另外,确保在每次签名时都使用了良好的随机源也是至关重要的。如果签名时使用的随机源不好,可能会导致私钥泄露或者签名被篡改的风险。

三、BTC-数据结构

区块链是一个个区块所构成的链,或者链表状的数据结构,在比特币中或者区块链中,一个重要的组成部分是哈希指针

哈希指针(hash pointers)

普通的指针存储的是某个结构体在指针中的地址,哈希指针要存储地址和哈希值,。

区块链与普通链

区别:

  • 区块链用哈希指针代替了普通的指针。
  • 区块链的一个哈希指针改变会影响其他哈希指针,普通指针变化不会影响其他的指针。哈希指针的内容是把整个区块的内容取哈希,当节点(区块)中内容发生改变,该哈希值也会发生改变,从而保证了区块内容不能被篡改

区块链的特征:

  • 区块链本质是有哈希指针连接起来的链表
  • 区块由 block header 和 block body 组成,block body 存放具体的交易信息
  • 每个区块根据自己的区块内容生成自己的哈希值,每个区块(除创世纪块)都保存有前一个区块的哈希值。从而保证了区块内容不被篡改。
  • 用户只需要记住最后一个区块链的哈希地址,就可以检测区块链上内容是否被篡改。
  • 由于区块链的tamper-evident log(防篡改log)特点,如果有人试图篡改链上的任何一个区块,后续所有区块的哈希值都会受到影响,最终导致链的末尾哈希值发生改变。因此,只需验证最后一个区块的哈希值,就能判断整个区块链有没有被篡改

在这里插入图片描述

第一个区块称作:genesis block
最后一个区块(也是最近产生的)称作:most recent block

默克尔树(merkle tree)

Merkle 树,也称为哈希树,是一种用于验证数据完整性的数据结构。它是由计算机科学家拉尔夫·默克尔(Ralph Merkle)于 1979 年提出的。Merkle 树的主要思想是通过对数据块的哈希值进行层层嵌套来实现数据的高效验证。Merkle 树的构建过程通常从底部开始,将数据块的哈希值两两组合,然后对这些组合再次计算哈希值,直到最终得到一个根哈希值,称为 Merkle 根。这样,只需存储 Merkle 根和少量的哈希值,就能够高效地验证大量数据的完整性。

在这里插入图片描述

Merkle tree与Binary Tree区别,好处

区别:Merkle tree哈希指针代替了普通的指针
好处:只需要记住Root Hash(根哈希值),便可以检测出对树中任何部位的修改。

注意:

在比特币中,各个区块通过哈希指针相互连接,形成了一个链式结构。每个区块由块头(block header)和块体(block body)两部分组成。块头包含了一系列信息,其中之一是Merkle 树的根哈希值,它代表了该区块所包含的所有交易的完整性。而块头并不包含交易的具体内容,只有这个根哈希值。而交易的具体内容则存储在块体中,是一个交易列表

Markle Tree作用:

提供Markle Proof,比特币中节点分为轻节点和全节点。全节点保存整个区块的所有内容,而轻节点仅仅保存区块的块头信息。
全节点:保存整个区块内容(block header + block body)
轻节点:类似手机上的比特币钱包的应用(may be only block header)

为什么要分轻节点和全节点?

由于移动便携设备的硬件限制,存储整个区块链的所有内容是不现实的。因此,轻节点采用了一种更加精简的方式,只存储区块的头部信息,而不存储完整的区块数据。区块的头部信息包含了区块的重要摘要,如区块哈希、时间戳、难度目标以及Merkle 树的根哈希值。相比之下,全节点则需要存储完整的区块数据,包括头部信息和所有交易的内容。这种方式有效地减少了轻节点所需的存储空间,使得移动设备也能够参与到区块链网络中。

Merkle proof

一种用于验证数据在 Merkle 树中的位置和完整性的方法。当一个节点需要验证某个特定数据块是否包含在 Merkle 树中时,可以使用 Merkle 证明来进行验证,而无需下载整个 Merkle 树。

如图
在这里插入图片描述

轻节点向全节点请求一个 Merkle proof时,全节点会提供一系列哈希值(红色)给轻节点。这些哈希值是 Merkle 树中某个特定交易所在路径上的节点哈希值。轻节点可以利用这些哈希值在本地计算出根据 Merkle 树结构生成的 SPV(Simplified Payment Verification)证明中的哈希值(绿色)。首先,轻节点计算出目标交易的哈希值,然后通过与提供的哈希值逐级运算,从底部向上逐步计算出每个级别的哈希值。通过将红色和绿色的哈希值拼接在一起,轻节点可以逐层向上构建 Merkle 树,最终得到树的根哈希值。最后,轻节点将计算得到的根哈希值与块头中的 Merkle 根哈希值进行比较,以验证交易是否被正确包含在 Merkle 树中。轻节点收到 Merkle 证明后,只需沿着证明的路径从底部向上验证每个哈希值,确保它们都是正确的,即可证明目标交易的存在和完整性

思考:是否存在不安全的情况?(来源:区块链技术与应用》公开课系列笔记)

在这里插入图片描述

  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值