都说比特币是加密货币,既然叫加密货币,那么比特币必然和加密技术有关。话虽是这么说,但是加密技术包括的内容很多,那么比特币究竟使用了那些密码学技术呢?我们从整个比特币的设计当中可以看到,在比特币系统里有一个比较重要的加密算法,这就是SHA256算法。
SHA256的中文全称叫做“安全哈希算法”。所谓的“哈希”是Hash的音译,而Hash就是进行Hash函数的意思。通常来说,Hash函数的运算有一个共同特点。就是不论原始数据有多少位,只要通过Hash运算后,得到结果的长度都是固定的。
概念往往是抽象的,那么下面我们就用一个形象的例子进行说明。如果我们去图书馆借书,就会发现不管是什么图书,书的侧面都会贴着一张便签,便签上通常都有一个与图书对应的编号。为了方便管理,这些编号的长度通常都是一样的。这个情况和Hash函数就非常类似。我们可以把输入Hash函数之前的数据看作是书本,这些书本的字数都不一样,有的有几万字,有的有几十万字。但是一旦这些数据通过Hash函数处理过以后,就全部都变成长度相同的编号了。而且这些编码必须要满足以下几点要求:
第一、输入Hash函数之前的数据和通过Hash函数处理过后得到的编号必须一一对应。
第二、每一个编号的长度都是固定的。
第三、我们无法通过编号倒推出数据的内容。
Hash函数的类型有很多种,包括SHA224、SHA256、SHA384、SHA512、SHA512/224、SHA512/256等。但是比特币仅选用了SHA256。这个256代表的意思是,数据经过函数运算后得到的结果必须是一个256位的2进制数字。也就是类似这样的结果:“001100……11011”,这其中一共有256位。
在比特币里,为什么要把数据转换成256位的数字呢?其实之所以选择SHA256,主要是为了验证两个文件是否相等。
比如:有一个商业间谍获得了一份重要的商业报告。但是这个间谍害怕这份商业报告在网上传递的过程中被别人截获并进行修改。于是就把这份商业机密进行了处理,通过SHA256运算,生成了一个数值,我们暂且称这个数值为A1。
然后这位间谍就把这份商业报告和A1通过电子邮箱传递了出去,并在邮件里注明了:“为了避免其他人对商业报告进行修改,报告下载完成后,请大家对报告做一次SHA256运算,然后看看这个计算结果和A1是否相符。如果和A1完全一致,那么就意味着这份商业报告没有被其他人动过手脚。如果和A1不同,那么就说明你下载的报告很可能被别人篡改过。”
中本聪在设计比特币的时候之所以选择SHA256,主要是看中了SHA256在验证改动方面有着巨大的优势。因为只要输入数据有微小的区别,通过SHA256计算出来的数值都会有巨大的差距。
比如下面这三句话,原文虽然有微小的不同,但是通过Hash函数处理,就会让SHA256值产生巨大的差异,而且这种差异是毫无规律可循的。
原文1:动静不失,人所易明。
S1: 284c4ddd2e5ef97924cc70e90cd02fd792e3fd62
原文3:动静不失,人所易明
S2:991780940ced6e6f910013f2ba2ac732e23601ef
原文3:动静不失人所易明
S2:62e07ce4d7d529a6268841d521bf882d3b385199
SHA安全加密标准,是至今国际上使用最为广泛的较为安全的压缩算法之一,由美国NIST和NSA两个组织共同开发。此算法于1993年5月11日被美国NIST和NSA设定为加密标准。