加载中 ...

区块链核心技术解密

2019-10-09 02:44 编辑:btc268.com 来源:区块链资讯

上一章可以观看 区块链的诞生 了解历史背景,这一章主要解密区块链核心技术。

1.区块链

1.1         区块链基本理论

“区块链”技术最初是由一位化名中本聪的人为比特币(一种数字货币)而设计出的一种特殊的数据库技术,它基于密码学中的椭圆曲线数字签名算法(ECDSA)来实现去中心化的P2P系统设计。但区块链的作用不仅仅局限在比特币上。现在,人们在使用“区块链”这个词时,有的时候是指数据结构,有时是指数据库,有时则是指数据库技术,但无论是哪种含义,都和比特币没有必然的联系。

    从数据的角度来看:区块链是一种分布式数据库(或称为分布式共享总账,DistributedSharedLedger),这里的“分布式”不仅体现为数据的分布式存储,也体现为数据的分布式记录(即由系统参与者来集体维护)。简单的说,区块链能实现全球数据信息的分布式记录(可以由系统参与者集体记录,而非由一个中心化的机构集中记录)与分布式存储(可以存储在所有参与记录数据的节点中,而非集中存储于中心化的机构节点中)。

    从效果的角度来看:区块链可以生成一套记录时间先后的、不可篡改的、可信任的数据库,这套数据库是去中心化存储且数据安全能够得到有效保证的。

结论:区块链是一种把区块以链的方式组合在一起的数据结构,它适合存储简单的、有先后关系的、能在系统内验证的数据,用密码学保证了数据的不可篡改和不可伪造。它能够使参与者对全网交易记录的事件顺序和当前状态建立共识。

区块链技术涉及的关键点包括:去中心化(Decentralized)、去信任(Trustless)、集体维护(Collectively maintain)、可靠数据库(ReliableDatabase)、时间戳(Time stamp)、非对称加密(AsymmetricCryptography)等。

1.2         架构设计结构

区块链基本描述:区块链是在分布式数据库中排序及验证数据的方式。应用区块链,就是通过网络加密请求获得数据保存的结果和数据的共识记录。

区块链架构实现基本特性具备:去中心化、不可篡改、安全加密、高度透明、可追溯等特性

(设计实现结构图)

(单节点结构图)

(区块链结构同步)

2.分层技术选型2.1        数据存储

狭义的区块链即是去中心化系统各节点共享的数据账本.每个分布式节点都可以通过特定的哈希算法和Merkle树数据结构,将一段时间内接收到的交易数据和代码封装到一个带有时间戳的数据区块中,并链接到当前最长的主区块链上,形成最新的区块.该过程涉及区块、链式结构、哈希算法、Merkle树和时间戳等技术要素.

  数据区块:如图所示,每个数据区块一般包含区块头(Header)和区块体(Body)两部分.区块头封装了当前版本号(Version)、前一区块地址(Prev-block)、当前区块的目标哈希值(Bits)、当前区块PoW共识过程的解随机数(Nonce)、Merkle根(Merkle-root)以及时间戳(Timestamp)等信息[21].比特币网络可以动态调整PoW共识过程的难度值,最先找到正确的解随机数Nonce并经过全体矿工验证的矿工将会获得当前区块的记账权.区块体则包括当前区块的交易数量以及经过验证的、区块创建过程中生成的所有交易记录.这些记录通过Merkle树的哈希过程生成唯一的Merkle根并记入区块头.

2.1.1    链式结构

取得记账权的矿工将当前区块链接到前一区块,形成最新的区块主链.各个区块依次环环相接,形成从创世区块到当前区块的一条最长主链,从而记录了区块链数据的完整历史,能够提供区块链数据的溯源和定位功能,任意数据都可以通过此链式结构顺藤摸瓜、追本溯源.需要说明的是,如果短时间内有两个矿工同时“挖出”两个新的区块加以链接的话,区块主链可能会出现暂时的“分叉”现象,其解决方法是约定矿工总是选择延长累计工作量证明最大的区块链.因此,当主链分叉后,后续区块的矿工将通过计算和比较,将其区块链接到当前累计工作量证明最大化的备选链上,形成更长的新主链,从而解决分叉问题[19].

2.1.2    时间戳

区块链技术要求获得记账权的节点必须在当前数据区块头中加盖时间戳,表明区块数据的写入时间.因此,主链上各区块是按照时间顺序依次排列的.时间戳技术本身并不复杂,但其在区块链技术中的应用是具有重要意义的创新.时间戳可以作为区块数据的存在性证明(Proof of existence),有助于形成不可篡改和不可伪造的区块链数据库,从而为区块链应用于公证、知识产权注册等时间敏感的领域奠定了基础.更为重要的是,时间戳为未来基于区块链的互联网和大数据增加了时间维度,使得通过区块数据和时间戳来重现历史成为可能.

2.1.3    哈希函数

区块链通常并不直接保存原始数据或交易记录,而是保存其哈希函数值,即将原始数据编码为特定长度的由数字和字母组成的字符串后记入区块链.哈希函数(也称散列函数)具有诸多优良特点,因而特别适合用于存储区块链数据.例如,通过哈希输出几乎不能反推输入值(单向性),不同长度输入的哈希过程消耗大约相同的时间(定时性)且产生固定长度的输出(定长性),即使输入仅相差一个字节也会产生显著不同的输出值(随机性)等.比特币区块链通常采用双SHA256哈希函数,即将任意长度的原始数据经过两次SHA256哈希运算后转换为长度为256位(32字节)的二进制数字来统一存储和识别.除上述特点外,SHA256算法还具有巨大的散列空间(2256)和抗碰撞(避免不同输入值产生相同哈希值)等特性,可满足比特币的任何相关标记需要而不会出现冲突.

2.1.4    Merkle树

Merkle树是区块链的重要数据结构,其作用是快速归纳和校验区块数据的存在性和完整性.如图3所示,Merkle树通常包含区块体的底层(交易)数据库,区块头的根哈希值(即Merkle根)以及所有沿底层区块数据到根哈希的分支.Merkle树运算过程一般是将区块体的数据进行分组哈希,并将生成的新哈希值插入到Merkle树中,如此递归直到只剩最后一个根哈希值并记为区块头的Merkle根.最常见的Merkle树是比特币采用的二叉Merkle树,其每个哈希节点总是包含两个相邻的数据块或其哈希值[22],其他变种则包括以太坊的Merkle patricia tree等[4].Merkle树有诸多优点:首先是极大地提高了区块链的运行效率和可扩展性,使得区块头只需包含根哈希值而不必封装所有底层数据,这使得哈希运算可以高效地运行在智能手机甚至物联网设备上;其次是Merkle树可支持“简化支付验证”协议,即在不运行完整区块链网络节点的情况下,也能够对(交易)数据进行检验[3].例如,为验证图3中交易6,一个没有下载完整区块链数据的客户端可以通过向其他节点索要包括从交易6哈希值沿Merkle树上溯至区块头根哈希处的哈希序列(即哈希节点6,5,56,78,5678,1234)来快速确认交易的存在性和正确性.一般说来,在N个交易组成的区块体中确认任一交易的算法复杂度仅为log2N.这将极大地降低区块链运行所需的带宽和验证时间,并使得仅保存部分相关区块链数据的轻量级客户端成为可能.

2.1.5    非对称加密

非对称加密是为满足安全性需求和所有权验证需求而集成到区块链中的加密技术,常见算法包括RSA、Elgamal、Rabin、D-H、ECC(即椭圆曲线加密算法)等.非对称加密通常在加密和解密过程中使用两个非对称的密码,分别称为公钥和私钥.非对称密钥对具有两个特点,首先是用其中一个密钥(公钥或私钥)加密信息后,只有另一个对应的密钥才能解开;其次是公钥可向其他人公开、私钥则保密,其他人无法通过该公钥推算出相应的私钥.非对称加密技术在区块链的应用场景主要包括信息加密、数字签名和登录认证等,其中信息加密场景主要是由信息发送者(记为A)使用接受者(记为B)的公钥对信息加密后再发送给B,B利用自己的私钥对信息解密.比特币交易的加密即属于此场景;数字签名场景则是由发送者A采用自己的私钥加密信息后发送给B,B使用A的公钥对信息解密、从而可确保信息是由A发送的;登录认证场景则是由客户端使用私钥加密登录信息后发送给服务器,后者接收后采用该客户端的公钥解密并认证登录信息.

以比特币系统为例,其非对称加密机制如图4所示:比特币系统一般通过调用操作系统底层的随机数生成器来生成256位随机数作为私钥.比特币私钥的总量可达2256,极难通过遍历全部私钥空间来获得存有比特币的私钥,因而是密码学安全的.为便于识别,256位二进制形式的比特币私钥将通过SHA256哈希算法和Base58转换,形成50个字符长度的易识别和书写的私钥提供给用户;比特币的公钥是由私钥首先经过Secp256k1椭圆曲线算法生成65字节长度的随机数.该公钥可用于产生比特币交易时使用的地址,其生成过程为首先将公钥进行SHA256和RIPEMD160双哈希运算并生成20字节长度的摘要结果(即hash160结果),再经过SHA256哈希算法和Base58转换形成33字符长度的比特币地址[19].公钥生成过程是不可逆的,即不能通过公钥反推出私钥.比特币的公钥和私钥通常保存于比特币钱包文件,其中私钥最为重要.丢失私钥就意味着丢失了对应地址的全部比特币资产.现有的比特币和区块链系统中,根据实际应用需求已经衍生出多私钥加密技术,以满足多重签名等更为灵活和复杂的场景。

 2.2        P2P网络

P2P技术属于覆盖层网络(Overlay Network)的范畴,是相对于客户机/服务器(C/S)模式来说的一种网络信息交换方式。在C/S模式中,数据的分发采用专门的服务器,多个客户端都从此服务器获取数据。

优点是:数据的一致性容易控制,系统也容易管理。

缺点是:因为服务器的个数只有一个(即便有多个也非常有限),系统容易出现单一失效点;单一服务器面对众多的客户端,由于CPU能力、内存大小、网络带宽的限制,可同时服务的客户端非常有限,可扩展性差。

P2P技术正是为了解决这些问题而提出来的一种对等网络结构。在P2P网络中,每个节点既可以从其他节点得到服务,也可以向其他节点提供服务。这样,庞大的终端资源被利用起来,一举解决了C/S模式中的两个弊端。

P2P应用软件主要包括文件分发软件、语音服务软件、流媒体软件。目前P2P应用种类多、形式多样,没有统一的网络协议标准,其体系结构和组织形式也在不断发展。

2.3        共识机制

由于点对点网络下存在较高的网络延迟,各个节点所观察到的事务先后顺序不可能完全一致。因此区块链系统需要设计一种机制对在差不多时间内发生的事务的先后顺序进行共识。这种对一个时间窗口内的事务的先后顺序达成共识的算法被称为“共识机制”。

POW

比特币莱特币等货币型区块链(公有链)(proof of work)。在比特币等货币型区块链中让各节点达成一致性的共识机制为工作量证明,也是我们说的挖矿

POS

Bitshares和qutm等合约型区块链(proof of stake)。如果简单的把POW当作比力量大小的话,POS就是比耐力多少。

DPOS

基于POS衍生出的更专业的解决方案,他是类似于董事会的投票机制,选举出n个记账节点,在节点中提案者提交的提案被这些记账节点投票决定谁是正确的。

dBFT

小蚁区块链(delegatedBFT,授权拜占庭容错机制)。用权益来选出记账人,然后记账人之间通过拜占庭容错算法 达成共识。

PBFT

Fabric使用的经典算法(拜占庭容错)。这是一种基于消息传递的一致性算法,算法经过三个阶段达成一致性,这些阶段可能因为失败而重复进行。

Paxos

Paxos被用于分布式系统中典型的例子就是Zookeeper,他是第一个被证明的共识算法,其原理基于两阶段提交并扩展。

Paft

Raft算法是对Paxos算法的一种简单实现。

Pool

验证池:布比区块链。基于传统的分布式一致性技术,加上数据验证机制。

2.4        激励机制

