基于区块链技术的密钥生命周期演示设计*
2020-07-03刘天野张艳硕朱倩倩
刘天野, 张艳硕,2, 石 钰, 朱倩倩
1. 北京电子科技学院 密码科学与技术系, 北京100070
2. 密码科学技术国家重点实验室, 北京100878
1 引言
公钥密码体制自1976 年由Diffie 和Hellman 两位学者提出[1]后, 40 余年来得到了长足的发展与改进. 作为组成这一体制重要一环的密钥生命周期在传统PKI 架构、基于身份的密码体制和无证书公钥密码系统中均扮演着特殊角色. 然而在现如今的主流应用中, 密钥生命周期并没有引起高度重视, 也没有对密钥生命周期进行专业性、模块化的设计与管理, 以至于在密钥生成、更新、注销和归档等方面产生了诸多问题.
现阶段, 密钥生命周期主要是指公私钥对以及相关证书的创建、颁发及取消等过程. 在传统的PKI 架构中, 密钥的生命周期主要以LDAP (Lightweight Directory Access Protocol) 服务器进行管理维护, 其安全性已经受到了李澜等[2]业界专业人士的质疑. 针对LDAP 目录服务的威胁主要有针对认证信息的攻击、针对数据通信的攻击和针对访问权限的攻击等[3]. 如何应用新技术破解密钥生命周期的管理与维护难题已成为一项亟待解决的重要工作.
区块链技术也被称为分布式账簿技术[4](Distributed Ledger Technology), 用于在分布式的网络中构建起节点之间的共识. 区块链技术具有去中心化、时序数据、集体维护、准匿名性、安全可信和可编程性等特点. 通过运用区块链技术, 能够有效解决中心节点易受攻击、数据库易篡改等现实问题.
应用区块链技术, 针对密钥生命周期这一应用场景, 对传统密钥生命周期进行重新设计, 解决了现存的实际问题, 同时有诸多益处: 利用区块链的不可更改的特性来解决公钥密码体制中的公钥认证问题; 通过将系统中的运算和存储能力分散到网络中的众多节点中去, 实现在各个节点达成共识; 利用分布式系统的优势提供对查询请求的快速响应; 当部分节点被恶意节点攻击, 由于节点中存有的信息多数为公开信息,所以不会影响系统的正常运作.
2 密钥生命周期
2.1 密钥生命周期概述
密钥生命周期[5]是指一组密钥从产生到销毁所经历的一系列状态, 决定着密码系统的安全可靠, 具有重要意义. 典型的密钥生命周期如图1 所示[6].
以传统的PKI 架构为例, 密钥的生命周期包含以下12 个环节[7]:
(1) 用户登记: 一个用户通过申请成为保密域里的一个授权成员, 主要过程包括获取、创建或交换口令、PIN 等身份认证信息;
(2) 用户初始化: 用户初始它的保密系统(硬件或软件), 使其在密钥安装后能够立即投入使用, 且符合安全标准;
(3) 密钥产生: 采用适当的算法产生密钥, 或从可信的地方获取密钥, 此过程要保证密钥的随机性, 可通过真随机数发生器采集物理噪声进行随机密钥的生成;
(4) 密钥安装: 将密钥安装在保密系统的软件或硬件中, 常见的安装方法有输入口令或PIN, 读取磁盘、只读存储器、芯片卡等;
(5) 密钥登记: 在安装密钥时, 赋予密钥一个特定的名称并将其记录下来. 例如, 对于公开密钥, 公开密钥授权机构产生一个密钥, 然后放到一个公共目录上, 以便他人使用. 通常采用证书的形式来对公钥和身份实体信息进行绑定;
图1 密钥的生命周期Figure 1 Key life cycle
(6) 密钥的正常使用: 密钥被用户系统使用, 直到使用期满为止;
(7) 密钥备份: 将密钥存贮在一个独立的、安全的存储介质上, 以便日后恢复使用, 在双证书体制中,加密证书的私钥通常在KMC (Key Management Center) 进行备份;
(8) 密钥更新: 密钥使用一段时间后, 泄漏的风险就会加大, 需要产生新的密钥来代替旧的密钥;
(9) 密钥归档: 一组密钥长时间不再被用户使用, 但该密钥日后仍有使用的需求, 可以将其存储在安全的档案文件中以保证其机密性和完整性;
(10) 密钥注销和销毁: 用户确定未来不再会需要使用该组密钥, 或由于一些特殊原因导致密钥泄露,就可从系统中注销该组密钥, 同时消除与之有关的一切记录;
(11) 密钥恢复: 当密钥以安全的方式被丢失(如设备故障、忘记口令), 可以从密钥备份中找回该密钥,此项功能通常由KMC 提供;
(12) 密钥撤回: 如果感觉使用中的密钥有危险, 就可以把密钥撤回, 从系统中暂时删除该密钥, 并将它先归档.
针对现实中的不同场景, 选用了上述12 个环节的密钥生命周期, 并基于此进行演示设计.
2.2 密钥生命周期发展现状
本节详细说明密码生命周期在传统PKI 架构、基于身份的密码体制和无证书公钥密码系统中面临的安全问题.
(1)PKI 架构下的密钥生命周期
在PKI 体制下用户自己生成公私钥对, 由认证机构颁发证书以实现用户与公钥信息的绑定. PKI 架构采用的层级结构构建, 由上层认证机构为下层认证机构颁发证书, 系统的安全性基于用户对上层认证机构的信任[8]. 林璟锵、荆继武等人[9]明确指出, 虽然PKI 技术已经较为成熟、进入大规模应用的阶段,但是随着在实际应用系统中的大量部署、各种重要应用领域采纳PKI 技术, 近年来陆续出现了大量应用推广部署中的种种难题. 在PKI 体制中, CA (Certificate Authority) 作为证书颁发机构, 管理着密钥从产生到注销的全生命周期, 属于体制中的核心角色. 荆继武[10]针对入侵容忍的CA 方案提出了6 点假设, 充分证明了PKI 架构中CA 是一个薄弱环节, 一旦CA 被入侵后, 可能存在一系列针对密钥生命周期的安全问题:
a. 被入侵的认证机构滥发证书或该认证机构被注销, 从而导致该机构下层的所有认证机构均不被信任;
b. 其颁发的证书也无法正常使用, 使正常用户对系统产生信任危机.
(2) 基于身份的密码体制中的密钥生命周期
基于身份的密码体制是一种将用户信息作为公钥, 以实现用户和公钥信息绑定的方案[11]. 但由于用户私钥由PKG (Private Key Generator) 产生这一特点, 引发了一些新的问题[12], 密钥生命周期的安全也会受到威胁:
a. 在PKG 向用户传输私钥的过程中, 攻击者可以通过窃听获取用户的私钥, 甚至还可以利用中间人攻击, 伪造用户私钥;
b. 所有用户的私钥均由PKG 生成, 这就不可避免的产生密钥托管的问题, 用户必须绝对地无条件信任PKG, 且要承担PKG 阅读用户的秘密通信或伪造签名的风险.
c. 由于PKG 掌握所有用户的私钥信息, 一旦攻击者成功入侵PKG 的中心数据库, 攻击者就能破解所有用户的私钥;
d. 由于没有公钥管理设施, 基于身份的密码体制中的密钥生命周期管理成为一项短板. 当用户私钥泄露或被攻击者以某种方式获得时, 用户无法及时对公私钥对进行及时的注销. 即使在公钥中预设了密钥有效期, 但在攻击成功后到密钥自动注销这一期间内攻击者的攻击行为是不受任何约束的.
(3) 无证书公钥密码体制中的密钥生命周期
无证书公钥密码体制是在充分吸收基于身份的密码体制和PKI 的优点后提出的一种解决方案[13].无证书公钥系统中存在一个中心节点, 称为KGC (Key Generation Center), KGC 利用主密钥和节点的信息生成部分私钥发送给用户, 用户利用接收到的部分密钥和自己的秘密数在本地生成私钥, 再利用秘密数和KGC 选取的系统参数生成对应的公钥. KGC 不再掌握用户的私钥信息, 证书管理问题和密钥托管问题也因此得以解决. 但与此同时也带来了一些关于密钥生命周期的安全问题[14]:
a. 用户的公钥由用户生成, 需要通过其他方法来解决公钥认证的问题;
b. 密钥对的生成方式复杂, 需要较多的信息, 要求密钥生成算法存在多个可分离的运算步骤;
c. 较为复杂的加密算法存在设计缺陷的概率也较高, 使得加密效果无法达到预定目标.
综上所述, 在现行的三种系统中, 密钥生命周期都没有得到安全有效的保护. 本文结合区块链技术, 设计提出了基于区块链技术的密钥生命周期演示设计, 利用其去中心化、集体维护、安全可信、可编程和防篡改等特点, 有效解决了密钥生命周期的安全问题. 方案主要对密钥生命周期的存储安全和认证安全进行设计, 可应用于上述三种密码体制中, 有效解决其中的密钥生命周期的管理问题, 为密码系统的安全提供保障.
3 基于区块链技术的密钥生命周期
3.1 区块链技术
区块链起源于化名为中本聪[15](Satoshi Nakamoto) 的学者在2008 年发表的奠基性论文: “比特币:一种点对点电子现金系统”. 狭义来讲, 区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成一种链式数据结构, 并以密码学方式保证不可篡改和不可伪造的分布式账本. 广义来讲, 区块链是利用块链式数据结构来验证与存储数据, 利用分布式节点共识算法来生成和更新数据, 利用密码学方式保证数据传输和访问的安全, 利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式[16].
区块链技术具有去中心化等特点,可根据应用场景和设计体系不同分为: 公有链(Public Blockchain)、联盟链(Consortium Blockchain) 和私有链(Private Blockchain). 公有链的各个节点可以自由加入和退出网络, 并参加链上数据的读写, 运行时以扁平的拓扑结构互联互通, 网络中不存在任何中心化的服务端节点. 联盟链的各个节点通常有与之对应的实体机构组织, 通过授权后才能加入与退出网络, 各机构组织组成利益相关的联盟, 共同维护区块链的健康运转. 私有链各个节点的写入权限收归内部控制, 而读取权限可视需求选择性地对外开放, 同时私有链仍然具备区块链多节点运行的通用结构, 适用于特定机构的内部数据管理与审计.
区块链科学研究所创始人Melanie Swan[17]按照应用范围和发展阶段将区块链应用分为1.0、2.0 和3.0 三个阶段. 区块链1.0 支撑虚拟货币应用, 一般用于支付, 其典型特征[17]有: 链状数据块结构、全网共享账本、非对称加密和源代码开源.
区块链2.0 支撑智能合约应用, 并考虑使用区块链将其他类型的资产转移到货币之外, 典型特征有:智能合约、分布式应用、虚拟机. 其核心理念是把区块链作为一个可编程的分布式信用基础设施, 支持智能合约应用. 当前主流区块链应用仍处于1.0 和2.0 阶段, 区块链3.0 的定义和代表应用在业界仍有争议.故在构建区块链应用时采用经典的区块链2.0 架构, 区块链2.0 技术架构如图2 所示. 在应用层以下的底层架构主要分为数据层、网络层、共识层、激励层和智能合约层. 本文在设计构建时采用了标准的区块链2.0 层级架构, 在网络层采用的是Kademlia 协议进行P2P 网络的构建, 共识层采用的是PoW+PBFT 的混合共识机制.
图2 区块链2.0 技术架构Figure 2 Blockchain 2.0 technology architecture
3.2 基于区块链的密钥生命周期优势
区块链技术具有去中心化、安全透明、智能合约和可追溯等特点[18]. 其分布式特性保证了每个节点拥有均等的权利和义务, 单个节点对整体影响会非常小, 从而形成去中心化的可信任的系统. 而且满足安全性和所有权验证.
去中心化. 传统网络数据通常有中心数据库, 区块链技术的最大创新就是将数据库去中心化[19], 无需任何第三方机构的介入, 在本系统中只要密钥申请方和密钥签发方双方达成共识, 就可以产生信用体系,以最小的成本获得信任. 正是因为这个特质, 所有的签发均可以在双方达成共识后瞬间完成, 而双方的账本信息同样也可以实现即时更新, 达到了归档的目的.
信息透明化. 区块链数据库是去中心化的数据库, 是向所有用户开放. 任何人均可以通过相关节点来查询或获取相关数据信息, 并依照这些信息开发新的应用程序. 换言之, 本系统虽然基于联盟链框架, 普通用户不能直接参与区块共识的过程, 但仍然能够查询联盟区块链中的所有数据, 透明度是比较高的.
安全性强. 在去中心化网络下, 单个节点的安全防护能力与中心化网络相比较而言相对较差, 容易受到攻击[20]. 然而在本系统中, 基于联盟链的准入标准, 节点的安全防护能力相对较强, 并且篡改其中任何一个节点的数据均是无效的, 除非人为的能够控制全网51% 的算力, 但这几乎不可能实现. 同时, 在区块链网络节点是点对点相连, 没有中心服务器, 也不存在中心接口, 对任何单一接口攻击是无效的, 安全系数比较高.
合约智能化. 智能合约是执行合约条款的程序代码, 用智能合约替代传统纸质合约可以大大地减少在合约制定、控制协议和执行效能上的人工花费与计算成本[21]. 当一个预先编好的条件被触发时, 智能合约执行相应的合同条款. 数据拥有者设定数据共享的范围、时限等约束条件, 使用计算机语言代替法律条款来规范数据访问者行为. 这些约束条件通过计算机脚本语言在加入联盟链的节点上自动执行, 保证数据共享的合法性和公平性. 在本系统中, 密钥的生命周期被预先写入智能合约中, 当条件触发时, 合约自动执行, 提高了系统的自动化程度.
可追溯性. 区块链中的每一个区块都包含上一个区块的Hash 值, 以Hash 值为索引将每一个区块都依次顺序相连. 在本系统中, 每一个证书区块均包含一段时间内的证书信息, 任何证书信息的改动都将使Hash 值发生改变, 从而改变之后的所有区块. 这种设计从底层上保障了数据的可追溯性和不可篡改性[22].
4 基于区块链的密钥生命周期演示设计方案
4.1 区块链网络设计
完整的区块链网络分为数据层、网络层、共识层、激励层、合约层和应用层. 方案在设计时考虑到密钥生命周期的现实应用场景, 其对于数据的安全性和可靠性有着特殊的需求, 所以在数据层和共识层进行了创新设计.
(1) 混合共识机制
比特币电子现金系统采用了PoW(工作量证明机制) 来保证节点间的共识. 其安全性已经得到了公认,但其交易的高延迟和对计算资源、电力资源的浪费也一直受到业界的批评. 为此以太坊初期应用PoW 机制, 同时将出块速度控制在15 s 左右, 但由此引发了区块链分叉概率高、区块广播时间大于出块时间等问题, 因此不得不引入GHOST (Greedy Heaviest Observed Subtree) 协议激励矿工来解决这些问题. 在IBM 主导的Hyperledger Fabric 项目中使用了PBFT(实用拜占庭容错机制) 来作为共识机制, 但由于PBFT 共识机制中的主节点的存在, 使得其伪去中心化的特点一直受到质疑.
结合密钥生命周期的现实应用场景,需要同时满足其安全性、可靠性和高效性,故设计了PoW+PBFT的混合共识机制来应对现实需要,同时将应用场景设定在联盟链的环境中,规定联盟链的节点准入机制,并提供对外的公钥查询接口. 这样既保证了公钥信息的公开, 又避免了区块链网络受到女巫攻击的安全隐患.
首先进行主节点的选取, 最快计算出有效工作量证明的节点将成为当前共识过程的主节点, 其余为从节点, 关于此过程构造的区块将在下一节进行详细解释. 接下来采用PBFT 机制进行公钥信息的接收、验证和上链. PBFT 机制的流程如图3 所示[23].
图3 PBFT 共识流程Figure 3 Consensus process of PBFT
其中C 为客户端, N0-N3表示服务节点, 特别的, N0为主节点, N3为故障节点. 假设故障节点数为f 个, 整个服务节点数为|R|=3f +1 个, 整个协议的基本过程如下:
a. 客户端发送请求, 激活主节点的服务操作;
b. 当主节点接收请求后, 启动三阶段的协议以向各从节点广播请求;
c. 序号分配阶段, 主节点给请求赋值一个序列号n, 广播序号分配消息和客户端的请求消息m, 并将构造PRE-PREPARE 消息给各从节点;
d. 交互阶段, 从节点接收PRE-PREPARE 消息, 向其他服务节点广播PREPARE 消息;
e. 序号确认阶段, 各节点对视图内的请求和次序进行验证后, 广播COMMIT 消息, 执行收到的客户端的请求并给客户端以响应;
f. 客户端等待来自不同节点的响应, 以f +1 个相同的响应结果作为请求的处理结果.
(2) 区块结构
由于采用了PoW+PBFT 的混合共识机制, 故区块结构也应进行相应的创新设计. 使用了PoW 链和PBFT 链来记录区块链网络中的数据. PoW 链记录竞争区块, PBFT 链记录证书区块, 区块内容如图4 所示. 值得注意的是两条链中的Hash 值进行了相互引用, 实现了双重确认, 进一步提高了数据的安全性和完整性. 由于竞争区块中会引用证书区块的Hash 值, 而且竞争区块和证书区块之间的生成是异步操作,因此创世竞争区块和id = 1 的竞争区块中的证书区块Hash 值为预设的空值, 创世证书区块的Hash 值会被id=2 的竞争区块引用.
图4 区块结构Figure 4 Structure of block
4.2 方案设计
针对现实应用场景, 对密钥生成、公钥查询、密钥更新、密钥注销和密钥归档5 个核心功能进行了方案设计, 有效地完成了基于区块链的密钥生命周期演示设计. 对于诸如用户登记等其他7 个环节, 使用区块链技术的必要性不强, 这里不做赘述. 本方案设计流程如图5 所示.
(1) 密钥生成
用户在本地客户端产生公私钥对, 其中公钥信息包含用户ID、用户公钥、时间戳和公钥的有效起止时间[24]. 系统将根据相关信息构建X509_REQ 证书请求消息, 同时将请求消息转为DER 编码的格式发送给CA 请求生成证书, CA 确认用户信息后进行密钥签名生成证书, 并将该证书发送到区块链主节点.主节点将该证书进行编号转发给其他节点, 节点间对该证书进行广播, 校验完成后广播COMMIT 消息,证书上链并向CA 回复SUCCESS 消息. CA 在接收到f +1 个SUCCESS 信息后, 确认将证书发送给客户端.
(2) 公钥查询
图5 方案流程图Figure 5 Flowchart of scheme
公钥查询模块我们利用区块链的快速查找技术, 构建区块链应用查询优化流程模型[25], 建立证书索引树, 以证书的关键信息作为结点建立层级树形索引, 叶子节点存储证书在底层区块链的Merkle 树路径,最大程度上满足在大数据量下数据的查询、访问需求. 当用户向节点请求公钥信息时, 节点先在本地证书索引树中寻找是否存在用户请求的公钥. 若在索引树中未查到信息则节点从区块链主链的末端开始向前查询, 遇到有效的信息就结束查询. 如果本地存在相应用户的信息, 直接将公钥信息返回给用户, 并更新索引树. 当本地不存在对应用户的信息时, 节点在区块链网络中请求公钥信息. 收到请求的区块链节点检查本地存储的公钥信息. 若存储有相应公钥信息, 节点会返回对应的公钥信息以及包含公钥信息的区块和Merkle 树分支信息. 发起请求的节点在收到公钥信息后, 通过多个节点返回的公钥信息和Merkle 树分支之间交叉验证来确认公钥信息正确性.
(3) 密钥更新
密钥使用一段时间后, 泄漏的风险就加大, 需要产生新的密钥来代替旧的密钥. 这里考虑到一些安全风险, 如密钥泄露后窃密者将旧密钥更新为自己控制的新密钥从而进行身份伪造攻击, 故在此模块设计两种密钥更新方式.
方式一: 由于用户已经拥有一个可用的公钥, 更新密钥可以不经过CA 的签名. 当用户需要更新密钥时, 在本地客户端生成新的密钥对, 用旧的私钥对新证书进行签名, 并发布到区块链网络, 网络确认后将SUCCESS 信息发给客户端, 同时转发新证书给CA, CA 进行证书更新. 然而以此方式进行密钥更新存在一定的安全风险, 故设置更新等待时间, 区块链网络运行智能合约, 等待期结束后进行密钥更新, 等待期内用户可对更新操作进行撤销, 合约终止. 由于密钥更新并非紧急操作, 而且密钥更新期旧密钥可以继续使用, 所以必要的等待期是可以容忍的, 不会降低用户的体验.
方式二: 如果用户需要紧急对密钥进行更新, 可以采用上述的密钥生成过程, 由CA 进行实体身份认证后更新操作立即生效.
在进行证书查询时, 系统将从最新的区块向前遍历, 并反馈给用户最新的有效密钥, 旧密钥在新密钥生效后将自动失效, 成为无效公钥. 即使一个区块体内的所有公钥均被确认为无效公钥后, 为保证历史信息的可溯源, 以及密钥归档的需要, 区块链系统也不会将其抛弃.
(4) 密钥注销
当用户确定未来不会再需要自己的密钥, 或用户私钥被窃取, 这时需要从系统中注销该组密钥. 证书注销的流程为: 客户端使用私钥签署一个空消息, 发布到区块链网络, 经区块确认后区块链网络将DELETE 信息发给客户端, 该密钥作废. 同时转发消息给CA, CA 更新CRL 列表. 此模块设计无需考虑攻击情况, 因为如果密钥泄露, 恶意实体的意图是利用窃取的私钥进行非法操作, 而非对已窃取的密钥进行注销, 这样做对恶意实体而言没有实际意义.
(5) 密钥归档
密钥注销后, 如果不对密钥进行有效归档, 那么对于已经被该密钥加密过的数据将面临着无法解密的风险, 密钥归档的重要性不言而喻. 密钥注销时, 用户需将私钥通过保密专线网络传递至CA, CA 将以密文的方式将私钥发布至私有区块链网络中进行确认. 各节点间均存有一份密态的完整账本, 且各节点间密钥互不相同, 采用BLS12-381 加密算法[26]进行数据加密. 节点间会定期进行轮询, 采用时空证明的方式验证各节点数据的完整.
时空证明(Proof of Space Time), 证明该时间段内节点存储了相应的账本数据[27]. PoST 证明是验证者V 向证明者P 提供独特的数据证明, 以说服P 自己在一段时间t 内存储了数据的一个备份R, 这一证明是专门为P 提起的挑战的应答C.
PoST 协议可以通过多项式复杂度算法元组实现:
a. 初始化
初始化函数使用可验证时延加密方法. 其中, λ 是安全参数, 通过它我们可以调整时延加密的安全参数, λ 越大, 时延越长. 调整它, 系统可以控制加密算法在效率和安全性能之间找到平衡. SP和SV是验证时需要的参数, R 是生成的副本.
b. 生成证明函数其中, c 是随机挑战矢量, 包含N 个随机挑战, t 是时间戳矢量, 对应每一个随机挑战的时间戳. 证明者P为验证者V 生成c 的应答πc, 它是与c 和t 对应的应答.
c. 验证
用来检测证明是否正确. PoST.Verify 由验证者V 运行并使得V 相信P 在t 时段内存储了R.
4.3 方案分析
基于区块链技术的密钥生命周期演示设计方案, 通过利用区块链的安全性来保障运行于区块链上公钥的安全. 对于区块链系统潜在的威胁和系统运行效率均进行了比较深入的分析, 特别是在哈希碰撞, 篡改公钥信息方面进行了详细的理论分析证明, 同时分析了联盟链技术框架下系统的安全性和运行效率.
(1) 哈希碰撞
区块链系统的安全性主要由哈希函数的安全性作为保障, 利用哈希函数的抗碰撞性来避免攻击者寻找到一个和攻击目标具有相同哈希值的数据来篡改信息. 在本文提出的设计方案中, 使用哈希函数主要从3个方面保护系统的安全稳定: 验证竞争区块是否合法、寻找前驱区块、验证Merkle 树分支的合法性. 其中验证区块合法要求计算得到的哈希值小于目标值. 后两个功能要求目标哈希和计算得到的哈希保持一致, 即需要攻击者构建一个哈希碰撞. 目前根据王小云院士的理论研究, 攻击者已经能够对较弱的哈希函数(如MD5[28]和SHA-1[29]) 构建碰撞攻击. 使用改进后的Shattered 算法构建一个SHA-1 的哈希碰撞需进行263次SHA-1 运算, 需要耗费单一GPU 一年的运算量[30]. 目前对于SHA-2 等较强哈希函数并没有提出可行的碰撞算法, 可以认为只能通过暴力猜测进行破解, 因此在现有条件下可以认为构建一个较强哈希函数的哈希碰撞是不可行的. 攻击者即便可通过第二原像攻击[31]等方式降低攻击难度, 但攻击成本对于攻击者而言仍然较高. 基于上述理论与实践基础, 可以认为方案中, 在竞争主节点的过程中, 攻击者无法通过任何方式来简化构造小于目标难度区块的过程, 在构造证书区块时, 攻击者也无法构造一个哈希值相同, 且有实际意义的区块.
(2) 篡改公钥信息
攻击者篡改的成功率与攻击者控制的运算力之间的关系如图6 所示. 当q >0.5 时, 由于攻击者获得新的区块的速度大于正常节点, 攻击者一定能够篡改成功, 因此图中不包含q >0.5 的部分. 可以看出攻击成功率和攻击者控制的运算力成正相关的关系, 和区块在区块链系统中延迟确认的时间成负相关关系.即使当攻击者控制了系统中25% 的算力时, 选择适当的延时区块延迟确认时间(如延迟10 个区块确认信息) 仍能够将攻击的成功率降低到较低的范围(1%). 当攻击者控制运算能力比例较低时, 攻击的成功率会极大下降.
(3) 联盟链
黄欣沂等[32]研究了区块链应用的安全隐私问题后指出, 区块链技术不依赖于某个特定的中心节点,系统中的每个区块链节点分别独立存储数据和处理数据, 有效避免了单点失败的问题. 然而, 为了达到公开验证, 区块链中所有数据必须公开, 这将导致隐私泄露问题. 因此方案中利用了联盟链的优势, 即针对某个特定群体的成员和有限第三方, 其内部指定多个预选节点为记账人, 每个区块数据的生成由所有的预选节点共同决定, 其他节点可以参与交易, 但不过问记账过程. 对于公有链, 任何人都可以随时进入和记账,而在联盟链中, 外部方只可通过授权开放的API 进行数据查询.
图6 P 与q 的关系Figure 6 Relationship between P and q
在联盟链中, 新区块上链只需要几个权重较高的节点确定. 同时, 联盟链中的每个节点都有属于自己的私钥, 每个节点的自产数据信息相互独立, 节点间数据只读共享, 如若需要数据交换, 则需要通过对方节点的私钥进行. 此外, 联盟链能够在确保在信息流通过程中避免节点隐私泄露. 由于联盟链的节点数量通常不多, 所以相比公有链而言, 联盟链的维护成本也相对较低. 因此, 在联盟链框架中进行攻击, 其攻击成功的难度将更加巨大, 同时也可以有效地避免隐私数据泄露问题.
4.4 方案对比
(1) 与基于LDAP 的方案对比
传统的PKI 系统普遍采用基于LDAP 的方案进行证书管理, LDAP 目录是以树状结构存放和管理数据, 支持层次结构, 可以建立快速查询体系. 然而就底层数据而言, LDAP 并没有特殊的完整性保护措施. 于此对比本方案在底层数据方面采用了区块链的方式来保障数据的完整性, 但由于区块链是以链式结构进行存储, 在信息检索速度方面存在一定问题. 但在本方案中, 可以建立证书索引树, 以证书的关键信息作为结点建立层级树形索引, 叶子节点存储证书在底层区块链的Merkle 树路径, 以满足快速检索的需要.因此本方案在数据安全性和快速检索方面表现更加优异.
(2) 与其他基于区块链的密钥管理方案对比
刘敬浩等[24]提出了一种基于区块链的分布式公钥管理方案, 并对密钥生成、公钥查询、密钥更新和密钥注销4 个功能进行了设计. 在充分分析了这一方案的安全性后, 提出了一种新型的密钥生命周期管理方案. 原方案在密钥更新阶段存在一定的安全风险, 由于密钥更新操作需要由用户自主发布区块链信息进行更新, 存在着恶意实体使用泄露私钥发布证书进行更新的问题, 对此本方案设计了两条密钥更新途径, 有效降低了此类安全风险. 原方案没有涉及密钥归档的环节, 本文提出了一种在私链上使用时空证明的方法来保证密钥的安全归档. 原方案使用了PoW 共识机制, 公钥确认时间较长, 本文提出了一种PoW+PBFT 的混合共识机制, 在保证安全性的同时大大提高了证书的确认速度.
4.5 方案实现
本演示设计方案思路清晰, 逻辑缜密, 易于进行软件实现. 作者根据设计方案, 结合当下主流的区块链开发技术栈实现了基于区块链技术的密钥生命周期演示设计原型系统, 可实现局域网下的密钥生成、证书颁发、证书更新、证书注销、密钥管理、公钥查询和密钥归档等功能, 系统功能完善, 操作便捷高效, 用户体验良好.
4.5.1 实现技术
(1) QT
本系统在实现技术上应用了Qt 应用程序开发框架. 具有良好的跨平台特性,系统可部署到Windows、Linux 等主流操作系统, 提高了系统的可移植性. 应用signals/slots 的安全类型来替代callback, 使得各个元件之间的协同工作变得简单, 且逻辑清晰、安全可靠.
(2) Golang
在区块链节点系统, 我们采用Golang 进行技术实现. 能有效的提高系统运行的高效性和可维护性.Go 语言是Google 公司于2009 发布的开源编程语言. Go 语言有以下特点:
a. 高效性. Go 语言专门针对多处理器系统应用程序的编程进行了优化, 使用Go 编译的程序可以媲美C/C++ 代码的速度. 在我们的使用中, Go 一般比Python 要快30 倍, 同时与Java 相比也有很大程度的提升.
b. 并发性. Go 语言最大的特色就是在语言层面支持并发, 天生支持并发编程, 可以充分利用CPU 的多核心架构, 开发并发应用程序. 协程机制使得编写高并发的服务端软件变得相当容易, 且创建协程的成本很低, 只需几千个字节的额外内存, 正因如此, 才使得同时运行数百个甚至数千个协程成为可能.
c. 基于消息传递的通信方式. Channel 是Go 语言在语言级别提供给进程内协程间的通信方式, 简单易用且线程安全. 在异步的并发编程过程中, 协程之间的消息通信可以使各个协程之间协同配合, 可以轻松实现TCP 连接池和限流等功能.
(3) GMSSL
本系统整体采用GMSSL 进行数据加解密和网络通信, 系统安全可靠, 符合国家标准. 同时, 由于GmSSL 项目是OpenSSL 项目的分支, 并与OpenSSL 保持接口兼容. 因此GmSSL 可以替代应用中的OpenSSL 组件, 并使应用自动具备基于国密的安全能力. 针对当前现实应用环境, 可以快捷的进行接口的更新与替换, 大幅减轻了系统开发人员的工作负担.
4.5.2 架构设计
方案在实现时采用了分层结构和模块化设计, 并参照以太坊的架构进行系统实现. 从底层到上层分为网络层、服务层和应用层, 基本架构如图7 所示. 区块链节点启动P2P 网络, 将各种服务注册到P2P 网络中以进行实例化. 如此设计的优势在于可以动态调整服务, 系统的可拓展性较强.
图7 系统架构Figure 7 System architecture
4.5.3 效果演示
参考当下主流的区块链应用开发技术, 方案使用QT+Golang+GMSSL 进行了原型系统的设计与开发. 系统效果展示如图8、图9 和图10 所示:
5 方案应用
图8 CA 服务器主界面Figure 8 Main interface of CA server
图9 证书申请界面Figure 9 Interface of certificate application
基于区块链技术的密钥生命周期演示设计方案合理、高效, 可快速部署在现实应用场合. 目前许多专家、学者针对不同场景提出了多种基于区块链的身份认证方案. 崔志华等针对物联网环境提出了一种基于混合区块链的多WSN (Wireless Sensor Networks) 身份认证方案[33]. 本文提出的密钥生命周期演示设计方案可应用到上述身份认证方案中, 为身份认证过程中的密钥提供更好的管理. 本文中的CA 节点可以对应到文献[33] 中的Base Station, 为各节点签发身份证书, 本文的联盟区块链网络可对应为Cluster Head Node, 本文的用户可以对应为Ordinary Node. 文献[33] 中提出的集群私有区块链, 在本文中可以理解为联盟链中的轻节点, 其存储了区块头和与其集群相关的区块体, 节约存储资源的同时也能提高集群内部用户间的身份认证的效率. 综上所述, 本文设计的密钥生命周期管理方案扩展性良好, 可以应用到物联网环境下的身份认证方案. 同时为进一步满足现实环境的需要, 我们在方案设计之初便在可热插拔的共识机制、云部署和优化空间缓存等方面进行了底层设计, 使得市场应用范围更加广阔.
图10 区块链网络确认区块Figure 10 Blockchain network confirm block
5.1 可热插拔的共识机制
随着区块链技术的发展, 适用于不同场景的共识机制相继被提出, 刘建伟[34]等研究总结了当下区块链的主流共识机制, 如: PoW、PBFT 等. 虽然共识机制种类繁多, 但传统区块链应用的共识机制一旦确定则不可更改, 无法适应现代社会的发展. 本系统参照IBM 公司主导的Hyperledger Fabric 项目[35], 提出了可热插拔的共识机制, 构造共识机制接口, 只要按照接口的定义实现相关函数, 即可将新共识机制引入系统. 定义共识机制更新协议, 实现区块链网络各节点协商共识机制的更新时机, 同时在区块头中预留共识机制数据块, 即可实现系统的不停机更新.
5.2 实现云部署
云计算作为一项分布式计算, 通过网络“云” 将巨大的数据计算处理程序分解成无数个小程序, 然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户. 云计算正在成为信息技术产业发展的战略重点. 依托云计算技术, 将本系统迁移至云平台, 实现云部署, 可以极大程度上解决机器宕机而带来的系统运行不稳定的问题, 保障系统的稳定性, 同时也可以减轻系统设计者的负担, 区块链设计者只要设计业务逻辑机制, 服务器架构、硬件设施、配置实现资源则交由云平台服务商进行统一管理,这样对于促进整个区块链行业的创新也会更有利. 区块链部署在云上必将成为区块链的未来发展趋势.
根据郭静[36]提出的私有云业务迁移部署方案, 系统可快速进行云端迁移, 解决一系列不确定因素所造成的系统运行不稳定问题.
5.3 优化空间缓存
随着时间的推移, 区块链系统将会出现数据高度冗余的情况, 如目前比特币的主链的区块数据高达200G. 为缓解此现象, 降低区块链系统的运行成本以及准入门槛, 本系统设置了区块链全节点和轻节点[37], 以应对现实场景中的各种应用环境, 优化了全网络的运行负载. 全节点负载存储所有的区块头和区块体, 可以对外提供完整的公钥查询功能. 轻节点可以只存储区块头, 也可以存储区块头和部分区块体. 能够参与主节点的竞争和证书的确认和转发, 也可对外提供部分公钥查询, 满足了证书的分层管理的设计理念.
6 总结
本文设计了一种基于区块链技术的密钥生命周期演示设计方案. 探索了区块链技术在PKI 等领域中的应用, 针对现实应用场景, 对密钥生成、公钥查询、密钥更新、密钥注销和密钥归档五个核心功能进行了方案设计. 利用区块链的去中心化的特性, 构建去中心化的网络对并发的请求能够有更高的响应效率, 具有去中心化、集体维护、安全可信、可溯源和防篡改等突出优势. 有效解决了传统的密钥生命周期管理中的症结与痛点.
目前本系统在现有条件下可应用于局域网中的密钥生成、证书颁发、证书更新、证书注销和密钥管理, 数据在区块链网络和CA 端, 极大程度的降低了客户端的负荷数据量, 客户端虽然有缓存, 但是可以通过清除缓存, 来释放占用的磁盘, 清除后想再次获取数据可以通过动态请求. 私钥以PEM 格式加密在客户端进行存储. 若区块链网络利用公网IP, 则可以在互联网环境下使用该系统, 兼容性、可移植性强, 不限定特殊环境, 可以为很多用户提供可靠安全的密钥生命周期管理服务.