区块链技术和原理
区块链是什么
它是为比特币而设计的一种特殊的数据库技术,基于椭圆曲线数字签名算法来实现去中心化的p2p系统设计。
区块是什么样子的
- 索引(区块):这是哪个区块(初始区块索引为0)
哈希: 区块有效么
固定长度的数值,用来标识唯一数据
哈希通过将索引、前个哈希、时间戳、数据、随机数作为输入后计算得出。前个哈希: 之前一个区块有效么
- 时间戳: 区块是什么时候添加的
- 数据: 区块中存储的价值信息
- 随机数: 我们重复了多少次才找到有效的区块
随机数是用来寻找有效哈希的一个数字。
随机数不断迭代,直到哈希有效。在我们的例子中,有效的哈希值至少要四个 0 开头。寻找有效哈希对应随机数的过程就称为开采(挖矿)。
为什么是这个样子
因为他确保了区块链不可变。
如果我们有一个这样的区块链 A → B → C,有人想修改区块 A 上的数据。会发生下面情况:
- 修改区块 A 上的数据。
- 区块 A 的哈希变动,因为计算哈希所用的数据变化了。
- 区块 A 无效,因为它的哈希不是四个 0 开头。
- 区块 B 的哈希变动,因为计算区块 B 的哈希所用到的区块 A 的哈希值变化了。
- 区块 B 无效,因为它的哈希不是四个 0 开头。
- 区块 C 的哈希变动,因为计算区块 C 的哈希所用到的区块 B 的哈希值变化了。
- 区块 C 无效,因为它的哈希不是四个 0 开头。
修改一个区块的唯一方式就是重新开采这个区块以及它之后的所有区块。因为新的区块不断增加,基本不可能修改区块链。
从不同角度来看区块链
从数据角度:它是一种分布式数据库(分布式共享总账),分布式包括数据的分布式存储,数据的分布式记录。简单说:它能实现全球数据信息的分布式记录(由系统参与者集体记录,而不是由一个中心记录)与分布式存储(可以存储在所有参与记录数据的节点中,而不是集中存储于中心化的机构)。
从效果的角度: 它可以生成一套记录时间先后的,不可篡改的,可以信任的数据库,这套数据库是去中心化存储且数据安全能够得到有效保证的。
结论:区块链是一种把区块以链的方式组合在一起的数据结构,他适合存储简单的,有先后关系的,能在系统内验证的数据,用密码学保证了数据的不可篡改和不可伪造。能够使参与者对全网交易记录的时间顺序和当前状态建立共识。
谈谈如今的区块链
如今的区块链概括起来是指:通过去中心化和去信任的方式集体维护一个可靠数据库的技术。他并不是单一的,全新的技术,二是多种现有技术的整合(如加密算法,p2p文件传输)等。
它是一种大家共同参与记录信息,存储信息的技术。
过去,人们将数据记录,存储的工作交给中心化的机构来完成,
而区块链让系统中的每一个人都可以参与数据的记录,存储。在没有中央控制点的分布式对等网络下,使用分布式集体运作的方法,构建一个p2p的自组织网络。通过复杂的校验机制,区块链数据库能够保持完整性、连续性和一致性,即使部分参与人作假也无法改变区块链的完整性,更无法篡改区块链中的数据。
区块链包含的技术点
区块链技术涉及的关键点包括:去中心化(Decentralized)、去信任(Trustless)、集体维护(Collectively maintain)、可靠数据库(ReliableDatabase)、时间戳(Time stamp)、非对称加密(AsymmetricCryptography)等。
去信任: 区块链技术重新定义了网络中信用的生成方式:在系统中,参与者无需了解其他人的背景资料,也不需要借助第三方机构的担保或保证,区块链技术保障了系统对价值转移的活动进行记录、传输、存储,其最后的结果一定是可信的。
区块链产生的背景
区块链技术原理的来源可归纳为一个数学问题:拜占庭将军问题。拜占庭将军问题延伸到互联网生活中来,其内涵可概括为:在互联网大背景下,当需要与不熟悉的对手方进行价值交换活动时,人们如何才能防止不会被其中的恶意破坏者欺骗、迷惑从而做出错误的决策。进一步将拜占庭将军问题延伸到技术领域中来,其内涵可概括为:在缺少可信任的中央节点和可信任的通道的情况下,分布在网络中的各个节点应如何达成共识。区块链技术解决了闻名已久的拜占庭将军问题——它提供了一种无需信任单个节点、还能创建共识网络的方法。
区块链技术的本质是一种互联网协议。
在互联网中尽力一套全球通用的数据库
如果现在我们想要在互联网世界中建立一套全球通用的数据库,那么我们会面临三个亟待解决的问题,这三个问题也是设计区块链技术的核心所在:
问题一:如何建立一个严谨的数据库,使得该数据库能够存储下海量的信息,同时又能在没有中心化结构的体系下保证数据库的完整性?
问题二:如何记录并存储下这个严谨的数据库,使得即便参与数据记录的某些节点崩溃,我们仍然能保证整个数据库系统的正常运行与信息完备?
问题三:如何使这个严谨且完整存储下来的数据库变得可信赖,使得我们可以在互联网无实名背景下成功防止诈骗?
针对这三个核心问题,区块链构建了一套完整的,连贯的数据库技术,也是区块链最核心的三大技术。
区块链的三大核心技术
区块 + 链
区块(block):在区块链技术中,数据以电子记录的形式被永久储存下来,存放这些电子记录的文件我们就称之为“区块(block)”。区块是按时间顺序一个一个先后生成的,每一个区块记录下它在被创建期间发生的所有价值交换活动,所有区块汇总起来形成一个记录合集。
区块结构(BlockStructure):区块中会记录下区块生成时间段内的交易数据,区块主体实际上就是交易信息的合集。每一种区块链的结构设计可能不完全相同,但大结构上分为块头(header)和块身(body)两部分。块头用于链接到前面的块并且为区块链数据库提供完整性的保证,块身则包含了经过验证的、块创建过程中发生的价值交换的所有记录。
我们引用《区块链:互联网金融的终局》(肖风)的一段话来总结区块链的基本结构:“人们把一段时间内生成的信息(包括数据或代码)打包成一个区块,盖上时间 戳,与上一个区块衔接在一起,每下一个区块的页首都包含了上一个区块的索引数据,然后再在本页中写入新的信息,从而形成新的区块,首尾相连,最终形成了区块链。”这个结构的神奇之处:区块(完整历史)+ 链(完全验证)= 时间戳
区块 + 链 的优点
“区块+链”的结构为我们提供了一个数据库的完整历史。从第一个区块开始,到最新产生的区块为止,区块链上存储了系统全部的历史数据。
区块链为我们提供了数据库内每一笔数据的查找功能。区块链上的每一条交易数据,都可以通过“区块链”的结构追本溯源,一笔一笔进行验证。
区块+链=时间戳,这是区块链数据库的最大创新点。区块链数据库让全网的记录者在每一个区块中都盖上一个时间戳来记账,表示这个信息是这个时间写入的,形成了一个不可篡改、不可伪造的数据库。
分布式结构——开源的、去中心化的协议
问题: 有了区块+链的数据之后,接下来就要考虑记录和存储的问题了。我们应该让谁来参与数据的记录,又应该把这些盖了时间戳的数据存储在哪里呢?
现如今中心化的体系中,数据都是集中记录并存储在中央电脑上,但是区块链结构不赞同把数据记录并存储在中心化的一台或者几台电脑上,二是让每一个参与数据交易的节点都记录并存储下所有的数据。
1.关于如何让所有节点都能参与记录的问题,区块链的办法是:构建一整套协议机制,让全网每一个节点在参与记录的同时也来验证其他节点记录结果的正确性。只有当全网大部分节点(或甚至所有节点)都同时认为这个记录正确时,或者所有参与记录的节点都比对结果一致通过后,记录的真实性才能得到全网认可,记录数据才允许被写入区块中。
2.关于如何存储下“区块链”这套严谨数据库的问题,区块链的办法是:构建一个分布式结构的网络系统,让数据库中的所有数据都实时更新并存放于所有参与记录的网络节点中。这样即使部分节点损坏或被黑客攻击,也不会影响整个数据库的数据记录与信息更新。
区块链根据系统确定的开源的、去中心化的协议,构建了一个分布式的结构体系,让价值交换的信息通过分布式传播发送给全网,通过分布式记账确定信息数据内容,盖上时间戳后生成区块数据,再通过分布式传播发送给各个节点,实现分布式存储。
分布式优点
通过分布式记账、分布式传播、分布式存储这三大“分布”我们可以发现,没有人、没有组织、甚至没有哪个国家能够控制这个系统,系统内的数据存储、交易验证、信息传输过程全部都是去中心化的。在没有中心的情况下,大规模的参与者达成共识,共同构建了区块链数据库。可以说,这是人类历史上第一次构建了一个真正意义上的去中心化体系。甚至可以说,区块链技术构建了一套永生不灭的系统——只要不是网络中的所有参与节点在同一时间集体崩溃,数据库系统就可以一直运转下去。
非对称加密算法
什么是非对称加密?简单来说,它让我们在“加密”和“解密”的过程中分别使用两个密码,两个密码具有非对称的特点:(1)加密时的密码(在区块链中被称为“公钥”)是公开全网可见的,所有人都可以用自己的公钥来加密一段信息(信息的真实性);(2)解密时的密码(在区块链中被称为“私钥”)是只有信息拥有者才知道的,被加密过的信息只有拥有相应私钥的人才能够解密(信息的安全性)。
非对称加密算法优点
我们可以看出,从信任的角度来看,区块链实际上是数学方法解决信任问题的产物。过去,人们解决信任问题可能依靠熟人社会的“老乡”,政党社会的“同志”,传统互联网中的交易平台“支付宝”。而区块链技术中,所有的规则事先都以算法程序的形式表述出来,人们完全不需要知道交易的对手方是“君子”还是“小人”,更不需要求助中心化的第三方机构来进行交易背书,而只需要信任数学算法就可以建立互信。区块链技术的背后,实质上是算法在为人们创造信用,达成共识背书。
脚本
为什么要有脚本
脚本可以理解为一种可编程的智能合约。如果区块链技术只是为了适应某种特定的交易,那脚本的嵌入就没有必要了,系统可以直接定义完成价值交换活动需要满足的条件。然而,在一个去中心化的环境下,所有的协议都需要提前取得共识,那脚本的引入就显得不可或缺了。有了脚本之后,区块链技术就会使系统有机会去处理一些无法预见到的交易模式,保证了这一技术在未来的应用中不会过时,增加了技术的实用性。
脚本的本质
一个脚本本质上是众多指令的列表,这些指令记录在每一次的价值交换活动中,价值交换活动的接收者(价值的持有人)如何获得这些价值,以及花费掉自己曾收到的留存价值需要满足哪些附加条件。通常,发送价值到目标地址的脚本,要求价值的持有人提供以下两个条件,才能使用自己之前收到的价值:一个公钥,以及一个签名(证明价值的持有者拥有与上述公钥相对应的私钥)。
脚本的优点
脚本的神奇之处在于,它具有可编程性:(1)它可以灵活改变花费掉留存价值的条件,例如脚本系统可能会同时要求两个私钥、或几个私钥、或无需任何私钥等;(2)它可以灵活的在发送价值时附加一些价值再转移的条件,例如脚本系统可以约定这一笔发送出去的价 值以后只能用于支付中信证券的手续费、或支付给政府等。