Bootstrap

加密哈希函数 区块链基础知识(1)

1.1加密哈希函数

我们需要一个拥有以下三个属性的函数:

  1. 我们可以输入任何一串字符
  2. 输出的结果是固定尺寸的,例如我们设定为256位的一串字符
  3. 这个函数时可以通过有限的步骤计算的

然后,我们就有了一个哈希函数。

 

哈希函数的密码学属性:无碰撞、隐藏、puzzle-friendly

无碰撞:假设我们有一个函数,这个函数一一映射,那我们就能够得到有x≠y且f(x)=f(y),这样的x、y是不存在。但是我们用映射到一定范围的值时,比如256位的字符串,那我们通过计算验证,理论上是可以找到一对x、y使得f(x)=f(y),但是找到的概率非常小,需要尝试2130次,这个函数不能够找到一对x、y的概率是99.8%,因此理论上说sha-256是无碰撞的。

应用:使用哈希值作为文件摘要,例如有一个大文件,通过哈希运算之后获得它的哈希值存储起来,如果有人声称是相同的文件,只需要将文件重新进行计算获得哈希值与存储的值进行比较就能够判断是否为同一份文件。

隐藏:假如一个函数的输出值只有两个1和2,输入值也很少。那么给定一个输出,我们很容易判断是哪个输入得到了该输出结果。在这种情况下我们就需要一个非常随机的x作为输入,该x可能是属于很大的一个集合,让攻击者遍历整个x成为不可能。

解决办法:r是从具有高最小熵的分布中选择的随机值,然后把r放在x前面,记作r|x,那么我们计算f\left ( r|x \right ),就不可能仅通过简单验证得到x了。

应用:承诺

假设桌面上有一个信封,你放进去一个值,这个信封每个人都可以看到。过一会你打开了这个信封,但是这个值是加密的,输入一个值过一会显示信封中真正的信息。

commitment API :

你可以输入一个值获得两个值,一个com(承诺),一个key(密钥)。com作为信封放在桌子上,key当作打开信封的密钥。然后一个人拿着com和key可以进行验证,信息、com、key的一致性。

优点:安全性,只有信封别人不知道信封里的内容始什么

绑定,com、key和信息是一致的。

Puzzle-friendly:就是设计一个数学题,例如一个函数,当函数的输入x是随机适当选择的,使得有人通过不停的计算验证x获得某个特定的输出值y是不可能的。

应用:Search puzzle

 

哈希函数Sha-256:

 

首先在一个值后面加上好多个零使得该值可以分为512bit大小的块,然后执行c运算获得256位的hash值,这个有时间再详细写,过程就是这样。

 

;