我的微信学习 / 区块链 / 虾说区块链-82-blockchain笔记

0 0

   

虾说区块链-82-blockchain笔记

2018-02-07  我的微信...

    笔者自己总结整理的相关blockchain笔记,后续增加,有兴趣可联系我一块整理,不局限在这个公众号发布。

Blockchain笔记

    Blockchain,相关密码学、分布式系统、共识算法、P2P网络等之前技术结合的新型技术架构。

Bitcoin-区块链的第一个应用

    Bitcoin是在2008年由署名Satoshi Nakamoto(中本聪或者中本哲也)发明的,他出版了一篇题为“Bitcoin:A Peer-to-Peer Electronic CashSystem”的论文。

    论文链接:https://wenku.baidu.com/view/c62c067cb307e87101f69642.html

Nakamoto结合了诸如b-money和HashCash等先前的发明,创建了一个完全去中心化的电子现金系统,它不依赖中央机构进行货币发行或结算和验证交易。使用分布式系统架构加工作量证明机制(POW)每平均10分钟通过工作量证明机制来计算随机数,竞争生成区块,交易数据打包区块中。实现分布式网络达成关于交易状态的共识。解决了双花问题,和传统解决双花问题需要中心化系统机构来解决解决不同,实现一种分布式的账本模式,bitcoin系统也被称为全网分布式数据库或者分布式统一账本。网络中每个节点都可选择保存一份全网数据副本。

2009年区块链bitcoin网络出现,创世区块中的coinbase写下:“The Times 03/Jan/2009 Chancelloron brink of second bailout for banks”,中本聪和比特币的奇迹开始于2009-01-03。创世区块如图:


  • Bitcoin区块相关信息查询:https://blockexplorer.com/

  • bitcoin单位数量:最小单位为“聪”,1聪=0.00000001比特币,1Satoshi = 0.00000001比特币,bitcoin发行总量为2100个。

  • 数字货币:完全虚拟,没有实体,一串字符串表示。

  • bitcoin:bitcoin也可理解为是一种协议,对P2P网络和分布式计算存储一种共识协议。

Blockchain基础知识

相关术语

l  区块链:Blockchain,分布式存储、加密算法、共识机制、P2P传输等计算机技术结合的新型应用模式。

l  区块:Block,用于记录区块链系统中数据的存储。

l  链:chain,区块头中通过引用哈希值链接。

l  区块链服务:BAAS,blockchain as a service,区块链即服务。

l  分布式:Decentralized,不依赖中心服务器,分布的计算机资源进行计算处理的模式。

l  共识机制:consensus,区块链中事务达成的分布式共识算法。

l  P2P传输:peer-to-peer P2P,对等互联网网络技术。

l  加密算法:针对数据加密使其成为不可读的一段密文,通过密钥加解密。

l  哈希算法:将任意长度的二进制值映射为较短固定长度的二进制值的一种算法。

l  对称加密:加密解密使用同一密钥。

l  非对称加密:加解密通过公钥私钥,配对使用。

l  公有链:PublicBlockChains,公共网络中任何个人团体接入,任何节点均可参与共识过程。

l  联盟链:ConsortiumBlockChains,共识过程由预选节点控制,一般为各企业机构互联形成。

l  私有链:privateBlockChains,私有区块链,数据记录在单一组织机构中,分权限对外开放,一般是单一企业机构构建。

l  图灵完备:turing complete图灵完备是指计算机中一切计算的问题都可以计算,这样的虚拟机或者编程语言称为图灵完备。

l  智能合约:smart contract,部署在区块链系统中,一段合约代码,或一套以数字形式定义的承诺,包括合约参与方可以在其上执行承诺的协议。

l  匿名:unlinkability,中文解释为无关联性。

l  软分叉:当新共识规则发布后,没有升级的节点会因为不知道新共识规则下,而生产不合法的区块,就会产生临时性分叉。

l  硬分叉:区块链发生永久性分歧,在新共识规则发布后,部分没有升级的节点无法验证已经升级的节点生产的区块,产生硬分叉。

l  EVM:以太坊虚拟机。

l  POW:proof of work,工作量证明。

l  POS:proof of stake,权益证明。

l  DPOS:delegate proof of stake,股份授权证明。

l  PBFT:practical Byzantine fault tolerance,实用拜占庭容错。

l  ECC:椭圆加密算法,一种公钥加密算法。

l  SHA:secure hash algorithm,安全散列算法,NIST发布一系列密码散列函数。

l  SPV:Simplified Payment Verification,简单支付验证。

l  Merkletree:梅克尔树,merkle tree是计算机数据结构中的一种树。

