开放科学(资源服务)标志码(OSID):
0 概述
智能电网的基本要求是使操作中心可以通过用户配备的智能电表收集电力数据,获得其管辖范围内所有用户的实时电力数据,从而能够进行动态的电力调度、电价制定等操作。然而,在这个过程中存在较大的隐私安全问题。由于智能电网与日常生活紧密相连,电力数据在传送过程中可能被非法攻击者窃取,从而造成用户隐私信息泄露[1]。例如,攻击者通过收集大量某用户在各个时段的电力数据,即可推测出用户的作息习惯,这样会暴露用户的个人隐私。另一方面,近年来分布式光伏发电产业发展迅速,对智能电网提出了新的要求。2017年,德国1/3的家庭已在房顶上安装太阳能电池板,自发自用,分布式光伏发电约占全国年用电量的8%。此外,德国实行溢价补贴,即光伏发电可获得固定发电补贴。电网用户在获得光伏发电奖励时,并不想暴露个人信息,因此,隐私安全显得尤为重要,尤其是电网用户的匿名性。智能电网的实现需满足以下3个需求:安全性需求,即保证个体用户实时电力信息的数据保密;实用性需求,即保证操作中心可以得到所有用户的真实电力数据总和;匿名性需求,即保证用户在上传电力数据和获得光伏发电奖励时保持匿名。
NAKAMOTO[2]于2008年在比特币论坛上提出区块链的概念,十年来区块链技术得到飞速发展,相关研究与应用呈爆发式增长态势,许多研究者从不同角度探讨了将区块链应用在电力系统上的意义。KUSHCH等[3]分析了智能电网技术的发展前景、可再生能源成本降低的趋势以及智能计量的技术路线,提出开发基于区块链的解决方案以提高智能电网生态的总体安全性。MYLREA等[4]探讨了将区块链以及智能合约应用于智能电网,进一步提升智能电网的弹性和安全性。区块链可以将信任商品化,并使自动化的智能合约根据预定义规则支持可审计的多方交易。WU等[5]研究区块链技术在智能电网需求侧响应管理中的应用,并给出一个区块链被用来促进机器对机器(M2M)交互的实例。
本文基于Paillier算法提出一个新的智能电网数据聚合和激励方案。利用同态Paillier加密技术实现外包计算下的数据安全聚合,并通过区块链获得光伏发电奖励时电网用户和电网管理中心的双向匿名性和不可链接性。
1 相关工作
随着智能电网的发展,越来越多的研究者开始关注智能电网中的数据聚合和激励。2012年,LU等[6]提出一种隐私保护的智能电网通信聚合方案,采用超递增序列来构造多维数据,并采用同态Paillier加密技术对结构化数据进行加密。一旦本地网关受到攻击而聚合错误的密文,运营中心并不能及时地发现,从而不能恢复出正确的聚合明文信息。2013年,ROTTONDI等[7]提出一种基于客户端网关的分布式数据聚合安全体系结构。2016年,WANG等[8]提出平衡匿名性和可跟踪性的智能电网外包小规模数据线性聚合方案。该方案支持基于外包计算的多维数据线性聚合,但该方案中设置了可信第三方,用户的隐私并不能得到充分保障。2017年,HE等[9]提出一种新的隐私保护数据聚合方案,利用Boneh-Goh-Nissim公钥密码对抗内部攻击者且计算效率更高,但是在多维数据聚合上的表现并不理想。这方面的研究成果还有很多,但是抗内部攻击的多维数据聚合仍是亟需解决的问题。
因此,对于智能电网中的能源交易,研究者们做了大量的工作。2011年,YANG等[10]提出一种保密通信和精确的车联网(V2G)奖励架构,这是一种精确而公平的激励模式,V2G网络的运营商为每个参与的用户提供每项服务奖励。考虑到V2G网络的特殊性,他们首次尝试解决隐私问题。2015年,WANG等[11]提出一种新的可跟踪隐私保护通信和精确奖励方案,但并不满足不可链接性。2018年,AITZHAN等[12]通过区块链技术、多签名和匿名加密消息流实现了分布式能源交易系统的概念验证,使用户能够匿名协商能源价格,并安全地进行交易,但是该方案中仍然需要存在可信第三方。2019年,DORRI等[13]提出一个基于区块链的私有框架,使能源消费者能够以分布式的方式协商能源价格和交易能源,采用路由方法来转发协商流量,从而减少了相关开销,但并没有给出具体的算法。GAI等[14]提出一种基于联盟链的方案来解决无限制交易的隐私泄露问题。该方法主要解决了智能电网中能源交易用户的隐私问题,并对卖家的能源销售分布进行筛选。
智能电网中的数据聚合和激励得到了众多研究者的关注,然而现有方案仍存在一些安全隐私问题。
2 预备知识
2.1 椭圆曲线与双线性对
定义一个在有限域$ {\mathbb{F}}_{q} $上的椭圆曲线$ E $,其中$ q $为一个素数。$ E\left({\mathbb{F}}_{q}\right) $由下式给出:$ E:{y}^{2}={x}^{3}+ax+b\;\mathrm{m}\mathrm{o}\mathrm{d}\;q $,其中,$ a, b\in {\mathbb{F}}_{q}^{*}, 4{a}^{3}+27{b}^{2}\;\mathrm{m}\mathrm{o}\mathrm{d}\;q\ne 0,G $为$ E\left({\mathbb{F}}_{q}\right) $素数阶$ \widehat{l} $的一个生成元。离散对数问题(Discrete Logarithm Problem,DLP)和计算Diffie-Hellman问题(Calculation Diffie-Hellman Problem,CDHP)给出如下定义:
定义1(DLP) 给定$ (G, {G}_{1})\in E\left({\mathbb{F}}_{q}\right) $,寻找$ x\in {\mathbb{F}}_{\widehat{l}}^{*} $使得$ {G}_{1}=xG $。
定义2(CDHP) 给定$ (G, {G}_{1}, {G}_{2})\in E({\mathbb{F}}_{q}{)}^{3} $,其中$ {G}_{1}=xG $,$ {G}_{2}=yG $,$ x, y $未知,计算x、y、G。
选择一个双线性群对$ ({\mathbb{G}}_{1}, {\mathbb{G}}_{2}) $,$ {\mathbb{G}}_{1}\mathrm{、}{\mathbb{G}}_{2} $分别为素数阶$ p $的一个循环加法群和循环乘法群,$ P $是$ {\mathbb{G}}_{1} $的一个生成元。令$ e:{\mathbb{G}}_{1}\times {\mathbb{G}}_{1}\to {\mathbb{G}}_{2} $为一个具有以下性质的双线性映射。
1) 双线性:$ \forall Q, R\in {\mathbb{G}}_{1} $,$ a, b\in {\mathbb{F}}_{p}^{*} $,$ e\left(R, Q+S\right)=e\left(Q+S, R\right)=e\left(Q, R\right)e(S, R) $$ e\left(aR, bQ\right)=e{(R, Q)}^{ab} $;
2) 非退化性:$ \exists Q, R\in {\mathbb{G}}_{1} $使得$ e\left(Q, R\right)\ne {1}_{{\mathbb{G}}_{2}} $;
3) 可计算性:$ \forall Q, R\in {\mathbb{G}}_{1} $,均存在有效的算法计算$ e\left(Q, R\right) $。
2.2 Paillier密码系统
Paillier密码系统可以实现加法同态,在隐私保护方面得到了广泛的应用。加密系统由密钥生成、加密和解密3种算法组成。
1) 密钥生成,给定安全参数$ {\varkappa }_{1} $,首先选定两个足够大的素数$ {p}_{1}\mathrm{和}{q}_{1} $,其中$ \left|{p}_{1}\right|=\left|{q}_{1}\right|={\varkappa }_{1} $。然后,计算$ n={p}_{1}{q}_{1} $和$ \lambda ={l}_{\mathrm{c}\mathrm{m}}({p}_{1}-1, {q}_{1}-1 $)。定义一个函数$ L\left(u\right)=(u-1)/n $并选择一个生成元$ g\in {\mathbb{F}}_{{n}^{2}}^{*} $,计算$ \mu =\left(L\right({g}^{\lambda }\;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2}{\left)\right)}^{-1}\;\mathrm{m}\mathrm{o}\mathrm{d}\;n $,由此得到了公钥$ {p}_{k}=(n, g) $和对应的私钥$ {s}_{k}=(\lambda , \mu ) $。
2) 加密,给定一个消息$ m\in {\mathbb{F}}_{n}^{*} $,选择随机数$ r\in {\mathbb{F}}_{n}^{*} $,进而计算密文,$ c=E\left(m\right)={g}^{m}\times {r}^{n}\;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2} $,其加性同态为$ E\left({m}_{1}\right)\times E\left({m}_{2}\right)=({g}^{{m}_{1}}\times {r}_{1}^{n})\times ({g}^{{m}_{2}}\times {r}_{2}^{n}) $ $ \mathrm{m}\mathrm{o}\mathrm{d}\;\;{n}^{2} $$ ={g}^{{m}_{1}+{m}_{2}}\times {\left({r}_{1}{r}_{2}\right)}^{n}\;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2} $$ =E\left({m}_{1}+{m}_{2}\right) $。
3) 解密,给定密文$ c\in {\mathbb{F}}_{{n}^{2}}^{*} $,则对应的明文可以恢复为$ m=D\left(c\right)=L\left({c}^{\lambda \;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2}}\right)\times \mu \;\mathrm{m}\mathrm{o}\mathrm{d}\;n $,对于选择明文攻击,Paillier密码系统被证明是安全的。
2.3 Monero区块链与环签名
环签名是一种数字签名方案,最初由RIVEST等[15]提出。环签名是一种简化的群签名,环签名中只有环签名成员没有管理者,不需要环签名成员间的合作。由于环签名具有无条件匿名性和不可伪造性的特点,使其在隐秘性方面比一般的群签名更突出。而环签名的代表项目是Monero区块链[16]。Monero区块链是一种公有链,其交易由分布式共识机制同步,然后记录在区块链上。Monero区块链使用环签名、环保密交易和随机地址来混淆所有交易的来源、金额和目的地。它集合了去中心化加密货币的所有优势,而没有任何隐私方面的缺陷。因发送和接收地址以及交易金额在默认情况下是混淆的,所以Monero区块链上的交易不能链接到特定用户或真实身份。
3 基于Paillier的智能电网数据聚合和激励方案
3.1 系统模型
在本文方案存在5个实体,分别为电网管理中心(State Grid Management Center,SGMC)、云计算中心(Cloud Computation Center,CCC)、电网用户(Ui)、智能电表(SMi)和Monero区块链。
1) 电网管理中心是整个智能电网的管理员,通过SMi为Ui提供电力保障,可以远程查询数据线性聚合信息进行统计和预测,制定分时电价来指导用户用电习惯,并通过区块链对自发电用户进行奖励。
2) 云计算中心具有庞大的存储空间和计算资源来维护用户数据,负责聚合用户上传的电力数据。在聚合计算过程中,有可能会遗漏一些数据,或者受到外部攻击聚合一些错误数据。在聚合密文出错时,SGMC可以及时发现并向其追责。SGMC可能通过交易这些隐私数据来牟利。此外,由于在奖励自发电用户过程中,CCC负责发放相关收据和凭证,有可能将奖励错误导向利益相关的区块链地址或者修改奖励金额。
3) 默认电网用户Ui都已经安装了SMi,用户可以将自己随机选择的区块链地址写入SMi,以便接收奖励。
4) 假设SMi基于可信硬件[17],诚实且不可篡改,并在固定的时间间隔将电力信息以密文形式发送给CCC。智能电表SMi对电网用户Ui不完全透明,相关电力数据和收据对Ui公开,但与其他实体协商产生的密钥和参数对Ui保密。
5) SGMC通过区块链(本文为Monero区块链)将奖励发送给Ui。Ui也可以检查它们的奖励是否已经由SGMC发送。
3.2 安全目标
安全是智能电网安全通信成功的关键。在安全模型方面,默认SGMC是可信的,SMi诚实且不可篡改。本文方案必须满足以下3个安全目标:
1) 身份验证和数据完整性,CCC验证SGMC授权用户发送的密文数据,并且在传输过程中未被更改,即如果敌手伪造或者修改数据,则应及时检测到该恶意操作。同时只有正确的聚合密文才能被SGMC接收,在此情况下才能完成对电网状况的监控和自发电奖励。
2) Ui的匿名性,在SMi上传数据的过程中,CCC无法通过SMi识别Ui的身份。在授权和奖励的过程中,SGMC也无法识别Ui的身份。
3) SGMC的匿名性,虽然Ui接收SGMC的奖励,但Ui无法识别SGMC在区块链上的地址。
根据上述安全需求,给出以下安全定义:
定义3(Ui的匿名性) 在本文方案中,Ui是无条件匿名的,即使敌手的计算能力是无限的,也无法识别Ui的真实身份。
定义4(SGMC的匿名性) 假设SGMC在发送奖励时只有一个地址,本文方案满足SGMC的匿名性,需满足以下两个条件。
1) 当$ \mathrm{S} $GMC有$ {n}_{1} $个输出地址时,如果所有的输出地址都不属于敌手,那么识别SGMC变化地址的概率不超过$ (1/{n}_{1}) $。如果$ {n}_{2} $个输出地址属于敌手,那么识别SGMC变化地址的概率不超过$ [1/({n}_{1}-{n}_{2}\left)\right] $。
2) 如果SGMC计算有$ n $个区块链地址的环签名,任何不属于该环的敌手猜测到SGMC地址的概率应不大于$ 1/n $。如果该环中有$ {n}^{\text{'}} $个地址属于敌手,那么猜测到SGMC地址的概率不大于$ (1/(n-{n}^{\text{'}}\left)\right) $。
定义5(不可追踪性) 对于发送到区块链上的每个交易请求,所有可能的发送方都是等概率的。
3.3 本文方案
为体现方案设计的直观性,本文方案的具体架构如图 1所示。
3.3.1 初始化
本文方案采用两种类型的系统参数。一种类型参数是针对Monero区块链,另一种用于授权、认证、加密、验证等。其生成步骤是使用与Monero区块链同样的椭圆曲线参数。在有限域$ {\mathbb{F}}_{q} $上定义椭圆曲线$ E=-{x}^{2}+{y}^{2}=1+d{x}^{2}{y}^{2} $,其中$ q={2}^{255}-19, d=-122\mathrm{ }665/ $ $ 121\mathrm{ }\mathrm{ }\mathrm{ }\mathrm{ }\mathrm{ }666 $。选择一个素数阶$ \widehat{l} $的生成元$ G $,$ \widehat{l}={2}^{252}+27\mathrm{ }742\mathrm{ }317\mathrm{ }777\mathrm{ }372\mathrm{ }353\mathrm{ }535\mathrm{ }851\mathrm{ }937\mathrm{ }790\mathrm{ }883\mathrm{ }648\mathrm{ }493 $。此外,选择两个安全的密码散列函数$ {H}_{1}:{\left\{\mathrm{0, 1}\right\}}^{*}\to $ $ {\mathbb{F}}_{\widehat{l}} $,$ {H}_{2}:E\left({\mathbb{F}}_{q}\right)\to E\left({\mathbb{F}}_{q}\right) $,用户Ui选择$ ({a}_{i}, {b}_{i})\in {\mathbb{F}}_{\widehat{l}}^{*} $作为它的私钥。对应的公钥为$ ({A}_{i}, {B}_{i}) $,其中$ {A}_{i}={a}_{i}G, {B}_{i}={b}_{i}G $,并将$ ({A}_{i}, {B}_{i}) $写入SMi。SGMC选择$ (x, {x}_{1})\in {\mathbb{F}}_{\widehat{l}}^{*} $作为它的私钥,对应的公钥为$ \left(X, {X}_{1}\right) $,其中$ X=xG, {X}_{1}={x}_{1}G $。在这个阶段,SGMC在区块链的地址$ X $上存储了大量的Monero币。
在公钥基础设施(Public Key Infrastructwe,PKI)中,给定安全参数$ \varkappa , {\varkappa }_{1} $,首先通过$ \mathcal{G}en\left(\varkappa \right) $生成$ \left(p, P, {\mathbb{G}}_{1}, {\mathbb{G}}_{2}, e\right) $,其中$ \left({\mathbb{G}}_{1}, {\mathbb{G}}_{2}\right) $为素数阶$ p $的双线性群对,双线性映射为$ e:{\mathbb{G}}_{1}\times {\mathbb{G}}_{1}\to {\mathbb{G}}_{2} $,$ P $是$ {\mathbb{G}}_{1} $的一个生成元。SGMC选择一个随机数$ y\in {\mathbb{F}}_{p}^{*} $作为它的私钥并计算它的公钥Y=yP。CCC选择一个随机数$ z\in {\mathbb{F}}_{p}^{*} $作为它的私钥并计算其公钥Z=zP。SGMC计算Paillier密码系统的公钥$ \left(n={p}_{1}{q}_{1}, g\right) $和对应的私钥$ \left(\lambda , \mu \right) $,其中$ {p}_{1} $和$ {q}_{1} $是两个足够大的素数并满足$ \left|{p}_{1}\right|=\left|{q}_{1}\right|={\varkappa }_{1} $。假设聚合的总数据量不超过一个常数$ N $,且有3种类型的数据$ \left({\phi }_{1}, {\phi }_{2}, {\phi }_{3}\right) $需要在Paillier密码系统中进行加密,其中$ {\phi }_{1} $是用户的用电数据,$ {\phi }_{2} $是用户的发电数据,$ {\phi }_{3} $是一个基于哈希的消息验证码,且$ {\phi }_{i} $值始终小于一个足够大的常数$ d $。SGMC构造一个超递增序列$ \stackrel{⃗}{\alpha }=\left({a}_{1}=1, {a}_{2}, {a}_{3}\right) $,其中$ {a}_{2}, {a}_{3} $是足够大的素数并满足$ \left|{a}_{2}\right|, \left|{a}_{3}\right|\ge {\varkappa }_{1} $,且$ \left\{\begin{array}{c}{a}_{1}\times N\times d < {a}_{2}\\ \left({a}_{1}+{a}_{2}\right)\times N\times d < {a}_{3}\\ \mathop \sum \limits _{i=1}^{3}{a}_{i}\times N\times d < n\end{array}\right. $,然后计算$ \left({g}_{1}, {g}_{2}, {g}_{3}\right) $,其中$ {g}_{i}={g}^{{a}_{i}}, i=\mathrm{1, 2}, 3 $。此外,选择2个安全的密码散列函数$ H $和$ \mathrm{H}\mathrm{M}\mathrm{A}{\mathrm{C}}_{k} $,其中$ H:{\left\{\mathrm{0, 1}\right\}}^{*}\to {\mathbb{G}}_{1}, \mathrm{H}\mathrm{M}\mathrm{A}{\mathrm{C}}_{k}:{\left\{\mathrm{0, 1}\right\}}^{*}\to {\mathbb{F}}_{d} $,一个对称加密算法$ \left(E, D\right) $,如$ \mathrm{A} $ES,与一个安全的签名/验证算法对$ (\mathrm{S}\mathrm{i}\mathrm{g}\mathrm{n}, \mathrm{V}\mathrm{e}\mathrm{r}\mathrm{i}\mathrm{f}\mathrm{y}) $。
3.3.2 基于合同的授权
为了能够匿名上传电力数据和获得自发电奖励,SMi需要定期获得SGMC授权。同时,SGMC也需要收集SMi的状态信息,根据这些信息来创建合同Conti,其中包含SMi的状态信息、所属社区等。为了保护Ui的隐私,Conti中不包含Ui的身份信息。但是,$ ({A}_{i}, {B}_{i}) $被包含到Conti中以获得授权。同时,为了进行安全交互,Ui和$ \mathrm{S} $GMC共同协商一个会话密钥ki。SGMC还初始化一个表格,其中列出了授权SMi的随机公钥$ ({A}_{i}, {B}_{i}) $、认证期限和合同有效期限Ti。SGMC执行以下2个步骤以授权SMi:1)$ \mathrm{S} $GMC初始化一个表格,为Conti生成签名$ {\sigma }_{i}=yH\left(\mathrm{C}\mathrm{o}\mathrm{n}{\mathrm{t}}_{i}\right) $,将$ ({A}_{i}, {B}_{i}) $、认证期限和合同有效期限$ {T}_{i} $添加到Tab;2)SGMC将$ (\mathrm{C}\mathrm{o}\mathrm{n}{\mathrm{t}}_{i}, {\sigma }_{i}, {k}_{i}, {g}_{1}, {g}_{2}, {g}_{3}) $发送给SMi,将更新后的Tab发送给CCC。
3.3.3 匿名认证
当SMi接收到$ (\mathrm{C}\mathrm{o}\mathrm{n}{\mathrm{t}}_{i}, {\sigma }_{i}, {k}_{i}, {g}_{1}, {g}_{2}, {g}_{3}) $后需要在认证期限内向CCC完成认证。首先它选择一个随机数$ {w}_{i}\in {\mathbb{F}}_{p}^{*} $作为临时私钥,并计算$ {W}_{i}={w}_{i}P $作为临时公钥,然后将$ (\mathrm{C}\mathrm{o}\mathrm{n}{\mathrm{t}}_{i}, {\sigma }_{i}, {W}_{i}) $发送给CCC。CCC接收到$ (\mathrm{C}\mathrm{o}\mathrm{n}{\mathrm{t}}_{i}, {\sigma }_{i}, {W}_{i}) $后,执行以下3个步骤验证授权的有效性。
1) 在一段时间内,CCC接收到很多$ (\mathrm{C}\mathrm{o}\mathrm{n}{\mathrm{t}}_{i}, {\sigma }_{i}, {W}_{i}) $,其中$ i\in \mathbb{I} $,且$ \left|\mathbb{I}\right|\le N\mathrm{。} $
2) CCC选择随机数$ {\delta }_{i}\in {\mathbb{F}}_{p} $,其中$ i\in \mathbb{I} $,之后验证$ e\left(\mathop \sum \limits _{i\in \mathbb{I}}{\delta }_{i}{\sigma }_{i}, P\right)=e\left(\mathop \sum \limits _{i\in \mathbb{I}}{\delta }_{i}H\left(\mathrm{C}\mathrm{o}\mathrm{n}{\mathrm{t}}_{i}\right), Y\right) $是否成立。如果公式不成立,CCC找出其中的无效对,并拒绝它们,然后继续执行后续步骤。
3) 对于每个$ i\in \mathbb{I} $,CCC从$ \mathrm{C}\mathrm{o}\mathrm{n}{\mathrm{t}}_{i} $提取其公钥$ ({A}_{i}, {B}_{i}) $。如果$ ({A}_{i}, {B}_{i}) $属于Tab并在认证期限内第一次提出认证请求,则将$ {W}_{i} $添加到Tab对应的$ ({A}_{i}, {B}_{i}) $;否则,CCC拒绝SMi的认证请求。
3.3.4 数据上传
每隔固定的时间间隔智能电表SMi会自动收集这一时间段$ t $内用户Ui的电力数据,并执行以下步骤:1)SMi选择一个随机数$ {r}_{it}\in {\mathbb{F}}_{n}^{*} $储存在本地并计算$ {C}_{i, t}={g}_{1}^{{d}_{i1}}\times {g}_{2}^{{d}_{i2}}\times {g}_{3}^{{d}_{i3}}\times {r}_{it}^{n}\mathrm{m}\mathrm{o}\mathrm{d}{n}^{2} $,其中,$ {d}_{i1} $为用户Ui在时间段$ t $内的用电数据,$ {d}_{i2} $为用户Ui在时间段$ t $内的发电数据,$ {d}_{i3}=\mathrm{H}\mathrm{M}\mathrm{A}{\mathrm{C}}_{{k}_{i}}({A}_{i}, {B}_{i}, t) $;2)SMi利用对称密钥$ {k}_{i} $加密得到$ {c}_{{k}_{i}, t}={E}_{{k}_{i}}\left({d}_{i1}, {d}_{i2}, {d}_{i3}, t\right) $,计算$ {\stackrel{-}{\sigma }}_{i, t}={w}_{i}H({A}_{i}, {B}_{i}, {C}_{i, t}, {c}_{{k}_{i}, t}, t) $;3)SMi将$ ({A}_{i}, {B}_{i}, {C}_{i, t}, {c}_{{k}_{i}, t}, {\stackrel{-}{\sigma }}_{i, t}, t) $发送给CCC。
3.3.5 数据聚合
在时间段$ t $内,智能电表发送一系列的密文数据,CCC需要对这些数据验证后存储、存储后聚合。
1) 在规定的时间间隔内,CCC接收到很多$ ({A}_{i}, {B}_{i}, {C}_{i, t}, {c}_{{k}_{i}, t}, {\stackrel{-}{\mathrm{\sigma }}}_{i, t}, t) $,其中$ i\in \mathbb{I}\mathbb{。} $
2) 对于每个$ i\in \mathbb{I} $,CCC检查$ ({A}_{i}, {B}_{i}) $是否属于Tab 1并且在合同有效期限内,如果是,CCC提取对应的$ {W}_{i} $;否则,CCC拒绝此条$ ({A}_{i}, {B}_{i}, {C}_{i, t}, {c}_{{k}_{i}, t}, {\stackrel{-}{\mathrm{\sigma }}}_{i, t}, t)\mathrm{。} $
3) CCC选择随机数$ \varepsilon _{i}\in {\mathbb{F}}_{p} $,$ i\in \mathbb{I} $,验证$ e\left(\mathop \sum \limits _{i\in \mathbb{I}}{\epsilon }_{i}{\stackrel{-}{\mathrm{\sigma }}}_{i, t}, P\right)=\prod _{i\in \mathbb{I}}e\left({\epsilon }_{i}H({A}_{i}, {B}_{i}, {C}_{i, t}, {c}_{{k}_{i}, t}, t), {W}_{i}\right) $是否成立。如果公式不成立,CCC找出其中的无效项,并拒绝它们;否则,CCC将其存储并继续执行后续步骤。
4) CCC对验证后的密文数据进行聚合。
$ {C}_{t}=\mathop \prod \limits_{i\in \mathbb{I}}{C}_{i, t}\;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2} $
|
5) CCC计算签名。
$ \overline{\overline \sigma }_{t}=zH\left({C}_{t}, t\right) $
|
6) CCC将$ ({C}_{t}, {\stackrel{̿}{\mathrm{\sigma }}}_{t}, t) $发送给SGMC。
3.3.6 验证和解密
SGMC接收到CCC发送的聚合密文后,执行以下步骤验证和解密密文。
1) SGMC验证$ e\left({\stackrel{̿}{\mathrm{\sigma }}}_{t}, P\right)=e\left(H\left({C}_{t}, t\right), Z\right) $是否成立,如果不成立,SGMC拒绝该聚合密文;否则,SGMC继续执行后续步骤。
2) SGMC利用Tab和$ {k}_{i} $计算$ {Q}_{t}=\mathop \sum \limits _{i\in \mathbb{I}}\mathrm{H}\mathrm{M}\mathrm{A}{\mathrm{C}}_{{k}_{i}}({A}_{i}, {B}_{i}, t) $,其中$ i\in \mathbb{I}\mathbb{。} $
3) SGMC利用$ (\lambda , \mu ) $解密$ {C}_{t} $得到:
$ {M}_{t}=L\left({{C}_{t}}^{\lambda \;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2}}\right)\times \mu \;\mathrm{m}\mathrm{o}\mathrm{d}\;n ={a}_{1}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i1}+{a}_{2}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i2}+ {a}_{3}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i3}\;\mathrm{m}\mathrm{o}\mathrm{d}\;n $
|
令$ {D}_{j}=\mathop \sum \limits _{i\in \mathbb{I}}{d}_{ij} $,其中$ j=\mathrm{1, 2}, 3 $,则$ {M}_{t}={a}_{1}{D}_{1}+{a}_{2}{D}_{2}+{a}_{3}{D}_{3}\mathrm{m}\mathrm{o}\mathrm{d}n\mathrm{。} $
4) 通过调用算法1,SGMC利用$ ({a}_{1}, {a}_{2}, {a}_{3}) $恢复$ ({D}_{1}, {D}_{2}, {D}_{3}) $,其中$ {D}_{1} $为时间段$ t $内所有电网用户用电总量,$ {D}_{2} $为时间段$ t $内所有电网用户发电总量,$ {D}_{3} $为所有SMi在时间段$ t $内消息验证码的累加值。SGMC验证以下公式是否成立:$ {D}_{3}={Q}_{t}=\mathop \sum \limits _{i\in \mathbb{I}}\mathrm{H}\mathrm{M}\mathrm{A}{\mathrm{C}}_{{k}_{i}} $ $ ({A}_{i}, {B}_{i}, t)\mathrm{。} $如果成立,则聚合密文完整,$ \mathrm{S} $GMC储存$ ({D}_{1}, {D}_{2}, {D}_{3}, t) $;否则,拒绝CCC发送的聚合密文。
算法 1 恢复聚合数据
输入 $ a=({a}_{1}=1, {a}_{2}, {a}_{3}) $,$ M $
输出 $ ({D}_{1}, {D}_{2}, {D}_{3}) $
1.Set $ {\mathrm{X}}_{3}=\mathrm{M} $
2.For $ \mathrm{j}=3 $ to $ 2 $ do
3.$ {\mathrm{X}}_{\mathrm{j}-1}={\mathrm{X}}_{\mathrm{j}}\mathrm{m}\mathrm{o}\mathrm{d}{\mathrm{a}}_{\mathrm{j}} $
4.$ {\mathrm{D}}_{\mathrm{j}}=\frac{{\mathrm{X}}_{\mathrm{j}}-{\mathrm{X}}_{\mathrm{j}-1}}{{\mathrm{a}}_{\mathrm{j}}}=\mathop \sum \limits _{\mathrm{i}\in \mathrm{I}}{\mathrm{d}}_{\mathrm{i}\mathrm{j}} $
5.end for
6.$ {\mathrm{D}}_{1}={\mathrm{X}}_{1}=\mathop \sum \limits _{\mathrm{i}\in \mathrm{I}}{\mathrm{d}}_{\mathrm{i}1} $
7.return$ ({\mathrm{D}}_{1}, {\mathrm{D}}_{2}, {\mathrm{D}}_{3}) $
8.end procedure
3.3.7 匿名奖励
当合同有效期限$ {T}_{i} $到期后,CCC计算SMi在合同有效期限$ {T}_{i} $内上传数据的聚合密文,并将其发送给SMi和SGMC分别作为收据和凭证,其中$ \left|{T}_{i}\right|\le N\times \left|t\right| $。
1) 对于每个SMi,CCC检索所有在合同有效期限$ {T}_{i} $内包含$ ({A}_{i}, {B}_{i}) $的条目,并计算$ {C}_{i, {T}_{i}}=\mathop \prod \limits_{t\in {T}_{i}}{C}_{i, t}\mathrm{m}\mathrm{o}\mathrm{d}{n}^{2} $。
2) CCC计算签名:
${\overline{\overline \sigma } _{i,{T_i}}} = zH\left( {{A_i},{B_i},{C_{i,{T_i}}},{T_i}} \right)$
|
3) CCC将$ ({A}_{i}, {B}_{i}, {C}_{i, {T}_{i}}, {\stackrel{̿}{\mathrm{\sigma }}}_{i, {T}_{i}}, {T}_{i}) $发送给SMi和SGMC分别作为收据和凭证。
当SMi接收到$ ({A}_{i}, {B}_{i}, {C}_{i, {T}_{i}}, {\stackrel{̿}{\mathrm{\sigma }}}_{i, {T}_{i}}, {T}_{i}) $后,先验证$ {\stackrel{̿}{\mathrm{\sigma }}}_{i, {T}_{i}} $的有效性。利用保存在本地的合同有效期限$ {T}_{i} $内的用电和发电总量$ ({D}_{1, {T}_{i}}^{\text{'}}, {D}_{2, {T}_{i}}^{\text{'}}) $以及每次上传数据时生成的消息验证码和$ {r}_{i, t} $计算:
$ {D}_{3, {T}_{i}}^{\text{'}}=\mathop \sum \limits _{t\in {T}_{i}}\mathrm{H}\mathrm{M}\mathrm{A}{\mathrm{C}}_{{k}_{i}}({A}_{i}, {B}_{i}, t) $
|
$ {C}_{i, {T}_{i}}^{\text{'}}={g}_{1}^{{D}_{1, {T}_{i}}^{\text{'}}}\times {g}_{2}^{{D}_{2, {T}_{i}}^{\text{'}}}\times {g}_{3}^{{D}_{3, {T}_{i}}^{\text{'}}}\times {\left(\mathop \prod \limits_{t\in {T}_{i}}{r}_{i, t}\right)}^{n}\;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2} $
|
如果$ {C}_{i, {T}_{i}}={C}_{i, {T}_{i}}^{\text{'}} $,SMi接收该收据;否则SMi向SGMC发起申诉。
在一段时间内,SGMC收到很多$ ({A}_{i}, {B}_{i}, {C}_{i, {T}_{i}}, {\stackrel{̿}{\mathrm{\sigma }}}_{i, {T}_{i}}, {T}_{i}) $,其中$ i\in \mathbb{I} $。为了在匿名条件下给予SMi应得的奖励,SGMC执行以下步骤:
1) SGMC选择随机数$ {\theta }_{i}\in {\mathbb{F}}_{p} $,$ i\in \mathbb{I} $,然后验证$ e\left(\mathop \sum \limits _{i\in \mathbb{I}}{\theta }_{i}{\stackrel{̿}{\mathrm{\sigma }}}_{i, {T}_{i}}, P\right)=e\left(\mathop \sum \limits _{i\in \mathbb{I}}{\theta }_{i}H\left({A}_{i}, {B}_{i}, {C}_{i, {T}_{i}}, {T}_{i}\right), Z\right) $是否成立。如果不成立,SGMC找出其中无效项并拒绝它们;否则SGMC继续执行后续步骤。
2) 对于每个$ i\in \mathbb{I} $,SGMC检验$ ({A}_{i}, {B}_{i}) $是否属于$ \mathrm{T}\mathrm{a}\mathrm{b} $且合同有效期限为$ {T}_{i} $。如果不是,SGMC拒绝该凭据;否则SGMC继续执行后续步骤。
3) 对于每个$ i\in \mathbb{I} $,SGMC首先计算$ {Q}_{i, {T}_{i}}=\mathop \sum \limits _{t\in {T}_{i}}\mathrm{H}\mathrm{M}\mathrm{A}{\mathrm{C}}_{{k}_{i}}\left({A}_{i}, {B}_{i}, t\right) $,然后利用$ \left(\lambda , \mu \right) $解密$ {C}_{i, {T}_{i}} $得到$ {M}_{i, {T}_{i}}=L\left({{C}_{i, {T}_{i}}}^{\lambda \mathrm{m}\mathrm{o}\mathrm{d}{n}^{2}}\right)\times \mu \mathrm{m}\mathrm{o}\mathrm{d}n $$ ={a}_{1}\mathop \sum \limits _{t\in {T}_{i}}{d}_{i1}+{a}_{2}\mathop \sum \limits _{t\in {T}_{i}}{d}_{i2}+{a}_{3} $$ \mathop \sum \limits _{t\in {T}_{i}}{d}_{i3}\mathrm{m}\mathrm{o}\mathrm{d}n $
令$ {D}_{j, {T}_{i}}=\mathop \sum \limits _{t\in {T}_{i}}{d}_{ij} $,其中$ j=\mathrm{1, 2}, 3 $,则$ {M}_{i, {T}_{i}}={a}_{1}{D}_{1, {T}_{i}}+{a}_{2}{D}_{2, {T}_{i}}+{a}_{3}{D}_{3, {T}_{i}}\mathrm{m}\mathrm{o}\mathrm{d}n $。
4) 通过调用算法1,SGMC利用$ ({a}_{1}, {a}_{2}, {a}_{3}) $恢复$ ({D}_{1, {T}_{i}}, {D}_{2, {T}_{i}}, {D}_{3, {T}_{i}}) $,其中$ {D}_{1, {T}_{i}} $为Ui在合同有效期限$ {T}_{i} $内的用电总量,$ {D}_{2, {T}_{i}} $为Ui在合同有效期限$ {T}_{i} $内的发电总量,$ {D}_{3, {T}_{i}} $为SMi在合同有效期限$ {T}_{i} $内消息验证码的累加值。SGMC验证$ {D}_{3, {T}_{i}}={Q}_{i, {T}_{i}}=\mathop \sum \limits _{t\in {T}_{i}}\mathrm{H}\mathrm{M}\mathrm{A}{\mathrm{C}}_{{k}_{i}} $ $ ({A}_{i}, {B}_{i}, t) $是否成立,如果成立,聚合密文完整,$ \mathrm{S} $GMC储存$ ({A}_{i}, {B}_{i}, {D}_{1, {T}_{i}}, {D}_{2, {T}_{i}}, {D}_{3, {T}_{i}}, {T}_{i}) $;否则SGMC拒绝该凭据。
5) 假设SGMC在区块链上的资产为$ \mathrm{b}\mathrm{a}\mathrm{l} $。$ \mathrm{S} $GMC选择一个随机数$ \xi \in {\mathbb{F}}_{\widehat{l}}^{*} $,然后计算$ {\mathrm{U}}_{i} $的一次性公钥:$ {\widehat{P}}_{i}={H}_{1}\left(\xi {A}_{i}\right)G+{B}_{i} $,其中$ i\in \mathbb{I} $。SGMC根据奖励政策计算$ {\mathrm{U}}_{i} $应得奖励:$ \mathrm{b}\mathrm{a}{\mathrm{l}}_{i}={D}_{2, {T}_{i}}\times \psi $,其中$ \psi $为奖励系数。因此,一次交易将会有$ \left|\mathbb{I}\right|+1 $个输出。具体来说,对于一次性公钥为$ {\widehat{P}}_{i} $的$ {\mathrm{U}}_{i} $,对应输出为$ \mathrm{b}\mathrm{a}{\mathrm{l}}_{i} $。此外,附加的输出对应交易后SGMC的剩余资产$ \mathrm{b}\mathrm{a}{\mathrm{l}}_{c}=\mathrm{b}\mathrm{a}\mathrm{l}-\mathop \sum \limits _{i\in \mathbb{I}}\mathrm{b}\mathrm{a}{\mathrm{l}}_{i} $。用消息$ m $来表示$ \left|\mathbb{I}\right|+1 $个输出和一些元数据。$ m $中包含$ R $和每个Ui对应的$ ({\widehat{P}}_{i}, \mathrm{b}\mathrm{a}{\mathrm{l}}_{i}) $,其中$ i\in \mathbb{I} $,$ R=\xi G $。
6) SGMC计算$ A={H}_{2}\left(\mathrm{S}\mathrm{i}\mathrm{g}{\mathrm{n}}_{y}\left(m\right)\right) $,其中$ \mathrm{S}\mathrm{i}\mathrm{g}{\mathrm{n}}_{y}\left(m\right) $是SGMC利用私钥$ y $对消息$ m $的签名。
7) SGMC随机选择区块链上其他$ {n}_{r} $个用户的公钥$ {P}_{i} $作为子集$ {S}^{\text{'}} $,$ \mathrm{S} $GMC对应的私钥和公钥为$ ({x}_{s}, {P}_{s}) $,其中$ 0\le s\le {n}_{r} $。此外,SGMC计算$ I={x}_{s}{H}_{2}\left({P}_{s}\right) $并选择两个随机数集合$ \left\{{q}_{i}\right|i=\mathrm{1, 2}, \cdots , {n}_{r}, {q}_{i}\in {\mathbb{F}}_{\widehat{l}}^{*}\} $和$ \left\{{\omega }_{i}\right|i=\mathrm{1, 2}, \cdots , {n}_{r}, i\ne s, {\omega }_{i}\in {\mathbb{F}}_{\widehat{l}}^{*}\} $。SGMC计算如下:
${L_i} = \left\{ \begin{array}{l}
{q_i}G,{\rm{if}}\;\;i = s\\
{q_i}G + {\omega _i}{P_i},{\rm{if}}\;\;i \ne s
\end{array} \right.$
|
${R_i} = \left\{ \begin{array}{l}
{q_i}{H_2}\left( {{P_i}} \right),{\rm{if}}\;\;i = s\\
{q_i}{H_2}\left( {{P_i}} \right) + {\omega _i}I,{\rm{if}}\;\;i \ne s
\end{array} \right.$
|
然后计算:
$ c={H}_{1}(m, A, {L}_{0}, \cdots , {L}_{{n}_{r}}, {R}_{0}, \cdots , {R}_{{n}_{r}}) $
|
并得到下列值:
${c_i} = \left\{ \begin{array}{l}
{\omega _i},{\rm{if}}\;\;i \ne s\\
c - \mathop \sum \limits\limits_{i \ne s} {{c_i}} {\rm{mod}}\;\hat l,{\rm{if}}\;\;i = s
\end{array} \right.$
|
${r_i} = \left\{ \begin{array}{l}
{q_i},{\rm{if}}\;\;i \ne s\\
{q_s} - {c_s}{x_s}{\rm{mod}}\;\hat l,{\rm{if}}\;\;i = s
\end{array} \right.$
|
最后的签名结果为$ \sigma =\left(I, A, {c}_{0}, \cdots , {c}_{{n}_{r}}, {r}_{0}, \cdots , {r}_{{n}_{r}}\right) $。
8) SGMC将$ ({P}_{0}, \cdots , {P}_{{n}_{r}}, m, \sigma ) $作为交易请求发送给区块链。
3.3.8 验证和接收奖励
当接收到SGMC发送的$ ({P}_{0}, \cdots , {P}_{{n}_{r}}, m, \sigma ) $后,区块链验证者执行以下步骤来验证$ \sigma $的有效性:
1) 验证者计算$ {L}_{i}^{\text{'}}={r}_{i}G+{c}_{i}{P}_{i} $$ {R}_{i}^{\text{'}}={r}_{i}{H}_{2}\left({P}_{i}\right)+{c}_{i}I $。
2) 验证者验证$ \mathop \sum \limits _{i=0}^{n}{c}_{i}={H}_{1}\left(m, A, {L}_{0}^{\text{'}}, \cdots , {L}_{{n}_{r}}^{\text{'}}, {R}_{0}^{\text{'}}, \cdots , {R}_{{n}_{r}}^{\text{'}}\right) $ $ \mathrm{m}\mathrm{o}\mathrm{d}\widehat{l} $是否成立,如果等式不成立,验证者拒绝该签名;否则验证者继续执行后续步骤。
3) 验证者检查$ I $是否在之前的签名中使用过,如果是,验证者拒绝该签名;否则验证者接收该签名并根据$ m $完成所有的输出。资产$ \mathrm{b}\mathrm{a}{\mathrm{l}}_{i} $转移到对应的钱包地址$ {\widehat{P}}_{i} $,剩余资产$ \mathrm{b}\mathrm{a}{\mathrm{l}}_{c} $转移到SGMC选择的钱包地址$ {\widehat{P}}_{c} $。
$ {\mathrm{U}}_{i} $从$ m $中提取$ R $和$ \left\{\right({\widehat{P}}_{i}, \mathrm{b}\mathrm{a}{\mathrm{l}}_{i}\left)\right|i\in \mathbb{I}\}\mathbb{。}{\mathrm{U}}_{i} $计算$ {P}_{i}^{\text{'}}={H}_{1}\left({a}_{i}R\right)G+{B}_{i} $。如果$ {P}_{i}^{\text{'}}\in \left\{{\widehat{P}}_{i}\right|i\in \mathbb{I}\} $,$ {\mathrm{U}}_{i} $提取对应$ ({\widehat{P}}_{i}, \mathrm{b}\mathrm{a}{\mathrm{l}}_{i}) $并计算$ {x}_{i}={H}_{1}\left({a}_{i}R\right)+{b}_{i} $,其中$ {\widehat{P}}_{i}={x}_{i}G $。之后,$ {\mathrm{U}}_{i} $利用钱包地址$ {\widehat{P}}_{i} $对应的私钥$ {x}_{i} $获得钱包中的奖励$ \mathrm{b}\mathrm{a}{\mathrm{l}}_{i} $。
4 安全性分析
定理 1(正确性) 如果SGMC是诚实的,那么通过调用算法1,能够成功地将聚合密文恢复为明文。
证明 令$ {X}_{3}=M $,则:
$ {X}_{3}={a}_{1}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i1}+{a}_{2}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i2} $$ +{a}_{3}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i3}\mathrm{m}\mathrm{o}\mathrm{d}n $因为所有类型的数据值都小于常数$ d $,则:$ {a}_{1}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i1}+{a}_{2}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i2} $ $ < {a}_{1}\mathop \sum \limits _{i\in \mathbb{I}}d+{a}_{2}\mathop \sum \limits _{i\in \mathbb{I}}d $$ \le ({a}_{1}+{a}_{2})\times N\times d < {a}_{3} $。因此,$ {X}_{2}={X}_{3}\;\mathrm{m}\mathrm{o}\mathrm{d}\;{a}_{3}={a}_{1}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i1}+{a}_{2}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i2} $,且有:
$ \frac{{X}_{3}-{X}_{2}}{{a}_{3}}=\frac{{a}_{3}\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i3}}{{a}_{3}}=\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i3}={D}_{3} $。同样的,也可以证明$ {D}_{2}=\frac{{X}_{2}-{X}_{1}}{{a}_{2}}, {D}_{1}={X}_{1} $。
定理 2(正确性) 如果SGMC和区块链验证者是诚实的,并且遵循所提出的方案,那么$ \mathrm{S}\mathrm{G}\mathrm{M}\mathrm{C} $的签名就可以通过区块链的验证。
证明 在SGMC签名的生成过程中,已知以下2点。
1) 当$ i\ne s $时,得到:
$ {L}_{i}^{\text{'}}={r}_{i}G+{c}_{i}{P}_{i}={q}_{i}G+{\omega }_{i}{P}_{i}={L}_{i} , {R}_{i}^{\text{'}}={r}_{i}{H}_{2}\left({P}_{i}\right)+\\ \;\;\;\;\;\;\;\;{c}_{i}I={q}_{i}{H}_{2}\left({P}_{i}\right)+{\omega }_{i}I={R}_{i} \text{;} $
|
2) 当$ i=s $时,得到:
$ {L}_{s}^{\text{'}}={r}_{s}G+{c}_{s}{P}_{s} =\left({q}_{s}-{c}_{s}{x}_{s}\right)G+{c}_{s}{P}_{s} ={q}_{s}G={L}_{s} {R}_{s}^{\text{'}}=\\ \;\;\;\;\;\;\;\;{r}_{s}{H}_{2}\left({P}_{s}\right)+{c}_{s}I =\left({q}_{s}-{c}_{s}{x}_{s}\right){H}_{2}\left({P}_{s}\right)+{c}_{s}I=\\ \;\;\;\;\;\;\;\;{q}_{s}{H}_{2}\left({P}_{s}\right) ={R}_{s} $
|
综上所述,可以得到:
$ \mathop \sum \limits _{i=0}^{{n}_{r}}{c}_{i}=c={H}_{1}\left(m, A, {L}_{0}, \cdots , {L}_{{n}_{r}}, {R}_{0}, \cdots , {R}_{{n}_{r}}\right)=\\ \;\;\;\;\;\;\;\;{H}_{1}\left(m, A, {L}_{0}^{\text{'}}, \cdots , {L}_{{n}_{r}}^{\text{'}}, {R}_{0}^{\text{'}}, \cdots , {R}_{{n}_{r}}^{\text{'}}\right)\mathrm{m}\mathrm{o}\mathrm{d}\widehat{l} $
|
定理 3(不可伪造性) 本文方案SMi来自SGMC的授权,来自CCC的收据和凭证,SMi上传的密文数据,以及SGMC的环签名都满足了不可伪造性。
证明 为了获得高效的授权算法、收据和凭证生成算法,BONEH等[18]提出在$ \mathrm{P}\mathrm{K}\mathrm{I} $中的短签名方案,该方案是可证安全的。对于SMi上传的密文数据,利用KRAWEZYK等[19]提出密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code,HMAC)来确保密文数据的不可伪造性。在利用Paillier密码系统进行加密时,将HMAC作为多维数据中的一种与电力数据一起加密。证明过程和KRAWEZYK等人的证明过程类似。对于SGMC的环签名,利用WANG等[20]提出的签名方案,该方案是可证安全的,文献[20]已给出详细的证明过程。
定理 4(机密性) SMi上传的单个密文数据只能由SMi和SGMC解密,聚合密文数据只能由SGMC解密。
证明 本文方案中Ui在$ t $时间段内的个人用发电数据$ ({d}_{i1}, {d}_{i2}, {d}_{i3}) $由SMi加密为$ {C}_{i, t}={g}_{1}^{{d}_{i1}}\times {g}_{2}^{{d}_{i2}}\times {g}_{3}^{{d}_{i3}}\times {r}_{i}^{n}\;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2} $,也可以表示为:$ {C}_{i, t}={g}_{1}^{{d}_{i1}}\times {g}_{2}^{{d}_{i2}}\times {g}_{3}^{{d}_{i3}}\times {r}_{i}^{n}\;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2} $$ ={g}^{{a}_{1}{d}_{i1}}\times {g}^{{a}_{2}{d}_{i2}}\times {g}^{{a}_{3}{d}_{i3}}\times $$ {r}_{i}^{n} $$ \mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2} $$ ={g}^{{a}_{1}{d}_{i1}+{a}_{2}{d}_{i2}+{a}_{3}{d}_{i3}}\times {r}_{i}^{n}\;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2} $显然,令$ {m}_{i}={a}_{1}{d}_{i1}+{a}_{2}{d}_{i2}+{a}_{3}{d}_{i3} $,密文$ {C}_{i, t}={g}^{{m}_{i}}\times {r}_{i}^{n}\;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2} $仍是属于Paillier密码系统中的有效密文。因为Paillier密码系统对选择明文攻击是语义安全的,那么$ {m}_{i} $中的$ \left({d}_{i1}, {d}_{i2}, {d}_{i3}\right) $也是语义安全的。因此,即使敌手$ \mathcal{A} $窃听$ {C}_{i} $,也无法识别到对应的内容。在收到$ {C}_{1}, {C}_{2}, \cdots , {C}_{N} $至多$ N $个的SMi发送的密文数据后,CCC不会解密数据,而是计算$ {C}_{t}=\mathop \prod \limits_{i\in \mathbb{I}}{C}_{i, t}\;\mathrm{m}\mathrm{o}\mathrm{d}\;{n}^{2} $来执行密文聚合,$ {C}_{t} $仍属于Paillier密码系统中的有效密文。即使敌手$ \mathcal{A} $侵入了CCC的数据库并成功窃听到$ {C}_{t} $,它仍不能得到单个用户的电力数据$ \left({d}_{i1}, {d}_{i2}, {d}_{i3}\right) $和整体用户的电力数据$ (\mathop \sum \limits _{i\in \mathbb{I}}{d}_{i2}, \mathop \sum \limits _{i\in \mathbb{I}}{d}_{i2}, \mathop \sum \limits _{i\in \mathbb{I}}{d}_{i2}) $。综合以上两点,本文方案满足机密性要求。
定理 5($ {\mathrm{U}}_{i} $的匿名性) 在本文方案中,$ {\mathrm{U}}_{i} $是无条件匿名的。即使敌手的计算能力是无限的,它也无法识别$ {\mathrm{U}}_{i} $的真实身份。
证明 基于合同的认证阶段,SMi提交的Conti不包含Ui的身份信息。选定的公钥对$ ({A}_{i}, {B}_{i}) $也和Ui的身份信息无关。在匿名认证阶段,SMi向CCC提交$ (\mathrm{C}\mathrm{o}\mathrm{n}{\mathrm{t}}_{i}, {\sigma }_{i}) $,而被提交的信息中心也不包含任何与Ui身份有关的信息。综上所述,本文方案不需要Ui的身份信息且满足Ui的匿名性。
定理 6(SGMC的匿名性) 本文方案满足SGMC的匿名性。
证明 基于定理5,本文从以下两个部分来证明:
1) 当SGMC有$ {n}_{1} $个输出地址而所有的输出地址都不属于敌手时,由于哈希函数$ {H}_{1} $的性质,所有的一次性公钥$ {\widehat{P}}_{i}={H}_{1}\left(\xi {A}_{i}\right)G+{B}_{i} $都是随机的。$ {U}_{i} $对应的奖励被发送到随机区块链地址。因此,所有$ {n}_{1} $个输出地址对于敌手都是随机的,SGMC的变化地址被识别的概率不超过$ (1/{n}_{1}) $。当$ {n}_{2} $个输出地址属于敌手时,其他$ ({n}_{1}-{n}_{2}) $个输出地址对于敌手仍然是随机的。SGMC的变化地址被识别的概率不超过$ (1/({n}_{1}-{n}_{2}\left)\right) $。
2) 在匿名奖励阶段本文方案利用环签名思想来实现SGMC的匿名性。从最后发送给验证者的签名$ \sigma =\left(I, A, {c}_{0}, \cdots , {c}_{{n}_{r}}, {r}_{0}, \cdots , {r}_{{n}_{r}}\right) $中可以得知$ I={x}_{s}{H}_{2}\left({P}_{s}\right), {c}_{i}, {r}_{i}, i\ne s $是随机的。$ {c}_{s}={H}_{1}\left(m, A, {L}_{0}, \cdots , {L}_{{n}_{r}}, {R}_{0}, \cdots , {R}_{{n}_{r}}\right)-\mathop \sum \limits _{i\ne s}{c}_{i} $和$ {r}_{s}={q}_{s}-{c}_{s}{x}_{s} $也是随机的。因此,如果SGMC计算$ {n}_{r} $个区块链地址的环签名,SGMC的匿名性可以被保证。
5 性能分析
本文使用GMP(GMP-6.20)和PBC(pbc-0.5.14)的python编程语言。本文实验是在使用Intel(R) CoreTM i7-8750H CPU (2.20 GHz)、4 GB内存和运行unbuntu14.04操作系统的个人计算机上进行的。为更好地对比系统各实体时间开销,采用单线程方式编写仿真程序。除上述仿真环境外,本文还利用Monero区块链和对应的$ \mathrm{P}\mathrm{K}\mathrm{C}\mathrm{s} $。对于$ \mathrm{P}\mathrm{K}\mathrm{I} $中的$ \mathrm{P}\mathrm{K}\mathrm{C}\mathrm{s} $,利用双线性群对$ ({\mathbb{G}}_{1}, {\mathbb{G}}_{2}) $,其中$ {\mathbb{G}}_{1} $被定义在有限域$ {\mathbb{F}}_{\widehat{q}} $,其中$ \left|\widehat{q}\right|=512\mathrm{ }\mathrm{b}\mathrm{i}\mathrm{t}\mathrm{s} $,$ {\mathbb{G}}_{1} $是阶为160 bits的超奇异椭圆曲线。同时,在Paillier密码系统中,$ \left|{\varkappa }_{1}\right|=128\mathrm{ }\mathrm{b}\mathrm{i}\mathrm{t}\mathrm{s} $。本文方案整个流程的时间开销如图 2所示,合同期限内电网用户上传数据的次数j=5,环签名参与者数量nr+1=11,其中Total对应系统执行一次方案中所有步骤时间开销包括SMi、SGMC、CCC和Monero区块链的总和。从图 2可以看出,该系统计算成本与用户数量基本呈线性关系。
在匿名奖励阶段SGMC和CCC的时间开销对比如图 3所示。电网用户Ui的数量为100,环签名参与者数量nr+1=11。验证和接收奖励阶段区块链的时间开销如图 4所示。
2012年,LU等[6]提出基于超递增序列构造多维数据和同态Paillier密码技术的智能电网通信聚合方案EPPA。2019年,WANG等[20]提出基于椭圆曲线的V2G网络匿名奖励机制BBARS。本文方案、EPPA方案、BBARS方案安全属性对比如表 1所示。从表 1可以看出,EPPA方案可以在聚合器可信的前提下进行线性聚合,然而当聚合器受到攻击或自发修改密文数据时,EPPA方案无法及时发现。本文方案基于半可信的第三方外包计算和储存,即使CCC受到攻击或自发修改密文数据,电网管理中心也可以及时发现并更正。
表 1
(Table 1)
表 1 EPPA、BBARS和本文方案的安全属性对比
Table 1 Security property comparison of EPPA, BBARS and the proposed schemes
方案 |
线性聚合 |
保密性 |
匿名 |
外包计算 |
外包存储 |
EPPA方案 |
是 |
是 |
否 |
否 |
否 |
$ \mathrm{B} $BARS方案 |
否 |
是 |
是 |
否 |
否 |
本文方案 |
是 |
是 |
是 |
是 |
是 |
|
下载CSV
表 1 EPPA、BBARS和本文方案的安全属性对比
Table 1 Security property comparison of EPPA, BBARS and the proposed schemes
|
BBARS、EPPA和本文方案在数据聚合阶段加密和解密的时间开销对比如图 5所示。从图 5可以看出,$ \mathrm{B} $BARS、EPPA与本文方案在数据聚合阶段的加密和解密时间开销均与用户数量呈线性相关。由于BBARS方案基于椭圆曲线,在解密时需解决涉及离散对数问题,因此时间开销最大。本文方案与EPPA方案都基于Paillier同态加密算法,时间开销近似,本文方案在加密时涉及可聚合验证消息验证码的计算,因此时间开销略大于EPPA方案。
6 结束语
针对智能电网数据聚合和激励过程中存在的安全问题,本文提出一种基于Paillier算法的智能电网数据聚合和激励方案。采用超递增序列设计多维同态加密算法,并加入可聚合验证消息以保证聚合数据的真实性和完整性。此外,通过引入Monero区块链保护光伏发电奖励时用户和电网管理员的双向匿名性和不可链接性。分析结果表明,本文方案安全高效,且其计算开销与智能电网规模呈线性相关。后续将把可信计算技术引入云计算中心,进一步提高云计算的安全性和高效性。