密码学及加密货币概述

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hhhhhsw/article/details/82952095

1. 密码学哈希函数

  • 特性1:碰撞阻力

定义:如果无法找到两个值,x和y,x≠y,使得H(x)= H(y),则称哈希函数H具有碰
撞阻力。(这里指的是无法找到,不代表不存在)。

应用:可用于判断文件是否被修改。由于具有碰撞阻力,被修改后的文件的哈希值肯定不等于未被修改的文件的哈希值。

  • 特性2:隐秘性

定义:无法通过哈希函数的输出结果来确定输入。
已知 H(nonce||msg),没有可行方法找到msg。(nonce代表随机值,在密码学中术语中nonce指该值只能使用一次;||表示把一系列事件、事情联系起来)

  • 特性3:谜题友好

定义:对于一个n位输出值y,假定k选自高阶最小熵分布,如果无法找到一个可行的方法,在比2^n小很多时间内找到x,保证H(k||x)= y成立,则称哈希函数H为谜题友好。

应用:搜索谜题,没有一个解决策略会比随机地尝试x取值更好。比特币挖矿也是这种思路。

  • 安全哈希算法SHA - 256

SHA - 256 是采用了MD(Merkle-Damgard)变换的哈希函数,将只接受固定长度的哈希函数转化为可接受任意长度输入的哈希函数。

MD变换:如果压缩函数的输入为m位,输出为n位。先将输入的字符串(可以为任意长度)分为长度位m-n的区块,将每个区块与之前的区块的输出一起代入压缩函数,则输入长度为(m-n)+n ,压缩后输出为n位。对于第一个区块,我们需要选取一个初始向量。

如图为SAH-256函数利用了一个输入为768位、输出为512位的压缩函数来将一个输入(可为任意长度)最终压缩为256位的过程。
在这里插入图片描述

2. 哈希指针及数据结构

定义:哈希指针是一个指向数据存储位置及其位置数据的哈希值的指针。哈希指针不但可以告诉你数据存储的位置,还可以验证数据是否被篡改过。

  • 区块链:通过哈希指针而不是普通指针构建的一个链表。
    如果第k个区块的数据被修改,为了不被发发现,需要继续修改第K+1块的哈希指针,如此往复。所以我们只需要记住最新的哈希指针,就可以确保整条链不被篡改。
    在这里插入图片描述

  • 梅克尔树:使用哈希指针的二叉树
    将数据区块两两分组,然后为每一组建立一个拥有两个哈希指针的数据结构,每个指针对应一个区块,这些数据结构就构成了数的下一个层次,以此类推,最终我们得到树根节点。我们只要记住树根节点的哈希指针就可以确保数据不被篡改。
    在这里插入图片描述

3. 数字签名

  • 特性1:只有你可以制作你自己的签名,但任何看到它的人都可以验证其有效性
  • 特性2:一个签名只与一份特定的文件发生联系,这个签名不可以用于其他文件,即不同文件对应不同签名。

算法:

  • (sk,pk):=generateKeys(keysize) 通过generateKeys来产生私钥sk和公钥pk。私钥被安全保存,用于签名;公钥是人人都可以找到的,用于验证签名。

  • sig:=sign(sk,message)签名过程就是把一段消息和私钥作为输入,输出即是签名。

  • isValid:=verify(pk,message,sig)验证过程就是把一段消息和签名和公钥作为输入,返回结果为真则证明签名属实,反之。

由于在实践中你能够签署的信息大小是有限制的,所以:

  • 可以对信息的哈希值进行签署

  • 可以对哈希指针进行签署

比特币使用的数字签名方案是椭圆曲线数字签名算法(ECDSA),参数如下
在这里插入图片描述

4. 高飞币

  • 规则1:指定高飞可以随时创建新币,且这些新创建的币都属于他
  • 规则2:拥有此币的人可以将其转给其他人

高飞造币时用私钥进行签名,代表这个币是有效币。
高飞把此币转移给爱丽丝时,用私钥签署“将此币转移给爱丽丝”的声明,这代表这个交易确实存在,爱丽丝拥有了这个币。
爱丽丝可以将此币转移给鲍勃,所以她需要签署一个“将此币转移给鲍勃”的声明。鲍勃可以通过哈希指针来追溯到这个币是由高飞创建,并且验证过程中的所有签名来确定这个币的有效性。
在这里插入图片描述

但这里有一个致命的安全隐患:双重支付。爱丽丝再将此币转移给鲍勃之后可以再将此币转移给查克,鲍勃和查克在追溯这个币的有效性时,都是从上图中支付给爱丽丝的公钥的哈希指针开始验证的,所以他们两都认为这个币有效。

5. 财奴币

一个叫财奴的指定实体将负责公布包含所有发生过的交易历史纪录的仅增账目,账目的仅增特性保证了这个账目的任何数据都会永久保留下来,不会被删除。为执行这个仅增功能,财奴可以建立一个区块链,并且财奴的数字签名是针对最后一个哈希指针。

(1)造币

不同于高飞币,财奴币可以在一次交易中创建多个币量。

在这里插入图片描述

(2)付币

只有当以下四个条件为真,付币交易有效。

  • 被消耗的币为有效货币,即它们是在之前的交易创建的
  • 被消耗的币没有在之前的某交易中被消耗掉。就是说,本次交易不是双重支付
  • 本次交易产生的币值量等于消耗的币值量,就是说只有财奴才可以创建新币
  • 本次交易被消耗的所有币都有其所有者的有效签署

在这里插入图片描述
在这个系统中,最大的问题就是中心化,财奴的权利过大。

展开阅读全文

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