区块链理论入门(自用,待补充)
Posted Cyni_c
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链理论入门(自用,待补充)相关的知识,希望对你有一定的参考价值。
基于北大肖臻老师课程的简单笔记
北京大学肖臻老师《区块链技术与应用》公开课_哔哩哔哩_bilibili
区块链
一.比特币(交易过程公开)
1.密码学原理
1.哈希函数(crytogrphic hash function)
哈希碰撞(collision resistance)
-
例如x≠y H(x)=H(y) 两个不同的输入,输出却是相等的,这就称哈希碰撞
-
由于鸽笼原理,哈希碰撞不可避免
-
可用于对一个message,求digest,因为找不到一个m1,使得H(m),与H(m1)相等。防止项目被篡改
-
通过比较项目或文件的哈希值,可以确定是否数据被进行了修改
-
不可以人为制造
hiding
-
哈希函数的推出关系不可逆,即可由X推出H(X),但逆过程不可以成立
-
与哈希碰撞结合形成digital commitment
-
前提:输入空间大,输入内容均匀。不满足时对于x后加一个随机数再取hash H(X||nonce)
digital commitment(digital equivalant sealed envelop)
sealed envelop
-
将结果密封,在需要时使用
digital equivalent sealed envelop
-
将预测结果设为x,求出其哈希值,并发布,又因为hiding性质x不可知,且由于哈希碰撞,结果篡改时,会与之前的哈希值不符,以此避免篡改
puzzle friendly
-
哈希值的计算事先不可预测,若得到目标哈希值,只能依次遍历所需输入
-
挖矿的过程:取一个随机数(nonce),nonce跟区块的块头里的其他信息合一起作为输入并将其取哈希,使其得到的哈希值小于目标哈希值,H(block header)≤target,没有捷径,只能大量尝试
-
diffcult to solve but easy to verify:验证容易,挖矿难
SHA-256(Secure Hash Algorithm)比特币中使用的哈希函数
2.签名
1.比特币中账户
-
去中心化:开户时由用户自行决定(创立一个公钥,与私有=钥的对)
-
非对称加密体系:
-
公私钥对的来源
-
对称加密体系:加密与解密的密钥相同(安全的情况下)
-
非对称:加密使用公钥,解密使用私钥(均为接收方)
-
好处
-
公钥:无需保密可公开(相当于银行账号)
-
私钥:保存本地无需使对方得知(相当于密码)
-
安全性得到保障,解决了密钥分发不方便
-
-
进行交易时:验证签名使用私钥,发布签名时使用公钥、
-
公私钥对产生极其随机,难以被轻易破解
-
-
产生源要有好的随机源,无论是公钥还是私钥,依次防止泄露信息
2.数据结构
区块链
本质:链表
哈希指针
-
普通指针:结构体在内存的地址
-
哈希指针:储存结构体的地址与哈希值,可以得知数据是否被篡改
-
哈希指针只能在直链情况下使用,否则会发生循环依赖
-
区块链本质也是链表:
-
用哈希指针代替了普通指针
-
第一个产生的区块:genesis block
-
每一个区块都有一个指向前一个区块的哈希指针,最后一个生成的保存在系统中
-
好处:是将每一整个区块的所有内容放在一起取的哈希值,包括哈希指针,可由此实现tamper-evident-log,改动任意一个区块,后续所有区块的哈希值均要改变,包括系统中储存的哈希值既只要知道最后一个哈希值,就可以判断之前是否出现了修改
-
可以降低某些节点中保存的数据数与区块数
-
-
merkle tree:用哈希指针代替了binary tree中的指针,其中每一个节点为一个哈希指针,最下层为数据块。最上方的为根哈希值
-
好处:只要掌握根哈希,则能检测出下方的任何修改
-
-
每一个区块上的交易会组成一个merkle tree
-
一个区块可分为块头(block header)与块身(block body)
-
-
-
用途:(base算法:二叉树)
-
产生merkle proof
-
全节点:保存整个区块的内容
-
轻节点:只保存block header
-
merkle proof:从交易发生的区块到根节点的所有区域(问题:交易发生在两个对象间,是否产生两条merkle proof)
-
流程:
-
-
-
3.协议
1.传统数字货币的缺陷
二次使用问题
-
数字货币本质是文件,可以被复制,然后可以被任意消费
会产生通货膨胀
效率低下
-
需要为中心发行的货币做上标记,才能避免二次使用问题
区块链的引用
-
区块链的加入,使得数字货币可由用户一起来维护,防止出现"二花问题"
-
比特币的交易,包含输入与输出两种
-
输入需要标注币的来源(用哈希指针指向前一个交易)
-
输出部分要给明收款人公钥的哈希
-
铸币交易
以上是关于区块链理论入门(自用,待补充)的主要内容,如果未能解决你的问题,请参考以下文章