SHA256在比特币中的应用(一)
阿牛哥 Lv4

作为第一款加密货币,比特币发明于2008年。我们把这类货币称为加密货币,是因为比特币的核心技术是区块链,而区块链又充分利用了各种加密算法,今天我们来看看其中之一——SHA256算法。

SHA256

什么是SHA256?

SHA是Secure Hash Algorithm(安全哈希算法)的缩写。哈希算法计算机中一种常用的算法,它能将一段输入的数据转换成一段特定输出。

举个例子,h函数能根据输入生成某个字符串

1
2
h('好好学习') --> 686BFE92
h('好好学习,天天向上') --> 254141A8

在应用领域,最广泛使用的哈希函数有MD5、SHA1、SHA-2等等。

SHA-2算法经过精心设计,根据输出结果位数的不同可以有SHA224、SHA256、SHA512等等。

在中本聪发明比特币的2008年,属于SHA-2系列的SHA256是相当安全的。在当时,其他哈希算法如MD5, SHA-1均已找到破解方法。

SHA256的特点

  1. 输出长度固定——256位

  2. 确定性——完全相同的两组输入会产生相同的输出

  3. 不可逆

  4. 输入稍作改变,输出完全不同

  5. 抗碰撞

输出长度固定

不管什么内容的输入,也不管输入的数据长短,SHA256总是输出固定的256位比特

确定性

当对相同的内容做哈希运算时,得到的结果总是一样的,只要内容没变,结果就不会变。

1
2
3
4
5
6
7
8
9
10

$ sha256sum <<EOF
secure hash
EOF
45ee5d6bdb02700b0e4381f7eaef12ec6eef707d55ca13eed5012876c869dd5c *-

$ echo 'secure hash' > h.txt
$ sha256sum h.txt
45ee5d6bdb02700b0e4381f7eaef12ec6eef707d55ca13eed5012876c869dd5c

不可逆

知道了输出,是是没办法反推输入的。这一点很好理解,因为不管什么输入都生成固定长度的输出,显然中间运算过程是丢掉了一些信息的。

输入稍作改变,输出完全不同

1
2
3
4
5
6
7
8
9
好好学习,天天向上!
SHA256: 9a2b49951da2b01c2e64b996db5ba778148e69fd5e4c5af31da313df57c0c0d9

好好学习,天天向上!
SHA256: 7d14b42adb984a4e18bf900ed97cc2d1f222fa794e8f444452d4d0410f7ab6b6

好好学习 天天向上
SHA256: c213bcc321f542c6c9ae5db361b88938782ccf03d808f0946ad9b4ad15ca4bc8

抗碰撞

碰撞是指两个不同的输入经过SHA256运算后产生了相同的输出。

理论上说,哈希函数碰撞是会发生的,但要找到却很难,到今天也没找到产生碰撞的方法。

SHA256的一些应用场景

SHA256有什么用呢?基于上述特点,可以做这些事情:

  • 验证文件完整性

我们从网上下载文件,有的网页会提供sha256校验。对一个文件做sha256运算后,只要文件不变,其输出结果也不会改变,假如你下载到的文件哈希值发生了变化,那么肯定是下载有误,或者文件已被篡改。

同理,我们有时候要传一个大文件给别人,也可以把sha256地哈希值发给对方,让他在下载后校验。

  • 用户密码保护

网站在保存用户登录密码时,出于对用户密码安全的考虑,是不会以明文直接存储在数据库中的。当用户输入密码后,网站只存储密码的sha256哈希值。

即使网站拥有者也无法根据哈希值反推用户密码,只有用户自己知道密码。当用户输入密码登录时,再次计算用户输入的哈希值和数据库中的值比对。

这是由SHA256的确定性和不可逆性决定的。

  • 云盘文件秒传

当我们上传大文件到云盘,云盘会在上传前计算要上传文件的sha256值,如果云端已经有相同哈希值的文件存在,就不用再次上传了。

  • 数字信封

这是个有意思的应用,假如你是名人,你预言明天哪个股票会涨,为了向别人证明你的预言准确,而又不能因为今天公布出去而影响明天的股价,那么你可以将预言文本计算SHA256,把哈希值在今天公布出去。等明天收盘后,你再公布你的预言。任何人都可以对你的预言计算SHA256来比对。

写在最后

本文介绍了SHA256的概念、特点和应用,下一篇将介绍比特币是如何应用SHA256的。