一.导言
在当今互联网时代,网购是一项必备技能。我们最关心的是网上支付的安全性和个人隐私的保密性。在交易中,买卖双方的信任是建立在第三方支付机构(如支付宝)的基础上的,而在我们的印象中,第三方支付机构的信用大部分时间是有保障的。
然而这种方法并没有我们想象的那么完美。一方面,用户需要支付交易之外的中介费,把自己的个人信息给他们做担保;另一方面,作为一个中心化的公司,他们可能会有一系列让人不舒服的问题,比如人为风险导致的系统故障,黑客攻击导致的用户数据隐私泄露,或者不可抗拒的意外导致的机器损坏。
所以我们需要思考,能否实现一个直接解决双方信任问题,保护用户隐私的系统。这样陌生人就可以毫无顾虑的交易(剁手),消灭可恶的中介。
2.什么是区块链?
2008年,在论文《比特币:一种点对点的电子现金系统》中,作者中本聪提出了一个创新的解决方案,巧妙地整合了密码学、网络科学、计算机科学、社会学等学科的现有产品和技术,构建了比特币的底层技术——区块链。
图2交易方式的变化
区块链,这个原本“高冷”的技术词汇,近年来频频进入人们的视野,引发了一波目前最热的争议。投资者为之疯狂,技术极客为之痴迷。区块链到底是什么?人们通常是因为比特币才知道区块链是比特币的一项关键底层技术。
根据百度百科的定义,区块链技术是一种全新的分布式基础设施和计算方法,使用区块链数据结构验证和存储数据,使用分布式节点共识算法生成和更新数据,使用密码学保证数据传输和访问的安全性,使用自动化脚本代码组成的智能契约对数据进行编程和操作。
通俗地说,它就像一个分布式的数据库账本,加密后放在网络上。每个人都可以有一份,大家一起维护,所以它可以安全的记录所有的交易信息。
3.为什么要分布式记账?
人类社会的交易方式是随着时代不断变化的。从古代的物物交换到黄金纸币,再到支票和移动支付,我们的交易方式越来越方便快捷,但与此同时,随之而来的代价就是银行等中心化机构向用户索要昂贵的记账费用和不必要的用户隐私信息。
我们日常使用的互联网很好的解决了信息传递的问题,但是不太擅长价值传递。因此,电子交易系统采用基于第三方信托机构的传统货币交易方式。但经历过金融危机的人都知道,政府和银行并不总是可靠的,它们可能会倒闭或破产。只有财富掌握在自己手中才是最真实的。
区块链的创新之处在于创建了一个基于密码学而非信任模型的公共账本,交易数据记录在区块链上。这样的分布式账本具有任何人都可以查阅、不能篡改的特点,提高了电子交易系统的分散性和安全性。在一定条件下,可以证明系统的安全性。
在区块链的分布式对等网络中,每个用户的账本由一个人保管,用户之间可以直接进行交易。在这样的交易体系中,做假账、作恶的难度非常大,作恶的成本非常高。
我们举个例子:小青蛙和他的父母各有一本账本,每本账本都记录着相同的交易分录。每个人想买东西的时候,都要先告诉另外两个人。大家同意后,可以在各自的账本上添加一条完全相同的交易记录,才可以成功支付交易。
有一天,小青蛙看中了一个心爱的玩具,但是很贵,父母绝对不可能同意买。小青蛙经不住诱惑,偷偷把这笔交易写在自己的账本上,然后让店家给小青蛙取货。但是店家在网上查了小青蛙家的三本,发现爸爸妈妈不同意这个交易,于是店家中断了和小青蛙的交易,小青蛙的小心思也无法得逞。
4.区块链看起来像什么?
顾名思义,区块链是由块组成的链式结构。除了创建块(第一个块),每个块都记录了前一个块的地址,根据地址可以追溯到前一个块。
图5区块链主链和侧链
具体到每个积木的结构,积木由两部分组成:积木头和积木体。报头封装了当前版本号(version)、前一个块地址(Prev-block)、时间戳、随机数、当前块的目标位、Merkle-root和其他信息。Block主要包含事务计数和事务细节,所有事务都构造成一棵Merkle树。
这里的交易信息不包含用户的个人隐私,因为交易只需要个人钱包地址、钱包密码、对方钱包地址和转账金额。
目标哈希值:用于调整挖掘的难度(稍后在“挖掘”中解释)。
随机数(nonce):在加密通信中只能使用一次的数字。在认证协议中,它通常是一个随机或伪随机数,以避免攻击。
Merkle树:在密码学和计算机科学中,Merkle树也称为哈希树,是一种类似树的数据结构。每个叶节点由数据块的散列来索引,而除了叶节点之外的所有节点由其子节点的加密散列来索引。哈希树从对等网络下载后,可以根据可信顶哈希值进行检查,验证数据是否完整或损坏。简单来说,Merkle树的作用就是生成一串数字,可以很容易地验证交易信息的完整性。
图6块结构
5.如何使用密码学来保证交易数据的完整性和安全性?
记录交易信息的区块在错综复杂的网络上自由传输,我们的财富此时实际上是区块链中的一串二进制比特符号。且不说有可能被黑客修改我们的交易信息,光是网络通道噪音的传输就有很多问题。在这个过程中,我们需要找到一种方法来确保块信息的完整性和安全性。这里我们使用密码学的工具来解决这个问题。
我们需要了解的第一个密码学基础知识是哈希函数,哈希函数是一个数学函数,具有以下三个特征:
1.它的输入可以是任意长度的字符串;
2.产生固定长度的输出。在区块链技术中,输出长度为256位;
3.计算难度不高,计算时间与输入长度成正比;
为什么哈希函数是安全的?
散列的过程是困难的,但是验证是简单的。因为哈希函数是单向的,一个输入对应唯一的输出,而输出对找到输入值没有帮助,所以只能用数字代入哈希函数来猜测。就像做一道很难的数学计算题。解题过程很长,但判断结果对错只需要查答案。
在现实中,我们如何保证文档的有效性?我们会在文件上签上自己的名字,因为字迹对每个人来说都是独一无二的,只有你自己才能签出自己的风格;或者我们可以建一个章,因为只有一个章,别人无法伪造,而且是唯一的。同理,密码学中的数字签名技术解决了数字世界中的签名问题。该签名使用哈希函数和加密算法,具有安全、有效、易于验证的优点。
图7椭圆曲线数字签名算法
爱丽丝想给鲍勃发送一份重要文件。为了防止文档被修改,她决定在文档上附加一个数字签名,以便Bob可以验证它。
步骤1,Alice计算文件内容的哈希值,一个唯一的文件只能计算一个唯一的哈希值(即签名);
第二步,用私有密钥和公共加密算法将签名加密成一串失去了原始形式的数字;
步骤3,将加密签名和记录组发送给Bob;
步骤4,Bob收到信息后取出加密的签名,用公钥解密签名的明文;
第五步,Bob用hash函数计算传输文件的hash值,与解密后的签名进行比较,验证文件是否被修改过。