| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> 【待更新】北京大学肖臻老师《区块链技术与应用》公开课笔记【04-BTC-协议】 -> 正文阅读 |
|
[区块链]【待更新】北京大学肖臻老师《区块链技术与应用》公开课笔记【04-BTC-协议】 |
北大肖臻老师《区块链技术与应用》课程链接:点击这里 全系列文章链接:点击这里 主要补充内容及图片来源:《区块链:技术驱动金融》 该系列文章如中有任何侵权内容,或者有链接无法打开、图片加载上传失败等情况,请及时与我个人联系删除或修改。 一、双花攻击(double spending attack)怎么设计出一个加密货币出来? 假设央行发行数字货币。我们知道,央行发的人民币上有各种防伪标志。同样,央行发的数字货币上也要有央行的私钥签名。而央行公钥是公开的,我们用密码学中的公私钥原理,就可以验证数字货币是不是真的。 大家觉得上面这个方案怎么样?但其实这个例子根本没用到区块链。 而且问题在于:私钥容易泄露。如果央行私钥都发生泄露,那普通百姓的私钥更容易泄露,这样比特币就没法用。 数字货币其实就是个文件。虽然文件上有央行的签名,100元面值就是100元,但数字货币是可以复制的,它可以无限复制下去,这一点和人民币不一样。 A把人民币给B,A的那张钱就没了,没办法再花一次。但如果A花出去一个数字货币,他可以再复制第二次,再花一次,这就叫“双花攻击”。 数字货币主要挑战就是怎么防止双花攻击。 举例 央行发行的每个数字货币上都有一个编号,就和人民币一样,比如017、092等。此外,央行还要维护一个数据库,上面记录着每个编号的数字货币在谁手里。 比如017在A手里,A把017给B,B不仅需要验证这个数字货币有没有央行签名(即验证下币的真假),还要跟央行核实一下017这个数字货币,A之前有没有花出去过。 央行确认后说017之前确实是在A手里,所以A支付017给B是合法的,交易发生后,央行的数据库也需要改一下,将币改为017-B. 此时,如果A想再花一次017,想把它支付给C,C就能跟央行核实查到017已经花出去,已经在B手里了,此时这个交易就不能成立,这样就能防止017花两次。 以上交易方法,正确性没问题,实践中也可操作。但这是中心化的方案,由央行统一控制,而且每次交易都需要央行确认其合法性,这就太慢了。 我们需要一个去中性化的方案,让所有用户共同承担央行的职能,用一个数据结构来检测比特币交易,这个数据结构就是区块链。 区块链有两个核心问题:①数字货币的发行;②如何验证交易的有效性。 如何验证交易的有效性,实际就是怎么防范双花攻击。 举例 ?(4.1?小型区块链,source:?课程截图) 比特币每个交易都包含输入和输出两部分。输入要说明币的来源,输出要给出收款人的公钥的哈希。 假设,A获得铸币权(CreateCoin),A发行10个比特币。 A把钱平均分给B和C,一人5个比特币,这个交易需要有A的签名,证明是经过A同意的。 同时这个交易还要说明花掉的10个比特币从哪儿来,这里A花掉的币是由铸币交易来的。 A转给B,要说明B公钥哈希是什么,B又把钱转给C和D,也要说明币的来源。 此时,C一共有7个比特币,C又决定把7个币给E。 ... 这就是构成了一个小型的区块链。 这里有两种哈希指针,一种把区块串起来构成一个链表,另一种指向前面某个交易来说明币的来源。这样就能证明这个币不是凭空捏造,并且防止双花。 举例 现在B要转给F5个币,签名还是有B的签名。 单纯验证签名币好像合法,但还要知道B从哪儿来。 B的来源回溯一下,这时候就不对了,因为B的币之前已经花出去了,这就能证明不合法,防止双花。 转账交易。 A转给B,需要有A的签名,B的地址。 收款的地址是通过公钥推算出来的,B的公钥取哈希通过某些转换得来。 A怎样知道B的地址呢? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/25 18:21:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |