在比特币等数字货币中使用的哈希算法简介

比特币通过挖矿来产生新的比特币并取得记账权。这里说的挖矿实际是通过哈希算法进行一些哈希运算,生成特定哈希值,最先生成的就取得了新生成区块的记账权,并被奖励一定的比特币。哈希函数英文为hash函数,也叫散列函数。哈希运算是指把任意长度的输入,通过哈希算法,变换成固定长度的较短输出,输出的值为哈希值。
比特币的工作量证明(POW)是利用SHA-256,生成以多个0开始的散列值,其输入包括上一个区块的散列值、时间戳、随机数数(Nonce)、难度系数值。输出为新生成区块的哈希值。 
哈希函数的特点:
1、不可逆性
哈希函数是一种单向生成体制,也就是用通过哈希算法得到的哈希值,不能逆向生成输入值
2、大输入小输出
通过哈希函数是一种压缩映射,散列值的大小远小于输入值的空间,输出可以是固定长度的二进制

目前比较著名的哈希算法有MD5和SHA1
Hash函数根据不同的运算方法可以简单的划分为如下几类:
1. 加法Hash;
所谓的加法Hash就是把输入元素一个一个的加起来构成最后的结果
2. 位运算Hash;
这类型Hash函数通过利用各种位运算(常见的是移位和异或)来充分的混合输入元素
3. 乘法Hash;
这种类型的Hash函数利用了乘法的不相关性(乘法的这种性质,最有名的莫过于平方取头尾的随机数生成算法,虽然这种算法效果并不好)。
4. 除法Hash;
除法和乘法一样,同样具有表面上看起来的不相关性。不过,因为除法太慢,这种方式几乎找不到真正的应用。需要注意的是,我们在前面看到的hash的结果除以一个prime的目的只是为了保证结果的范围。如果你不需要它限制一个范围的话,可以使用如下的代码替代”hash%prime”: hash = hash ^ (hash>>10) ^ (hash>>20)。
5. 查表Hash;
查表Hash最有名的例子莫过于CRC系列算法。虽然CRC系列算法本身并不是查表,但是,查表是它的一种最快的实现方式。
6. 混合Hash;
混合Hash算法利用了以上各种方式。各种常见的Hash算法,比如MD5、Tiger都属于这个范围。它们一般很少在面向查找的Hash函数里面使用。
哈希算法应用方面:
1、文件校验
常用的校验算法有奇偶校验、CRC校验,但这两种校验不能防止数据篡改,避免不了对数据的恶意破坏。Hash算法对任何输入原文的修改都会输出不一样的散列值,因此能避免恶意的篡改。
2、数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
3、鉴权协议
如下的鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。以上就是一些关于hash以及其相关的一些基本预备知识。
阅读更多

更多精彩内容