10. 哈希函数:实现不可篡改的第一步

理解比特币其实并不需要了解太多的技术概念,只需要知道两个技术:哈希函数、非对称加密。其他概念都可以通过逻辑推导得出,所以非技术出身的读者也能完全理解。

这一章来讲解一个极为重要的技术概念——哈希函数。理解起来非常简单。

计算机语言中的函数,和数学上的函数类似,就是输入一个数据,然后输出一个结果。

哈希函数是一类函数,它们的效果是,输入任意数据(可以是文件),输出一个长度固定的,但非常长的,看上去像乱码的整数,一般把输出值称为哈希值(甚至简称为“哈希”)。这时,哪怕只对输入的原始数据做很小的改动,哈希值都会变得面目全非。你可以在这个网站使用各种哈希函数做些尝试: http://www.jsons.cn/sha/ 。

我们拿比特币所采用的 SHA256 哈希函数举例。下面两段文字的哈希值不同,所以可以得知它们的内容一定有差异,你能找到差异吗?

哈希函数的输出值毫无规律可循。而且无法从输出值反推输入值,因为信息量损失了。

比特币使用的 SHA256 会输出长度 256 位的二进制数,也就是 64 位十六进制数。这个数非常长,有 2^256 种可能性。如果你想找到两个不同的输入值,让它们有相同的输出值,这种可能性基本为零。

说到这,你应该已经意识到了哈希函数的用途。我们可以将一段很长的信息进行哈希,然后拿住输出的哈希值,以后一旦这段信息发生变化,它的哈希值也会变,我们就可以很快做个对比,发现篡改。

回到本书开头的具体需求:A 向 B 提交一条数据并声明其诞生时间,希望 B 相信这条数据没有被篡改过。有了哈希函数,A 只要在数据诞生的时候,把哈希值发送给 B,以后任何时间把数据给 B,B 都可以相信这段数据没有被篡改。

当然,你也发现了,仅仅这样的功能,并不是很实用。现代社会中,我们经常要跟素未谋面的人打交道,不可能在很久以前就收集到对方数据的哈希值。

可见,“不可篡改”有不同程度之分。我们的最终目标是极致的不可篡改,是可以让任何陌生人立刻相信一段数据没有被篡改,还要足够便宜。可见,我们离目标还有很长的距离。后面的每一章,我们都会向这个目标迈进一步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值