l  DAG:计算机数据结构中有向无环图。

l  DAPP:去中心化应用。

l  Doublespending:双重支付,也称为“双花”。

l  BIP:bitcoin improvement proposals,bitcoin改进协议。

密码学相关

密码学历史

密码经常能够听到,密码学应用也极为广泛,简述密码学发展的三个阶段:

古典密码学:古典密码学诞生至少有两三千年的历史了,这个阶段核心思想为:置换(permutation),说起古典密码最经典的两个例子:

斯巴达人的塞塔式密码:把一个长条羊皮螺旋地斜着绕在一个多棱棒上,然后水平方向从左到右写字,写一个字绕一圈。这长条羊皮拿下来看上去杂乱无章的,但是加上同尺寸的多棱棒就能看到准确的信息了。如图:


在古代中国,藏头诗,藏尾诗早就被那些文人墨客玩坏了,如水浒传中,拉卢员外下水的那首卦歌:芦花丛中一扁舟,俊杰俄从此地游。义士若能知此理,反躬难逃可无忧。之后又出现了一种古老的对称加密算法,凯撒算法,这类算法的基本实现原理是通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文,这种加密方式一旦掌握足够密文可以通过逆推的方式得到加密规则,但在当时这种理念还是很先进的。电影达芬奇密码中使用的密码道具,如图:


古典密码学针对字符,对字符本身不做修改,通过位置的改变或者替换来隐藏信息,这种加密方式比较简单,主要通过工作或者机械的操作来加解密,一旦掌握了解密工具或者找到解密规律,信息马上就被破解了,整体安全性不高。

现代密码学:1948年10月香农Shannon(信息论之父)的信息论诞生,信息论将信息的传递作为一种统计现象来考虑,香农给出了信息熵的定义:香农


信息论,论文《A Mathematical Theory of Communication》(通信的数学理论)链接:http://vdisk.weibo.com/s/aGbbFyM3Q12eh

同时这也标志着密码学进入了第二阶段,现代计算机科学和信息技术的发展,之前对复杂计算的密码可以通过计算机来完成,密码学成为了一门科学。加密算法一般通过密钥来加解密,信息通过密钥加密后明文通过二进制的方式传播,一般的理解,你的密钥越长就越难破解,但是这个时候你会发现你的密钥只有一把,而且别人要解密你的信息,你必须把密钥也给对方,这种方式称为“对称加密算法”,你的密钥很关键,怎么保存,怎么传输就会很头疼。当然后来演变出来的哈希算法、公钥密码学、其实都是以现代密码学为基础。对称密钥原理图:


公钥密码学:1976年后,公钥密码学出现,这个也可以称为非对称加密,和之前的对称加密最大的区别就是,加解密分别使用公钥(publickey)和私钥(privatekey),密钥以一对的方式出现。196年W.Diffie和M.Hellman发表的New Direction in Cryptography,提出了非对称密码体制的概念。非对称密码体制一般依据两类类数学问题:大整数分解问题和离散对数问题。公钥密码学原理图:


加密算法概述

数据加密:数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。


那么根据数据加密的定义,我们会发现数据加密是需要一个解密过程中,那么有些算法在加密后变成密文,但是无法逆推的那种就不能被真正定义为加密算法。

解释下MD5的特点,MD5(MessageDigest Algorithm MD5),消息摘要算法第五版,这个消息摘要算法之前在讲数字签名时候也有涉及。MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。那么在计算开始就对信息进行了填充,并且压缩,最简单的例子,你在网络上下载东西是通过MD5验证,那么下载源何其多,但是MD5是128位,你可以计算MD5值的总数,无限对有限,这就是一个不可逆的过程,所以严格来说MD5就是一种算法而不是加密算法。


hash算法

hash算法也称为散列函数算法,在区块链中应用的相当频繁,在说明hash算法之前先明确一个概念。

计算机在底层机器码是采用二进制的模式,所谓二进制简单来说就是底层以0/1来标识,所有数据传输记录都以010101的模式来存储记录,两种状态也可认为就是一个日常生活中的开关,1标识开,0标识关。那么计算机中最小的数据单位也就是这里说的0或者1,这里我们称为bit(比特或者位),8个bit组成一个字节。当然计算机中也有八进制、十六进制的表示,这里暂时不展开讨论。只明确底层一个二进制的概念。

Hash算法广泛应用于计算机信息科学领域中,也是十分基础的密码学相关知识。

Hash表,也称散列表,学过计算机数据结构的都比较清楚这个概念。Hash表是根据关键码值(key、value)而进行直接访问的数据结构。把关键码值映射到表中中一个位置来访问记录。加快查找速度。这个映射的函数称为hash函数,存放记录的数组叫散列表。

