王 珏, 杨 勇, 吴立强, 包诗琦
(1.武警警官学院信息通信系, 成都 610213; 2.武警工程大学密码工程学院, 西安 710086)
智能电网是传统电网的智能化,以实体电网设施和信息交互平台为基础,整合各种实时生产和运营信息,加强对电网业务流动态的分析、诊断和优化,并给出相应的辅助决策支持,最大程度地实现精细、准确、及时、绩优的电网运行和管理[1]。
高级测量技术是智能电网的核心组成部分,包括智能电表、通信网络、计量数据管理系统等。智能电表(smart meter,SM)根据预先设定的时间间隔(如15 min)测量多种电力计量值,如用电量、电压、电流等。SM具有双向通信功能,因此支持断电报告、分时或实时电价,甚至需求侧响应等高级应用。
用户耗电数据是敏感信息,攻击者从中可以推测出用户是否在家、电器使用情况、生活方式及偏好等,因此,精细粒度的数据泄露会严重威对用户隐私。
数据聚合是解决上述矛盾的一个有效方法。典型的聚合模型中,智能电表实时地收集用电数据,并周期性地发送给网关或者雾节点(通常被称作聚合者),聚合者进行求和,将最终结果发送给控制中心(control center,CC),控制中心根据耗电总量实现预测分析、平衡调度等,但无法获知单个用户耗电数据。为了防止聚合者或者第三方获取隐私数据,智能电表通常先将数据加密再传输,聚合者在密文域上聚合,因此,聚合方案满足加法同态性。
数据聚合还应提供账单功能。在一个较长周期后,控制中心根据用户在本周期内的耗电量,结合价目表,计算付费账单。在实时电价中,价目表每天甚至每小时都在变化,因此,提供动态账单也是数据聚合的一项内在需求。
敏感数据的隐私保护一直是智能电网研究的热点。现有的数据聚合方法根据其功能性,可以划分为3类。第一类是多维多子集数据聚合。Chen等[2]在一条报告消息中携带多种类型的数据,支持单因素方差分析。朱嵩等[3]采用超递增序列来构造多维数据,并采用同态Paillier算法实现了智能电网数据聚合和激励方案。Alsharif等[4]提出了一种高效的、隐私保护的多维、多子集数据聚合方案。第二类是支持复杂运算的统计方法。这类数据聚合方法能够支持求和、方差、最大/最小值、中位数、百分位数和计数。Nabil等[5]和Ibrahem等[6]针对数据聚合、动态计费、窃电检测等不同需求,生成了不同私钥,可解密相应密文。Chen等[7]的方案能够统计平均值、方差、单因素方差分析。Zhao等[8]基于格上同态加密方案,可实现更复杂和更高阶的聚合。第三类是安全增强的数据聚合。Wang[9]提出了可验证的数据聚合方法。Ni等[10]允许行为不端的智能电表发起错误数据注入攻击,实现安全性和效率的平衡。Dimitriou等[11]考虑了恶意对抗模型,发现恶意实体不仅窥探敏感数据,还破坏协议执行。Ding等[12]构建了基于身份的数据聚合方案。
根据基于的同态加密技术,数据聚合方案可以分为4类:①基于Paillier的聚合方案[2-3];②基于双线性对或离散对数的聚合方案[9-14]; ③基于OTP (one-time pad)的聚合方案[11-16]; ④基于格的聚合方案[8-17]。
从数据使用者来看,目前的耗电数据是智能电表产生的但是仅为控制中心所用。但是用户端通常也需要一些数据统计。例如,采用新计价方式后,一个星期内的电费(非正常计费周期)相比上一个计价方案是否降低;用户每天耗电量的峰值。因此,数据聚合应该具有双向性,即聚合者不仅为控制中心聚合出用户维度的实时数据,还应该为用户统计出时间维度的电量值或者账单。
从数据源来看,目前的聚合对象是全部用户的数据,而无法聚合某个子集。但是,控制中心或用户可能只关注某些子集数据。例如,控制中心只需要统计使用计价方案1或者工业用电的总量。聚合方案应该支持选择性聚合,用户数据可以附带一些属性标签,聚合者根据标签进行筛选出相应的数据源,再做聚合。
从聚合结果来看,目前的聚合结果大都只给出耗电总和。分区间聚合不仅能够呈现出每个区间的总电量,也能给出相应区段用户数量,给控制中心更丰富更细致的数据视图。目前现存的多区间数据聚合方案[3-4]不能支持动态计费。因此,能够支持动态电价的多区间聚合非常重要。
本文方案采用双雾节点聚合模型。通过修改的支持双代理的重加密操作,雾节点能够为控制中心和用户提供服务,支持双向聚合。通过给数据附加属性标签,支持选择性聚合;通过修改分区间聚合方法,可支持计算动态电价。方案整合Paillier加密系统与离散对数困难假设,利用Diffie-Hellman (DH)密钥交换协议,以最小计算代价产生SM和雾节点、雾节点和CC之间的共享密钥,以对称密码方法实现高效加密数据,以哈希运算消息认证码(hash-based message authentication code,HMAC)实现数据完整性和来源可靠性的验证,防止重放和错误数据注入攻击。最后通过实验,评估了方案性能。
本文方案基于智能电网三层网络框架,如图1所示。主要涉及4类实体,包括密钥生成中心、控制中心、雾节点和智能电表。
图1 双雾节点模型Fig.1 Double fog nodes model
(1)密钥生成中心(KGC): KGC的职责是初始化Paillier密码系统,并为控制中心、智能电表和雾节点生成、分发私钥。
(2)控制中心(CC): CC具有强大的计算能力,负责收集、处理和分析各类电力数据,并完成相应的电网控制。
(3)雾节点(FN):FN实现数据聚合;存储用户历史数据;选择数据源,聚合数据;计算账单。每个小区包括2个雾节点,属于不同的运营商,每个雾节点独立工作。
(4)智能电表(SM):每个用户装备一个智能电表。SM每隔一个固定间隔将收集的耗电数据加密,并附加一些用户属性标签发给雾节点,两个雾节点收到的耗电数据相同。
攻击者包括诚实但好奇的内部实体(CC、FN)和恶意的外部对手。密钥生成中心是诚实可信的,智能电表是诚实且防篡改的。
1.2.1 内部实体
FN和CC遵循协议,但是渴望获取单个用户的隐私。具体来说,FN收到一个加密报告,试图推断出用户敏感数据,并尝试获取总用电量。CC允许腐化单个雾节点,但不能同时腐化两个雾节点。
1.2.2 外部攻击
恶意的外部对手可能会窃听通信信道,试图获取敏感信息,可能发起错误数据注入、重放攻击等,甚至腐化CC获取用户隐私。
1.3.1 功能要求
(1)双向选择性聚合。FN支持来自CC或SM的聚合请求,两个雾节点独立工作,根据给定参数选择相应数据源并进行最大/最小值、平均、计数等统计。
(2)支持动态电价的区间聚合。聚合结果可分区间显示,且可支持动态账单。
1.3.2 安全和隐私要求
(1)单个用户数据隐私保护。任何实体都不应能访问到单个用户的耗电量。
(2)聚合数据机密性。除CC外,任何实体都不能访问总耗电量。
(3)抗合谋。即使单个雾节点和CC相互合谋,也无法获得单个用户数据。
(4)抗错误数据注入、重放攻击。外部攻击者无法对系统注入错误数据,也无法进行密文重放。
代理重加密[18-20]是通过一个半可信的代理,将原本属于授权者的密文转化为被授权者可以解密的密文,代理无法获取明文信息。在新方案中,代理的角色由两个雾节点来担任,可以将原本SM的密文转化为CC可以解密的密文。支持双向代理重加密功能的数据聚合方案包括:Keygen、Enc、Dec1、RekeyGen、ReEnc、Dec2共6个算法,其过程如下。
(1)密钥生成算法Keygen(k):选择两个大素数p和q,满足|p|=|q|=k,计算整数N=pq,选择生成元g,系统公钥为(N,g)。另外,随机选择私钥xi和xcc,计算hi=gximodN2,hcc=gxccmodN2,其中mod表示取模运算。SMi和CC公钥分别为hi和hcc,私钥为xi和xcc。
(2)加密算法Enc(h,m)→(C1,C2): 输入待加密消息为m∈ZN和公钥h,随机选择整数r∈[1,N/2] 计算出密文C1和C2,其中,C1=grmodN2,C2=hr(1+mN)modN2。
(4)代理密钥产生算法
将连续的电力消耗数据划分为l个等价的子集R1=[r1,r2),R2=[r2,r3),…,Rl=[rl,L),r1=0,L-1为最大用电量。设有两个超递增序列{a1,a2,…,al}和{b1,b2,…,bl},其中ai和bi都是整数。
(1)对于小区内的每个用户SMi,如果聚合周期内,它的耗电数据ei满足ri≤ei 解码函数m=Decode(M)恢复ai和bi的系数,如算法2所示。可以看出:①编码函数和解码函数具有加法同态性;②正确编码和解码的条件是aiΔmin≤ai+1且bin≤bii+1。即在整数域上,不同的区间不能出现重叠,否则解密混乱。 (3)计算价格时,雾节点需要用电量乘以相应价格,但这种线性运算在编码条件下不成立。设某时刻电价为p,pEncode(ei)=pΔmiai+p|Ui|bi,若要正确解密,必须拓宽每个区段宽度,因此将超递增序列生成方法修改为PmaxΔmiain≤ai+1和Pmaxbin≤bii+1,其中Pmax为聚合周期内单位电价的最大值,Decode得到的是各个区间电价之和,再将所有区间值相加即可。支持动态计费的编码和解码如图2所示。 算法1 数据编码Encode输入:整数m,数据分段相关参数{Ri}、{ai,bi}。输出:编码后的整数M。算法: 对于整数m∈[ri,ri+1),计算整数Δm=m-ri,输出整数M=Δmai+bi。 算法2 数据解码Decode输入:编码值M,数据分段相关参数{Ri}、{ai,bi}。输出:多区间聚合结果和相应的用户数量。算法: For i=l to 1 do |Ui|=(M-Mmodbi)/bi M=(M-bi|Ui|) end for For i=l to 1 do m=(M-Mmodai)/ai M=(M-aim) mi=m+ri|Ui| End for输出{|U1|,|U2|,…,|Ul|}{m1,m2,…,ml}。 图2 支持动态计费的编码和解码Fig.2 Encoding and decoding supporting dynamic billing 新方案的功能如图3所示,具体如下。 图3 方案功能Fig.3 Functionalities (1)实时电量聚合。在一个聚合周期内,智能电表测量用户耗电量,然后使用自己公钥加密,附加其他属性标签,通过SM与单个雾节点共享的密钥进行二次对称加密,并转发给两个雾节点。雾节点解密后按照时间序列进行存储。同时对电量密文进行重加密,并将所有转化密文聚合后发送给CC,两个雾节点独立执行上述操作。CC合并两部分聚合密文,解密得到相应聚合结果。 (2)动态账单。计算账单时,雾节点从存储的历史数据中,取出本计费周期内SMi所有电量密文,根据其用电性质和选择的计价方案,得到价目表,计算相应费用并按时间序列聚合。最后,雾节点将计算结果的一个副本发送SMi,另一个副本进行重加密后发送给CC。SMi从两个雾节点中的任意一个即可解密出账单。而CC需要将两个雾节点的数据聚合后,解密出相应的账单。 (3)支持选择性聚合。当CC或者SM需要统计信息时,可以向雾节点发送统计请求,雾节点根据相应参数产生数据源,并执行相应统计。在SM上报数据时,除了耗电量密文,还包括〈key: value〉形式定义的属性标签,如〈用电性质:居民用电〉、〈计价方案:方案1〉等,利用这些属性可以筛选出特定数据源。方案支持的询问参数为(User,{〈k1,v1〉,〈k2,v2〉,…,〈kw,vw〉}, OP)。其中,User为本次询问的发起者,可以是SMi或者CC,ki(1≤i≤w)为属性名,vi(1≤i≤w)为相应的属性值,共有整数w组属性。属性标签用来过滤数据,属性匹配支持各类比较运算符,如“<”“=”“>”“>=”“!=”“<=”;多个属性之间支持“and”“or”“not”等布尔运算。OP为统计类型,包括分区间计数、计算账单、最大/最小值、求和等。表1定义了方案中相关参数含义。 表1 参数含义 2.2.1 系统设置 KGC根据安全参数k,选择两个大素数p和q满足|p|=|q|=k,计算整数N=pq,选择一个生成元g。约定聚合相关参数,包括设置用电数据区间R1,R2,…,Rl,超递增序列{a1,a2,…,al}和{b1,b2,…,bl},选定对称加解密算法Dec和Enc,以及HMAC算法。系统发布相关参数。保留住密钥{p,q}。 2.2.2 用户注册 SMs、FNs和CC在KGC处注册。 (1)KGC随机选择xcc∈(N/2,N)作为CC私钥,计算hcc=gxccmodN2作为CC的公钥。 (2)KGC为SMi、FN1和FN2选择它们的私钥xi,xf,1,xf,2∈(N,N2/2)(i=1,2,…,n),计算相应公钥hi=gximodN2,hf,j=gxf,jmodN2(j=1,2),将私钥通过安全信道发送给相应实体。 KGC将所有公钥发布在一个公开目录中,用户可以查询,但是不能修改。 2.2.3 数据产生 (2)用户数据为datai=(SMi,Ci,1,Ci,t,Ts,{〈k1,v1〉,〈k2,v2〉,…,〈kw,vw〉}),其中 (3)SMi通过DH密钥交换协议计算共享密钥ki,j=(hf,j)ximodN2(j=1,2),通过伪随机函数PRF(ki,j)→(EncKi,j,MacKi,j)衍生出2个密钥(首次需要进行计算,之后可以缓存)。计算Ci,j=Enc(EncKi,j,datai‖HMAC(MacKi,j,datai))并发给FNj(j=1,2)。 2.2.4 数据聚合 (1)FNj(j=1,2)同样基于密钥交换协议,计算ki,j=(hi)xf,jmodN2, PRF(ki,j)→(EncKi,j,MacKi,j),计算Dec(EncKi,j,Ci,j)解密并使用MacKi,j验证消息的来源和完整性。 (2)获取相应数据datai=(SMi,Ci,1,Ci,2,Ts, {〈k1,v1〉,〈k2,v2〉,…,〈kw,vw〉}),按照时间序列存储。 雾中心的两个雾节点独立完成上述计算。 2.2.5 解密 (4)使用算法2解码得到每个区间的总电量,以及相应的用户数量。 正确性验证可表示为 假设计费周期为T,当一个计费周期结束后,计算用户账单。 2.3.1 账单生成 雾节点FNj(j=1,2)选择出SMi在T周期内所有耗电数据(Ci,1,γ,Ci,2,γ),γ∈T,假设时刻γ电力单价为pγ,用户本周期的电费总量为 (1) (2) 2.3.2 SM获取账单 (3) 计算Λ(P′)得到最终账单值P,最后调用解码算法3得到SMi的账单。实际上,SMi只需要解密一个雾节点返回的账单密文,即可得到账单。 算法3 扩展的数据解码ExDecode输入:编码值M,数据分段相关参数{Ri}、{ai,bi},以及操作符OP。输出:相应统计结果。算法: Setp1 调用Decode算法得到:{|U1|,|U2|,…,|Ul|}{m1,m2,…,ml}Step2 Case:OP=求最小值运算min 按照i=1,2,…,l的顺序遍历mi,找到索引w满足|Uw|≠0,对应数据为mw,返回mw/|Uw|; Case:OP=求最大值运算max 按照i=l,…,2,1的顺序遍历mi,找到索引w满足|Uw|≠0,对应数据为mw,返回mw/|Uw|; Case:OP=计数运算Count 返回∑lw=1Uw; Case:OP=求均值mean 返回∑lw=1mw∑lw=1Uw; Case:OP=账单Bill or 求和运算SUM 返回∑lw=1mw。 2.3.3 CC获取账单 (4) 计算Λ(P′)/2→P,最后调用解码算法3得到SMi账单。 SMi账单的正确性如下,CC账单的正确性可以类似证明。 (5) 雾节点具有较强的计算和存储能力,能够为CC聚合出用户维度的实时统计,也可以为SM统计出时间维度的电量值或者账单。基于属性标签的方法,可以对数据源实施选择,下面通过2个统计请求,解释雾节点执行相应统计的过程。 询问1SMi统计过去3 d中用电量的峰值。 请求参数:{SMi;〈Ts≥Ts-288〉; Max},假设当前的聚合时间点为Ts。当雾节点收到这样请求后,从数据库中找到SMi在最近96×3=288个报告周期(假设每隔15 min报告1次,每天报告96次)内生成的密文Ci,聚合并将结果返回给SMi。SMi使用算法3,计算出近似用电峰值。 询问2CC需要统计当前周期,居民用电类型中选择计价方案1用户数量。 请求参数:{CC;〈计价方案=方案1〉,〈用电性质=居民用电〉;Count},雾节点筛选出当前聚合周期内,标签为 “方案1”和“居民用电”的所有Ci,进行重加密后聚合,将结果返回给CC。CC对两部分密文进行聚合并解密。最后,调用算法3得到用户数量。 外部攻击者无法获取单个用户数据和聚合结果,也无法重放和注入错误数据。假设一个攻击者潜伏在小区中,能够窃取SM和FN之间,以及FN和CC之间的通信。在公开信道上,攻击者可以获取对称加密后的密文,其安全性根据Kerckhoff准则,取决于密钥的保密性。方案中的密钥是通过DH密钥交换协议获取的。 定理1在模数为N2的群上,计算性DH问题和判定性DH问题和大整数分解一样困难[18]。 因此攻击者想要直接获取对称密钥是不可能的,其困难性相对于分解大整数。DH密钥交换最大的安全威胁来源于中间人攻击,为此设立一个公开的、不可修改的电子公告板, KGC才有权限将用户公钥写入,这就杜绝了外部攻击者伪造公钥进行冒充。除了对称机制保证信息机密性,data中包含着时间戳,密文新鲜性可防范重放攻击;采用HMAC机制能够保证数据完整性和来源可靠性,可防止注入错误数据。 用户隐私数据能够得到有效保护。 (1)耗电数据是非常敏感的。数据产生后,用户使用自己公钥加密,这样的密文只有SM可以解密。 定理2如果判定性DH困难假设在ZN2群上成立,那么改进的Pailler加密系统是语义安全的[18]。 原始数据是通过Pailler进行加密的,根据同态属性,聚合后的密文仍然是一个合法的Paillier密文,仅从密文中恢复出明文信息是不可行的[19-20]。 为了统计和计费,需要将用户数据提供给CC,以明文形式给CC必然会泄露隐私,因此通过代理重加密技术,代理将原本SM的密文转化为CC可以解密的密文,转化后立刻进行聚合,因此CC得到的是聚合密文,无法接触到单个密文。在代理重加密中,如果CC和雾节点合谋的话,可以将单个密文随意转化成CC的密文。为解决这个问题,使用双雾节点模型,即将密文的转化权限分散给两个雾节点,因此合谋需要CC同时腐化两个雾节点。在假设中,这两个雾节点属于不同的运营商,考虑到雾节点和CC的信誉问题,同时腐化两者是不可能的。 (2)雾节点诚实执行用户数据筛选和转化,但也渴望获取用户隐私。从两个方面来防范雾节点,一方面SM提供的密文使用Paillier加密了,FN从密文恢复明文是不可行的;另一方面,每个雾节点仅拥有部分代理密钥,无法成功转化密文,也无法获取明文信息,因此用户的隐私是能够得到有效保护的。 通过测量SM、FN和CC的计算负荷来评估方案的性能,同时也给出通信和存储开销。在进行实验分析时,代码基于 Java BigInteger 进行开发,仿真系统为Intel Core i7-7700HQ, 2.8 GHz CPU, 8 GB内存的笔记本。Paillier同态密码系统使用512位素数p和q,密文长度为2 048 bits。对称加密算法为AES,使用SHA-256实现伪随机函数,选择的Hmac为Javax.crypto.Mac库中的HmacSHA1。在聚合周期内,每个电表耗电量为1 000之内的一个随机值,每隔15 min聚合一次,实验测的基本运算耗时如表2所示。 表2 基本运算耗时 在常规聚合过程中,SM进行加密、FN进行重加密并聚合、CC进行解密。在SM的计算过程中,比较耗时的是Paliier加密和 DH密钥生成,分别涉及2次和1次指数运算,但是DH密钥生成只需要执行一次,之后可缓存结果。同样,FN可以缓存FN和SM之间的密钥。FN运算中重加密过程需要涉及1次求逆运算和1次指数运算,其余都是乘法运算,执行次数和数据量正向相关。解密过程中,仅需要1次求逆运算和1次指数运算。 将本文方案和FESDA[21]方案进行对比,FESDA是基于标准Paillier构造的典型数据聚合方案。图4为两个方案随着电表数量的增加,SM平均加密时间、FN的聚合时间、CC解密时间的对比。可以看出,本文方案中智能电表的运算量要比FESDA低很多,而雾节点的计算量要比FESDA高出很多,而现实中,智能电表是资源受限设备,而FN具有一定的计算和存储资源,因此,本文方案更为实用。 图4 本文方案和FESDA效率比较Fig.4 The efficiency comparison between the proposed scheme and FESDA 在计算动态账单时,雾节点能够根据实时电价生成动态账单,假设聚合周期内电费单价是1 000之内的随机数,用户数量分别从100增加到1 000,其FN进行电量聚合和账单聚合的耗时如图5所示。可以看出,两者计算量相差不大。 图5 FN实现电量聚合和动态账单的耗时比较Fig.5 Time comparison between power aggregation and dynamic billing for FN 对CC和FN之间、FN和SM之间的通信负荷以及存储负荷进行评估。耗电密文在模N2后,为2×2 048 bits。假设智能电表的序列号为64 bits,时间戳为128 bits,有10个属性对,每个属性标签长度为256 bits,生成的Mac值为256 bits,对称加密不存在密文扩展。因此,在一个聚合周期内,每个SM发送给单个FN的数据量大约为7 104 bits。而单个FN聚合后,发送给CC的聚合密文为2×2 048 bits,加上时间戳和Mac值,共计4 496 bits。 在存储方面,每个SM需要存储自己私钥 2 048 bits,同时需要缓存与每个雾节点的共享DH密钥,是2×2 048 bits,因此每个SM的存储负荷为6 KB。单个FN需要存储的共享密钥为(n+1)2 048 bits,其中整数n为SM的数量;存储的重加密密钥为n×2 048 bit;私钥2 048 bits,共计2(n+1) KB。控制中心CC只需要存储自己的私钥,以及与两个雾节点共享DH密钥的缓存,共计为3 KB。 可以看出,通信量主要集中在FN和SM之间,在雾节点模型中,它们之间仅一跳,传输效率高。而大部分存储负荷也集中在FN处,新方案充分利用了雾计算的优势。 针对智能电网中用户数据安全和隐私保护问题,提出了一种支持双向选择聚合和动态电价的智能电网隐私保护方案。其中雾节点不仅能够将用户耗电量进行安全聚合,为控制中心提供决策支持,也能够计算动态电价,统计用户历史耗电数据,为用户提供信息服务,具有双向服务的能力。另外,基于代理重加密技术,首次提供了智能电网数据的选择性聚合。实验表明,新方案充分利用雾计算的优势,降低了智能电表端的计算量,有较强实用价值。2 方案构造
2.1 设计思想
2.2 电量聚合
2.3 动态账单
2.4 双向选择询问
3 安全性分析
3.1 机密性和完整性
3.2 隐私性
4 性能评估
4.1 计算复杂度
4.2 通信和存储负荷
5 结论