◆冯冠雄 王利明
(中国科学院信息工程研究所 北京 100093)
近年来,智能信息系统逐渐融入生活中的各个领域,成为人类社会中不可或缺的重要组成部分。这些智能系统中通常存在海量日志,包含与系统相关的重要信息,例如系统运行状态、用户行为操作等,通过分析这些数据对感知系统状态、改善产品的用户体验等有重要作用。因此,日志常被攻击者选为攻击目标,恶意人员通过对日志的修改会引诱以日志为基础的系统分析被误导,进而影响系统安全。
区块链作为当前信息学科中的热门技术,自提出以来就在全球范围内引起了广泛关注,并且被应用于金融、医疗、法律等领域。区块链网络不依靠中心节点而达成共识,实现了非可信环境中数据的不可篡改性,能够有效地保证链上数据完整、真实。其技术特点符合日志安全保护的场景需求,能够满足日志不被恶意篡改的需求。
本文设计并实现了基于区块链的日志安全管理系统,该系统可完成日志系统的收集、存储、检索、展示四个环节,并且提出将数据持有性证明方法与区块链结合的方案,从而保护日志持久化存储的安全。
针对将区块链应用于日志安全管理场景的问题,目前已经有了一些相关研究。Ahmad 等人[1]提出用于审计的区块链BlockAudit,并将常规审计日志无缝转移到BlockAudit 区块链中,以实现更高的安全性,完整性和容错性。该方案的不足之处为,将所有的日志文件存储在链上,难以处理数据量较大的日志。
吕建富等人[2]提出的方案是将每个日志文件独有的摘要、元数据信息保存在区块链上,使得用户在验证日志真实性时仅需对比其持有的文件摘要与链上存储的摘要,同时将日志文件进行加密在线下存储来保证日志数据存储的安全性,这样虽然可以保证安全,但无法兼顾检索效率。
韩菊茹等人[3]提出了类似的日志审计系统,将每条日志信息生成指纹并上链,验证时将本地生成的数据指纹与链上指纹进行对比,但该方案未考虑日志在云服务提供商CSP 中存储的安全性。
本文将系统分为日志创建、日志查询、日志安全校验三部分,其具体流程如图1 所示。
图1 系统流程设计
本文使用Flume 日志采集服务将生产环境中产生的日志生成文件,并使用存证生成服务为对应的日志文件生成存证。存证信息将被上传至区块链网络,同时,该缓冲区通过监控服务将对接ElasticSearch 集群,通过ElasticSearch 相关的API 为日志创建索引,以实现用户对日志检索功能的支持。为了对日志文件进行持久化备份,文件缓冲服务器会将日志文件写入持久化存储服务。
为保证安全,日志查询功能首先需要经过Nginx 用户认证管理,通过认证的用户方可进行相关操作。日志查询功能通过Kibana 框架实现。Kibana 的服务器连接ElasticSearch 集群,并对集群进行相应的操作。用户可以通过Kibana 来搜索、查看、分析存储在Elasticsearch索引中的数据。
本文的日志安全验证方案包括用户持有日志的验证与用户不持有日志的验证。
(1)用户持有日志的安全验证
用户持有日志时,在本地日志生成存证信息,并从区块链中查询该文件对应的存证,对比二者存证,若相同,则表示文件未被篡改。
(2)用户不持有日志的安全验证
用户不持有日志时,可通过基于区块链的PDP 验证系统校验云存储服务中的日志是否安全。校验系统将PDP 技术与区块链技术相结合,并且需要由用户、区块链、云存储服务三方配合完成。
(1)初始化阶段
设Ga和Gb是具有素数q的乘法群,e:Ga×Ga→Gb是双线性图,g是群Ga的生成器,h:(0,1)*→Ga、h':Ga→表示将字符串映射到点的哈希函数。f是伪随机函数(PRF),π是伪随机置换(PRP)。用户生成一个随机的私钥x∈和公钥Y=gx,并将私钥保存在本地。
(2)标签生成
用户在本地为日志文件生成同态可验证标签(Homomorphic Verifiable Tags,HVT)。将原始的文件分割为n个数据块F={b1,b2,...,bn},并随机选择元素u∈Ga,计算出每个的标签σi=,其中PF是F的唯一标识符。标签生成完成后,将标签与日志存证一同作为交易存入区块链。
(3)发起审计
用户通过智能合约发起审计请求,根据抽样生成算法,确定挑战数据块的数量z,选择两个密钥k1,k2∈,并使用用户的密钥x对(z,k1,k2)签名,得到σCU=Sigx(z||k1||k2),向智能合约发起审计请求C=(z,k1,k2,σCU)。
智能合约通过签名σCU来验证密钥。验证通过后,通过计算挑战数据块的索引i=及其系数(其中l∈[1,z])来生成挑战的集合Q={(i,vi)},并发送给云存储服务。
(4)存储服务响应挑战
云存储服务收到对应的挑战集Q后,计算标签σ=和挑战块,并用一个随机数r∈来计算。并计算出和µ=αµ'+r来隐藏µ' 。使用密钥x'为签名,得到σCSP=。最后,将审核的结果证明返回给智能合约。
(5)智能合约验证结果
智能合约在收到审计反馈的结果后,从区块链中获取证据,首先计算出α=h'(u),然后通过等式是否成立来验证结果。如果该验证公式成立,则表示数据是正常的,否则表示数据被破坏。
为实现系统设计,本文将系统划分为日志收集、存证管理、日志存储、授权管理、日志检索、日志验证六大模块。
日志收集模块是整个系统运行的前提与基础,本文通过Flume框架对多种不同的日志源进行采集,例如:HTTP 日志源、监听端口日志源、文件日志源等,然后将各种日志汇集到Flume 中进行统一处理,处理完成后得到日志文件。
日志存证由以下两部分组成:
(1)日志Merkle 根:本文通过Merkle 树算法,将单条原始日志数据作为Merkle 树的叶子节点,经过多层压缩得到一个Merkle 根,日志数据如果被修改或者已损坏,通过Merkle 根即可快速验证,并定位出具体损坏的位置。
(2)日志HVT 标签:为了能够对云存储服务中的日志文件进行持有性审计,需要为日志文件生成同态可验证标签HVT,该标签用于PDP 验证的参数,将与Merkle 根存证一同作为日志存证存储在区块链中。
存证生成完毕后,将存证作为交易存入区块链中。
本文系统实现中的日志存储模块采用ElasticSearch+云存储服务的模式进行,通过ElasticSearch 集群对日志进行索引,而且云存储服务作为对ElasticSearch 集群中数据的可靠拷贝,可在发生灾难时实现数据恢复。
日志的检索、可视化只有通过身份认证的用户才可以使用,因此本文采用Nginx 实现用户的认证,只有输入正确的用户密码才允许访问Web 内容。
针对ElasticSearch 索引的日志,其检索与可视化模块主要通过Kibana 日志可视化平台完成。Kibana 平台支持对日志的各种维度的查询和分析,而且可以使用图形化的界面对存放在Elasticsearch 中的数据进行展示,用户可对这些展示的可视化信息进行审计,监测系统实时运行状况。
本文通过Web 前端页面实现对日志的验证,用户持有日志文件、用户不持有日志文件两种场景下均可用其对日志进行验证。
(1)用户持有日志文件
用户持有日志文件时,在浏览器中选择本地文件,由系统为其生成Merkle 根,并从区块链中获取其对应的Merkle 根,对比这两个值如果相等,则可以通过校验,否则表示日志被篡改或损坏。
(2)用户不持有日志文件
当用户不持有日志文件时,使用本文提出的基于区块链的PDP验证系统进行验证,对比云服务提供商计算的结果与区块链查询的结果,即可验证日志是否安全。
本文设计基于区块链的日志安全管理系统,通过区块链保护日志存证,并且将区块链与数据持有性审计技术结合,可以使用户在持有或不持有日志的场景下均可验证日志是否被篡改,保证日志持久化存储的安全。本文使得区块链能够应用于处理日志管理的不同场景,具有实际意义。