| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> 区块链与比特币基础知识——北京大学肖臻老师《区块链技术与应用》公开课笔记 -> 正文阅读 |
|
[区块链]区块链与比特币基础知识——北京大学肖臻老师《区块链技术与应用》公开课笔记 |
区块链技术与应用北京大学肖臻老师《区块链技术与应用》公开课的一些笔记 1 比特币中的密码学原理crypto-currency 加密货币 1 密码学中用到的哈希函数的几个特性:? 1 collision resistance 抗碰撞性 ? 哈希碰撞的就是不同的输入有相同的输出而导致的冲突 ? 意思是没有什么高效的方法去人为的制造哈希碰撞 ? 2 hiding 哈希函数的计算过程是单向的,不可逆的 ? 从哈希值是不能反推得到输入的(输入空间足够大的情况下) 1和2的性质可以用来做digital commitment,也叫digital equivalent of a sealed envelope 在网络中,公开的是由输入得到的哈希值,由于上面两个特性,所以无法反推得到输入值,就可以用输入值来进行验证 因为在实际操作中输入的空间不一定是无限大,所以需要给输入值X拼接一个随机数,然后整体进行取Hash ? 3 puzzle friendly 哈希值的计算是不可预测的,由输入看不出来输出值 ? 想要得到理想范围的Hash值,需要一个一个去试 所谓挖矿其实就是不断的去试验输入,来得到比给定target要小的Hash值,这需要大量的工作量,但是验证起来是很容易的,只需要求一次Hash值 2 签名比特币的开户;只需要在本地创立一个public key和Private key对就可以(公钥和私钥) 公私钥的概念来自非对称的加密体系(asymmetric encryption algorithm)加密和解密用的分别是接收者的公钥和私钥,公钥是对所有人可见的 因为对称加密体系中公钥的分配与传输并不安全 发布时用到的时个人的私钥作为签名,在别人验证时使用的公钥进行验证 2 比特币中的数据结构**1 哈希指针:**哈希指针除了保存地址之外,还要保存哈希值区块链与普通链表的区别之一就是用哈希指针代替了普通的指针 区块a指向区块b 则区块a中的哈希值是对区块b的整体去哈希得到的 这也就会导致无论在区块链的哪个节点做了改动,都会导致其祖上节点Hash值的变化,这样就很容易检测到哪里做了改动 哈希指针无法应用与有环的链 2 Merkle tree与普通的binary tree的区别就是用Hash指针代替了普通指针 每个叶子节点(data block)都是一个交易,他的父节点保存了他的Hash值 根节点的Hash值并没保存具体的交易 boack header你保存了根节点的Hash值 一个作用就是可以提供Merkle proof:就是从具体交易内容的叶子节点直到根节点,在这过程中,只要每一个Hash值都能对应上,就说明是正确的 3 协议double spending attack 双花攻击 普通的数字货币可以无限复制 如果交易需要通过央行,那么则还是中心化的模式,区块链需要的是去中心化 如何以去中心化的方式来防范double spending attack 每一次交易既要写明去处,也要写明币的来源 这样在交易时可以验证 每一次转账信息包括 本人的公钥和目标转账人的公钥,这样目标人可以用自己的私钥解密。也可以通过公钥的Hash值去验证这个币的来源 比特币包括 Block header和Block body Block header包括的是比特币的协议版本 version、指向前一个区块的指针 hash of previous block header 整个Merkle Tree的根哈希值 挖矿的目标预值 target 还有随机数nonce 全节点(full node):保存区块链的所有信息 轻节点(light node):只保存block header的信息 分布式共识(distributed consensus): Paxos协议能够保证一致性 比特币中的共识协议:Consensus in BitCoin最长合法链:现有区块链接受的区块应满足最长合法链,不能插入到中间开出分支(分叉攻击) 当然区块链是可能出现分叉的,两个节点同事都捕获到了随机数,则都会其对进行记录 当然在之后的竞争中会有胜出者称为主链,而分叉会被丢弃 block reward:铸币交易是比特币中发行新币的唯一途径,而拿到记账权的节点可以有特殊权利进行铸币交易,刚开始每一次可以产生50btc,每过21w个就会减半(大概需要每四年减少一次) 4 比特币系统的实现比特币采用的是基于账本的交易模式 记录了铸币交易转账交易,但没有显示的记录每个账户有多少钱 比特币系统的全节点要维护一个叫UTSO(Unspent Transaction Output)的数据结构(没花出去的钱,同一个交易可能有多个输出。有的保存在结构中,有的没有) total input == total output 有时候不是完全相等,可能有一点给了记账的区块作为奖励 激励机制(交易费 transaction fee): 基于账户的模式(以太坊) 挖矿每一个挖矿的过程都是在不断的尝试nonce ,每一个尝试的过程都能看作一个Bernoulli trial Bernoulli trial(伯努利试验):随机试验只有两种结果 0或者1 Bernoulli process:a sequence of independent binary outcome 无记忆性(前面的实验对后面的结果没有影响)在任何时候挖到矿的概率都是一样的 因为出币的数量每21w(大约需要4年)就会减少一半,总数构成了一个几何序列21w * 50(1 + 1/2 + 1/4…) 大约2100w 风险:只能从概率上保证交易的安全性。需要六个确认来辨别一个节点为诚实节点 selfish mining 挖到先不发布,而是先积累,等到时候直接发布一条长链以此来破坏主链 当然这样需要极强的算力,且失败的风险极大 5 比特币的网络应用层(application layer): 遵循BitCoin Block chain 网络层(network layer):遵循 P2P Overlay Network 所有节点都是平等的,没有超级节点 设计原则:simple robust but not effictive 消息传播在节点中采用flooding的方式 比特币要求区块的大小不超过1M 6 挖矿难度对块头节点进行Hash计算,得到的值与t目标预值target进行比较(小于等于),target越小,目标难度越大。调整挖矿难度就是调整目标空间在整个输出空间中所占的比例 比特币使用的哈希算法是SHA-256,所以整个输出空间是2的256次方 挖矿难度与target成反比 总结 全节点
轻节点
7 分叉(分叉攻击)state fork:(两个节点同时发布区块,对比特币当前的状态有意见而产生的分叉) ? forking attack:分叉攻击 ? deliberate attack:认为故意造成的 protocd forkl(比特币协议不同造成的分叉) ? hard fork: ? block size有一定的限制 limit 1M 当大部分节点更新块大小限制,而少部分未更新时,会导致小块会把大块视为非法链,出现硬分叉,只要旧节点不更新,分叉就不会消失 必须所有的节点都更新了,分叉才会消失,否则会永久存在 ? soft fork:(软分叉的短链可能会消失,不会产生永久性的分叉) 只要拥有半数以上的节点更新了软件,分叉就会消失
8 匿名性并未能实现真正的匿名,对外交互的时候可能暴露自己的信息 应用层 网络层的加密是很重要的 零知识证明: 指一方(证明者)向另一方(验证者)证明一个陈述时正确的,而无需透露除该陈述是正确的外的任何信息 同态隐藏: 1 如果下x,y不同,那么他们加密函数值E(x)、E(y)也不相同(不会出现碰撞) 2 给定加密函数值,很难反推得到x的值 3 给定E(x)、E(y)的值,可以很容易的计算得到关于x,y的加密函数值 同态加法:通过E(x)、E(y)计算得到E(x+y)的值 同态乘法:通过E(x)、E(y)计算得到E(xy)的值 扩展到多项式 零币和零钞:主要是为了实现匿名性 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:48:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |