4. 区块链系列教程之:比特币的钱包与交易
简介
钱包在比特币中是做什么的呢?比特币的交易又有什么特点呢?怎么才能伪造比特币的交易呢?今天和大家一起学习一下比特币中的钱包和交易。
比特币密码学的基础
之前我们提到过比特币使用的并不是什么新技术,只是对于老的技术比如:P2P网络,分布式系统,密码学,共识算法的重新而又巧妙的应用。
在钱包和交易生成验证的过程中,都需要使用到密码学的计算。这里我们先介绍一下比特币中会使用到的几种密码学技术。
单向散列函数(hash算法)
在介绍单向散列函数之前,我们先了解一下什么情况下需要使用到单向散列函数。
如果你需要从国外的网站上下载一个软件,但是因为种种原因,国外的网络太慢了,下载几个G的数据几乎是不可能的。刚好国内有镜像网 站,可以从国内下载数据。但是如何保证国内的镜像不是被篡改过后的呢?这个时候就需要单向散列函数了。一般来说网站会提供MD5或者SHA的值作为验证值。
单向散列函数有一个输入和输出。输入称为消息,输出称为散列值。
散列值的长度跟消息的长度无关,不论多少大小的长度的消息,都会计算出固定长度的散列值。
hash算法有下面几个特点:
-
能够根据任意长度的消息计算出固定长度的散列值。
-
计算速度要快。
-
消息不同,散列值也不同。
这就意味着,如果仅仅是一点点的变动都会引起整个散列值的巨大变化。
因为散列值的大小是固定的,所以有可能会出现不同的消息产生相同散列值的情况。这种情况叫做碰撞。
难以发现碰撞的性质被称为抗碰撞性。当给定某条消息的散列值时,必须保证很难找到和该消息具有相同散列值的另一条消息。
-
单向散列函数必须具有单向性。所谓单向性是指无法通过散列值来反推出消息的性质。
比特币使用的散列算法是SHA256,他是安全散列算法SHA(Secure Hash Algorithm)系列算法的一种(另外还有SHA-1、SHA-224、SHA-384 和 SHA-512 等变体),SHA是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的,主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。
RIPEMD(RACE Integrity Primitives Evaluation Message Digest,RACE原始完整性校验消息摘要),是Hans Dobbertin等3人在md4,md5的基础上,于1996年提出来的。