将经济因素集成到区块链技术体系中来,包括经济激励的发行机制和分配机制等,主要出现在公有链当中。

公有链必须激励参与记账的几点,并且惩罚不遵守规则的节点,才能让整个系统朝着良性循环的方向发展。

而在私有链当中,则不一定需要进行激励,因为参与记账的节点,往往是在链外完成了博弈。通过强制或自愿,来要求参与记账。

2.4.1    发行机制

比特币系统中每个区块发行比特币的数量是随着时间阶梯性递减的。创世区块起的每个区块将发行50个比特币奖励给该区块的记账者,此后每隔约4年(21万个区块 ) 每区块发行比特币的数量降低一半,依此类推,一直到比特币的数量稳定在上限 2100 万为止。比特币交易过程中会产生手续费,默认手续费是万分之一个比特币,这部分费用也会记入区块并奖励给记账者。这两部分费用将会封装在每个区块的第一个交易(称为Coinbase交易)中。虽然每个区块的总手续费相对于新发行比特币来说规模很小(通常不会超过1个比特币),但随着未来比特币发行数量的逐步减少甚至停止发行,手续费将逐渐成为驱动节点共识和记账的主要动力。同时,手续费还可以防止大量微额交易对比特币网络发起的 “粉尘” 攻击,起到保障安全的作用。

2.4.2    分配机制

比特币系统中,大量的小算力节点通常会选择加入矿池,通过相互合作汇集算力来提高“挖 ”到新区块的概率,并共享该区块的比特币和手续费奖励 。据 Bitcoinmining。com 统计,已经存在 13 种不同的分配机制。主流矿池通常采用 PPLNS (Pay per last Nshares) 、 PPS (Payper share) 和PROP (PROPortionately) 等机制。矿池将各节点贡献的算力按比例划分成不同的股份(Share),其中 PPLNS 机制是指发现区块后,各合作节点根据其在最后 N 个股份内贡献的实际股份比例来分配区块中的比特币;PPS 则直接根据股份比例为各节点估算和支付一个固定的理论收益,采用此方式的矿池将会适度收取手续费来弥补其为各节点承担的收益不确定性风险;PROP 机制则根据节点贡献的股份按比例地分配比特币。矿池的出现是对比特币和区块链去中心化趋势的潜在威胁,如何设计合理的分配机制引导各节点合理地合作、避免出现因算力过度集中而导致的安全性问题是亟待解决的研究问题。

2.5        智能合约

构建 → 存储 → 执行

1)        智能合约由区块链内的多个用户共同参与制定,可用于用户之间的任何交易行为。协议中明确了双方的权利和义务,开发人员将这些权利和义务以电子化的方式进行编程,代码中包含会触发合约自动执行的条件。

2)        一旦编码完成,这份智能合约就被上传到区块链网络上

3)        智能合约会定期检查是否存在相关事件和触发条件;满足条件的事件将会推送到待验证的队列中。

4)        区块链上的验证节点先对该事件进行签名验证[3],以确保其有效性;等大多数验证节点对该事件达成共识后,智能合约将成功执行,并通知用户。

5)        成功执行的合约将移出区块。而未执行的合约则继续等待下一轮处理,直至成功执行。

2.6        应用

实现技术语言:JAVA开发语言(未来币)、C 开发语言(比特币、公正通、瑞波ripple)、GO开发语言(以太坊、IBM)、Solidity开发语言(以太坊)、

应用场景:区块链技术的核心是沿时间轴记录数据与合约,并且只能读取和写入,不能修改和删除。在应用层面,区块链的安全、透明、高效3大优势,使其特别有助于规范互联网金融的发展,以及促进物联网和共享经济的普及与创新;在资本市场,采用分布式数据库和智能合约还可以大幅减少人工核对工作,为金融机构节省成本。

金融服务:主要是降低交易成本,减少跨组织交易风险等。该领域的区块链应用将最快 成熟起来,银行和金融交易机构将是主力推动者。征信和权属管理:这是大型社交平台和保险公司都梦寐以求的,目前还缺乏足够的数据来源、可靠的平台支持和有效的数据分析和管理。该领域创业的门槛极高,需要自上而下的推动。

资源共享:airbnb 为代表的公司将欢迎这类应用,极大降低管理成本。这个领域创业门槛低,主题集中,会受到投资热捧。投资管理:无论公募还是私募基金,都可以应用区块链技术降低管理成本和管控风险。虽然有 DAO 这样的试水,谨慎认为该领域的需求还未成熟。物联网与供应链:物联网是很适合的一个领域,短期内会有大量应用出现,特别是租赁、物流等特定场景。但物联网自身的发展局限将导致短期内较难出现规模应用。

3.区块链核心技术3.1        可靠性指标

1)     单个节点服务器至少可靠性要求两个九

2)     整个区块链可靠性不能低于三个九

3)     超过十个节点以上应用可靠性不能低于四个九

4)     区块链所有节点分布式

 3.1.1    区块相关评价指标

1)数据处理基本指标

该指标描述区块链最基本的数据处理的功能。

其规范性描述,应包括以下信息,具体的数据处理功能在其说明文档中提供:

——是否支持持久存储用户账户信息变动流水的功能;

——是否具备用户账户管理的功能;

——是否支持单个用户账户信息修改功能;

——是否支持同一个消息请求完成一个账户向另一个账户转账的交易(一次修改两个用户账户的数据,并且保证金额的平衡);

——是否支持同一个消息请求完成一个账户向多个账户转账的交易(一次修改多个用户账户的数据)。

2)身份认证指标

本指标定义为区块链产品应具有对用户身份进行认证的功能。

其规范性描述,应包括以下信息,具体的身份认证功能在其说明文档中提供:

——是否支持用户注册、注销的功能;

——是否支持用户登录,用户在登录态有效期内才能进行区块链上数据操作的功能;

——是否支持存储用户注册、登录和密钥信息的功能,并应说明存储的具体方式;

——是否支持用户授权(权限管理)的功能;

——是否支持复用、兼容原有的用户注册、登录的功能(如银行ukey、微信、微博等登录)。

3)查询历史数据指标

本指标定义为区块链产品应具有查询历史数据的功能。

