何佩, 郑文斌, 池晓金, 蔡怡挺, 姚红静
(1.西北工业大学 计算机学院, 陕西 西安 710072; 2.国网浙江省电力有限公司温州供电公司, 浙江 温州 325000)
随着电力物联网发展及能源数字化转型,电力边缘智能终端的适用场景不断拓展,构建具备边缘侧智能感知及分析处理能力的电力边缘智能终端已成为数字化电网的迫切需要和必然发展趋势[1]。电网作为国家重大信息安全基础设施,此时面向终端数据存储和交换的信息安全成为用户日益关注的焦点之一。
应用中大容量存储设备存在着重大的安全隐患,例如非授权用户能够随意非法读取并复制存储于该大容量设备中的明文数据。此外,大容量设备与外部设备连接过程中,攻击者能够轻易截获此过程中的数据。因此,结合当前电力物联网智能终端设备操作系统采用文件系统进行信息存储和共享的典型应用场景,研究文件同步和共享过程中的安全性问题,即开展用户身份的认证以及存储设备中明文数据的保护至关重要。
文件同步和共享过程的安全性包含机密性和完整性两方面,机密性涉及密态文件的同步和统一访问控制等技术,完整性涉及对数据中心存储文件完整性的验证技术[2]。传统的消息认证码(MAC)、数字签名以及确定一个最新版本文件而直接全覆盖、对文件进行无损压缩等方法存在带宽占用量大、压缩程度有限等不足使其均不可取。为此,论文针对电力物联网智能终端设备通信资源受限的特点,研究一种面向电力物联网终端设备数据存储和交换行为的轻量级身份认证与数据保护方法。通过设计动态证明存储系统(DyPoS)[3-6]建立了基于文件系统实现信息的安全存储与共享的机制。即在文件同步到中心服务器时保证文件的机密性与完整性。为了防止加解密机制占用过多边缘计算资源,对于文件的修改、再次同步时仅加密传输修改部分,而不需要加密和传输整个文件,从而降低计算和传输开销。
证明存储的目的是要由物联网终端发起验证数据中心存储文件的完整性,即验证所有的分块都如实存储[7]。证明存储的做法是终端随机选择一些分块索引发送给数据中心,选择的分块索引数量称为挑战块数。数据中心将这些挑战的数据块和验证这些数据块会用到的认证结构信息作为认证器返回给终端。终端验证这些数据块,如果是完整的,则以一定的概率认为文件是如实存储的[8]。
图1 证明存储过程示例
由以上描述可知,实现高效证明存储的关键是建立一个新的认证结构,即同态认证树HAT(homomorphic authenticated tree)。HAT是一个二叉树,其中每个叶节点对应一个数据块。
尽管HAT对数据块的数量没有任何限制,为了描述简单,假设数据块的数量n等于完整的二叉树中的叶子节点的数量。因此,对于文件F=(m1,m2,m3,m4)(其中,mi表示文件的第i块),可以构建如图2a)所示的树。
图2 基于树的认证结构
HAT中的每个节点都由一个四元组vi=(i,li,vi,ti)表示。i是节点的唯一索引,根节点的索引是1,索引从上到下,从左到右增加。li表示可以从第i个节点到达的叶节点的数量。vi是第i个节点的版本号。ti代表第i个节点的标签。
终端随机选择分块索引发送给数据中心。同时,终端采用路径搜索[9]和兄弟搜索[10]获取数据块和验证这些数据块用到的认证结构信息。
1) 路径搜索过程(见附录算法1)
定义路径搜素ρt←P(T,t),即以文件的HAT标记T和块索引t为输入,输出从根节点到该文件第t个块对应的叶子节点的路径中的节点的索引集合。T中的第i个节点的唯一索引表示为一个四元组vi=(i,li,vi,ti)。
为每个合法块索引l初始化2个辅助变量,其中it定义其根是T中第it个节点的子树,ordt指示该子树中相应叶子节点的位置。支持多路径搜索的过程如下:
(1) 初始化路径ρ和状态S。
(2) 对于T的每个级别,通过广度优先搜索循环计算每个块索引l在ρ中的节点。
2) 兄弟搜索过程(见附录算法2)
定义兄弟搜素ψ←Sibling(ρ),将路径ρ作为输入,输出路径ρ中所有节点的兄弟节点的索引集,即输出其余兄弟中最左边的节点集合。
兄弟搜索的过程如下:
(1) 初始化兄弟集合ψ和辅助集合Q。
(2) 确定ρ中节点的多少个“孩子”出现在ρ行。
a) 若为2个,将2个“孩子”从ρ中移除,并将右侧的“孩子”插入Q。
b) 若为1个,则从ρ删除这个“孩子”,并将其插入兄弟集合ψ。
由此,数据中心向终端返回存储的数据块和认证结构信息,终端将采用2种搜索方法获得的数据块和认证结构信息对比验证,如果这些数据块是完整的,则以一定的概率认为文件是如实存储的。
1) 防碰撞散列函数
对于散列函数H:{0,1}*→{0,1}*,如果找到满足H(x)=H(y)的2个不同值x和y的概率是可以忽略的,那么它是抗碰撞的。
2) 确定性对称加密
加密算法将密钥k和明文m作为输入,并输出密文。使用符号Enck(m)来表示加密算法。
3) 基于散列的消息认证码
基于散列的消息认证码HMAC:{0,1}*×{0,1}*→{0,1}*是一个确定性函数,它取一个密钥k和一个输入x,输出一个值y。定义HMACk(x)def=HMAC(k,x)。
4) 伪随机函数
伪随机函数f:{0,1}*×{0,1}*→{0,1}*是一个确定性函数,它取一个密钥k和一个值x,并输出一个与同一输入x的真正随机函数无法区分的值y。定义fk(x)def=f(k,x)。
5) 伪随机置换
伪随机置换π:{0,1}*×[1,n]→[1,n}是一个确定性函数,它取一个密钥k和一个整数x,其中1≤x≤n,并输出一个值y(其中1≤y≤n)与同一输入x的真正随机排列无法区分。定义πk(x)def=π(k,x)。
6) 密钥导出函数
密钥导出函数KDF:{0,1}*×{0,1}*→{0,1}*是一个确定性函数,可以从2个秘密值中派生出一个密钥。
1) 终端运行初始化算法(id,e)←Init(1λ,F)计算:
e←H(F), id←H(e)
然后,终端发送id给数据中心作为文件的标识。
2) 假设文件F=(m1,…,mn),终端首先调用编码算法(C,T)←Encode(e,F),生成分块密文和认证结构,过程如下:
①生成一个随机密钥k←{0,1}|e|,并计算r←k⊕e。
②计算加密密钥ke←KDF(k,0)。对于每个块mt(1≤t≤n)计算ct←Encke(mt)。
③对F构建一个HAT,此时HAT中的标签未被赋值。
④计算αs←KDF(k,1),kc←KDF(k,2)和αc←KDF(k,3)。通过算法3,用(c1,…,cn)计算HAT中所有叶节点的标签。
⑤基于叶节点标签,通过算法4计算HAT中所有非叶节点的标签。
⑥计算ω←HMACe(t1)。
⑦令C={c1,…,cn}和T=(r,αs,Γ,ω,N),其中Γ={τ1,…,τn},N={ν1,v2,…}是所有HAT节点的集合。
上传阶段结束时,终端将C和T上传到数据中心,并仅在本地存储e。
3) 检测下载文件之前数据中心保存文件的完整性。终端和数据中心S交互地运行检查协议res∈{0,1}←Check〈S(C,T),U(e)〉检查数据中心文件的完整性,过程如下:
①U选择b∈[1,n],κ∈{0,1}λ,并发送(b,κ)到S。
②对于每个j(1≤j≤b),S计算tj←πk(b)。然后,数据中心调用算法5中的响应算法,其中I={t1,…,tb},并将文件证明resp和(r,v1,ω)发送给U。
③U计算k←r⊕e,αs←KDF(k,1),kc←KDF(k,2)和αc←KDF(k,3)。然后验证v1,并调用算法6中的验证算法来完成验证。若验证成功则输出1,否则输出0。
4) 终端通过调用更新协议res∈{〈e*,(C*,T*)〉,⊥}←Update〈U(e,ι,m,OP),S(C,T)〉来任意更新文件。如修改块、插入一些块、删除一些块等。
5) 终端将文件的更新块和基于HAT更新节点上传到数据中心,终端计算更新后的元数据e*并通过检查协议验证更新的块。
结合某地方电力公司的电力物联网平台,建立一个由智能终端模拟开发板和数据中心服务器构成的测试系统,如图3所示。基于该系统的测试过程如下:
图3 测试环境
1) 启动2个服务程序,运行在服务器上的2个服务程序分别监听4 000端口和8 000端口,如图4所示。遍历文件系统,选择一个要同步的文件shangchuan.txt,文件内容图5所示。
图4 启动服务程序
图5 文件内容
2) 服务程序1收到文件名,查询数据库未找到该文件,通知终端上传整个文件,如图6所示。终端上传原文件的整个文件给服务程序2,服务程序2收到原文件,保存并更新数据库,如图7所示。
图6 通知终端上传文件
图7 保存并更新数据库
3) 首次同步完成,终端上修改文件shangchuan.txt,即在文件后加入一些内容,再次选择shangchuan.txt。服务程序1收到文件名,查询数据库发现本地已有shangchuan.txt文件并对文件分块计算签名,生成签名文件sig并发送给终端,如图8所示。
图8 已有文件计算过程
4) 终端收到sig文件,利用本地的shangchuan.txt文件计算轻量,并将轻量文件上传给服务程序2。服务程序2收到终端发来的轻量文件,与本地shangchuan.txt的旧版本文件一起计算新文件,如图9所示。
图9 计算新文件过程
5) 轻量更新与验证完成。更新的性能展示通过终端将性能数据发送到服务器的数据库中,由界面展示出更新的各项数据,如更新类型、文件名、文件大小、sig文件大小、传输文件大小以及更新时间。32M文件更新8M(25%)时的性能如图10所示。
图10 性能展示
由此可见:
1) 32 MB文件进行8 kB分块时,认证结构大小较Merkle树[12]对比方案减少26.7%;挑战120个块,DyPoS较Merkle树[12]对比方案响应用时减少57.3%,验证用时减少50%。
2) 加密文件修改内容18%时,更新该加密文件的计算负载降低68.4%,时延降低68.9%;加密文件修改内容25%时,更新该加密文件的计算负载降低60%,时延降低61.2%。
文件同步技术是电力物联网应用的关键技术之一。基于同步时传输2个文件版本之间不同的文件数据,而重用相同部分的思想,通过对密文形成压缩标签的方式对数据中心存储内容进行效验,无需下载完整密文文件,在保障安全的前提下可以有效降低文件内容完整性效验的性能开销。针对标签的验证问题,设计了轻量快速更新密文的存储方法,提出了同态认证树HAT的新型认证结构,与传统的认证结构相比,有效地减少了终端生成认证结构时间,降低了校验数据内容时的通信开销和计算开销。
附录
算法1路径搜索算法
1: procedure Path(T,I)
2: forι∈Ido
3: ifι>l1then
4: return 0
5:iι←1,ordι←ι
6:ρ←{1},S←TRUE
7: whileSdo
8:S←FALSE
9: forι∈Ido
10: ifliι=1 then
11: continue
12: else ifordι≤l2iιthen
13:iι←2iι
14: else
15:ordι←ordι←l2iι,iι←2iι+1
16:ρ←ρ∪{iι}
17: ifιiι>1 then
18:S←TRUE
19: returnρ
算法2兄弟搜索算法
1: procedure Sibling(ρ)
2:ψ←φ,ρ←ρ{1},ρ←φ,i←1
3: whileρ≠φ∨ρ≠φdo
4: if 2i∈ρthen
5:i←2i,ρ←ρ{i}
6: ifi+1∈ρthen
7:ρ←ρ∪{(i+1,FALSE)},ρ←ρ{i+1}
8: else
9:ρ←ρ∪{(i+1,TRUE)}
11: else if 2i+1∈ρthen
12:i←2i+1,ρ←ρ{i},ψ←ψ∪{i-1}
13: else ifρ≠φthen
14: pop the last inserted (α,β) inρ
15:i←α
16: ifβ=TRUE then
17:ψ←ψ∪{i}
21: returnψ
算法3叶子节点标签生成算法
1: procedure LeafTag(αs,kc,αc,cι,iι,liι,νiι)
2:τι←αscι
3:tiι←fkc(iι‖liι‖νiι)+αcτι
4: returnτι,tiι
算法4非叶子节点标签生成算法
1: procedure NonLeafTag(kc,i,li,νi)
2:τ2i←t2i-fkc(2i‖l2i‖ν2i)
3:τ2i+1←t2i+1-fkc(2i+1‖l2i+1‖ν2i+1)
4: returnti←fkc(i‖li‖νi)+τ2i+τ2i+1
算法5响应算法
1: procedure Response(I)
2:ρ←PATHT,I,ψ←Siblingρ
3:c←0,t←0
4: forι∈Ido
5:c←c+cι
6: fori∈ψdo
7:t←t+ti
8: returnresp←(c,t,{νiι|ι∈I},{(i,li,ui)|i∈ψ})
算法6验证算法
1: procedure Verify(αs,kc,αc,ν1,I,resp)
2:ctr←1,τ←0
3: forι∈Ido
4: whilectr<ιdo
5: pop the first element in {(i,li,νi)|i∈ψ}
6:ctr←ctr+li,τ←τ+fkc(i‖li‖νi)
7: ifctr≠ιthen
8: return 0
9: else
10:ctr←ctr+1
11: for (i,li,νi)∈{(i,li,νi)|i∈ψ} do
12:ctr←ctr+li,τ←τ+fkc(i‖li‖νi)
13: ifctr≠n+1 then
14: return 0
15: else ift+fkc(1‖l1‖ν1)-τ+αsαcc≠t1then
16: return 0
17: else
18: return 1