区块链教程_区块链不可篡改特性_区块链是什么行业

哈希算法是网络交易安全保障基石之一,它是怎么具体运作的,为什么能保证相关数据不被随意篡改呢?在当前这个时间点,对于此我们要推进对其专业特定化原理深刻且全面的解析,在针对一系列相关数据做认真调查和深入研究后,我们会发现在比特币领域呈现出来的具体应用方式和场景。

blocks

哈希算法基础

block-detail

哈希算法具备如此这般重要的核心功能,这个功能能够把任意长度的数据,转变成规定一定的固定长度的具有输出性质的结果,举个例子来说或者比如讲讲,不管输入的是仅仅只有少少短短一个字的一句话,还是篇幅厚页数达到数百数量、页码盈尺叠放的一整部书籍,倘若若假定经历了SHA - 256的运作计算,那么之后接下来从此以后终究势需必须必然会全部全然统统化为恰好十足适宜恰巧是64等数个位的十六般数值模式数字形态,这样这般产生的转换自身有着含有包含具备高度离散的特性特质,也就是说依照理解来讲或可以这样表述,哪怕只仅仅仅仅输入的内容之中间只出现出现差别不一样相差了单独简单区区那么一个字符字码,也是以照样能够确认判断知晓,最终最后最终究竟得到得到得出输出的结果肯定一定必定必然会呈现展示呈现出完全全然截然不同的异样状况形态 。

哈希算法具备单向特性,其体现为无法依照输出朝着反方向去推断输入的内容,就以密码存储的情况来说,网站一般仅仅保存用户所设置密码的哈希值,倘若数据库出现泄露消息的状况,攻击者不能够直接地获取密码的原文,只能借助暴力破解的方式去尝试每一种可能的组合情形,然而这在实际进行操作时所耗费的时间是非常长的。

H("morning") = c7c3169c21f1d92e9577871831d067c8
H("bitcoin") = cd5b1e4947e304476c788cd474fb579a

比特币的双重哈希

H("???????") = c7c3169c21f1d92e9577871831d067c8
H("???????") = cd5b1e4947e304476c788cd474fb579a

有这样一组算法,它名为双重 SHA - 256 算法,该算法通常在比特币系统中被加以运用,比特币系统要处理各种交易数据 ,双重 SHA - 256 演算法在其中被应用,其起到的积极作用是在此过程中接连开展两次 SHA - 256 计算工作 ,如此这般 的设计方案能产生一个显著效果,即有效地防御长度扩展攻击情况 ,这一来能达成一定目标,避免许多不良情形出现 ,这里说的不良情形指的是攻击者借助已获的哈希值,来推算出新数据的哈希这样一类行为的产生 。

H("data-123456") = a76b1fb579a02a476c789d9115d4b201
H("data-ABCDEF") = a76b1fb579a02a476c789d9115d4b201

存在另外一种哈希算法,它是RIPEMD - 160,其用途之一是用于生成比特币地址,刚开始要对公钥展开SHA - 256这一项的处理,然后借助RIPEMD - 160进行计算操作,最终生成的是具备20字节长度的地址,在这种组合运用方式下,不仅充分确保了安全性,而且还同步达到了控制地址长度的目的。

H("hello-1") = 970db54ab8a93b7173cb48f55e67fd2c
H("hello-2") = 8284353b768977f05ac600baad8d3d17

默克尔树结构

MySQL Download MD5

支持比特币区块链开展交易完整性高效验证的核心数据结构是默克尔树,它计算时,是把多个交易哈希,按照逐层配对的方式来进行,如此计算最后会生成唯一的根哈希,这个根哈希被记载在区块头当中,进而成为整个区块交易方面充当数字指纹的物体。

若是区块之中收纳着奇数个数目的交易,这个系统就会自动且自发地去实行复制那最后一个交易哈希这般的举措,以此办法来凑集成与之相对的成对状态,并且这种精心的系统设计能够十足周到细致有效地确保,不管交易在此的整体数量呈现出的局面是怎样地超乎寻常地多,又或者是怎样地非常特别特别地少,全都能够顺顺利利好顺利利成功计算得出完整完备统一的根哈希,若有任何一个交易产生了哪怕是极其细微微小的改动,一定会毫不出现任何例外状况地使得最终的根哈希在整体上完全彻底被变更改变,进而就如此必然地会即刻马上立即触发验证失败的结果 。

Verify Hash

区块哈希链

