比特币与密码学
比特币作为区块链经典应用,其区块链上所有信息都是公开的,包括账户地址,交易记录,金额等等。而比特币属于加密货币,其主要应用到密码学中2个功能,一个是哈希函数,一个是签名。正是因为这种加密机制保证的其区块链本身的优势--不可篡改。
一、哈希函数
哈希函数(又叫散列函数)并不是指某种特定的函数,而是一类函数,有各种各样的实现。这类函数的共同特点是能够将任意长度的输入值转变成固定长度的输出值,该值成为哈希值(散列值)。
二、Cryptographic hash funtion
Cryptographic hash funtion译为加密散列函数,它被认为是一种单向函数,也就是说极其难以由输出的结果,回推输入的数据是什么,被称为"现代密码学的驮马"。它有几个重要的性质:Collision resistance, Hiding, Puzzle friendly。在比特币系统中采用了SHA-256哈希函数。
Collision resistance
译为抗碰撞性,从数学上讲,由于输入空间是远远大于输出空间的,任何哈希函数,都难免出现哈希碰撞。collision resistance指的是没有什么高效的方法可以人为的找到哈希碰撞,即H(a) = H(b),a = b。
利用collision resistance,我们可以用来检测数据是否被篡改,假如我们有一个数据m,它的哈希值为H(m),如果有人改了m,那么哈希值一定会发生变化,因为collision resistance,意味着你很难做到篡改了内容又不被检测到。
Hiding
是指哈希过程是不可逆的,你知道H(m),并不能反推出m的值。但这个条件成立的前提是输入空间足够大,且分布均匀。
Digital commitment
根据前面两个性质可以实现digital commitment(数据保证)。肖老师提到关于股市预测的案例,某个人对某支股票进行涨停预测,我们如何保证能够知晓其预测是否准确?最简单的方法是应该提前将其写于纸上密封,交由第三方机构报管,等到实际结果出现后开启密封与实际对比,而这个第三方机构需要能够使人信服。而比特币系统中不存在这样一个第三方机构。
我们可以把预测结果看成x,提前公布Hash(x),因为有Hiding的性质,所以没有办法通过Hash(x)反推出x。等到预测结果发生后,公布x,因为有collision resistance,只要计算一次hash(x),就可以确认预测结果x是没有被篡改过的。在上面那个股票案例中,预测的是“涨的股票的名字”,那么因为股票一共就那么多支,输入空间并不是足够大,这样就不满足hiding的性质(大家可以遍历所有股票取哈希去知道预测的是哪知股票涨)。这时候解决方法是在输入后面加上一个随机数nonce,对其整体取哈希:Hash(x || nonce)
Puzzle friendly
该性质要求哈希值事先不可预测,仅仅根据输入很难预测出输出。例如:我们需要一个哈希值,存在于某一个范围内,只能通过对不同的输入不停运算查找出来。puzzle friendly保证了比特币系统中,只能通过挖矿获得比特币。也就是说该性质保证了工作量证明(POW)机制可以运行下去(挖矿难,验证易)。
三、签名
比特币中账户管理
在中心化系统中,账户的开通依赖于第三方。在去中心化的比特币系统中,申请账户是用户自己来处理的,即自己创建一个公钥-私钥对,生成公钥和私钥的过程是随机的,但要求选取一个好的随机源,否则会出现重复的公钥私钥对。
比特币中的签名
公钥和私钥保证了“签名”的应用。当在比特币网络中转账时,所有交易都是公开的,但是大家怎么判断这个交易确实是A发起的,而不是别人冒名顶替的,这就需要A用户用自己的私钥对这笔交易进行签名。其他用户拿到签名和交易信息后,只需要用A的公钥去验证签名的正确性就能确认这笔交易是否是A发起的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。