先来看一个转换:touhezijindeyu经过各种hash加密后得到的值:


 

MD5加密:

5f1a4fc86d69f850bdd9d972a9b51011

SHA256加密:

b71718959b8a7673e8593bd6a21dc81eb5279e89fd4edc32d648ece57ed7056d

SHA512加密:

0264b0a70c46e7a05ba6fff156ff51738e0d39038fa662575e0a6603412c8c7119dba6aa76d294338a0156ee22cd10d379f5848b1a45a6027fdc5c47b0366198

 

 

Hash算法能把任意长度的二进制值映射为固定长度的二进制值,一般来说前一个二进制值我们成为明文,后面通过映射后得到的固定二进制值成为密文或者成为hash值。一旦在明文做任何修改,密文hash值就会有较大出入。

良好的hash算法需要满足:

  1. 快速定向:输入明文后,hash函数能在有限的时间和资源下计算出hash值。

  2. 难以逆推:得到密文hash值后,在规定的时间内无法推导出明文(注意是规定时间内,这个理论上和实际还是有一些区别)。

  3. 明文修改异常:明文稍作修改,密文hash值会有较大出入。

  4. 避免冲突:不同明文,难以出现相同密文hash值。

Hash函数一个映像的关系组,那么理论上会出现,明文x不等于y,那么f(x)=f(y)的情况。避免出现不同明文出现相同hash值,这种称为抗碰撞性,也就是上文说到的解决冲突。

散列函数的值需要尽可能的平均,同时需要良好的处理冲突的方法,一般解决冲突的方法如下:

  1. 线性探查法:发生冲突后,线性向前去探索,找到一个附近的空位置。这种方法会导致出现堆积现象,那么在存取的时候,无法明确同义词,那么盲目探查序列,这种探查法比较线性,原理较为明了,但是整个执行效率就会受到较大影响。

  2. 双散列函数法:在位置冲突后,再次使用一次散列函数进行计算,使得探查序列跳跃式分布。

常用的构造散列函数的方法:

  1. 直接寻址法:直接取key或者key的某个线性函数值为散列地址,那么H(key)=key或者H(key)=a*key b,a、b为参数。

  2. 数字分析法:分析一组数据,发现有冲突可能,那么假设冲突后的数字来构成散列地址,这种方式事先找出数字的规律,然后尽可能利用数据来构造冲突几率低的散列地址。

  3. 平方取中法:取keyword平方后的中间几位作为散列地址。

  4. 折叠法:keyword切割,分成位数相同的几组,当然最后一组可不同,然后这几组的叠加和作为散列地址。

  5. 随机数法:选择一组随机函数,取keyword得随机值作为散列地址。

  6. 除留余数法:取keyword,然后被某个不大于散列列表表长m的数除后得到余数为散列地址。公式:H(key) = key MOD p,p<=m。不仅能够对keyword直接取模,也可在折叠、平方取中等运算之后取模。

Hash函数分类:

  1. 加法hash:把输入的元素一个个加起来的到最终结果。

  2. 位运算hash:通过利用各种位运算,移位或者异或来混合输入元素。

  3. 乘法hash:利用乘法的不相关性。比如乘以一个固定或者不停变化的数。

  4. 除法hash:和乘法的不相关性类似,但是除法效率较慢,所以应用较少。

  5. 查表hash:CRC系列相关算法。

  6. 混合hash:通过混合上述5种方式。

    Hash算法应用:

  1. 校验文件:上述CRC校验和奇偶校验算法,防止数据篡改,MD5算法,目前听到的较多的一种校验文件完整性算法。

  2. 数字签名:由于非对称算法的运算速度,在常用数字签名协议中,单向的散列函数都是比较常用的,对于hash值,又会称为“数字摘要”进行数字签名。

  3. 挑战-认证模式:一般用于信道传输过程中,防止侦听破坏的一种方式。

Hash函数使用限制:

Hash函数中,不论输入的文件长度多少,输出结果都是一组固定长度的数字字符,结合加密方法的概念,hash算法是一个不可逆向的单项函数。文件有任意改动,即可检测出来。同时hash算法是一个无限大范围映射到一个有限小范围的模式,那么节省空间同时便于查找。当然不是所有都适合hash算法,总结以下几个限制:

  1. hash函数是大范围映射到小范围,故实际输入考虑和小范围相当或者更小,理论上尽量避免冲突。

  2. hash函数是单向不可逆。

    本文由币乎(bihu.com)优质内容计划支持。


笔者微信:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    请遵守用户 评论公约

    类似文章
    喜欢该文的人也喜欢 更多