指针,它指向存在于前一个区块里的哈希,这些指针含在不可断裂链条的每个比特币区块里。之后,操作的是在对区块头部关联信息展开双重SHA - 256计算,由此得出名为区块哈希的信息值。最后的HASH对象啊,得呈现这般特定的难度要求后,矿工进行数不清好多、超级一大堆的计算才可成功把它搞到手 。

const
    bitcoin = require('bitcoinjs-lib'),
    createHash = require('create-hash');
function standardHash(name, data) {
    let h = createHash(name);
    return h.update(data).digest();
}
function hash160(data) {
    let h1 = standardHash('sha256', data);
    let h2 = standardHash('ripemd160', h1);
    return h2;
}
function hash256(data) {
    let h1 = standardHash('sha256', data);
    let h2 = standardHash('sha256', h1);
    return h2;
}
let s = 'bitcoin is awesome';
console.log('ripemd160 = ' + standardHash('ripemd160', s).toString('hex'));
console.log('  hash160 = ' + hash160(s).toString('hex'));
console.log('   sha256 = ' + standardHash('sha256', s).toString('hex'));
console.log('  hash256 = ' + hash256(s).toString('hex'));

创世区块是链上首个区块,它的前置哈希被设置成全零状态。后续的每个新区块都会把前一区块的哈希值包含进去。如此设计使得修改历史区块时,得把所有后续区块重新计算完才行。所以,在实际当中几乎是没有实现可能的 。

防篡改机制

Merkle Hash

某块处交易正被攻击者尝试修改,在此种情形下会影响该区块的默克尔根哈希变得不同,也会使相链接的后续新区块受波及起变化,若把经修改的某个这种区块确定想变成可接纳的版本,攻击者就得重新计算跟该当前区块还有一串后续多数区块有关系的工作量用以成为那个证明。 , 。 用以成为那个证明。 , 。 证明了此事 。 , 。 证明 。末尾标记不能忘 。 , 。末尾标记不能忘 。 , 通过工作量计算得出相关标记得被重视 证: 明 最后这一串是为了凑字数强行加的话尽量忽略别当真哈主要还是前面那些拗口表达重不重要您瞧准最后标点该留啥记得给留了保证准确最后务必重视末尾得有标点不能忘记标点为句号得用句号可别忘记标点好记得留标点

因为比特币全网有着庞大算力,所以要展开这般攻击,就要掌控超过全网百分之五十一的计算能力,但比特币网络算力截至二零二三年已超出四百EH/s,发起这种攻击所需资源,连同成本,已然达到天文数字的级别 。

a1 = dhash(tx1)
a2 = dhash(tx2)
a3 = dhash(tx3)
a4 = dhash(tx4)

实际应用价值

数字货币领域中,哈希算法成功被应用,哈希算法为金融交易安全设立了新准则,比特币交易借由哈希算法获取了独特专有的身份标识,任何篡改行为会马上被网络节点察觉出来,如此机制确保了交易记录具永久性及不可否认性。

       ┌───────────────┐               ┌───────────────┐
       │b1=dhash(a1+a2)│               │b2=dhash(a3+a4)│
       └───────────────┘               └───────────────┘
                                              
       ┌───────┴───────┐               ┌───────┴───────┐
       │               │               │               │
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│a1=dhash(tx1)│ │a2=dhash(tx2)│ │a3=dhash(tx3)│ │a4=dhash(tx4)│
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘

哈希算法,除了应用于可加密货币领域之外,在文件校验领域广泛应用,在数字签名领域广泛应用,尤其在诸如数据去重这类领域广泛施展,在下载软件时,能通过比较下载文件的哈希值与官方提供的哈希值一致与否来完成对文件是否被改过作出确认,进而完成以这一确认来验证文件完整性作出相关判断 。

使用各种网络服务时,是否遇到因处在数据安全方面出现问题而导致的困扰,欢迎在评论区分享经历,若感觉这段文字有援助作用,请点赞支持,还可分享给更多朋友。

                     ┌───────────────────┐
                     │merkle=dhash(b1+b2)│
                     └───────────────────┘
                               
               ┌───────────────┴───────────────┐
               │                               │
       ┌───────────────┐               ┌───────────────┐
       │b1=dhash(a1+a2)│               │b2=dhash(a3+a4)│
       └───────────────┘               └───────────────┘
                                              
       ┌───────┴───────┐               ┌───────┴───────┐
       │               │               │               │
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│a1=dhash(tx1)│ │a2=dhash(tx2)│ │a3=dhash(tx3)│ │a4=dhash(tx4)│
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