区块链的密码学基础

效仿Unyielding_L的杂谈分享,这些都是零碎的知识点。

目录

1 hash加密

1.1 hash的定义

1.1 hash用于检验信息是否篡改

1.1 hash碰撞

1.2 hash的输入取值要求

2 区块链怎么运用hash

2.1 hash只是用于签名而不是用于加密货币


1 hash加密

1.1 hash的定义

hash加密就是指不同长度的明文,转换成具有相同长度不可逆的密文,而加密则是把不同的长度的密文转换成具有不同长度可逆的密文,通常是随这内容长度的增长而增长。

1.1 hash用于检验信息是否篡改

假设此时Unyielding_L和我签订了一份合同,我可以把这一篇合同命名为message,通过hash即H(message)则得到了一个字符串假设是‘ko$no$dio%da’然后过了一段时间,Unyielding_L偷偷把协议内容修改了,变成了message1,但是在H(message1),发现值变成了‘jooooooojo’当检验‘ko$no$dio%da’ 不等于‘jooooooojo’就知道我的合同被篡改了。

1.1 hash碰撞

collision resistance是指明文m1在H(m1)后和明文m2,H(m2)后两者都是相等的hash值,就是指产生了hash冲突。假如我的密钥是‘hello_Unyielding_L’hash后的密文是‘cavvb3aicwej89’假如Unyielding_L可以通过不断尝试不同的字符串,也得到了‘cavvb3aicwej89’那它对应的字符串就是我的明文‘hello_Unyielding_L’得到了我的密钥。

但是现实中是几乎不可能的,产生的几率很小基本上是不可能发生的。

1.2 hash的输入取值要求

hash冲突产生主要是两个方面决定,第一个方面是:以及是hash的输入值。

输入的值应该满足一下两个条件:

  • 输入的取值分布要离散:例如你的输入是1111111111,取值都集中在数字1中,很容易就能破解。假如Unyielding_L银行密码是123456,那我嫁给他以后是不是可以天天收割他的私房钱?
  • 输入的取值范围要广泛:全为数字的密码就0~9十种可能性,但是A~Za~z就有52种可能性, 可能的情况越多就越难猜测。

2 区块链怎么运用hash

在块的头部有一个H(block header)= H(m||nonce),其中nonce是一个随机的字符串,nonce就是相当于合同的签名,m则是合约的内容。我和Unyielding_L有一份合约此时我们的target目标的阈值,记录者(挖矿的矿工)人为地制造hash冲突,得到nonce的值,当H(block header2)<= target 的时候,则这条数据可以成功添加到链上,把nonce的值发布出去,而其他的人想验证这一条合同是不是符合规范只是需要验证一次H(m||nonce)< target即可。因为产生hash是小概率事件,所以制造hash冲突的矿工需要很强的算力,当然也会给矿工奖励。

2.1 hash只是用于签名而不是用于加密货币

鉴于上面的内容,加密货币不加密,每一笔交易都是公开的,我们的账户其实可以比喻成一对公钥和私钥,用私钥进行签名,然后发布自己的公钥,让其他人验证我的签名。


审阅:@ Unyielding_L

以上是我的拙见,有什么意见Thanks♪(・ω・)ノ

发布了45 篇原创文章 · 获赞 74 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览