其规范性描述,应包括以下信息,具体的查询历史功能在其说明文档中提供:

——是否支持查询历史数据的功能;

——是否支持查询当前信息的功能

——是否支持查询数据范围的权限管理。

4)节点管理指标

本指标要求区块链产品具有监测、配置、增加、删除、升级区块链中节点的功能。

其规范性描述,应包括以下信息:

——是否支持以某种方式监测区块链产品中的节点运行状态;

——是否支持以某种方式修改区块链产品中的节点配置信息(如共识算法选择等);

——是否支持以某种方式增加区块链产品中的节点;

——是否支持以某种方式删除区块链产品中的节点;

——是否支持以某种方式升级区块链产品中的节点。

5)故障恢复能力指标

本指标定义为区块链产品提供商应承诺或告知用户如出现故障时,故障恢复的能力。

其规范性描述,应包括以下信息,具体的故障恢复能力在其他说明文档中提供:

——有哪些恢复手段或技术:如降级恢复、临时方案、彻底解决等;

——什么情况下选择哪种故障恢复手段;

——当出现故障时,用户是否可以选择恢复手段,或者区块链产品提供商将优先选择哪种恢复手段;

——是否有故障监控、快速定位、自动化恢复、告知等一系列故障管控体系;

——是否有相应的故障维修人员保障。

6)应用层稳定性指标

本指标要求区块链产品提供商应承诺用户,其区块链产品在满足运行所需的条件下,平台层节点正常变动期间能确保应用层业务正常可用,且能通过技术测试手段验证是否真实。应至少满足但不限于如下要求:

——平台层增加节点期间和之后,能确保应用层业务正常可用;

——在满足运行所需的条件下,平台层删除节点期间和之后,能确保应用层业务正常可用;

——平台层升级节点期间和之后,能确保应用层业务正常可用;

——平台层配置节点期间和之后,能确保应用层业务正常可用;

——其他平台层正常维护的情况,应能确保应用层业务正常可以。

7)共识机制有效性指标

本指标要求区块链产品的共识机制真实有效。且应至少满足但不限于如下要求:

——系统正常运行,能在规定时间内达成一致的、正确的共识,输出正确结果;

——任意不超过理论值的节点数故障,整个系统工作正常;

——消息重放,网络上任意节点获取用户请求消息之后,重放会执行失败;

——消息篡改,网络上任意节点获取用户请求消息之后,修改其中重要的字段(如转账金额),会执行失败;

——有效防止节点欺诈。

绝对一致的共识机制应该具备如下几种防欺诈的能力:

A.任意节点错误响应,包括执行成功对外返回“失败”、执行失败或者不执行的时候对外返回“成功”。

B.任意节点向网络中其他节点发送不同的消息请求,例如:系统中有4个节点,请求消息序列为a,b,c,d,e,其中任意一个节点不按照a,b,c,d,e的序列发送给其他节点,把a只发给其中的一个节点,把b,c,d,e发给另外两个节点。

C.任意节点通过修改本地数据,构造本节点校验合法的请求,例如,本节点余额为100单位,修改本地余额为200单位,然后发起200单位的转账。

对于上述情况,共识机制需要保证在小于理论节点数欺诈的情况下,节点间数据能够恢复正确且一致,并且和对外响应结果正确且一致。

大概率一致的共识机制应该具备如下几种防欺诈的能力:

A.节点打包伪造的交易记录。

B.伪造节点发起广播,并没有获取到权限的节点将交易记录打包广播给其他节点。

C.非打包数据的节点故意不处理或者错误处理来自打包数据的节点过来的请求。

共识机制保证有小于50%权益的节点欺诈情况下,系统能够正确运行。

8)数据可审计性指标

本指标定义为区块链产品按用户要求、合规需要或是安全取证调查等原因应能具备提供相关信息的能力,如提供关键组件的运行日志、用户的操作记录等,并遵守国家相应的法律法规,配合政府监管部门的监管审查。其规范性描述,应包括以下信息:

——说明什么样的情况下,可以提供数据审查;

如政府用户在必要时,根据合规或安全需要,要求提供区块链产品安全策略文档、用户权限设置说明、安全评估报告、安全认证证书、安全事件处理报告等信息。

——发生安全事件或客户怀疑存在安全威胁,提供什么样的文档记录等:

如运维人员审操作记录、安全审计报告、安全事件处理流程记录、安全事故处理报告关键组件运行日志等信息。

9)善的私钥管理措施指标

本指标要求在典型的非公有链区块链产品中,区块链提供商应提供妥善的私钥管理措施。根据不同情况,具体要求如下:

——若私钥的存放是基于软件的方案,则:用户私钥需加密保存;

签名服务与私钥保管服务需分开部署,私钥保管服务需要密文传递私钥给签名服务;

一个用户终端被攻破不影响其他用户密钥的隐私。

——若私钥的存放是基于硬件的方案,则:应使用合规的硬件安全模块Hardware Security Module(HSM);

应具有严格的敏感操作授权审核机制;

HSM的主密钥使用n-of-m的方式进行备份,避免HSM的硬件损坏。

——若是用户自行保管私钥,则:应满足现有通行标准的智能卡(如EAL,FIDO)或者其他可行的硬件设备方案。

移动设备方案可参考现有Apple Pay,Samsung Pay等技术实现。

10)密码技术合规性指标

本指标要求区块链产品提供商应披露其区块链产品采用的密码技术,且应承诺该密码技术的加密强度、加密方式等符合国家有关规定。

11)吞吐率要求指标指标 

本指标要求区块链产品提供商应披露其区块链产品的吞吐率,并能通过技术手段验证是否真实。其规范性描述,应包括以下信息:

——在一定的节点数、硬件设备、网络带宽和网络延时等前提下,区块链产品在满足一定的失败容忍度要求下(如99.95%),每秒能处理某种类型请求的平均数量。

请求类型包括:交易请求、智能合约调用、查询、共识等。

12)核心技术自主可控指标

本指标要求区块链产品提供商应承诺其区块链产品采用的核心技术自主可控。且至少能满足以下要求:

——应告知用户其区块链产品采用的开发语言、数据库类型、是否使用了开源代码、是否具有相关产权专利等信息;

