区块链学习笔记(一)——加密货币简介

avatar admin 2022-02-15 20:16 78次浏览 评论已关闭

原文:https://www.coursera.org/learn/cryptocurrency/home/week/1

1.1 密码学中的哈希函数 (Cryptographic Hash function)

哈希函数三个一般特性:

  • 输入为任意长度的字符串 (takes any string as input)
  • 输出为固定长度 (fixed-size output)

固定长度可以设置为任意值。

比特币使用 256 位。

  • 有效计算 (efficiently computable)

对于输入的字符串,能在合理的时间内计算出其输出。

跟安全相关的特性(Security Properties):

  • 碰撞阻力 (collision free)

沒有人能找出 hash collision 的可能。Collision 肯定存在,也就是说,没有完美的哈希函数,在现实场景中,我们只需要保证“没有人能够通过计算来找到碰撞”。

在此前提下,对于确定的哈希函数,如果输出相同,则可以认为输入也相同。

应用场景:通过信息摘要进行大文件的对比。

  • 隐蔽性 (hiding)

如果输入都来自一个比较小的集合,那他人几乎肯定可以通过枚举计算然后与输出对比的方式来确定输入,所以输入必须分散。

通过将不分散的输入与另外一个分散的输入结合而产生的输入,可以实现隐蔽性。比如说将输入扩大为 256 位的随机字符串

应用场景:承诺(Commitment)。将 msg 和随机的 key 输入进承诺函数(commit()),得到输出 commitment,并公布。在之后需要公布真正的 msg 时,只要将 key 一起公布,便可以验证之前公布的 msg。这个过程如同:将要公布的消息写下来提前放到信封中,然后在你公布信息之后,可以通过拆开信封来验证你公布的信息是否与之前一样。当然,为了避免被暴力破解,msg 需要与随机 key 结合后,进行一次哈希。

  • 谜题友好 (puzzle-friendly)

可以理解为,具备该特性的哈希函数,只能穷举尝试输入来获得解,没有其他更好的策略。

安全哈希算法 (Secure Hash Algorithm 256,简称 SHA-256)

比特币使用 SHA-256 进行加密。

区块链 (Block chain)

使用哈希指针可以构建如下的数据结构:

Hash-04

可以在 O(log n) 的时间内验证梅克尔树的隶属关系。

可以在 O(log n) 的时间内验证经过已经规则排序之后的梅克尔树的非隶属关系。

1.3 数字签名 (Digital Signatures)

签名目的

  1. 只有你能签,但别人都能验证。
  2. 签名只能用于指定文档,不能通过剪切复制到其他文档。

签名方案步骤

  1. 生成 sk 和 pk,sk 用于加密签名,pk 用于公开验证。如下:

高飞币 (GoofyCoin)

第一个规则:Goofy 可随时创建新币。

Goofy 创造一枚唯一编号的货币,使用私钥对其进行数字签名。其他人都可以验证签名的有效性。

第二个规则:拥有此币的人可以转给他人。

这个过程需要创造一个声明,表示“将此币支付给 Alice”:“此币”即哈希指针,指向前一个区块 block,也就是“Goofy 创造钱币”;“Alice”即身份,也就是公钥。Goofy 会将这个信息和哈希指针进行签名,用来证明这个币的确已经转给了 Alice。

Hash-08

Alice 也可以用同样的方式新增一个 block,对信息和哈希指针签名,将此币转给 Bob。

Hash-09

这样会有双重支付 (Double-spending attack) 的问题,Alice 可以同时新增另一个 block,声明将此币转给了 Chuck。

Hash-10

守财奴币 (ScroogeCoin)

守财奴币新增了标识交易顺序的 id,守财奴 Scrooge 将公布所有的交易的记录。通过区块链的数据结构,只需要两个人通过对比各自最后获取到的哈希指针便可以验证守财奴有没有篡改过交易记录。

Hash-11

守财奴币中的交易种类:

1.造币,CreateCoins。在所有人都认定守财奴造币是合法的这一前提下,每个造币交易可以创建多个币。每个币都会有序号。

Hash-12

2.支付,PayCoins。过程为,消耗币的同时产生同价值的币,执行支付的人会对其进行签名,表明同意此交易。每次支付都需要一次签名。

满足以下规则被认定交易有效:

  • 被消耗的币为之前造币交易中创造出来的币。
  • 被消耗的币之前没有被交易过。
  • 产生币的总量等于消耗币的总量。
  • 被消耗的币被其所有者签名认同。

Hash-13

注意此过程中币是不可变的,只能被消耗和创造。支付的过程是消耗旧币,创造新币,声明他人拥有新币的过程。这个特性是理解比特币的支付的关键。

之后,守财奴会认定交易有效,会将交易添加到区块链并公布。

这样会使得守财奴权力过大,出现中心化的问题。

发表评论
请先登录后再评论~