课程笔记1

一、密码学原理

1.密码学中的哈希函数被称为cryptographic hash function,它具有三点性质:
1)哈希碰撞(collision resistance):对于不相等的x和y,对应的哈希值H(x)=H(y)。

没有有效的办法人为地制造哈希碰撞,硬要寻找哈希碰撞只能通过蛮力(brute-free),但哈希函数的输入空间大于输出空间,在实际中是不可行的。没有哈希函数在数学上被证明是哈希碰撞,目前只有通过实践检验。

2)Hiding:哈希函数计算过程是单向的、不可逆的。

在这条性质下,哈希值不会泄露原始信息。

将Hiding和Collision Resistance两条性质结合可以实现Digital Commitment(或称Digital Equivament of a sealed envelop)。例如预测股票结果,将预测结果x与随机数nonce拼接后计算哈希值,放入sealed envelop中,可以保证与预测结果不会被改变,提前做出的预测也不会对预测结果造成干扰。但是sealed envelop需要交由第三方信任机构,未能去中心化。

3)Puzzle Friendly:特定的哈希值无法清除地得知其输入

区块链中地每个区块都包含块头(block header)和块身(block body),在区块链上寻找随机数nonce使得H(block header)<=target很难,而验证哈希值很容易。

比特币使用的哈希函数为SHA-256,目前为止未出现哈希碰撞

2.签名

在区块链上创建一个账户就是创立一个公钥和私钥的对,公私钥的概念来源于非对称加密体系asymmetic encyption algorithm。

在对称加密体系中防止信息被窃听使用私钥加解密,加密和解密使用的是同一个的私钥。使用对称加密体系的前提是能够通过安全的渠道将私钥发送给通讯的双方。而使用非对称加密的方法,在信息传递的过程中,发送方使用接收方的公钥加密,接收方在收到信息后使用自己的私钥解密

在一次交易中,付款方使用自己的私钥对交易签名,这样在交易发布后别人可以通过付款方的公钥对交易进行验证,确保交易不是伪造的。

创建账户时生成的公私钥对是随机的,但生成两对相同的公司钥的概率是微乎其微的,且生成公私钥需要好的随机源(a good source of randomness),交易中也同样需要好的随机源。

二、数据结构

1.哈希指针

哈希指针既指向一个区块的首地址,也保存了其哈希值。区块链就是一个使用哈希指针连接起来的链表。区块链的第一个区块叫做创世区块(genesis block),最后一个区块叫做最近区块(most recent block),指向最近区块的哈希指针保存在系统里。只需记录最后一个区块的哈希值,就能知道整个区块链是否被修改,每个哈希值都是对上一个区块整体做哈希计算 (包括哈希指针)。

2.Merkle Tree

 Merkel树中从上到下分别包括根哈希(root hash)、哈希指针(hash pointers)、数据块(data block),Merkel树能提供Merkel proof

轻节点中只包含root hash没有block body,与之相对的是全节点,包含block header和block body。

*利用轻节点验证交易存在的时候,首先找到交易的所在位置,再通过一条寻求到的merkle proof计算出root hash后与所存储的根哈希值比较。如果想通过篡改邻节点中的交易而伪造交易是不可能的,因为改变邻节点使得最后的哈希值不变违背了哈希函数collision resistance的性质;证明交易不存在时可利用排好序的merkle树(sorted Merkel tree),需要提供两条merkle proof

三、协议

1.为防止双花攻击,比特币系统中在交易上加上签名,且避免麻烦采用的是去中心化方案,让广大用户承担验证交易的职能,而去中心化需要解决的问题是货币的发行。比特币中交易都包含输入和输出部分,输入部分要说明币的来源,输出部分需要收款人公钥的哈希值。

*区块链中的第二种哈希指针指向以前的一次交易,说明币的来源。

A->B的一次交易中除了需要签名和收款方的地址(地址由公钥去哈希后经转换得到)外,也需要知道A的公钥,实际上每个节点都需要A的公钥,因为签名是私钥签名公钥验证。

在交易输入部分说明A的公钥,为保证安全,交易中输出部分要有B公钥的哈希,于是在币的来源中由A的公钥的哈希值,如果交易中A公钥的哈希值与之不相同,则说明交易是伪造的。

Block Header的组成:

1)比特币系统的版本(version);

2)前一个区块的哈希(hash of previous block header);

3)Merkel root hash;

4)挖矿难度target;

5)随机数nonce;

Block Body的组成:

1)transaction list.

2.分布式共识(distributed consensus)

*一个分布式共识的实例是distributed hash table

分布式共识中的结论:

1)在分布式共识中有很多不可能结论(impossible result),在异步网络传输的系统中,如果网络时延设有上限,系统中一个成员是faulty则无法达成共识;

2)CAP Theorem

只能同时满足以下三个中的两个:

Consistency;

Availability;

Partition tolerance.

3.比特币中的共识(Consensus in Bitcoin)

比特币的共识协议是按照节点的算力设计的,哪个区块中的随机数nonce被算出,哪个节点就获得了记账权。

1)分叉攻击(Forking Attack):

如果正常区块链中有两个节点同时挖出正确的区块并向外广播,由于网络传播时延,其他节点有的接受了节点1的区块,有的接受了节点2的区块。但每个节点都会实时监听网络上新产生的区块,一旦发现区块链分叉,并且发现自己不在最长的那条链上,就会废弃掉自己的那条链,把最长的那条链同步到自己的机器上。从而,所有的矿工都会在最长的那条链上工作。

2)Block Reward

获得记帐权的节点可以发布一个特殊的交易,即铸币交易(coinbase transaction),可以发布一定一定数量的比特币。铸币交易是区块链上发行比特币的唯一方法,此种方法不用指明币的来源,每一个发布的区块可以发行50BTC,每21万个区块能够发行比特币减半。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值