——应告知用户其区块链产品的原始代码是否自主可控,或使用的开源代码已获商业授权;

——应告知用户是否具有进行二次开发,定制改造,功能升级的能力。

13)数据私密性指标指标

本指标要求区块链产品中产生、存储和传输的数据应私有、保密,不能泄漏用户隐私信息。且至少能满足以下要求:

——若由认证机构代理用户在区块链上开展任何操作行为,用户私有信息不得在区块链产品中明文传输、存储;

——不采用全网广播的方式传输数据,而是限制在正在相关的已授权节点之间;

——对用户数据的访问采用权限控制,持有对应密钥的用户才能解密和访问数据;

——建议采用零知识证明、环签名和同态加密等隐私保护算法,规避隐私暴露。

14)最小硬件要求指标

本指标要求区块链产品提供商应披露其区块链产品在满足共识有效性要求的前提下,正常运行的最小硬件资源要求,包含硬件设备和网络要求,并能通过技术测试手段验证是否真实。

3.2         一致性问题

一致性算法是用来解决一致性问题的,那么什么是一致性问题呢 在分布式系统中,一致性问题(consensus problem)是指对于一组服务器,给定一组操作,我们需要一个协议使得最后它们的结果达成一致。更详细的解释就是,当其中某个服务器收到客户端的一组指令时,它必须与其它服务器交流以保证所有的服务器都是以同样的顺序收到同样的指令,样的话所有的服务器会产生一致的结果,看起来就像是一台机器一样。

实际生产中一致性算法需要具备以下属性:

Safety:即不管怎样都不会返回错误的结果。

Available:只要大部分的机器正常,就仍然可以工作.比如五台机器的集群允许最多两台机器坏掉。

不依赖时间来确保一致,即系统是异步的。

一般情况下,运行时间由大多数的机器决定,不会因为有少部分慢的机器而影响总体效率。

为什么要解决一致性问题?

我们可以说一个分布式系统可靠性达到99.99...%,但不能说它达到了100%,为什么 就是因为一致性问题是无法彻底解决的。以下四个分布式系统中的问题都与一致性问题有关:

reliable multicast 可靠组播

membership protocal (failuer detector) 集群中成员的管理

leader election 选举算法

mutual exclution 互斥,例如资源的独占和分配

分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。

基于消息传递通信模型的分布式系统,不可避免地会发生以下错误:进程可能会慢、垮、重启,消息可能会延迟、丢失、重复(不考虑“Byzantinefailure”)。

一个典型的场景是:在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么它们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个「一致性算法」以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。从20世纪80年代起对于一致性算法的研究就没有停止过。

通俗地把一致性的问题可分解为2个问题:

a)     任何一次修改保证数据一致性。

b)     多次数据修改的一致性。

在弱一致性的算法,不要求每次修改的内容在修改后多副本的内容是一致的,对问题1的解决比较宽松,更多解决问题2,该类算法追求每次修改的高度并发性,减少多副本之间修改的关联性,以获得更好的并发性能。例如最终一致性,无所谓每次用户修改后的多副本的一致性及格过,只要求在单调的时间方向上,数据最终保持一致,如此获得了修改极大的并发性能。

在强一致性的算法中,强调单次修改后结果的一致,需要保证了对问题1和问题2要求的实现,牺牲了并发性能。本文是讨论对解决问题1实现算法,这些算法往往在强一致性要求的应用中使用。解决问题1的方法,通常有两阶段提交算法、采用分布式锁服务和采用乐观锁原理实现的同步方式,下面分别介绍这几种算法的实现原理。

两阶段提交算法

在两阶段提交协议中,系统一般包含两类机器(或节点):一类为协调者(coordinator),通常一个系统中只有一个;另一类为事务参与者(participants,cohorts或workers),一般包含多个,在数据存储系统中可以理解为数据副本的个数。两阶段提交协议由两个阶段组成,在正常的执行下,这两个阶段的执行过程如下所述:

阶段1:请求阶段(commit-request phase,或称表决阶段,voting phase)。

在请求阶段,协调者将通知事务参与者准备提交或取消事务,然后进入表决过程。在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)。

阶段2:提交阶段(commit phase)。

在该阶段,协调者将基于第一个阶段的投票结果进行决策:提交或取消。当且仅当所有的参与者同意提交事务协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。参与者在接收到协调者发来的消息后将执行响应的操作。

举个例子:A组织B、C和D三个人去爬长城:如果所有人都同意去爬长城,那么活动将举行;如果有一人不同意去爬长城,那么活动将取消。用2PC算法解决该问题的过程如下:

首先A将成为该活动的协调者,B、C和D将成为该活动的参与者。

阶段1:A发邮件给B、C和D,提出下周三去爬山,问是否同意。那么此时A需要等待B、C和D的邮件。B、C和D分别查看自己的日程安排表。B、C发现自己在当日没有活动安排,则发邮件告诉A它们同意下周三去爬长城。由于某种原因,D白天没有查看邮件。那么此时A、B和C均需要等待。到晚上的时候,D发现了A的邮件,然后查看日程安排,发现周三当天已经有别的安排,那么D回复A说活动取消吧。

阶段2:此时A收到了所有活动参与者的邮件,并且A发现D下周三不能去爬山。那么A将发邮件通知B、C和D,下周三爬长城活动取消。此时B、C回复A“太可惜了”,D回复A“不好意思”。至此该事务终止。

两阶段提交算法在分布式系统结合,可实现单用户对文件(对象)多个副本的修改,多副本数据的同步。其结合的原理如下:

a)     客户端(协调者)向所有的数据副本的存储主机(参与者)发送:修改具体的文件名、偏移量、数据和长度信息,请求修改数据,该消息是1阶段的请求消息。

b)     存储主机接收到请求后,备份修改前的数据以备回滚,修改文件数据后,向客户端回应修改成功的消息。如果存储主机由于某些原因(磁盘损坏、空间不足等)不能修改数据,回应修改失败的消息。

c)      客户端接收发送出去的每一个消息回应,如果存储主机全部回应都修改成功,向每存储主机发送确认修改的提交消息;如果存在存储主机回应修改失败,或者超时未回应,客户端向所有存储主机发送取消修改的提交消息。该消息是2阶段的提交消息。

