区块链学习笔记(三)——第一章 密码学及加密货币概念

2018-04-26  本文已影响0人  Roy_Mo

加密数字货币与法定货币不同在于,其安全规则需要完全通过技术手段实现,而非依赖中央机构

1.1. 哈希函数

哈希函数三个特性:

  1. 任意大小字符串均可作为输入;
  2. 产生固定大小输出;
  3. 能进行有效计算,即对应n位字符串,其哈希值计算复杂度为$O(n)$。

为使得哈希函数达到密码安全,要求其具有以下三个附加特性:

  1. 碰撞阻力(collision-resistance)
  2. 隐秘性(hiding)
  3. 谜题友好(puzzle-friendliness)

碰撞阻力:

如果无法找到两个值,$x$和$y$,$x \neq y$,而$H(x)=H(y)$,则称哈希函数$H$具有碰撞阻力。

这里写图片描述

P.s:根据鸽巢原理可知,必然有大量可能输入被映射到任意特定输出。因此,碰撞必然存在,但我们只需要保证其在概率上是难以实现的即可


隐秘性:

哈希函数$H$具有隐秘性,如果:当其输入$r$选自一个高阶最小熵(high min-entroy)的概率分布,在给定$H(r‖x)$条件下来确定$x$是不可行的。

P.s:在信息论中,最小熵 是用于测试结果可预测性的手段,而高阶最小熵这个概念比较 直观描述了分布(如随机变量)的分散程度。具体来说,在从这样分布中取样时,我们将 无法判定取样的倾向。

简而言之,隐秘性保证:如果我们仅仅知道哈希函数的输出$y=H(x)$,我们没有可行的办法算出输入值x。


谜题友好:

直觉上,谜题友好可以这样解释,如果有一个人想找到y值所对应的输入,假定在输 入集合中,有一部分是非常随机的,那么他将非常难以求得y值对应的输入。


安全哈希算法

SHA-256是一个主要被比特币世界采用,并且效果还很不错的哈希函数。

MD变换:只要我们能建立一 个用于固定长度输入的哈希函数,然后通过一般方法,就可以将接受固定长度的哈希函数 转化为可接受任意长度输入的哈希函数。

压缩函数:这种基础型,可用于固定长度,具备碰撞阻力的哈希函数被称为是压缩函数 (compression function)。经过验证,如果基本压缩函数具有碰撞阻力的特性,那么经过转换而生成的 哈希函数也具有碰撞阻力


1.2 哈希指针及数据结构

哈希指针:哈希指针是一个指向数据存储位 置及其位置数据的哈希值的指针。一个普通的指针可以告诉你数据存储的位置,哈希指针 不但可以告诉你数据存储的位置,并且还可以给你一种方式,让你验证数据没有被篡改过

哈希指针

区块链

我们通过哈希指针构建一个链表,我们将这个数据结构称为区块链 (block chain)

区块链

在区块链中,上一个区块指针被置换为哈希指针。因此,每个区块不仅能 告诉我们上一个区块的值在哪里,还包含了该值的摘要,使我们能够验证那个值没有改 变。我们存储链表头部(the head of list),即一个普通的哈希指针指向最近使用的数据区块。

创世区块:我们可以搭建一个包含很多区块的区块链网络,链表头部的 哈希指针被称作创世区块 (genesis block)。

防篡改日志

梅克尔树:

我们可以用哈希指针建立的有用的数据结构是二叉树。使用哈希指针的二叉树 也叫作梅克尔树 (Merkle trees),以其发明者拉尔夫·梅克尔(Ralph Merkle)的名字命名。

梅克尔树 这里写图片描述

类似于区块链,同样地仅仅通过记住顶部的哈希指针,任何企图篡改任何数据的行为都会被检测到。

隶属证明
2. 非隶属证明:一个排序梅克尔树是把底层的数据通过某些排序得到的梅克尔树,这里排序规则可以 是字母表排序、词典排序、数字化排序,或者其他约定的排序方式。有了排序梅克尔树,我们可以在一个对数复杂度的条件下验证某一个数据区块并非来 自某梅克尔树。也就是说,我们可以证明某个特定区块不属于梅克尔树,而我们只是简单 通过展示被验证区块之前的区块路径,以及被验证区块之后的区块路径,就可以达到目的。
  eg:如果之前、之后两个区块在树上是连续的,那么这说明了被验证区块与该梅克尔树之 间是非隶属关系。因为被验证区块确实隶属于梅克尔树,它需要在两个条目之间,而如果 两个条目是连续的话,二者之间则并没有空间。

1.3 数字签名

预期:
第一,只有你可以制作你自己的签名,但任何看到它的人都可以验证其有效性;
第二,我们希望签名只与某一特定文件发生联系,因此该签名不能用于表明你同意或 支持另一份不同的文件。

方案——由以下三个算法组成:

要求两个性质有效:

实践考量

  1. 随机性的良好来源很重要;
  2. 可以对于哈希指针进行签署。如果你签署了哈希指 针,那么该签名覆盖(或者说保护)整个结构——这不仅仅是哈希指针本身,还包括哈希 指针指向的整个区块链。比如,如果签署了区块链末尾的哈希指针,其结果就是你有效地 数字签署了整条区块链。

椭圆曲线数字签名算法
比特币使用的数字签名方案叫作椭圆曲线数字签名 算法(ECDSA) 。ECDSA为美国政府的标准,是早前DSA算法利用了椭圆曲线的升 级版。这些算法经过了数年的细致密码分析,且被普遍认为是安全的。


1.4 公钥即身份

  1. 将公钥视为身份的一个结果是,你可以随时制定新的身份——你可以简单通过数字签 名方案中的generateKeys程序,生成新的密钥对sk和pk。pk是你可以使用的新的公共身 份,sk是相应的密钥,只有你自己知道并可以让你代表身份为pk发声。在实践中,你可能 会使用pk的哈希作为你的身份,这是因为公钥很大。如果是这样的话,为了验证消息来自 你的身份,人们会需要验证:(1)你的身份确实是pk的哈希;(2)信息能经过公钥pk验 证。
  2. 比特币对待身份的方式:去中心化身份管理——这些身份在 比特币语言中被称为地址。你可以常常听到地址这个词,用于比特币或加密货币相关的内 容中,而地址其实就是公钥的哈希值。作为去中心化身份管理方案的一部分,它就是某人 凭空捏造的一个身份而已。

两种简单的加密货币

上一篇 下一篇

猜你喜欢

热点阅读