区块链基础
区块链(Blockchain)技术源于 比特币。为了保证每笔交易可信并不可篡改,它通过后一个区块对前一个区块的引用,并以加密技术保证了区块链不可修改。
本质:一个分布式的,不可篡改的数据库;
特性:天生具有可验证、可信任的特性
用途:不但可用于支持比特币等数字货币,也可用于数字身份验证,清算业务等传统的必须由第三方介入的业务,从而降低交易成本(当然也增加了另一些成本)。
区块链原理
区块链是由一个一个区块构成的有序链表
区块
-
记录了一系列交易
-
有唯一的哈希标识,即block hash(区块哈希),根据区块头部内容生成
-
区块头部Prev Hash字段指向上一个区块
-
区块头部Merkle Hash即交易内容生成的hash
Hash算法
比特币涉及 SHA-256,RipeMD160 算法,采用 SHA-256 + SHA-256 和 SHA-256 + RipeMD160 两种加密算法;
不可篡改
如果一个恶意的攻击者修改了一个区块中的某个交易,那么Merkle Hash验证就不会通过。
所以,他只能重新计算Merkle Hash,然后把区块头的Merkle Hash也修改了。
这时,我们就会发现,这个区块本身的Block Hash就变了,所以,下一个区块指向它的链接就断掉了。
因此,攻击者必须先重新计算这个区块的Block Hash,然后,再把后续所有区块全部重新计算并且伪造出来,才能够修改整个区块链。
P2P交易
无需信任中介参与的P2P(Peer-to-peer点对点)交易,传统交易实际上并没有完成货币转移;
数字签名
通过数字签名算法(非对称加密算法),证明交易信息有效;
对某个消息签名的时候,主体使用私钥对消息进行签名(加密),然后,把消息、签名和自己的公钥发送出去;
其他任何人都可以通过主体的公钥对这个签名进行验证(解密),如果验证通过,可以肯定该消息是特定发出的;
特性:
-
防伪造:签名不可伪造;因为私钥只有签名人自己知道,所以其他人无法伪造签名
-
防篡改:消息不可篡改;如果原始消息被人篡改了,那么对签名进行验证将失败
-
防抵赖:签名不可抵赖;如果对签名进行验证通过了,那么该消息肯定是由签名人自己发出的
非对称加密算法
RSA算法,DSA算法和ECDSA算法,比特币采用 ECDSA 算法(椭圆曲线签名算法)
与银行卡比较:
公钥:相当于银行卡卡号,它是两个256位整数
私钥:相当于银行卡密码,它是一个256位整数
异同:
银行卡的卡号由银行指定,银行卡的密码可以由用户随时修改;
比特币密码(实际上是私钥)由用户先确定下来,然后计算出“卡号”(实际上是公钥),即卡号是由密码通过ECDSA算法推导出来的,不能更换密码,因为更换密码实际上相当于创建了一张新卡片。
比特币账本是全网公开的,所以,任何人都可以根据公钥查询余额,但是,不知道持卡人是谁。这就是比特币的匿名特性
比特币的P2P网络不存在中央节点,私钥只有持有人自己知道,因此,丢失了私钥,对应的比特币就永远无法花费。
钱包软件
帮助用户管理私钥的软件,包括:
个人猜想:按道理私钥存在数据中,但对用户从不可见,只可授权使用;
交易
每个区块都记录了至少一笔交易,一笔交易就是把一定金额的比特币从一个输入转移到一个输出(记账)
交易双方:双方的公钥地址
交易记录:比特币协议规定一个输出必须一次性花完;一个交易中,一个输入可以对应多个输出,一个交易也可以对应多个输入和1个输出
比特币实际的交易记录是由一系列交易构成,每一个交易都包含一个或多个输入,以及一个或多个输出。未花费的输出被称为UTXO:Unspent Transaction Ouptut。