d)     存储主机接收到客户端的提交消息,如果是确认修改,则直接回应该提交OK消息;如果是取消修改,则将修改数据还原为修改前,然后回应取消修改OK的消息。

e)     客户端接收全部存储主机的回应,整个操作成功。

在该过程中可能存在通信失败,例如网络中断、主机宕机等诸多的原因,对于未在算法中定义的其它异常,都认为是提交失败,都需要回滚,这是该算法基于确定的通信回复实现的,在参与者的确定回复(无论是回复失败还是回复成功)之上执行逻辑处理,符合确定性的条件当然能够获得确定性的结果哲学原理。

分布式锁服务

分布式锁是对数据被外界修改持保守态度,在整个数据处理过程中将数据处于锁定状态,在用户修改数据的同时,其它用户不允许修改。

采用分布式锁服务实现数据一致性,是在操作目标之前先获取操作许可,然后再执行操作,如果其他用户同时尝试操作该目标将被阻止,直到前一个用户释放许可后,其他用户才能够操作目标。分析这个过程,如果只有一个用户操作目标,没有多个用户并发冲突,也申请了操作许可,造成了由于申请操作许可所带来的资源使用消耗,浪费网络通信和增加了延时。

采用分布式锁实现多副本内容修改的一致性问题,选择控制内容颗粒度实现申请锁服务。例如我们要保证一个文件的多个副本修改一致, 可以对整个文件修改设置一把锁,修改时申请锁,修改这个文件的多个副本,确保多个副本修改的一致,修改完成后释放锁;也可以对文件分段,或者是文件中的单个字节设置锁,实现更细颗粒度的锁操作,减少冲突。

常用的锁实现算法有Lamport bakery algorithm (俗称面包店算法),还有Paxos算法。下面对其原理做简单概述。

Lamport面包店算法

是解决多个线程并发访问一个共享的单用户资源的互斥问题的算法。由Leslie Lamport(英语:Leslie Lamport)发明。Lamport把这个并发控制算法可以非常直观地类比为顾客去面包店采购。面包店只能接待一位顾客的采购。已知有n位顾客要进入面包店采购,安排他们按照次序在前台登记一个签到号码。该签到号码逐次加1。根据签到号码的由小到大的顺序依次入店购货。完成购买的顾客在前台把其签到号码归0. 如果完成购买的顾客要再次进店购买,就必须重新排队。

这个类比中的顾客就相当于线程,而入店购货就是进入临界区独占访问该共享资源。由于计算机实现的特点,存在两个线程获得相同的签到号码的情况,这是因为两个线程几乎同时申请排队的签到号码,读取已经发出去的签到号码情况,这两个线程读到的数据是完全一样的,然后各自在读到的数据上找到最大值,再加1作为自己的排队签到号码。为此,该算法规定如果两个线程的排队签到号码相等,则线程id号较小的具有优先权。

把该算法原理与分布式系统相结合,即可实现分步锁。

Paxos算法(http://zh.wikipedia.org/wiki/Paxos算法)

Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。

节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。

Paxos算法就是一种基于消息传递模型的一致性算法。BigTable使用一个分布式数据锁服务Chubby,而Chubby使用Paxos算法来保证备份的一致性。采用乐观锁原理实现的同步。我们举个例子说明该算法的实现原理。如一个金融系统,当某个操作员读取用户的数据,并在读出的用户数据的基础上进行修改时(如更改用户帐户余额),如果采用前面的分布式锁服务机制,也就意味着整个操作过程中(从操作员读出数据、开始修改直至提交修改结果的全过程,甚至还包括操作员中途去煮咖啡的时间),数据库记录始终处于加锁状态,可以想见,如果面对几百上千个并发,这样的情况将导致怎样的后果。

乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本( Version)记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

对于上面修改用户帐户信息的例子而言,假设数据库中帐户信息表中有一个 version 字段,当前值为 1 ;而当前帐户余额字段( balance )为 $100 。

操作员 A 此时将其读出(version=1),并从其帐户余额中扣除 $50($100-$50 )。在操作员 A 操作的过程中,操作员B也读入此用户信息( version=1 ),并从其帐户余额中扣除 $20 ( $100-$20 )。操作员 A 完成了修改工作,将数据版本号加一( version=2 ),连同帐户扣除后余额( balance=$50 ),提交至数据库更新,此时由于提交数据版本大于数据库记录当前版本,数据被更新,数据库记录 version 更新为 2 。操作员B 完成了操作,也将版本号加一( version=2 )试图向数据库提交数据( balance=$80 ),但此时比对数据库记录版本时发现,操作员 B 提交的数据版本号为 2 ,数据库记录当前版本也为 2 ,不满足 “ 提交版本必须大于记录当前版本才能执行更新 “ 的乐观锁策略,因此,操作员 B 的提交被驳回。这样,就避免了操作员 B 用基于 version=1 的旧数据修改的结果覆盖操作员A 的操作结果的可能。

3.2.1   FLP不可能原理

FLP Impossibility(FLP不可能性)是分布式领域中一个非常著名的结果,该结果在专业领域被称为“定理”,其地位之高可见一斑。该定理的论文是由Fischer, Lynch and Patterson三位作者于1985年发表,之后该论文毫无疑问得获得了Dijkstra奖。顺便要提一句的是,Lynch是一位非常著名的分布式领域的女性科学家,研究遍布分布式的方方面面,对分布式领域有着极其卓越的贡献,其著有<<Distributed Algorithms>>一书,书中有非常严谨而简洁的逻辑讨论了许许多多的分布式算法。

FLP给出了一个令人吃惊的结论:在异步通信场景,即使只有一个进程失败,也没有任何算法能保证非失败进程达到一致性!因为同步通信中的一致性被证明是可以达到的,因此在之前一直有人尝试各种算法解决以异步环境的一致性问题,有个FLP的结果,这样的尝试终于有了答案。FLP证明最难理解的是没有一个直观的sample,所有提到FLP的资料中也基本都回避了sample的要求。究其原因,sample难以设计,除非你先设计几种一致性算法,并用FLP说明这些算法都是错误的。

任何分布式算法或定理,都尤其对系统场景的假设,这称为系统模型。FLP基于下面几点假设:

1)    异步通信
与同步通信的最大区别是没有时钟、不能时间同步、不能使用超时、不能探测失败、消息可任意延迟、消息可乱序

