哈希函数
特性:
-
单项不可逆性:x推到H(x)很简单,倒回来推基本不可能,这一特性很好保护了源数据。
-
抗碰撞性:当x,y不相同的时候,H(x)几乎不可能等于H(y),这确实并非完全不可能,但是几率非常低,这使得一个数的哈希值可以用于身份验证等场景。
-
哈希计算不可预测:很难通过现有条件,推导出哈希值,但是很容易检测其是否正确,这个机制主要用于POW挖矿中。
加密与解密
加密机制分为对称加密和非对称加密两类。
对称加密机制是两方共用一份密钥来对信息进行加密和解密。效率高,但是密钥的分发存在很大的风险,容易导致信息泄露。
非对称加密机制主要是指的公私钥加密机制。通过算法生成一对密钥,称为公钥和私钥。
此时,如果A想要将一份信息发给B,就可以使用B的公钥进行加密,将加密后的信息传给B,B再拿自己本地的私钥解密。由于在整个过程中,B的私钥没有通过任何渠道进行传播,只有自己知道,所以具有极高的安全性。
在现实应用中,对很大的文件进行非对称加密效率较低,所以一般采用一种组合机制:假设 A 想发送一个大文件 D 给 B,则先将文件 D 用一个密钥 K 进行对称加密,再用 B 的公钥对密钥 K 进行非对称加密。A 将加密后的密钥 K 和文件 D 发送给 B,期间即使被截获或泄漏,因为没有 B 的私钥,所以无法得到密钥 K,也就无法访问文件 D。B 收到加密后的文件和密钥后,则先用自己的私钥解密得到密钥 K,再用密钥 K 对文件 D 进行解密,从而获取文件内容。
数字签名
数字签名是非对称加密机制的另一种用噶,上文讲到每个人拥有一对生成的公钥和私钥,在加密。解密应用中,是用公钥加密用私钥解密。而数字签名恰好相反,假设一个文件持有者用其私钥对这个文件进行加密,其他人可以用他的公钥进行解密,如果得到结果,从而就能说明这个文件确实是从这个人这里发出来的,从而可以证明文件的归属权。
这个数字签名机制最典型的应用就是在比特币的区块链网络中,用私钥证明自己对于比特币的归属权,对交易进行签名,其他人需要的时候就可以使用公钥来验证该交易是否合法。整个过程无需暴露自己的私钥,从而在完备证明的同时保障了自己资产的安全。
区块链基本概念
区块链技术本质上就是一种**分布式账本技术**,一群人共同维护着一个去中心化的数据库,通过共识机制来共同记账。区块链很容易追溯历史记录,而因为去中心化信任机制的存在,也几乎不可篡改(或者是篡改的成本远远大于收益)。
相比于传统的数据库,**区块链只有增加和查询两种操作**,所有的操作历史记录都会准确地保存在账本中且不可变,具备很高的透明度和安全性,当然,代价就是所有节点必须通过一些机制达成共识(因此效率较低,不适合实时性的操作),而且因为每个节点都要永久保存历史记录,会占据很大的存储空间。
区块链作为一个分布式数据库,主要做的还是信息存储的工作,只是通过其各类机制,在不需要第三方机构介入的前提下让有共同需求但并不互相信任的实体之间也能以相对较低的代价达成一致,从而满足需求,除此之外,系统还有加密认证、高透明度等特性,能够满足一些业务需求。而如果所涉及到的数据不能公开/数据量非常大/需要外部服务来存储数据,或者是业务规则经常发生变化,那区块链就并不适合作为其解决方案。
因此,在以上的标准下,有如下一些需求很适合区块链作为其解决方案:
-
需要建立一个共享的数据库,且有多方参与
-
参与业务的各方没有建立信任
-
现有业务信任一个或者多个信任机构
-
现有业务有加密认证的业务需求
-
数据需要集成到不同的数据库且业务数字化和一致性的需求迫切
-
对于系统参与者有统一的规则
-
多方决策是透明的
-
需要客观的、不可改变的记录
-
非实时性处理业务
但其实在很多应用场景里,企业需要在去中心化和效率之间做一些权衡,且有时候很多复杂的业务对透明度、规则都有不同的需求,因此,基于复杂的商业化需求,也有“**联盟链**”这样的解决方案,能够更好地与现有的系统结合,以满足业务需求。
区块链类型
区块链也有不同的类型,主要有**私有链**、**公有链**、**联盟链**三种。
私有链主要是应用于某一个特定领域或者只是在某一个企业运行的区块链,主要是用于解决信任问题,如跨部门协作等场景,一般不需要外部机构来访问数据。
(感觉私有链更多的只是一个领域或者企业内部对特定业务选择的一种技术解决方案吧,而且又是占用空间大又是不实时的,可能并不会大范围推广开。)
公有链则是公开的交易,往往用于一些需要交易/数据公开的业务,如认证、溯源、金融等场景,比如比特币、以太坊和`EOS`等。
联盟链最大的特征是节点需要验证权限才能参与到区块链网络中,而认证一般都是与其现实角色所关联的,因此,联盟链也具有中心化的属性,但效率、拓展性和交易隐私则大大提升了,满足了企业级应用的需求,其中最广泛使用的就是`Hyperledger Fabric`了。值得一提的是,联盟链往往不需要代币来作为激励,而是将参与的各个节点作为记账节点,通过区块链机制实现跨部门之间的业务协同所带来的经济效益作为内部激励,是一种更健康、更符合企业应用的方式。
(联盟链其实是放弃了一些区块链的去中心化的属性的,感觉有点相当于开历史的倒车,但就像现在貌似资本主义是比共产主义好用点一样,为了符合实际的业务需要,偶尔放弃一些更加高端的属性也是可以的。)
长期来看的话,公有链和联盟链在技术上也会逐渐趋于融合,即使是同一个业务,可以将需要信任的数据放在共有链上,而一些行业数据和私有的数据则可以放在联盟链上,通过权限管理来保障交易隐私。
区块链的组成
那一个区块链究竟由哪些部分组成呢?
- 区块
- 区块链
- P2P 网络
- 共识机制
- …
区块
区块链就是由一个个区块组成的生态系统,每一个区块中包含了前一个区块链的哈希值、时间戳、Merkle Root
、Nonce
以及区块数据几个部分,比特币的区块大小为 1 MB。
因为每个区块都包含前一个区块的哈希值,根据前文所述的哈希性质,哪怕是极其微小的改变哈希值也会截然不同,因此很容易检测某个区块是否被篡改;Nonce 值则主要是用于调整挖矿难度,可以把时间控制在 10 分钟左右,以保障安全性。
区块链
所有的区块串联起来就形成了区块链,是一个存储着网络中所有交易历史记录的账本,因为每一个区块都包含着上一个区块的哈希信息(比如比特币系统是将上一个区块的块头取两次哈希),因此如果有交易发生变化则会造成区块链断裂,有一个小 Demo 很好地演示了这一过程,大家可以体验一下!
P2P 网络
P2P 网络是用于不同用户之间共享信息和资源的一种分布式网络,是一种分布式网络,网络中的每个人都能够得到一份信息备份,而且都有访问权限;而中心化网络是所有人都连接至一个(或一组)中心化网络;去中心化网络是有多个这样的中心网络,但没有一个单点网络可以拥有所有的信息。下图很好地解释了它们之间的区别:
[外链图片转存中…(img-DrzPOt5L-1720022248880)]
共识机制
区块链网络是由多个网络节点组成的,其中每个节点都存有一份信息备份,那它们是如何对交易达成一致的呢?也就是说,它们作为独立的节点,需要有一种机制来保障互相信任,这就是共识机制。
常用的共识机制有`PoW(Proof of Work)`工作量证明,`PoS(Proof of Stake)`权益证明,`DPoS(Delegated Proof of Stake`委任权益证明,`DBFT(Delegated Byzantine Fault Tolerance)`等。
比特币/以太坊主要采用的是工作量证明机制,通过算力比拼来增加恶意节点的作恶成本。通过动态调整挖矿的难度来让一笔交易时间控制在 10 分钟左右(6 个确认),但随着比特币挖矿越来越火热,消耗资源越来越多,对环境造成破坏;有些矿池拥有大量资源,也会造成一些中心化的风险。
权益证明机制则是通过权益(一般是代币)持有者进行投票来达成共识。这种机制不需要像工作量证明一样进行大量的算力比拼,但是也有一些风险,称为`Nothing at Stake`问题,很多权益持有者会在所有区块都投注并从中获利。为了解决这个问题,系统设置了一些规则,如对同时在多个链创建区块的用户/在错误链上创建区块的用户设置一些惩罚机制。目前以太坊正在向这种共识机制转变。
`EOS`则采用了委任权益证明,选出一些代表性的节点来进行投票,这种方式目的是优化社区投票的效率和结果,但带来了一些中心化的风险。
`DBFT`共识机制则是通过对节点分配不同的角色来达成共识,这样可以很大程度降低开销和避免分叉,但是也有核心角色作恶的风险。
(这些暂时都还没太见过,之后肯定有涉及到的机会)
区块链安全与隐私
安全
区块链作为一个较新的技术,也存在很多安全隐患,如对数字货币交易所的攻击、智能合约漏洞、对共识协议的攻击、对网络流量(互联网 ISP)的攻击以及上传恶意数据等。比较著名的案例有 Mt.Gox 事件、以太坊 DAO 事件等,因此,对区块链的安全风险也是区块链的重要研究方向。
可以从协议、加密方案、应用、程序开发和系统等角度进行风险分析,提高区块链应用的安全性。例如在以太坊区块链中,可以对Solidity
编程语言、EVM
和区块链本身进行一些分析。
如智能合约中的一种叫低成本攻击的方式,就是通过识别以太坊网络中较低Gas
费用的操作,重复执行以破坏整个网络。
对于安全问题,构建一个通用的代码检测器来检查恶意代码将会是一个更通用的解决方案。
隐私
在讲区块链概念的时候,提到了它很重要的一个特征,隐私性。也就是说,所有人都能看到链上的交易细节和历史记录,这一特性主要应用在食品、药物等供应链环节,但是对于一些金融场景,如个人账户余额、交易信息,则容易造成一些隐私风险。
那有哪些技术能够应用于这些存在高价值、敏感信息的隐私保护呢?
硬件层面,可以采用可信的执行环境,采用一些安全硬件,如`Intel SGX`,很大程度保障了隐私;网络可以采用多路径转发以避免从节点的 ip 地址推算出真实身份。
在技术层面,混币技术可以把很多交易进行一些混合,这样不容易找出对应的交易发送方和接收方;盲签技术可以保障第三方机构不能将参与交易的双方联系起来;环签用于保障交易签名的匿名性;零知识证明则可以应用于一方(证明者)向另一方(验证者)证明一个陈述是正确的,而无需透露除该陈述是正确的以外的人和信息;同态加密可以保护原数据,给定 E(x)和 E(y),可以很容易计算出某些关于 x, y 的加密函数值(同态运算);基于属性的加密(`Attribute-based Encryption, ABE`)则为各个节点添加一些属性/角色,实现权限控制,从而保护隐私。
(这里面只听说过零知识证明,感觉都好高端啊,相关岗位开的工资也确实很多)
值得注意的是,即使一笔交易生成多个 inputs 和 outputs,这些 inputs 和 outputs 的地址也可能被人关联;除此之外,地址账户和现实世界中的真实身份也可能产生关联。
总结 #
以上就是对区块链基础知识的一些梳理,主要从概念和原理层面进行了一些学习,后续还会更新对比特币、以太坊、Hyperledger Fabric
等典型应用的分析与思考,并对 IPFS、跨链、NFT 等热门技术进行一些探究,敬请期待!