主页 > 以太坊钱包imtoken安装 > 比特币中的密码学 - 哈希函数

比特币中的密码学 - 哈希函数

以太坊钱包imtoken安装 2023-01-17 02:16:09

最近重读了《区块链-技术驱动金融》一书,想借此机会做个记录,分享一下比特币使用的密码学知识。

为了避免所谓的通货膨胀,每种货币的供应量在发行时都受到控制,并且需要有安全机制来避免欺诈。就实物货币,即法定货币而言,货币的发行由中央银行等机构控制,通过添加防伪标记增强货币的安全性。但是没有密闭的墙,钱也不是不可伪造的,对吧?

比特币等加密数字货币的发行量最初设定为 2100 万枚。自2009年创世区块诞生以来比特币哈稀值对比,每个区块产生50个新比特币,大约每四年减半一次,33个四年减半后不会再产生新比特币。它的安全性是由密码学提供的。比特币安全机制的建立只用到了少量的理论知识。本文主要介绍哈希算法(Hash)和数字签名(Digital Signature)技术。

哈希函数

这部分我主要讲哈希函数的特点,然后讲SHA-256的实现,最后讲区块链应用中的哈希指针。

哈希函数是一种数学函数,具有以下三个基本属性:

加密哈希函数的三个附加属性:

首先对哈希函数的三个附加属性进行了一些详细的描述。

防撞

简单理解,碰撞阻力越大,就意味着在一定时间内不可能找到两个不同的输入输出相同的输出,反之亦然。一个安全的散列函数保证没有两个不同的输入在很长一段时间内具有相同的输出。在这里,很长一段时间可以理解为世界上所有计算机的计算能力被耗尽,世界被毁灭的时间长度。常见的加密哈希函数有 MD5(已废弃)、SHA-1、SHA-2、SHA-256 等。

值得注意的是,世界上没有具有防碰撞特性的哈希函数,因为哈希函数的基本特性保证了输入空间远大于输出空间,所以根据抽屉原理,必须发生碰撞。只是有些阻力大,有些阻力小。

假设哈希函数H具有碰撞属性,x和y是两个不同的输入,也可以假设H(x)和H(y)也不同。

假设 Alice 上传了一个非常大的文件,并且想要确认下载的文件和她上传的文件完全一样,Alice 只需要比较上传文件的哈希值和下载文件的哈希值保持不变 就是这样。因为一旦文件在传输过程中或云存储过程中被恶意修改,文件的hash值必然会发生变化,从而导致上传文件和下载文件的hash值不同。

隐藏

一个简单的理解就是当哈希函数y=H(x)的输出已知时,输入值x是无法通过可行计算得到的。它在数字签名中的应用非常相似,在下一章数字签名的介绍中会提到。

解谜友好

假设散列函数对谜题友好,这意味着没有解决谜题的策略,只能随机尝试更好地键入。

安全哈希算法

安全散列算法 256)。其核心思想是将一个源文件切割成n个512位的信息区块(小于512位用零填充),然后通过更新函数传入一个256位和512位的值作为输入,输出一个 256 位的值。经过n次更新操作,对源文件进行加密和散列,生成最终的256位值,工作过程如下图所示。 init值由官方文档给出并确定。

alt text

这里涉及到将接受固定长度的哈希函数更新转换为接受任意长度输入的哈希函数。我们把这个转换过程称为MD变换(Merkle-Damgard Transform)

哈希指针和数据结构

哈希指针和数据结构

p>

哈希指针是指向纸箱数据的存储位置及其位置数据哈希值的指针,可以用下图表示

alt text

area 区块链是一个使用哈希指针构造的链表。在区块链中,每个区块不仅包含该区块的数据,还包含一个哈希指针,它告诉我们前一个区块的值,该值的哈希值可以用下图表示。

alt text

有一个关于创世区块消息的小故事,中本聪广为流传 在创世区块的coinbase上写的“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”正是标题当天的《泰晤士报》头版文章。

那么区块链以哈希指针的形式构建有什么好处呢?最明显的应用是“防篡改日志”。也就是说,我们要构建一个存储大量数据的日志数据结构,这样我们就可以将数据附加到日志的末尾。但是如果有人篡改了日志前面的数据,我们可以检测到.

假设黑客想要篡改第k个区块链的交易,会导致第k+1个区块的H(k)错误,所以为了掩盖,第k+1个区块的值有待修改,以此类推比特币哈稀值对比,会继续到最近的块,也就是链表的头,也就是图中最右边的H(·),只要我们加上链表,如果是链表的头区块链被保存在对手无法改变的地方,那么这个策略一定会失败。因此,哈希指针技术保证了区块链交易历史的安全。下图可以帮助你理解。

alt text

Creative Commons License

本作品已获得 CC A-S <@k 6@>0 国际许可。