2)    通信健壮
只要进程非失败,消息虽会被无限延迟,但最终会被送达;并且消息仅会被送达一次(无重复)

3)    fail-stop模型
进程失败如同宕机,不再处理任何消息。相对Byzantine模型,不会产生错误消息

4)    失败进程数量
最多一个进程失败

在现实中,我们都使用TCP协议(保证了消息健壮、不重复、不乱序),每个节点都有NTP时钟同步(可以使用超时),纯的异步场景相对比较少。但随着只能终端的发展,每个手机会为省电而关机,也会因为不在服务区而离线,这样的适用场景还是存在。

我们再衡量一个分布式算法是否正确时有三个标准:

1)    Termination(终止性)
非失败进程最终可以做出选择

2)    Agreement(一致性)
所有的进程必须做出相同的决议

3)    Validity(合法性)
进程的决议值,必须是其他进程提交的请求值

终止性,描述了算法必须在有限时间内结束,不能无限循环下去;一致性描述了我们期望的相同决议;合法性是为了排除进程初始值对自身的干扰。

https://blog.csdn.net/chen77716/article/details/27963079

3.2.2    CAP原理

CAP理论在1998年首次被提出,1999年被发表为文章,2000年Brewer在PODC大会演说时将CAP作为假设,2002年才被证明为定理。CAP定理属于理论计算机科学中的内容。

一个分布式系统最多只能同时满足 一致性(Consistency),可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

CAP的定义如下:

一致性(Consistency)

一致性(Consistency),说的是每一个更新成功后,分布式系统中的所有节点,都能读到最新的信息。即所有节点相当于访问同一份内容,这样的系统就被认为是强一致性的。

2)    可用性(Availability)

可用性(Availability),是每一个请求,都能得到响应。请求只需要在一定时间内返回即可,结果可以是成功或者失败,也不需要确保返回的是最新版本的信息。

3)    分区容错性(Partition tolerance)

分区容错性(Partitiontolerance),是说在网络中断,消息丢失的情况下,系统照样能够工作。这里的网络分区是指由于某种原因,网络被分成若干个孤立的区域,而区域之间互不相通。

这里可以初亏出,如果要满足P,就很难同时满足C和A。

3.2.3    ACID原理

ACID,是指在数据库管理系统(DBMS)中,事务(transaction)所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

在数据库系统中,一个事务是指:由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可拆分。这个过程被称为一个事务,具有ACID特性。

原子性(Atomicity)

一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性(Consistency)

事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。

隔离性(Isolation)

指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。

持久性(Durability)

指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

事务的(ACID)特性是由关系数据库管理系统(RDBMS,数据库系统)来实现的。数据库管理系统采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行事务前的初始状态。

3.3         区块安全3.3.1    加密算法

摘要算法

在开发的过程中,为了能够保证程序能够安全高效运行,数据信息不被泄露,我们通常都会对要操作的数据就行加解密,从而提高程序的安全性。比如常见的客户端和后台服务器的数据交互传输,我们通常都会对服务器返回的数据进行解密,服务器返回给用户的数据进行加密,客户端提交的数据也会加密之后提交给后台服务器,后台服务器会按照对应的规则进行解密或者加密的传输,尤其是做金融项目的,数据接口的操作,更需要进行加密交互。

a)     MD5算法(Message Digest Algorithm 5) 可以保证数据传输完整性和一致性摘要后长度为16字节 摘要信息中不包含原文信息,所有加密结果不可逆(无法解密)一般在传送文件时对源文件进行md5 hash传送到对方后检测hash值是否相等,如果相等文件传输正确如果不相等,说明文件被篡改(加入木马)或者未传送完成,其他MD算法 MD2(16字节)

b)     SHA算法Secure HashAlgorithm(安全hash算法)安全散列算法(hash函数将原始信息压缩返回散列值)可以是SHA-1,SHA1是目前最安全的摘要算法摘要的长度为 20字节,其他的SHA包括 SHA-256(32字节)

2)     编码和解码

a)     16进制 编码  计算机系统使用 2进制 为了编写存储方便一般将2进制 转换为16进制字符串 其中base64也是其中类似转换一种 16进制编码和base64都是可逆的一般用于存储

b)     Base64编码  用于将字节数组和字符串互相转换

3)     对称加密

a)     DES算法(Data Encryptin Standard)是对称加密算法的一种使用秘钥加解密秘钥必须是56字节  

概念解释:

           秘钥:用于加密和解密的钥匙,秘钥可以使用 getEncoded方法获取byte[] 存储在文件系统中

           公钥和私钥:用于非对称加密的钥匙,公钥加密、私钥解密 、私钥一般用于解密所以私钥一般存储在密钥库中

           口令:一般是自定义的字符串,可以通过口令和盐生成秘钥 

b)     AES算法 (Advanced Encryptin Standard 高级加密标准) 是对称加密算法一种升级因为 56位秘钥 在计算机系统性能越来越高的前提下 56位很容易被破解所以AES将秘钥的长度提高到128, 192 or 256 必须是这三个数128默认可以使 192和256由于美国限制需要相关授权否则抛出异常

c)      PBE算法(Password Base Encryption) 基于自定义口令的加解密算法 定义口令同时还必须定义盐和使用盐混淆的次数加解密过程中该三个参数都必须一致

4)     非对称性加密

a)     DH算法  是一种对称加密到非对称加密的过度算法,使用DH算法生成密钥对使用对称加密算法获取秘钥后进行加解密,双方必须都存在公钥和私钥。

模型分析

我们以消息传递模型为例,甲方作为发送者,乙方作为接受者,分述甲乙双方如何构建密钥、交互密钥和加密数据。

首先,甲乙双方需要在收发消息前构建自己的密钥对,如图1所示。

