大学肖臻教师"区块链技术与应用"公开课
第一节:绪论
第二节:密码学原理
crypto-currency
一、cryptographichashfunction
性质;1collisionresistance(hash碰撞)指H(*)=H(y),而*≠y对于哈希函数,哈希碰撞是常见
的,但是要人为的制造哈希碰撞几乎是不可能的
例子:H(m),m为message,如果m被人篡改,则H(m)会发生改变。
ps:哈希弱碰撞目前是无法被数学证明的,但与此同时,我们还没有很好的方法人为制造哈
希碰撞。
可是对于不同类型的哈希函数其平安性随着计算机科学和数学方法的进步,也是有可能被破
解的,例如MD5
性质2hiding指哈希函数的计算不可逆,对于给定*可以计算H(*),可是我们几乎不可能从
H(*)反推出*.
digitalmitment/digitalequivalmentofasealedenvelope由于预测本身可能会影响结果,需要一
种方法在预测结果不能提前公开的情况下,保证预测结果的真实性。
将预测*的哈希值公开,待到结果出现时再公开预测以检验预测与实际是否相符。
在实际操作中,也有将*和随机数一起做HASH以保证取值的分布足够离散。
比特币中的哈希函数所需性质:
性质3puzzlefriendly指除了遍历以外,没有任何方法可以做出哈希碰撞,这样才可以作为
挖矿证明,然而想验证一个人的挖矿证明却是非常快捷的,因为只需要计算一次哈希函数值
就可以了。
比特币中所使用的哈希函数为:SHA256——SecureHashAlgorithm
二、数字签证
asymmetricencryptionalgorithm非对称加密算法
由于区块链系统是完全公开的,所以并不需要公私钥对进展**通信,而是进展数字签名,以
验证自己的身份,即私钥加密,公钥解密
对于256位的公私钥对,很难有两个账户拥有完全一样的公私钥对,所以很难通过产生公私
钥对再比对的方法来冒名他人。
第三节数据构造
一、hashpointers
区块链(blockchain)是最根本的数据构造,他和普通的链表的区别在于,使用hashpointers取
代了普通的指针
genesisblock:创世纪块,指第一个区块
mostrecentblock指最后一个产生的区块
在区块链中,每一个block都含有一个Hashpointer指向前一个块,而最后一个块的指针就
保存在系统中!
Hashpointer的值是前一个块的所有数据的hash函数的取值!
所以无论区块链中的哪一个块发生了改变,都会导致之后所有的Hash全部改变,因此只需
要检验最后一个Hash,即系统中的Hash来检验区块链中数据是否被修改。在实际操作过程
当中,也不需要将整条区块链完整的保存下来,而只需要将最后的假设干长度的区块链缓存
下来,实时更新,进展验证。
.z.
-
二、Merkletree
Merkletree是另外一种给根本的数据类型,他与普通的树的区别在于,使用Hashpointers取
代了普通的指针
Merkletree的指针从叶节点指向根节点,将左(右)节点的Hash值保存在当前节点的左(右)Hash
指针,最后将根节点的Hash值保存在系统中!
对于Merkletree而言,其最原本的数据是保存在整棵树的叶节点上的,而根茎局部都是保存
了上一级的哈希值。
Merkleproof:全节点保存了交易的全部信息,而轻节点只保存blockheader,为了向轻节点
证明一个新的交易已经被写入Merkletree了!则需要在树中找到这个交易叶子,并且从叶子
出发回到根节点,在这个过程中,轻节点所在的本地主机需要不断计算出当前节点的Hash
值,如果沿途的Hash值正确,则交易正常√。这样一条路径就是Merkleproof
如果对交易按时间顺序进展排序,然后布置成Merkletree(sortedMerkletree),则就可以用一
种简单的方法证明非法交易并不存在于区块链中
ps:Hash指针必须要先确立一个节点的值,才能去计算与之相关的区块的值,因此这个类型
的指针是不可以应用在环形数据构造当中的。
第四节协议
带权力中心的数字货币需要一个权力中心,权力中心发行货币的公钥公开,用私钥加密数字
货币,这样每个人都可以用公钥验证货币来自于权力中心。但是数字货币的本质是文件,如
果用户大量复制数字货币,每个货币都拥有被权力中心认可的数字签名,这样就可以用伪造
的数字货币进展交易,也叫做doublespendingattack(双花交易)
处理方法:在数字货币上再额外添加唯一编号,这样就可以区别每一*货币,防范双花交易,
但是这种方法必须由中央权力机构来维护一个数据库来实时存储货币编号和持有人信息,即
每一笔数字交易都必须由中心权力机构确认合法性。
在去数据中心的数字货币系统中,需要使用区块链技术来防止双花交易。
铸币交易是每个用户都拥有的权力,即铸币权,可以记作:→A(10)
由*个用户交易个*组用户货币的行为,可以记作:A→B(5),A→C(5)
此时区块链中有两种哈希指针1).交易的指针;2).说明货币来源的指针
转账行为需要:转账方的签名;收账人的地址
在验证交易合法性的时候,需要上一笔交易的输出和下一笔交易的输入合起来来测试能否正
常运行——BitCoinScript
区块链的组成:
version
hashofpreviousblockheader只算前一个区块的块头
Merkleroothash
target
nonce
transactionlist(交易列表)
节点的分类
,也叫做fullyvalidatingnode
,因此轻节点不能独立做验证。
.z.
-
distributedconsensus分布式共识,即共享账本可以被所有用户成认
FLPimpossibilityresult:在一个异步的系统中,即使只有一个成员出错,则也不可能取得分
布式共识。
CAPTheorem(C:consistency一致性,A:Availability可用性,P:Partitiontolerance容错性)CAP
三条性质只能同时满足两条
我们需要找到这样一个nonce使得H(blockheader)≤target成立,这样该账户才能拥有往区块
链中写入交易的权力。
分叉攻击:通过往区块链中间插入合法交易来进展回滚,因此区块链应当只承受能延拓最长
合法链的交易
coinbasetransaction是唯一铸币的方法。每产生一个新的交易,则拥有投票权的账户可以拥
有blockreward,即使用coinbasetransaction去铸造bitcoin。协议中规定初始铸造数量为50BTC,
但是每当区块链延长21W,铸造数量减半,.
只有通过计算求解nonce才能获得记账权,获得记账权就能得到blockreward,利用coinbase
transaction铸造新的货币。
因为区块链的特殊性质,计算nonce是没有任何捷径的。
因此寻找nonce的过程就被称作挖矿,获得记账权的节点就被称为矿工
第五节实现
Blockchain是一个去中心化的共享账本
以Bitcoin为例,Bitcoin是一个基于交易的账本模式transaction-basedledger
UT*O:UnspentTransactionOutput未被花掉的交易的集合
通过查询UT*O来确认新的交易中使用的货币是否在UT*O中,假设在,则合法,否则不
合法。因此全节点内存中需要频繁使用UT*O来确认交易的合法性。
交易会不断的更新UT*O。
UT*O中被交易使用掉的货币=UT*O中因交易产生的未使用的货币。
totalinputs=totaloutputs
transactionfee交易费
交易费的金额较小,但是随着减半效应的存在,最终会转变成以transactionfee为主体的挖
矿行为。
以太坊是一个基于账户的账本模式account-basedleger
.z.
注册有任何问题请添加 微信:MVIP619 拉你进入群

打开微信扫一扫
添加客服
进入交流群
发表评论