甲乙双方构建密钥需要经过以下几个步骤:

                         i.          由消息发送的一方构建密钥,这里由甲方构建密钥。

                         ii.          由构建密钥的一方向对方公布其公钥,这里由甲方向乙方发布公钥。

                        iii.          由消息接收的一方通过对方公钥构建自身密钥,这里由乙方使用甲方公钥构建乙方密钥。

                        iv.          由消息接收的一方向对方公布其公钥,这里由乙方向甲方公布公钥。

这里要注意的是,乙方构建自己密钥对的时候需要使用甲方公钥作为参数这是很关键的一点,如果缺少了这一环节则无法确保甲乙双方获得同一个密钥,消息加密更无从谈起。

其次,假设甲乙双方事先约定好了用于数据加密的对称加密算法(如AES算法),并构建本地密钥(即对称加密算法中的密钥),如图2所示。

甲方需要使用自己的私钥和乙方的公钥才能构建自己的本地密钥,乙方需要使用自己的私钥和甲方的公钥才能构建自己的本地密钥。

虽然甲乙双方使用了不同的密钥来构建本地密钥,但是甲乙两方得到的密钥其实是一致的,后面的demo可以证明,也正是基于此,甲乙双方才能顺利地进行加密消息的传送。

最后,甲乙双方构建了本地密钥后,可按照基于对称加密算法的消息传递模型完成消息传递。如图4所示。

作为对称加密体制向非对称加密体制的一种过渡,DH算法仅仅比一般的对称加密算法多了密钥对的构建和本地密钥的构建这两项操作,而真正的数据加密/解密操作仍由对称加密算法完成。

b)    RSA算法,目前影响力最大的非对称加密算法,一般公钥对外公开加密后传送给服务器,服务器使用独有的私钥解密(当然也可以私钥加密公钥解密,一般不这样,因为谁都有公钥都能解密加密就没有意义了)加密的数据在传输过程是无法破解的秘钥对初始化大小必须是64的倍数实际值只能在512-1024中。RSA算法中一般公钥和私钥都都可以调用getEncoded()转换为byte数组使用base64编码后存储在文件中 方便公钥分发读取文件后需要转换对应。

5)    数据签名

签名是非对称加密技术和摘要技术的综合运用用户A将明文和使用私钥加密的明文摘要一起发送给用户B 用户B使用公钥解密出摘要 然后使用相同的摘要

算法将明文摘要  将两个摘要字符串比较如果相等 则表明内容没有被篡改

3.3.2    数字签名

所谓数字签名(Digital Signature)(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。

生成签名

一般来说,不直接对消息进行签名,而是对消息的哈希值进行签名,步骤如下。

a)     对消息进行哈希计算,得到哈希值

b)     利用私钥对哈希值进行加密,生成签名

c)     将签名附加在消息后面,一起发送过去

2)    验证签名

a)     收到消息后,提取消息中的签名

b)     用公钥对签名进行解密,得到哈希值1。

c)     对消息中的正文进行哈希计算,得到哈希值2。

d)     比较哈希值1和哈希值2,如果相同,则验证成功。

3.3.3    PKI体系

公钥基础设施(Public Key Infrastructure,缩写PKI)的基础与核心。是电子商务安全实施的基本保障。因此。对PKI技术的研究和开发成为眼下信息安全领域的热点。当中包含PKI组成、证书认证机构CA、PKI应用、应用编程接口和PKI标准等,并对CA的开发做了简要分析。本文对PKI。特别是CA的开发、应用和普及具有一定的促进作用。

PKI採用证书进行公钥管理,通过第三方的可信任机构(认证中心。即CA),把用户的公钥和用户的其它标识信息捆绑在一起,当中包含username和电子邮件地址等信息。以在Internet网上验证用户的身份。PKI把公钥password和对称password结合起来。在Internet网上实现密钥的自己主动管理,保证网上数据的安全传输。

因此,从大的方面来说,全部提供公钥加密和数字签名服务的系统,都可归结为PKI系统的一部分,PKI的主要目的是通过自己主动管理密钥和证书,为用户建立起一个安全的网络执行环境,使用户能够在多种应用环境下方便的使用加密和数字签名技术。从而保证网上数据的机密性、完整性、有效性。数据的机密性是指数据在传输过程中,不能被非授权者偷看;数据的完整性是指数据在传输过程中不能被非法篡改;数据的有效性是指数据不能被否认。

一个有效的PKI系统必须是安全的和透明的,用户在获得加密和数字签名服务时,不须要具体地了解PKI的内部运作机制。

PKI作为一组在分布式计算系统中利用公钥技术和X.509证书所提供的安全服务。企业或组织可利用相关产品建立安全域,并在当中公布密钥和证书。

在安全域内,PKI管理加密密钥和证书的公布,并提供诸如密钥管理(包含密钥更新,密钥恢复和密钥托付等)、证书管理(包含证书产生和撤销等)和策略管理等。PKI产品也同意一个组织通过证书级别或直接交叉认证等方式来同其它安全域建立信任关系。

这些服务和信任关系不能局限于独立的网络之内。而应建立在网络之间和Internet之上。为电子商务和网络通信提供安全保障,所以具有互操作性的结构化和标准化技术成为PKI的核心

PKI在实际应用上是一套软硬件系统和安全策略的集合,它提供了一整套安全机制。使用户在不知道对方身份或分布地非常广的情况下,以证书为基础。通过一系列的信任关系进行通讯和电子商务交易。

技术名词解析

以太坊篇 -点击此处

比特币篇 -点击此处

  欢迎关注技术那些事儿,不断解密区块链技术

  关注后

  回复“报告”,获得最新的2018年区块链报告

  回复“白皮书”,获得最新的2018年区块链白皮书

  

关键词:比特币新闻 币牛牛

转载自比特币新闻网(www.btc268.com),提供比特币行情走势分析与数字货币投资炒币最新消息。

原文标题:区块链核心技术解密

原文地址:http://www.btc268.com/qkl/zs/15968.html

本文来源:区块链资讯编辑:btc268.com

本文仅代表作者个人观点,与本网站立场无关。

本网站转载信息目的在于传递更多信息。请读者仅作参考,投资有风险,入市须谨慎!

'); })();