<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN" "http://jats.nlm.nih.gov/publishing/1.1/JATS-journalpublishing1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="1.1">
<front>
<journal-meta>
<journal-id journal-id-type="pmc">CSSE</journal-id>
<journal-id journal-id-type="nlm-ta">CSSE</journal-id>
<journal-id journal-id-type="publisher-id">CSSE</journal-id>
<journal-title-group>
<journal-title>Computer Systems Science &#x0026; Engineering</journal-title>
</journal-title-group>
<issn pub-type="ppub">0267-6192</issn>
<publisher>
<publisher-name>Tech Science Press</publisher-name>
<publisher-loc>USA</publisher-loc>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">31030</article-id>
<article-id pub-id-type="doi">10.32604/csse.2023.031030</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Article</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>Blockchain-based Privacy-Preserving Group Data Auditing with Secure User Revocation</article-title><alt-title alt-title-type="left-running-head">Blockchain-based Privacy-Preserving Group Data Auditing with Secure User Revocation</alt-title><alt-title alt-title-type="right-running-head">Blockchain-based Privacy-Preserving Group Data Auditing with Secure User Revocation</alt-title>
</title-group>
<contrib-group content-type="authors">
<contrib id="author-1" contrib-type="author" corresp="yes">
<name name-style="western"><surname>Qi</surname><given-names>Yining</given-names></name>
<xref ref-type="aff" rid="aff-1">1</xref>
<xref ref-type="aff" rid="aff-2">2</xref><email>qyn18@mails.tsinghua.edu.cn</email>
</contrib>
<contrib id="author-2" contrib-type="author">
<name name-style="western"><surname>Luo</surname><given-names>Yubo</given-names></name>
<xref ref-type="aff" rid="aff-3">3</xref>
</contrib>
<contrib id="author-3" contrib-type="author">
<name name-style="western"><surname>Huang</surname><given-names>Yongfeng</given-names></name>
<xref ref-type="aff" rid="aff-1">1</xref>
<xref ref-type="aff" rid="aff-2">2</xref>
</contrib>
<contrib id="author-4" contrib-type="author">
<name name-style="western"><surname>Li</surname><given-names>Xing</given-names></name>
<xref ref-type="aff" rid="aff-1">1</xref>
<xref ref-type="aff" rid="aff-2">2</xref>
</contrib>
<aff id="aff-1"><label>1</label><institution>Tsinghua University</institution>, <addr-line>Beijing, 100084</addr-line>, <country>China</country></aff>
<aff id="aff-2"><label>2</label><institution>Beijing National Research Center for Information Science and Technology</institution>, <addr-line>Beijing, 100084</addr-line>, <country>China</country></aff>
<aff id="aff-3"><label>3</label><institution>University of North Carolina at Chapel Hill</institution>, <addr-line>North Carolina, 27599</addr-line>, <country>USA</country></aff>
</contrib-group><author-notes><corresp id="cor1"><label>&#x002A;</label>Corresponding Author: Yining Qi. Email: <email>qyn18@mails.tsinghua.edu.cn</email></corresp></author-notes>
<pub-date pub-type="epub" date-type="pub" iso-8601-date="2022-08-04"><day>04</day>
<month>08</month>
<year>2022</year></pub-date>
<volume>45</volume>
<issue>1</issue>
<fpage>183</fpage>
<lpage>199</lpage>
<history>
<date date-type="received"><day>08</day><month>4</month><year>2022</year></date>
<date date-type="accepted"><day>25</day><month>5</month><year>2022</year></date>
</history>
<permissions>
<copyright-statement>&#x00A9; 2023 Qi et al.</copyright-statement>
<copyright-year>2023</copyright-year>
<copyright-holder>Qi et al.</copyright-holder>
<license xlink:href="https://creativecommons.org/licenses/by/4.0/">
<license-p>This work is licensed under a <ext-link ext-link-type="uri" xlink:type="simple" xlink:href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</ext-link>, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p>
</license>
</permissions>
<self-uri content-type="pdf" xlink:href="TSP_CSSE_31030.pdf"></self-uri>
<abstract>
<p>Progress in cloud computing makes group data sharing in outsourced storage a reality. People join in group and share data with each other, making team work more convenient. This new application scenario also faces data security threats, even more complex. When a user quit its group, remaining data block signatures must be re-signed to ensure security. Some researchers noticed this problem and proposed a few works to relieve computing overhead on user side. However, considering the privacy and security need of group auditing, there still lacks a comprehensive solution to implement secure group user revocation, supporting identity privacy preserving and collusion attack resistance. Aiming at this target, we construct a concrete scheme based on ring signature and smart contracts. We introduce linkable ring signature to build a kind of novel meta data for integrity proof enabling anonymous verification. And the new meta data supports secure revocation. Meanwhile, smart contracts are using for resisting possible collusion attack and malicious re-signing computation. Under the combined effectiveness of both signature method and blockchain smart contracts, our proposal supports reliable user revocation and signature re-signing, without revealing any user identity in the whole process. Security and performance analysis compared with previous works prove that the proposed scheme is feasible and efficient.</p>
</abstract>
<kwd-group kwd-group-type="author">
<kwd>Provable data possession</kwd>
<kwd>data integrity</kwd>
<kwd>blockchain</kwd>
<kwd>ring signature</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="s1">
<label>1</label>
<title>Introduction</title>
<p>Cloud computing has proved its value through the widespread practice these years [<xref ref-type="bibr" rid="ref-1">1</xref>]. More and more enterprises and organizations outsource their data to cloud storage, in order to obtain the improved features of third-party storage service with the pay-as-you-go model. With the scale of research and development expanding, users start to work together in a group to share data with each other. To be more specific, a user uploads its data to cloud storage [<xref ref-type="bibr" rid="ref-2">2</xref>,<xref ref-type="bibr" rid="ref-3">3</xref>], and other members of group can easily access and work on shared data. This group-sharing model employs cloud service as collaboration platform and is particularly common in software development. In scenario of software development, a number of users work on different parts of the same source code and sometimes modify snippets created by other collaborators. Just like all the infrastructures in cloud environment [<xref ref-type="bibr" rid="ref-4">4</xref>], cloud-based group data sharing is also confronted with challenge to data integrity and reliability [<xref ref-type="bibr" rid="ref-5">5</xref>]. Integrity of data shared via cloud storage may be compromised due to hardware/software failures and human errors. Even worse, increasing number of users adds to the complexity of data integrity protection.</p>
<p>Checking integrity of data [<xref ref-type="bibr" rid="ref-6">6</xref>,<xref ref-type="bibr" rid="ref-7">7</xref>] is the basis of ensuring data reliability in cloud storage. Considering the scale of data in cloud, works [<xref ref-type="bibr" rid="ref-8">8</xref>] have been proposed, which implement a method enabling verifiers to check data integrity without downloading, namely Provable Data Possession (PDP). In these works, data is often divided into blocks and its owner signs signatures attached to each block with private key. These signatures, also called tags or meta data, are the evidences that decide the correctness of data blocks being checked. Thus, for fairness to cloud service providers, quite a number of researchers [<xref ref-type="bibr" rid="ref-9">9</xref>&#x2013;<xref ref-type="bibr" rid="ref-18">18</xref>] proposed schemes that allows a third-party auditor (TPA) to execute the process of integrity verification. Since TPA uses the public key of data owner, it is convinced that the signatures of challenged blocks are definitely authentic.</p>
<p>When the number of users changes from single to multiple, unfortunately, simply extending of aforementioned works is no longer appropriate for group sharing. Because the public keys of users may leak data owner identity and visitor activity to TPA. Some researchers [<xref ref-type="bibr" rid="ref-19">19</xref>&#x2013;<xref ref-type="bibr" rid="ref-22">22</xref>] noticed the importance of protect identity privacy when auditing group-shared data. By introducing group or ring signature, these schemes enabled integrity verification without identity of data owners revealed. However, not so many researchers considered a basic and practical problem, a dynamic group with user affiliation and revocation.</p>
<p>No matter employing group or ring signature, when data owner uploads or modifies a block, it computes a tag using public keys of multiple other group members to construct a privacy-preserving signature. Just like all groups in real society, sometimes a user may quit group due to personal will or misbehavior, called revocation of this user. As a result, all the signatures relevant to the revoked user must be re-signed. The re-signing caused by revocation can be divided into two cases: signatures signed by the revoked user, and other ones merely using its public key.</p>
<p>A straightforward method to re-compute these revoked signatures is to ask other users to download the original data blocks and generate signatures in the old way. Nevertheless, considering the scale of cloud data, the consequent communication for signer is overwhelmed. Some researchers [<xref ref-type="bibr" rid="ref-23">23</xref>] noticed the problem and proposed a few schemes based on proxy re-signing. Wang et al. [<xref ref-type="bibr" rid="ref-20">20</xref>] proposed a new model: a user quits its group and transfer the data possession to another user, using cloud service to re-sign the blocks for proxy. They also put forward a new re-signing method that enables cloud service to complete such re-computing, without asking for the private keys of both two users. This work is based on a disclosed-identity model. That is to say, all the relationship of group members is public, not only ownership of data blocks but also user activity. Aware of the risk that TPA is able to pry into the identities of group users, Wang et al. [<xref ref-type="bibr" rid="ref-19">19</xref>] have also published another work about privacy-preserving data auditing scheme for group sharing, which is based on ring signature. This work did not discuss how to deal with user revocation, though.</p>
<p>Besides the risk of identity privacy leakage, collusion attack existing in group sharing data auditing must be considered as well. Most PDP schemes share an assumption-TPAs are all semi-trusted, which means that they will be only curious about user privacy, but always honest for verification results. This wishful assumption, of course, does not always stand in reality. What is more, in the scenario of group sharing, revoked users may collude with cloud storage or TPA to endanger the security of other members. They can leak their keys to malicious cloud service or TPA in order to tamper with the re-signed signatures. Noticing this problem, Yuan et al. [<xref ref-type="bibr" rid="ref-24">24</xref>] proposed a dynamic public PDP scheme with collusion-resistant group user revocation. However, security of this scheme is merely a kind of partial collusion-resistance. Possibility of malicious TPA colluding with revoked user was still left out of consideration. Following this work, Jiang et al. [<xref ref-type="bibr" rid="ref-21">21</xref>] continued to make some improvement. They constructed a user revocation scheme based on vector commitment, Asymmetric Group Key Agreement and group signature, focusing on a dynamic PDP scheme on encrypted database. This work focused on a narrower scenario and made some improvements on security and performance, but cannot solve the problem of identity privacy leakage. On the other hand, there are already some works [<xref ref-type="bibr" rid="ref-25">25</xref>,<xref ref-type="bibr" rid="ref-26">26</xref>] against the threat of collusion attack, but a clear solution for group sharing scenario is still absent.</p>
<p>Imperfections of the aforementioned works constitute the motivation for our work. In this paper, we try our best to propose a novel privacy-preserving public PDP scheme with group user revocation. We construct the new scheme on the basis of blockchain technique to resist collusion attack, and use ring signature to solve the problem of identity privacy. We discuss each case of user revocation and complete related method to implement reliable signature re-signing. Our proposal is a generic solution, which can be applied to both plaintext data and encrypted data.</p>
<p><bold>Constructions.</bold> 1) We introduce a construction of blockchain-based PDP scheme, which enables secure user revocation for group shared data. 2) We propose a novel linkable ring signature re-signing method to protect identity privacy. 3) We analyze the security of our proposed scheme and evaluate its performance.</p>
</sec>
<sec id="s2">
<label>2</label>
<title>Problem Statement</title>
<p>In this section, we will describe our system model of cloud data group sharing. Then we will give the definition of threat model and design goals for our proposed scheme.</p>
<sec id="s2_1">
<label>2.1</label>
<title>System Model</title>
<p>A system model of cloud data group sharing is shown in <xref ref-type="fig" rid="fig-1">Fig. 1</xref>. The entities in the system are described as below.<list list-type="bullet"><list-item>
<p>Cloud Service Provider (CSP): cloud provides storage service for every group user, and will respond to integrity challenge of data blocks.</p></list-item><list-item>
<p>Group Users: every user may play two roles in group: data owner or visitor. Data owner uploads data blocks, and visitors access its data with authorization. A user can be owner of some blocks and visitor of other ones. For the sake of clarity, if a visitor modifies a data block, we call the visitor &#x2018;&#x2019;owner&#x2019;&#x2019; of the new modified replica, distinguished from the original one.</p></list-item><list-item>
<p>Third Party Auditor (TPA): TPA has enough computing and storage resource to execute integrity verification for every group user.</p></list-item><list-item>
<p>Blockchain: To resist collusion attack, we employ blockchain network based on Hyperledger Fabric. The entities above play different roles of blockchain. Group users and cloud service act as client peer, while TPA undertakes the job of endorsement peer. All the work of auditing scheme is performed in the form of smart contracts already installed in each peer.</p></list-item></list></p>
<fig id="fig-1">
<label>Figure 1</label>
<caption>
<title>System model</title></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="CSSE_31030-fig-1.png"/>
</fig>
</sec>
<sec id="s2_2">
<label>2.2</label>
<title>Threat Model and Design Goals</title>
<p>Besides the common threat of normal PDP schemes discussed in many works before [<xref ref-type="bibr" rid="ref-11">11</xref>], in this part we focus on the specific threat in user revocation scenario. A user <inline-formula id="ieqn-1">
<mml:math id="mml-ieqn-1"><mml:msub><mml:mi>u</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula> quits its group due to some reason, leaving data blocks <inline-formula id="ieqn-2">
<mml:math id="mml-ieqn-2"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mrow><mml:msub><mml:mi>m</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math>
</inline-formula> to be transferred to user <inline-formula id="ieqn-3">
<mml:math id="mml-ieqn-3"><mml:msub><mml:mi>u</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula>. Original signatures of these blocks are <inline-formula id="ieqn-4">
<mml:math id="mml-ieqn-4"><mml:msub><mml:mi>&#x03C3;</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math>
</inline-formula> and TPA needs to authenticate the re-signed signatures <inline-formula id="ieqn-5">
<mml:math id="mml-ieqn-5"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mrow><mml:msubsup><mml:mi>&#x03C3;</mml:mi><mml:mi>i</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math>
</inline-formula> with the help of CSP. In this process, there are two kinds of attack threatening group sharing data auditing:<list list-type="simple"><list-item><label>1)</label>
<p>The revoked user may collude with CSP and try to introduce incorrect or even harmful information into re-signed signatures.</p></list-item><list-item><label>2)</label>
<p>The revoked user may collude with TPA, to slander certain honest user by misleading the ownership of revoked data.</p></list-item></list></p>
<p>Here we omit the common threat such as an external malicious adversary forging signatures, and focus on the discussion of threat in user revocation. Different from previous works [<xref ref-type="bibr" rid="ref-20">20</xref>], we try to loosen the security assumption that CSP and TPA must be semi-trusted. They can be untrusted, just like real entities in real society. The most difficult point to resist collusion attack is that malicious revoked user may leak the secret key of group to TPA or CSP, leading to weakening of group security. Considering the factors above, we propose the following goals necessary for a secure user revocation scheme:<list list-type="bullet"><list-item>
<p>Correctness: A group sharing data PDP scheme holds the property of correctness if and only if for any polynomial adversary, integrity proof cannot pass verification unless it is generated by intact data blocks and signatures.</p></list-item><list-item>
<p>Unforgeability: A group sharing data PDP scheme is unforgeable if for any internal or external adversary, signature cannot pass verification unless it is generated from correct blocks and secret key.</p></list-item><list-item>
<p>Privacy-Preserving: A group sharing data PDP scheme is privacy-preserving if for any TPA, the identity of real signer cannot be inferred from given signatures and public keys.</p></list-item><list-item>
<p>Collusion-Resistance: A group sharing data PDP scheme can resist collusion attack if for any revoked user colluding with TPA or CSP, cannot generate valid signatures without correct data blocks and private keys.</p></list-item><list-item>
<p>Traceability: When a user is revoked from group, all the signatures it signed before can be traced.</p></list-item></list></p>
</sec>
</sec>
<sec id="s3">
<label>3</label>
<title>Preliminaries</title>
<sec id="s3_1">
<label>3.1</label>
<title>Bilinear Maps</title>
<p>Denote two multiplicative cyclic groups of prime order <italic>q</italic> as <inline-formula id="ieqn-6">
<mml:math id="mml-ieqn-6"><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula> and <inline-formula id="ieqn-7">
<mml:math id="mml-ieqn-7"><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula>, and their generators as <inline-formula id="ieqn-8">
<mml:math id="mml-ieqn-8"><mml:msub><mml:mi>g</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>g</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula> respectively. Bilinear map <inline-formula id="ieqn-9">
<mml:math id="mml-ieqn-9"><mml:mi>e</mml:mi><mml:mo>&#x003A;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>1</mml:mn></mml:msub><mml:mo>&#x00D7;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mi>T</mml:mi></mml:msub></mml:math>
</inline-formula> holds properties as follows:<list list-type="bullet"><list-item>
<p>Bilinearity: for all <inline-formula id="ieqn-10">
<mml:math id="mml-ieqn-10"><mml:mi>u</mml:mi><mml:mo>&#x2208;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>v</mml:mi><mml:mo>&#x2208;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>a</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>b</mml:mi><mml:mo>&#x2208;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub></mml:math>
</inline-formula>, there holds <inline-formula id="ieqn-11">
<mml:math id="mml-ieqn-11"><mml:mi>e</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mi>u</mml:mi><mml:mi>a</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>v</mml:mi><mml:mi>b</mml:mi></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mi>e</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>u</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>v</mml:mi></mml:mrow><mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mrow><mml:mi>a</mml:mi><mml:mi>b</mml:mi></mml:mrow></mml:msup></mml:math>
</inline-formula>.</p></list-item><list-item>
<p>Non-degeneracy: <inline-formula id="ieqn-12">
<mml:math id="mml-ieqn-12"><mml:mi>e</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>g</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>g</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x2260;</mml:mo><mml:mn>1</mml:mn></mml:math>
</inline-formula>.</p></list-item><list-item>
<p>Computability: there exists an efficient algorithm for computing mapping <italic>e</italic> in polynomial time.</p></list-item></list></p>
</sec>
<sec id="s3_2">
<label>3.2</label>
<title>Security Assumptions</title>
<p><bold>Computational Diffie-Hellman Assumption.</bold> Consider a cyclic group <inline-formula id="ieqn-13">
<mml:math id="mml-ieqn-13"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula> of prime order <italic>q</italic>. Let <italic>g</italic> be a random generator of <inline-formula id="ieqn-14">
<mml:math id="mml-ieqn-14"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula> and choose two random elements <inline-formula id="ieqn-15">
<mml:math id="mml-ieqn-15"><mml:mi>a</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>b</mml:mi></mml:math>
</inline-formula> from <inline-formula id="ieqn-16">
<mml:math id="mml-ieqn-16"><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub></mml:math>
</inline-formula>. Value of <inline-formula id="ieqn-17">
<mml:math id="mml-ieqn-17"><mml:msup><mml:mi>g</mml:mi><mml:mrow><mml:mi>a</mml:mi><mml:mi>b</mml:mi></mml:mrow></mml:msup></mml:math>
</inline-formula> is computationally intractable when <inline-formula id="ieqn-18">
<mml:math id="mml-ieqn-18"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>g</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>g</mml:mi><mml:mi>a</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>g</mml:mi><mml:mi>b</mml:mi></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> is given.</p>
<p><bold>Discrete Logarithm Assumption.</bold> Given a cyclic group <inline-formula id="ieqn-19">
<mml:math id="mml-ieqn-19"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula> of order q and any two random elements <inline-formula id="ieqn-20">
<mml:math id="mml-ieqn-20"><mml:mi>a</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>b</mml:mi></mml:math>
</inline-formula> of <inline-formula id="ieqn-21">
<mml:math id="mml-ieqn-21"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula>, choosing an integer <inline-formula id="ieqn-22">
<mml:math id="mml-ieqn-22"><mml:mi>k</mml:mi><mml:mo>&#x2208;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub></mml:math>
</inline-formula> that solves the equation <inline-formula id="ieqn-23">
<mml:math id="mml-ieqn-23"><mml:msup><mml:mi>b</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:mi>a</mml:mi></mml:math>
</inline-formula> is termed a discrete logarithm. If prime number <italic>q</italic> is a sufficiently large, computing <italic>k</italic> in polynomial time is hard.</p>
</sec>
<sec id="s3_3">
<label>3.3</label>
<title>Linkable Ring Signature</title>
<p>Ring signature is a kind of digital signature cryptography firstly introduced in 2001, which is named after its ring-like structure of algorithm. Ring signature can be performed by any member in a set of users connected by shared keys. When checking validity of ring signature, verifiers can learn whether the signature comes from certain set of users, but cannot reveal the identity of real signer. Ring signature ensures that it is highly computationally infeasible to determine the real signer identity, which makes the scheme well suited for ad hoc group.</p>
<p>Ring signature has high anonymity, which brings another problem: it is quite hard for a user to prove a certain signature is signed by itself without breaking the anonymity. To solve this problem, linkable ring signature is proposed [<xref ref-type="bibr" rid="ref-27">27</xref>]. It enables proving two signatures signed by the same user sharing some kind of link, which is called that these signatures are linked.</p>
</sec>
<sec id="s3_4">
<label>3.4</label>
<title>Smart Contracts in Blockchain Network</title>
<p>Although the first blockchain network is born for cryptocurrency, the progress of technology has already enabled blockchain network to be used for non-financial fields. In this work, we take that advantage and design a blockchain-based group data auditing scheme. We build our work on the basis of a well-known platform, Hyperledger Fabric.</p>
<p>Fabric is a customizable blockchain system, which allows different users join the network and make transactions via installed smart contracts. The workflow of a transaction in Fabric is as below:<list list-type="bullet"><list-item>
<p>Propose: Clients propose requests of transactions to blockchain network.</p></list-item><list-item>
<p>Endorsement: Endorsement peers simulate transaction results following the method defined in smart contracts. If passed, endorsement peers send its approval to client.</p></list-item><list-item>
<p>Submission: When a client collects enough endorsements, it submits the transaction to blockchain network, which will write this transaction into block later.</p></list-item></list></p>
</sec>
</sec>
<sec id="s4">
<label>4</label>
<title>Scheme Construction</title>
<sec id="s4_1">
<label>4.1</label>
<title>Definition of Scheme</title>
<p>In this part, we will introduce the basic definition of our proposed group PDP scheme.<list list-type="simple"><list-item><label>a)</label>
<p>Setup Phase</p></list-item></list></p>
<p><inline-formula id="ieqn-24">
<mml:math id="mml-ieqn-24"><mml:mi>K</mml:mi><mml:mi>e</mml:mi><mml:mi>y</mml:mi><mml:mi>G</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mn>1</mml:mn><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BA;</mml:mi></mml:mrow></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>p</mml:mi><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>p</mml:mi><mml:mi>a</mml:mi><mml:mi>r</mml:mi><mml:mi>a</mml:mi><mml:mi>m</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> Let <inline-formula id="ieqn-25">
<mml:math id="mml-ieqn-25"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BA;</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula> be secure length of the proposed scheme. Every user should invoke this algorithm when joining group. And the algorithm will output their private and public keys <inline-formula id="ieqn-26">
<mml:math id="mml-ieqn-26"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>p</mml:mi><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> as well as common secure parameter param.<list list-type="simple"><list-item><label>b)</label>
<p>Preprocessing Phase</p></list-item></list></p>
<p><inline-formula id="ieqn-27">
<mml:math id="mml-ieqn-27"><mml:mi>S</mml:mi><mml:mi>i</mml:mi><mml:mi>g</mml:mi><mml:mi>G</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>p</mml:mi><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>L</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> Denote data block as <italic>m</italic>. Before uploading <italic>m</italic>, its owner <inline-formula id="ieqn-28">
<mml:math id="mml-ieqn-28"><mml:msub><mml:mi>u</mml:mi><mml:mi>o</mml:mi></mml:msub></mml:math>
</inline-formula> invokes <inline-formula id="ieqn-29">
<mml:math id="mml-ieqn-29"><mml:mi>S</mml:mi><mml:mi>i</mml:mi><mml:mi>g</mml:mi><mml:mi>G</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi></mml:math>
</inline-formula> to choose a ring <italic>L</italic> and generate signature <inline-formula id="ieqn-30">
<mml:math id="mml-ieqn-30"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula>. <italic>L</italic> is a list of public keys from <italic>n</italic> members of group, including <inline-formula id="ieqn-31">
<mml:math id="mml-ieqn-31"><mml:msub><mml:mi>u</mml:mi><mml:mi>o</mml:mi></mml:msub></mml:math>
</inline-formula>. Thus, the real identity of data owner for <italic>m</italic> will be hidden in <italic>L</italic>.<list list-type="simple"><list-item><label>c)</label>
<p>Verification Phase</p></list-item></list></p>
<p><inline-formula id="ieqn-32">
<mml:math id="mml-ieqn-32"><mml:mi>C</mml:mi><mml:mi>h</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi><mml:mi>G</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo fence="false" stretchy="false">}</mml:mo></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>. A group user run this algorithm to generate challenge request <inline-formula id="ieqn-33">
<mml:math id="mml-ieqn-33"><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi></mml:math>
</inline-formula> for TPA. <inline-formula id="ieqn-34">
<mml:math id="mml-ieqn-34"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math>
</inline-formula> are the indices of blocks to be checked, denoted as <italic>K</italic> indices in total.</p>
<p><inline-formula id="ieqn-35">
<mml:math id="mml-ieqn-35"><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mi>o</mml:mi><mml:mi>o</mml:mi><mml:mi>f</mml:mi><mml:mi>G</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>m</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo fence="false" stretchy="false">}</mml:mo></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi>P</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>. When CSP receives challenge request <inline-formula id="ieqn-36">
<mml:math id="mml-ieqn-36"><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi></mml:math>
</inline-formula>, it firstly queries required blocks <inline-formula id="ieqn-37">
<mml:math id="mml-ieqn-37"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mrow><mml:msub><mml:mi>m</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math>
</inline-formula> in storage, then invokes <inline-formula id="ieqn-38">
<mml:math id="mml-ieqn-38"><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mi>o</mml:mi><mml:mi>o</mml:mi><mml:mi>f</mml:mi><mml:mi>G</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi></mml:math>
</inline-formula> to compute the integrity proof <italic>P</italic> in response.</p>
<p><inline-formula id="ieqn-39">
<mml:math id="mml-ieqn-39"><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mi>o</mml:mi><mml:mi>o</mml:mi><mml:mi>f</mml:mi><mml:mi>V</mml:mi><mml:mi>e</mml:mi><mml:mi>r</mml:mi><mml:mi>i</mml:mi><mml:mi>f</mml:mi><mml:mi>y</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>P</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>L</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>T</mml:mi><mml:mi>R</mml:mi><mml:mi>U</mml:mi><mml:mi>E</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>F</mml:mi><mml:mi>A</mml:mi><mml:mi>L</mml:mi><mml:mi>S</mml:mi><mml:mi>E</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>. Once receiving integrity proof <italic>P</italic> from CSP, TPA will parse block signature <inline-formula id="ieqn-40">
<mml:math id="mml-ieqn-40"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula> and related ring <italic>L</italic> from blockchain-based ledger. Then it runs algorithm <inline-formula id="ieqn-41">
<mml:math id="mml-ieqn-41"><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mi>o</mml:mi><mml:mi>o</mml:mi><mml:mi>f</mml:mi><mml:mi>V</mml:mi><mml:mi>e</mml:mi><mml:mi>r</mml:mi><mml:mi>i</mml:mi><mml:mi>f</mml:mi><mml:mi>y</mml:mi></mml:math>
</inline-formula> to check the proof. If algorithm accepts, it outputs <inline-formula id="ieqn-42">
<mml:math id="mml-ieqn-42"><mml:mi>T</mml:mi><mml:mi>R</mml:mi><mml:mi>U</mml:mi><mml:mi>E</mml:mi></mml:math>
</inline-formula>; otherwise, <inline-formula id="ieqn-43">
<mml:math id="mml-ieqn-43"><mml:mi>F</mml:mi><mml:mi>A</mml:mi><mml:mi>L</mml:mi><mml:mi>S</mml:mi><mml:mi>E</mml:mi></mml:math>
</inline-formula>.<list list-type="simple"><list-item><label>d)</label>
<p>Update Phase</p></list-item></list></p>
<p><inline-formula id="ieqn-44">
<mml:math id="mml-ieqn-44"><mml:mi>U</mml:mi><mml:mi>p</mml:mi><mml:mi>d</mml:mi><mml:mi>a</mml:mi><mml:mi>t</mml:mi><mml:mi>e</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mi>m</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>p</mml:mi><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mrow><mml:msup><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>L</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>. The algorithm of Update is the complement of <inline-formula id="ieqn-45">
<mml:math id="mml-ieqn-45"><mml:mi>S</mml:mi><mml:mi>i</mml:mi><mml:mi>g</mml:mi><mml:mi>G</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi></mml:math>
</inline-formula>, for deleting or adapting data blocks. Data owner invokes this algorithm to upload modified signature <inline-formula id="ieqn-46">
<mml:math id="mml-ieqn-46"><mml:mrow><mml:msup><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:math>
</inline-formula> and ring list <inline-formula id="ieqn-47">
<mml:math id="mml-ieqn-47"><mml:msup><mml:mi>L</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:math>
</inline-formula> to CSP.<list list-type="simple"><list-item><label>e)</label>
<p>Revocation Phase</p></list-item></list></p>
<p><inline-formula id="ieqn-48">
<mml:math id="mml-ieqn-48"><mml:mi>R</mml:mi><mml:mi>e</mml:mi><mml:mi>S</mml:mi><mml:mi>i</mml:mi><mml:mi>g</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>p</mml:mi><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mi>L</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:msup><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>. Before exiting group, the user to be revoked invoke this algorithm to re-sign its data blocks which need to be kept in the group. Each signature <inline-formula id="ieqn-49">
<mml:math id="mml-ieqn-49"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula> with ring list <italic>L</italic> will be recomputed to new one <inline-formula id="ieqn-50">
<mml:math id="mml-ieqn-50"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mi>L</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:msup><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>.</p>
<p><inline-formula id="ieqn-51">
<mml:math id="mml-ieqn-51"><mml:mi>U</mml:mi><mml:mi>s</mml:mi><mml:mi>r</mml:mi><mml:mi>R</mml:mi><mml:mi>e</mml:mi><mml:mi>v</mml:mi><mml:mi>o</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>p</mml:mi><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>T</mml:mi><mml:mi>R</mml:mi><mml:mi>U</mml:mi><mml:mi>E</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>F</mml:mi><mml:mi>A</mml:mi><mml:mi>L</mml:mi><mml:mi>S</mml:mi><mml:mi>E</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>. After resigning the blocks, user call this algorithm to inform TPA of formal revocation. TPA checks whether there are omitted blocks not resigned yet, and decides to accept or reject the application.</p>
</sec>
<sec id="s4_2">
<label>4.2</label>
<title>Concrete Construction</title>
<p>Different from previous works [<xref ref-type="bibr" rid="ref-22">22</xref>], we use linkable ring signature instead of group signature, in order to obtain anonymous auditing. That is to say, TPA cannot infer the owner identity of challenged blocks, thus our proposed scheme is privacy-preserving.</p>
<p><bold>KeyGen.</bold> When initializing a group, choose two be multiplicative cyclic groups of prime order <italic>q</italic>, denoted as <inline-formula id="ieqn-52">
<mml:math id="mml-ieqn-52"><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula> and <inline-formula id="ieqn-53">
<mml:math id="mml-ieqn-53"><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula>. Let <inline-formula id="ieqn-54">
<mml:math id="mml-ieqn-54"><mml:msub><mml:mi>g</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>g</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula> be their generators respectively, and <inline-formula id="ieqn-55">
<mml:math id="mml-ieqn-55"><mml:mi>e</mml:mi><mml:mo>&#x003A;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>1</mml:mn></mml:msub><mml:mo>&#x00D7;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mi>T</mml:mi></mml:msub></mml:math>
</inline-formula> be bilinear map. Choose two collision-resistant cryptographic hash functions <inline-formula id="ieqn-56">
<mml:math id="mml-ieqn-56"><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>&#x003A;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mn>1</mml:mn></mml:mrow><mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mrow><mml:mo>&#x2217;</mml:mo></mml:mrow></mml:msup><mml:mo stretchy="false">&#x2192;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub></mml:math>
</inline-formula> and <inline-formula id="ieqn-57">
<mml:math id="mml-ieqn-57"><mml:msub><mml:mi>H</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>&#x003A;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mn>1</mml:mn></mml:mrow><mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mrow><mml:mo>&#x2217;</mml:mo></mml:mrow></mml:msup><mml:mo stretchy="false">&#x2192;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula>. Pick a random element <inline-formula id="ieqn-58">
<mml:math id="mml-ieqn-58"><mml:mrow><mml:mi>&#x03C0;</mml:mi></mml:mrow><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub></mml:math>
</inline-formula> as the private key of group users, then compute common public key <inline-formula id="ieqn-59">
<mml:math id="mml-ieqn-59"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C1;</mml:mi></mml:mrow></mml:mrow><mml:mo>=</mml:mo><mml:msubsup><mml:mi>g</mml:mi><mml:mn>2</mml:mn><mml:mi>&#x03C0;</mml:mi></mml:msubsup></mml:math>
</inline-formula>. At this point, the shared keys and public parameter of group have been established.</p>
<p>When a user <inline-formula id="ieqn-60">
<mml:math id="mml-ieqn-60"><mml:msub><mml:mi>u</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math>
</inline-formula> joins group, it should set its own private and public keys as follows:<list list-type="simple"><list-item><label>1)</label>
<p>Pick random element <inline-formula id="ieqn-61">
<mml:math id="mml-ieqn-61"><mml:msub><mml:mi>x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub></mml:math>
</inline-formula> as private key.</p></list-item><list-item><label>2)</label>
<p>Compute <inline-formula id="ieqn-62">
<mml:math id="mml-ieqn-62"><mml:msub><mml:mi>y</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msubsup></mml:math>
</inline-formula> as public key.</p></list-item></list></p>
<p><bold>SigGen.</bold> Consider a data owner <inline-formula id="ieqn-63">
<mml:math id="mml-ieqn-63"><mml:msub><mml:mi>u</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math>
</inline-formula> and its data block <italic>m</italic> to be uploaded. Denote the total number of current members in group as <italic>d</italic>, and <inline-formula id="ieqn-64">
<mml:math id="mml-ieqn-64"><mml:msub><mml:mi>u</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math>
</inline-formula> extracts <italic>n</italic> out of <italic>d</italic> users, generating a ring <inline-formula id="ieqn-65">
<mml:math id="mml-ieqn-65"><mml:mi>L</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>y</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>y</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mn>1</mml:mn><mml:mo>&#x2264;</mml:mo><mml:mi>j</mml:mi><mml:mo>&#x2264;</mml:mo><mml:mi>n</mml:mi></mml:math>
</inline-formula>, where <inline-formula id="ieqn-66">
<mml:math id="mml-ieqn-66"><mml:msub><mml:mi>y</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math>
</inline-formula> is the public key of user <inline-formula id="ieqn-67">
<mml:math id="mml-ieqn-67"><mml:msub><mml:mi>u</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math>
</inline-formula> registered in blockchain network before. A ring signature of block <italic>m</italic> is generated in the following way:<list list-type="simple"><list-item><label>1)</label>
<p>Compute<disp-formula id="ueqn-1">
<mml:math id="mml-ueqn-1" display="block"><mml:mi>h</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>L</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math>
</disp-formula><disp-formula id="ueqn-2">
<mml:math id="mml-ueqn-2" display="block"><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msup></mml:math>
</disp-formula></p></list-item><list-item><label>2)</label>
<p>Choose random element <inline-formula id="ieqn-68">
<mml:math id="mml-ieqn-68"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BB;</mml:mi></mml:mrow></mml:mrow><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub></mml:math>
</inline-formula>, then compute<disp-formula id="ueqn-3">
<mml:math id="mml-ueqn-3" display="block"><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BB;</mml:mi></mml:mrow></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BB;</mml:mi></mml:mrow></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</disp-formula></p></list-item><list-item><label>3)</label>
<p>For other <inline-formula id="ieqn-69">
<mml:math id="mml-ieqn-69"><mml:msub><mml:mi>u</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>i</mml:mi><mml:mo>&#x2260;</mml:mo><mml:mi>j</mml:mi></mml:math>
</inline-formula> in ring <italic>L</italic>, pick random element <inline-formula id="ieqn-70">
<mml:math id="mml-ieqn-70"><mml:msub><mml:mi>s</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub></mml:math>
</inline-formula> and compute<disp-formula id="ueqn-4">
<mml:math id="mml-ueqn-4" display="block"><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>y</mml:mi><mml:mi>i</mml:mi><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>j</mml:mi><mml:mo>&#x003C;</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x003C;</mml:mo><mml:mi>n</mml:mi></mml:math>
</disp-formula><disp-formula id="ueqn-5">
<mml:math id="mml-ueqn-5" display="block"><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>y</mml:mi><mml:mi>i</mml:mi><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mi>n</mml:mi></mml:math>
</disp-formula><disp-formula id="ueqn-6">
<mml:math id="mml-ueqn-6" display="block"><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>y</mml:mi><mml:mi>i</mml:mi><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>i</mml:mi><mml:mo>&#x003C;</mml:mo><mml:mi>j</mml:mi></mml:math>
</disp-formula></p></list-item><list-item><label>4)</label>
<p>Compute<disp-formula id="ueqn-7">
<mml:math id="mml-ueqn-7" display="block"><mml:msub><mml:mi>s</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BB;</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math>
</disp-formula><disp-formula id="ueqn-8">
<mml:math id="mml-ueqn-8" display="block"><mml:mi>t</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mi>m</mml:mi></mml:msubsup></mml:mrow><mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mi>&#x03C0;</mml:mi></mml:msup></mml:math>
</disp-formula></p></list-item></list></p>
<p>Finally, the ring signature for data block <italic>m</italic> is <inline-formula id="ieqn-71">
<mml:math id="mml-ieqn-71"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>.</p>
<p><bold>ChalGen.</bold> In data auditing scheme, there are two cases when choosing block to check. One case is that user wants to check some certain blocks and learn their status. The other is randomly selecting a few blocks for inspection. No matter which case, user choose <italic>K</italic> blocks with indices <inline-formula id="ieqn-72">
<mml:math id="mml-ieqn-72"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>K</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>K</mml:mi><mml:mo>&#x2265;</mml:mo><mml:mn>1</mml:mn></mml:math>
</inline-formula> to be challenged. The procedures follow the steps below:<list list-type="simple"><list-item><label>1)</label>
<p>Pick <italic>K</italic> random elements <inline-formula id="ieqn-73">
<mml:math id="mml-ieqn-73"><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mi>k</mml:mi></mml:msub><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mn>1</mml:mn><mml:mo>&#x2264;</mml:mo><mml:mi>k</mml:mi><mml:mo>&#x2264;</mml:mo><mml:mi>K</mml:mi></mml:math>
</inline-formula> for each block. Assemble a challenge <inline-formula id="ieqn-74">
<mml:math id="mml-ieqn-74"><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mi>k</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:msub><mml:mo fence="false" stretchy="false">}</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>&#x2264;</mml:mo><mml:mi>k</mml:mi><mml:mo>&#x2264;</mml:mo><mml:mi>K</mml:mi></mml:mrow></mml:msub></mml:math>
</inline-formula>.</p></list-item><list-item><label>2)</label>
<p>Send <inline-formula id="ieqn-75">
<mml:math id="mml-ieqn-75"><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi></mml:math>
</inline-formula> to blockchain network.</p></list-item></list></p>
<p><bold>ProofGen.</bold> When receive challenge request from blockchain network, CSP generates an aggregated zero-knowledge proof as follows:<list list-type="simple"><list-item><label>1)</label>
<p>Pick random element <inline-formula id="ieqn-76">
<mml:math id="mml-ieqn-76"><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub></mml:math>
</inline-formula> and compute <inline-formula id="ieqn-77">
<mml:math id="mml-ieqn-77"><mml:mi>R</mml:mi><mml:mo>=</mml:mo><mml:msubsup><mml:mi>g</mml:mi><mml:mn>2</mml:mn><mml:mi>r</mml:mi></mml:msubsup></mml:math>
</inline-formula>, in order to masking blocks.</p></list-item><list-item><label>2)</label>
<p>Aggregate the blocks as<disp-formula id="ueqn-9">
<mml:math id="mml-ueqn-9" display="block"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BC;</mml:mi></mml:mrow></mml:mrow><mml:mo>=</mml:mo><mml:mi>r</mml:mi><mml:mo>+</mml:mo><mml:munderover><mml:mrow><mml:mo movablelimits="false">&#x2211;</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>K</mml:mi></mml:munderover><mml:mo>&#x2061;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mi>k</mml:mi></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mi>m</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub></mml:math>
</disp-formula></p></list-item></list></p>
<p>Then send <inline-formula id="ieqn-78">
<mml:math id="mml-ieqn-78"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BC;</mml:mi></mml:mrow></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>R</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> to blockchain network as integrity proof.</p>
<p><bold>ProofVerify.</bold> Once receiving proof, TPA check the integrity in the following way:<list list-type="simple"><list-item><label>1)</label>
<p>For each data block <inline-formula id="ieqn-79">
<mml:math id="mml-ieqn-79"><mml:msub><mml:mi>m</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub></mml:math>
</inline-formula>, refer to its record in distributed ledger and extract corresponding ring <inline-formula id="ieqn-80">
<mml:math id="mml-ieqn-80"><mml:msub><mml:mi>L</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>y</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mo fence="false" stretchy="false">}</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>&#x2264;</mml:mo><mml:mi>k</mml:mi><mml:mo>&#x2264;</mml:mo><mml:mi>K</mml:mi></mml:mrow></mml:msub></mml:math>
</inline-formula>.</p></list-item><list-item><label>2)</label>
<p>Then reconstruct the ring signatures:</p></list-item></list></p>
<p>for <inline-formula id="ieqn-81">
<mml:math id="mml-ieqn-81"><mml:mn>1</mml:mn><mml:mspace width="thickmathspace" /><mml:mo>&#x2264;</mml:mo><mml:mi>i</mml:mi><mml:mspace width="thickmathspace" /><mml:mo>&#x2264;</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:math>
</inline-formula>, compute<disp-formula id="ueqn-10">
<mml:math id="mml-ueqn-10" display="block"><mml:msubsup><mml:mi>z</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>y</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mrow><mml:mover><mml:mi>c</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msubsup></mml:math>
</disp-formula><disp-formula id="ueqn-11">
<mml:math id="mml-ueqn-11" display="block"><mml:msubsup><mml:mi>z</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mrow><mml:mover><mml:mi>c</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msup></mml:math>
</disp-formula><disp-formula id="ueqn-12">
<mml:math id="mml-ueqn-12" display="block"><mml:msub><mml:mrow><mml:mover><mml:mi>c</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>z</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>z</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</disp-formula></p>
<p>After that, compute<disp-formula id="ueqn-13">
<mml:math id="mml-ueqn-13" display="block"><mml:msub><mml:mrow><mml:mover><mml:mi>c</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>L</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>z</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>z</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</disp-formula><list list-type="simple"><list-item><label>3)</label>
<p>Finally, check the equation<disp-formula id="eqn-1"><label>(1)</label>
<mml:math id="mml-eqn-1" display="block"><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BC;</mml:mi></mml:mrow></mml:mrow></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:munderover><mml:mrow><mml:mo movablelimits="false">&#x220F;</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>K</mml:mi></mml:munderover><mml:mo>&#x2061;</mml:mo><mml:msubsup><mml:mrow><mml:mover><mml:mi>c</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C1;</mml:mi></mml:mrow></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:munderover><mml:mrow><mml:mo movablelimits="false">&#x220F;</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>K</mml:mi></mml:munderover><mml:mo>&#x2061;</mml:mo><mml:msubsup><mml:mi>t</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>g</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mspace width="thickmathspace" /></mml:math>
</disp-formula></p></list-item></list></p>
<p>If it holds, accept the proof; otherwise, reject.</p>
<p><bold>Update.</bold> In our scheme, the identity of data owner for each block is confidential. So when a user tries to update a block, it must prove itself as the legal owner of targeted block. Our method provides good support for such operation. Considering two valid data tags with blocks <inline-formula id="ieqn-82">
<mml:math id="mml-ieqn-82"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>m</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> and <inline-formula id="ieqn-83">
<mml:math id="mml-ieqn-83"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mrow><mml:msup><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>m</mml:mi><mml:mrow><mml:msup><mml:mi></mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>, it is easy to construct <inline-formula id="ieqn-84">
<mml:math id="mml-ieqn-84"><mml:msub><mml:mrow><mml:mi mathvariant="script">F</mml:mi></mml:mrow><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula> as judgement of whether <inline-formula id="ieqn-85">
<mml:math id="mml-ieqn-85"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>c</mml:mi><mml:msub><mml:mrow><mml:msup><mml:mi></mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>s</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mrow><mml:msup><mml:mrow><mml:mi>s</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>t</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> holds <inline-formula id="ieqn-86">
<mml:math id="mml-ieqn-86"><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:math>
</inline-formula>. Since <inline-formula id="ieqn-87">
<mml:math id="mml-ieqn-87"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:math>
</inline-formula> share the same ring <italic>L</italic>, <inline-formula id="ieqn-88">
<mml:math id="mml-ieqn-88"><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mrow><mml:msub><mml:mi>H</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>L</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:msup><mml:mo stretchy="false">]</mml:mo><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msup></mml:math>
</inline-formula> generated by the same user <inline-formula id="ieqn-89">
<mml:math id="mml-ieqn-89"><mml:msub><mml:mi>u</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math>
</inline-formula> must holds.<list list-type="bullet"><list-item>
<p>Modifying. Procedure of modifying a block can be seen as uploading a new block <inline-formula id="ieqn-90">
<mml:math id="mml-ieqn-90"><mml:mi>m</mml:mi><mml:mrow><mml:msup><mml:mi></mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:math>
</inline-formula> to replace the original <italic>m</italic>. To prove ownership of original block <italic>m</italic>, data owner only needs to offer the new tag <inline-formula id="ieqn-91">
<mml:math id="mml-ieqn-91"><mml:mrow><mml:msup><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:math>
</inline-formula> for checking whether <inline-formula id="ieqn-92">
<mml:math id="mml-ieqn-92"><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:math>
</inline-formula> holds. In this way, we ensure data sovereignty of owners without adding heavy computation and communication overhead.</p></list-item><list-item>
<p>Deleting. There is no new block to be uploaded in the case of deleting. Therefore, data owner needs to generate a temporary signature to prove its ownership. Data owner should choose a random message <inline-formula id="ieqn-93">
<mml:math id="mml-ieqn-93"><mml:mi>m</mml:mi><mml:mrow><mml:msup><mml:mi></mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:math>
</inline-formula> and generate <inline-formula id="ieqn-94">
<mml:math id="mml-ieqn-94"><mml:mrow><mml:msup><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:math>
</inline-formula> following the method in SigGen. If <inline-formula id="ieqn-95">
<mml:math id="mml-ieqn-95"><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math>
</inline-formula> holds and <inline-formula id="ieqn-96">
<mml:math id="mml-ieqn-96"><mml:mrow><mml:msup><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:math>
</inline-formula> is a valid tag, the deleting request can be identified as coming from the real data owner.</p></list-item></list></p>
<p><bold>ReSig.</bold> Considering a block m of user <inline-formula id="ieqn-97">
<mml:math id="mml-ieqn-97"><mml:msub><mml:mi>u</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula> with private key <inline-formula id="ieqn-98">
<mml:math id="mml-ieqn-98"><mml:msub><mml:mi>x</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula> and public <inline-formula id="ieqn-99">
<mml:math id="mml-ieqn-99"><mml:msub><mml:mi>y</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula>, when <inline-formula id="ieqn-100">
<mml:math id="mml-ieqn-100"><mml:msub><mml:mi>u</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula> need to quit from group, it has two choices to dispose <inline-formula id="ieqn-101">
<mml:math id="mml-ieqn-101"><mml:mi>m</mml:mi></mml:math>
</inline-formula>: deleting or re-signing. The deleting case can be classified as that of Update, so here we just introduce the part of re-signing. The process of re-signing is as below:<list list-type="simple"><list-item><label>1)</label>
<p>User <inline-formula id="ieqn-102">
<mml:math id="mml-ieqn-102"><mml:msub><mml:mi>u</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula>-negotiates with user <inline-formula id="ieqn-103">
<mml:math id="mml-ieqn-103"><mml:msub><mml:mi>u</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula> and <inline-formula id="ieqn-104">
<mml:math id="mml-ieqn-104"><mml:msub><mml:mi>u</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula> agrees to take over block <italic>m</italic>.</p></list-item><list-item><label>2)</label>
<p><inline-formula id="ieqn-105">
<mml:math id="mml-ieqn-105"><mml:msub><mml:mi>u</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula> sends a request <inline-formula id="ieqn-106">
<mml:math id="mml-ieqn-106"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:msup><mml:mi></mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>u</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> to blockchain network, proving that it is the original owner of <italic>m</italic> and <inline-formula id="ieqn-107">
<mml:math id="mml-ieqn-107"><mml:msub><mml:mi>u</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula> will be the new one.</p></list-item><list-item><label>3)</label>
<p>TPA checks <inline-formula id="ieqn-108">
<mml:math id="mml-ieqn-108"><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math>
</inline-formula> and agrees with the re-signing request, informing <inline-formula id="ieqn-109">
<mml:math id="mml-ieqn-109"><mml:msub><mml:mi>u</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula> to compute new signature.</p></list-item><list-item><label>4)</label>
<p><inline-formula id="ieqn-110">
<mml:math id="mml-ieqn-110"><mml:msub><mml:mi>u</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula> choose a new ring <inline-formula id="ieqn-111">
<mml:math id="mml-ieqn-111"><mml:msup><mml:mi>L</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:math>
</inline-formula> and compute <inline-formula id="ieqn-112">
<mml:math id="mml-ieqn-112"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>c</mml:mi><mml:msub><mml:mrow><mml:msup><mml:mi></mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>s</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mrow><mml:msup><mml:mrow><mml:mi>s</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> following the method in SigGen. Then compute<disp-formula id="ueqn-14">
<mml:math id="mml-ueqn-14" display="block"><mml:mi>C</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mfrac><mml:mrow><mml:msubsup><mml:mi>c</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:mstyle></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C0;</mml:mi></mml:mrow></mml:mrow></mml:msup></mml:math>
</disp-formula><disp-formula id="ueqn-15">
<mml:math id="mml-ueqn-15" display="block"><mml:mrow></mml:mrow><mml:msup><mml:mi>t</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mfrac><mml:mi>t</mml:mi><mml:mi>C</mml:mi></mml:mfrac></mml:mrow></mml:mstyle></mml:math>
</disp-formula></p></list-item><list-item><label>5)</label>
<p><inline-formula id="ieqn-113">
<mml:math id="mml-ieqn-113"><mml:msub><mml:mi>u</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula> sends <inline-formula id="ieqn-114">
<mml:math id="mml-ieqn-114"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>c</mml:mi><mml:msub><mml:mrow><mml:msup><mml:mi></mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>s</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mrow><mml:msup><mml:mrow><mml:mi>s</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mrow><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mrow><mml:msup><mml:mi></mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>t</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> as the new signature to blockchain network and receives the verification from TPA, just as that of SigGen.</p></list-item></list></p>
<p><bold>UsrRevo.</bold> After disposing all its blocks, the user to be revoked sends a request to inform the blockchain network. TPA checks its ledger for whether there are still blocks to be dealt with. If all blocks are re-signed or deleted, TPA accepts the revocation. Otherwise, reject.</p>
</sec>
<sec id="s4_3">
<label>4.3</label>
<title>Smart Contract Construction</title>
<p>In order to obtain non-repudiation and collusion-resistant group auditing, we need to wrap the algorithms above into chaincodes to be executed in blockchain network. Due to the mechanism of smart contract endorsement, each phase should be divided into two parts: on-chain transaction and off-chain operation. The on-chain transaction is similar to generating a new blockchain transaction. User or cloud service, acting as client, sends requests to blockchain network. And TPA plays the role of endorsement node, checking the validity of those requests and making decision for whether to accept transactions or not. The off-chain operation, just as it namely implies, is performed by entities locally at their own storage and computing resource, such as generating secret keys, signatures and integrity proofs. The reason for such division is that the operations about random element picking cannot be simulated in endorsement computation, and computing using private key should be secret.<list list-type="simple"><list-item><label>a)</label>
<p><italic>Setup Phase</italic></p></list-item></list></p>
<p><bold>KeyGen.</bold> User firstly execute the off-chain operation to generate its own private and public keys. Then it signs a message as the proof of public key and send transaction to blockchain network. TPA checks the validity of public key following method in smart contracts. If the key passes verification, TPA accepts the user to join in the group; otherwise, reject. In this way, we protect the secret of private key for user and make sure that each public key is valid when joining the group. The whole process is shown in <xref ref-type="fig" rid="fig-2">Fig. 2</xref>.
<list list-type="simple"><list-item><label>b)</label>
<p><italic>Preprocessing Phase</italic></p></list-item></list></p>
<fig id="fig-2">
<label>Figure 2</label>
<caption>
<title>On-chain transaction and off-chain operation of setup phase</title></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="CSSE_31030-fig-2.png"/>
</fig>
<p><bold>SigGen.</bold> Before uploading data blocks to cloud, data owner executes off-chain operation to generate signatures with private key and ring list. Then the owner sends request to TPA to register these signatures, meanwhile transferring data blocks to cloud storage. The CSP, once receiving the blocks, generates an integrity proof and sends to the blockchain network to check the validity of block signatures. If the proof can pass verification by TPA, CSP and TPA both agree that these signatures are valid and data blocks are intact. Otherwise, they refuse to accept the result and contact data owner for further dealing. The whole process is shown in <xref ref-type="fig" rid="fig-3">Fig. 3</xref>.
<list list-type="simple"><list-item><label>c)</label>
<p><italic>Verification Phase</italic></p></list-item></list></p>
<fig id="fig-3">
<label>Figure 3</label>
<caption>
<title>On-chain transaction and off-chain operation of preprocessing phase</title></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="CSSE_31030-fig-3.png"/>
</fig>
<p><bold>ChalGen.</bold> Group user decides challenged block indices and chooses random elements to generate challenge request in off-chain operation. Then it sends the request to blockchain network via on-chain transaction. TPA, working as endorsement node, checks whether the request is from valid user.</p>
<p><bold>ProofGen.</bold> Once receiving challenge request, CSP extracts data blocks from its storage and computes integrity proof as off-chain operation. In this way, content of data blocks can avoid to be exposed to TPA in blockchain network. And in on-chain transaction, it sends the proof to blockchain network.</p>
<p><bold>ProofVerify.</bold> This algorithm is a full on-chain transaction. TPA verifies the proof and gives result in form of endorsement. The whole process of this phase is shown in <xref ref-type="fig" rid="fig-4">Fig. 4</xref>.
<list list-type="simple"><list-item><label>d)</label>
<p><italic>Update Phase</italic></p></list-item></list></p>
<fig id="fig-4">
<label>Figure 4</label>
<caption>
<title>On-chain transaction and off-chain operation of verification phase</title></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="CSSE_31030-fig-4.png"/>
</fig>
<p><bold>Update.</bold> The off-chain operation of this phase is similar to that of Preprocessing. User firstly computes new signature and proof of ownership in the off-chain part, and then sends the information to blockchain network in on-chain part. TPA will check the ownership proof, making sure the validity of updating and accept new signature. The whole process is shown in <xref ref-type="fig" rid="fig-5">Fig. 5</xref>.
<list list-type="simple"><list-item><label>e)</label>
<p><italic>Revocation Phase</italic></p></list-item></list></p>
<fig id="fig-5">
<label>Figure 5</label>
<caption>
<title>On-chain transaction and off-chain operation of update phase</title></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="CSSE_31030-fig-5.png"/>
</fig>
<p><bold>ReSig.</bold> User generates re-signed signatures in the off-chain part, and then sends the request to blockchain network via on-chain transaction. TPA checks validity of re-signing signatures in the endorsement process. Finally, the re-signed signatures will be written into distributed ledger.</p>
<p><bold>UsrRevo.</bold> User sends the revocation request as on-chain transaction, and TPA checks its validity according to whether all the signatures of user has been processed. If the user has finished the disposition of its signatures, TPA will accept its revocation and remove its public key from user key list. The whole process of this phase is shown in <xref ref-type="fig" rid="fig-6">Fig. 6</xref>.</p>
<fig id="fig-6">
<label>Figure 6</label>
<caption>
<title>On-chain transaction and off-chain operation of revocation phase</title></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="CSSE_31030-fig-6.png"/>
</fig>
</sec>
</sec>
<sec id="s5">
<label>5</label>
<title>Security and Performance Analysis</title>
<sec id="s5_1">
<label>5.1</label>
<title>Security Analysis</title>
<p>In this part, we will discuss the security properties of our blockchain-based PDP scheme, including correctness, non-repudiation, unforeability and privacy preserving.</p>
<p><bold>Theorem 1. (Correctness)</bold> If when most TPAs in blockchain network are honest, an integrity proof from CSP cannot pass the integrity verification unless the cloud holds correct data, we say that the proposed scheme has the property of correctness.</p>
<p><bold>Proof.</bold> First of all, as the basis of whole scheme, we will prove that <xref ref-type="disp-formula" rid="eqn-1">Eq. (1)</xref> of ProofVerify holds. With preliminary knowledge introduced before, we deduce the left-hand side of <xref ref-type="disp-formula" rid="eqn-1">(1)</xref> as follows:<disp-formula id="ueqn-16">
<mml:math id="mml-ueqn-16" display="block"><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi>R</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:munderover><mml:mrow><mml:mo movablelimits="false">&#x220F;</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>K</mml:mi></mml:munderover><mml:mo>&#x2061;</mml:mo><mml:msubsup><mml:mi>t</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>g</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mi>r</mml:mi></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:munderover><mml:mrow><mml:mo movablelimits="false">&#x220F;</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>K</mml:mi></mml:munderover><mml:mo>&#x2061;</mml:mo><mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:msub><mml:mi>m</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C0;</mml:mi></mml:mrow></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>g</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
</disp-formula><disp-formula id="ueqn-17">
<mml:math id="mml-ueqn-17" display="block"><mml:mo>=</mml:mo><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:munderover><mml:mrow><mml:mo movablelimits="false">&#x220F;</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>K</mml:mi></mml:munderover><mml:mo>&#x2061;</mml:mo><mml:msubsup><mml:mi>c</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:msub><mml:mi>m</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mi>k</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:mi>r</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>g</mml:mi><mml:mn>2</mml:mn><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C0;</mml:mi></mml:mrow></mml:mrow></mml:msubsup></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
</disp-formula><disp-formula id="ueqn-18">
<mml:math id="mml-ueqn-18" display="block"><mml:mo>=</mml:mo><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BC;</mml:mi></mml:mrow></mml:mrow></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:munderover><mml:mrow><mml:mo movablelimits="false">&#x220F;</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>K</mml:mi></mml:munderover><mml:mo>&#x2061;</mml:mo><mml:msubsup><mml:mi>c</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C1;</mml:mi></mml:mrow></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
</disp-formula><disp-formula id="ueqn-19">
<mml:math id="mml-ueqn-19" display="block"><mml:mo>=</mml:mo><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03BC;</mml:mi></mml:mrow></mml:mrow></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:munderover><mml:mrow><mml:mo movablelimits="false">&#x220F;</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>K</mml:mi></mml:munderover><mml:mo>&#x2061;</mml:mo><mml:msubsup><mml:mrow><mml:mover><mml:mi>c</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03B3;</mml:mi></mml:mrow></mml:mrow><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C1;</mml:mi></mml:mrow></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math>
</disp-formula></p>
<p>The last step of deduction holds if and only if <inline-formula id="ieqn-115">
<mml:math id="mml-ieqn-115"><mml:msub><mml:mrow><mml:mover><mml:mi>c</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>K</mml:mi></mml:math>
</inline-formula> also holds.</p>
<p>Therefore, we can say that if an integrity proof pass checking in ProofVerify, both the ownership (contained in <inline-formula id="ieqn-116">
<mml:math id="mml-ieqn-116"><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:math>
</inline-formula>) and content (contained in <inline-formula id="ieqn-117">
<mml:math id="mml-ieqn-117"><mml:msub><mml:mi>m</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:msub></mml:math>
</inline-formula>) are ensured to be correct.</p>
<p><bold>Theorem 2. (Non-repudiation)</bold> If most TPAs in blockchain network are honest, any malicious adversary cannot control the result of integrity verification by in collusion with CSP or data owner.</p>
<p><bold>Proof.</bold> We have already proved the correctness of our integrity auditing scheme. Therefore, we can say that if a TPA is honest, it will always give honest decision for proof checking. On the other hand, the extraction of signatures for verification is based on distributed ledger of blockchain network. So even CSP or data owner in collusion with any dishonest adversary, they cannot tamper signatures used for verification. An honest TPA can always draw correct result. Also, blockchain network is believed to resist history attack, so we can say that our scheme can resist attacking from minor malicious adversary.</p>
<p><bold>Theorem 3. (Unforgeability)</bold> For any user or CSP, forging signature of another member is infeasible in polynomial time if and only if the DL assumption holds.</p>
<p><bold>Proof.</bold> Let <inline-formula id="ieqn-118">
<mml:math id="mml-ieqn-118"><mml:mi>L</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>y</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>y</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> be a given ring of <italic>n</italic> group users. Assume a PPT adversary <inline-formula id="ieqn-119">
<mml:math id="mml-ieqn-119"><mml:mrow><mml:mi mathvariant="script">A</mml:mi></mml:mrow></mml:math>
</inline-formula>, able to make at most <inline-formula id="ieqn-120">
<mml:math id="mml-ieqn-120"><mml:msub><mml:mi>q</mml:mi><mml:mi>H</mml:mi></mml:msub></mml:math>
</inline-formula> times of queries to hash functions <inline-formula id="ieqn-121">
<mml:math id="mml-ieqn-121"><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula> and <inline-formula id="ieqn-122">
<mml:math id="mml-ieqn-122"><mml:msub><mml:mi>H</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math>
</inline-formula> as well as <inline-formula id="ieqn-123">
<mml:math id="mml-ieqn-123"><mml:msub><mml:mi>q</mml:mi><mml:mi>S</mml:mi></mml:msub></mml:math>
</inline-formula> times to <inline-formula id="ieqn-124">
<mml:math id="mml-ieqn-124"><mml:mrow><mml:mrow><mml:mi mathvariant="script">R</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="script">S</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="script">O</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula>, can forge ring signature <inline-formula id="ieqn-125">
<mml:math id="mml-ieqn-125"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula> with non-negligible probability as<disp-formula id="ueqn-20">
<mml:math id="mml-ueqn-20" display="block"><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mo stretchy="false">[</mml:mo><mml:mrow><mml:mrow><mml:mi mathvariant="script">A</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>L</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x003A;</mml:mo><mml:mrow><mml:mi mathvariant="script">V</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C3;</mml:mi></mml:mrow></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">]</mml:mo><mml:mo>&#x003E;</mml:mo><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mfrac><mml:mn>1</mml:mn><mml:mrow><mml:mi>Q</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>k</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow></mml:mstyle></mml:math>
</disp-formula>where <italic>Q</italic> is polynomial and <italic>k</italic> is the security parameter. <inline-formula id="ieqn-126">
<mml:math id="mml-ieqn-126"><mml:mrow><mml:mrow><mml:mi mathvariant="script">R</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="script">S</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="script">O</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula> is a ring signature oracle which returns valid LHARS signatures upon queries of <inline-formula id="ieqn-127">
<mml:math id="mml-ieqn-127"><mml:mrow><mml:mi mathvariant="script">A</mml:mi></mml:mrow></mml:math>
</inline-formula>.</p>
<p>Now we assume that <inline-formula id="ieqn-128">
<mml:math id="mml-ieqn-128"><mml:mrow><mml:mi mathvariant="script">A</mml:mi></mml:mrow></mml:math>
</inline-formula> constructs a PPT simulator <inline-formula id="ieqn-129">
<mml:math id="mml-ieqn-129"><mml:mrow><mml:mi mathvariant="script">M</mml:mi></mml:mrow></mml:math>
</inline-formula> to generate forged signature. Since <inline-formula id="ieqn-130">
<mml:math id="mml-ieqn-130"><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C0;</mml:mi></mml:mrow></mml:mrow><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C1;</mml:mi></mml:mrow></mml:mrow><mml:mo>=</mml:mo><mml:msubsup><mml:mi>g</mml:mi><mml:mn>2</mml:mn><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C0;</mml:mi></mml:mrow></mml:mrow></mml:msubsup></mml:math>
</inline-formula> are the common keys shared by group members, we suppose that <inline-formula id="ieqn-131">
<mml:math id="mml-ieqn-131"><mml:mrow><mml:mi mathvariant="script">M</mml:mi></mml:mrow></mml:math>
</inline-formula> holds <inline-formula id="ieqn-132">
<mml:math id="mml-ieqn-132"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C0;</mml:mi></mml:mrow></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x03C1;</mml:mi></mml:mrow></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> and simplify the problem as follows.</p>
<p><italic>Ring Signing Oracle:</italic> Given any data block <italic>m</italic>, any public key list <inline-formula id="ieqn-133">
<mml:math id="mml-ieqn-133"><mml:mi>L</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>y</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>y</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>, the ring signing oracle <inline-formula id="ieqn-134">
<mml:math id="mml-ieqn-134"><mml:mrow><mml:mrow><mml:mi mathvariant="script">R</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="script">S</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="script">O</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula> generate a signature. <inline-formula id="ieqn-135">
<mml:math id="mml-ieqn-135"><mml:mrow><mml:mi mathvariant="script">M</mml:mi></mml:mrow></mml:math>
</inline-formula> simulates <inline-formula id="ieqn-136">
<mml:math id="mml-ieqn-136"><mml:mrow><mml:mrow><mml:mi mathvariant="script">R</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="script">S</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="script">O</mml:mi></mml:mrow></mml:mrow></mml:math>
</inline-formula> to generate a signature without holding any secret keys of individual group members.</p>
<p>Without loss of generality, we assume that <inline-formula id="ieqn-137">
<mml:math id="mml-ieqn-137"><mml:mrow><mml:mi mathvariant="script">M</mml:mi></mml:mrow></mml:math>
</inline-formula> randomly picks <inline-formula id="ieqn-138">
<mml:math id="mml-ieqn-138"><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">Z</mml:mi></mml:mrow></mml:mrow><mml:mi>q</mml:mi></mml:msub></mml:math>
</inline-formula> and queries hash function to get <inline-formula id="ieqn-139">
<mml:math id="mml-ieqn-139"><mml:mi>h</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>L</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>. Then compute <inline-formula id="ieqn-140">
<mml:math id="mml-ieqn-140"><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mi>h</mml:mi><mml:mi>r</mml:mi></mml:msup></mml:math>
</inline-formula> and chooses <inline-formula id="ieqn-141">
<mml:math id="mml-ieqn-141"><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>c</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:math>
</inline-formula>. Back patch to<disp-formula id="ueqn-21">
<mml:math id="mml-ueqn-21" display="block"><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>y</mml:mi><mml:mi>i</mml:mi><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mn>1</mml:mn><mml:mo>&#x2260;</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x2260;</mml:mo><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>n</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mn>1</mml:mn></mml:math>
</disp-formula></p>
<p>Eventually <inline-formula id="ieqn-142">
<mml:math id="mml-ieqn-142"><mml:mrow><mml:mi mathvariant="script">A</mml:mi></mml:mrow></mml:math>
</inline-formula> successfully forges <inline-formula id="ieqn-143">
<mml:math id="mml-ieqn-143"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>c</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> and <inline-formula id="ieqn-144">
<mml:math id="mml-ieqn-144"><mml:mrow><mml:mi mathvariant="script">M</mml:mi></mml:mrow></mml:math>
</inline-formula> performs rewind-simulation to generate <inline-formula id="ieqn-145">
<mml:math id="mml-ieqn-145"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>c</mml:mi><mml:msub><mml:mrow><mml:msup><mml:mi></mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>s</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mrow><mml:msup><mml:mrow><mml:mi>s</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>. Denote the forgery signer of <inline-formula id="ieqn-146">
<mml:math id="mml-ieqn-146"><mml:mrow><mml:mi mathvariant="script">A</mml:mi></mml:mrow></mml:math>
</inline-formula> is &#x0024;j&#x0024;, then <inline-formula id="ieqn-147">
<mml:math id="mml-ieqn-147"><mml:mrow><mml:mi mathvariant="script">M</mml:mi></mml:mrow></mml:math>
</inline-formula> can obtain <inline-formula id="ieqn-148">
<mml:math id="mml-ieqn-148"><mml:msub><mml:mi>x</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math>
</inline-formula> as follows:<disp-formula id="ueqn-22">
<mml:math id="mml-ueqn-22" display="block"><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>y</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</disp-formula><disp-formula id="ueqn-23">
<mml:math id="mml-ueqn-23" display="block"><mml:mi>c</mml:mi><mml:msub><mml:mrow><mml:msup><mml:mi></mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow><mml:mrow><mml:mi>j</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>L</mml:mi><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msubsup><mml:mi>g</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:msubsup><mml:mi>s</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>y</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:msubsup><mml:mi>c</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>y</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:msubsup><mml:mi>c</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:msubsup><mml:mi>s</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:mrow><mml:mrow><mml:msubsup><mml:mi>c</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</disp-formula></p>
<p>Remember <inline-formula id="ieqn-149">
<mml:math id="mml-ieqn-149"><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mi>h</mml:mi><mml:mi>r</mml:mi></mml:msup></mml:math>
</inline-formula>, then<disp-formula id="ueqn-24">
<mml:math id="mml-ueqn-24" display="block"><mml:msub><mml:mi>s</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:msub><mml:mi>x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mi>s</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>+</mml:mo><mml:msubsup><mml:mi>c</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mi>x</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math>
</disp-formula><disp-formula id="ueqn-25">
<mml:math id="mml-ueqn-25" display="block"><mml:msub><mml:mi>s</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mi>r</mml:mi><mml:mo>=</mml:mo><mml:msubsup><mml:mi>s</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>+</mml:mo><mml:msubsup><mml:mi>c</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mi>r</mml:mi></mml:math>
</disp-formula></p>
<p>Solve and obtain<disp-formula id="ueqn-26">
<mml:math id="mml-ueqn-26" display="block"><mml:msub><mml:mi>x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mfrac><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msubsup><mml:mi>s</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msubsup><mml:mi>c</mml:mi><mml:mi>j</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mfrac></mml:mrow></mml:mstyle></mml:math>
</disp-formula></p>
<p>According to [<xref ref-type="bibr" rid="ref-27">27</xref>], the probability of <inline-formula id="ieqn-150">
<mml:math id="mml-ieqn-150"><mml:mrow><mml:mi mathvariant="script">M</mml:mi></mml:mrow></mml:math>
</inline-formula> to achieve a solution is at least <inline-formula id="ieqn-151">
<mml:math id="mml-ieqn-151"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mrow><mml:mo>/</mml:mo></mml:mrow><mml:mo stretchy="false">[</mml:mo><mml:mrow><mml:mrow><mml:mi mathvariant="normal">n</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">q</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">H</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mrow><mml:mi mathvariant="normal">n</mml:mi></mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">q</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">S</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mrow><mml:mi mathvariant="normal">Q</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi mathvariant="normal">k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo stretchy="false">]</mml:mo></mml:mrow><mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mn>2</mml:mn></mml:msup></mml:math>
</inline-formula>, which is non-negligible. Therefore, once <inline-formula id="ieqn-152">
<mml:math id="mml-ieqn-152"><mml:mrow><mml:mi mathvariant="script">A</mml:mi></mml:mrow></mml:math>
</inline-formula> is able to forge signature with an advantage of <inline-formula id="ieqn-153">
<mml:math id="mml-ieqn-153"><mml:mn>1</mml:mn><mml:mrow><mml:mo>/</mml:mo></mml:mrow><mml:mi>Q</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>k</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> , <inline-formula id="ieqn-154">
<mml:math id="mml-ieqn-154"><mml:mrow><mml:mi mathvariant="script">M</mml:mi></mml:mrow></mml:math>
</inline-formula> is able to solve Co-CDH problem with an advantage of <inline-formula id="ieqn-155">
<mml:math id="mml-ieqn-155"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mrow><mml:mo>/</mml:mo></mml:mrow><mml:mo stretchy="false">[</mml:mo><mml:mrow><mml:mrow><mml:mi mathvariant="normal">n</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">q</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">H</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mrow><mml:mi mathvariant="normal">n</mml:mi></mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">q</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">S</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mrow><mml:mi mathvariant="normal">Q</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi mathvariant="normal">k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo stretchy="false">]</mml:mo></mml:mrow><mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mn>2</mml:mn></mml:msup></mml:math>
</inline-formula>. Desired contradiction. Theorem is proved.</p>
<p><bold>Theorem 4. (Privacy Preserving)</bold> If and only if DDHP (Decisional Diffie-Hellman Problem) is hard, in the random oracle model, the probability of distinguishing signer of an LHARS signature is at most <inline-formula id="ieqn-156">
<mml:math id="mml-ieqn-156"><mml:mn>1</mml:mn><mml:mrow><mml:mo>/</mml:mo></mml:mrow><mml:mi>n</mml:mi></mml:math>
</inline-formula>, where n is the size of ring list <italic>L</italic>.</p>
<p><bold>Proof.</bold> For any <inline-formula id="ieqn-157">
<mml:math id="mml-ieqn-157"><mml:msub><mml:mi>g</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mi>h</mml:mi><mml:mo>&#x2208;</mml:mo><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">G</mml:mi></mml:mrow></mml:mrow><mml:mn>1</mml:mn></mml:msub></mml:math>
</inline-formula>, and <inline-formula id="ieqn-158">
<mml:math id="mml-ieqn-158"><mml:mn>1</mml:mn><mml:mo>&#x2264;</mml:mo><mml:mi>j</mml:mi><mml:mo>&#x2264;</mml:mo><mml:mi>n</mml:mi></mml:math>
</inline-formula>, the distribution of <inline-formula id="ieqn-159">
<mml:math id="mml-ieqn-159"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>c</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula> is identical. Therefore, the probability of a PPT adversary <inline-formula id="ieqn-160">
<mml:math id="mml-ieqn-160"><mml:mrow><mml:mi mathvariant="script">A</mml:mi></mml:mrow></mml:math>
</inline-formula> to distinguish <inline-formula id="ieqn-161">
<mml:math id="mml-ieqn-161"><mml:msub><mml:mi>c</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math>
</inline-formula> from <inline-formula id="ieqn-162">
<mml:math id="mml-ieqn-162"><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>c</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mspace width="thickmathspace" /><mml:msub><mml:mi>s</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math>
</inline-formula>, in order to point out the signer <inline-formula id="ieqn-163">
<mml:math id="mml-ieqn-163"><mml:msub><mml:mi>u</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math>
</inline-formula>, is at most <inline-formula id="ieqn-164">
<mml:math id="mml-ieqn-164"><mml:mn>1</mml:mn><mml:mrow><mml:mo>/</mml:mo></mml:mrow><mml:mi>n</mml:mi></mml:math>
</inline-formula>. Reference [<xref ref-type="bibr" rid="ref-27">27</xref>] gives further detailed explanation.</p>
</sec>
<sec id="s5_2">
<label>5.2</label>
<title>Performance Analysis</title>
<p>Our proposal is a comprehensive solution for group data integrity auditing, including improvement on both security and efficiency. First of all, we compare the security features of our proposal with other comparable solutions, shown in <xref ref-type="table" rid="table-1">Tab. 1</xref>.</p>
<table-wrap id="table-1"><label>Table 1</label>
<caption>
<title>Comparison with previous works</title></caption>
<table><colgroup><col align="left"/><col align="left"/><col align="left"/><col align="left"/><col align="left"/><col align="left"/>
</colgroup>
<thead>
<tr>
<th align="left"/>
<th align="left">Public auditing</th>
<th align="left">Identity privacy protection</th>
<th align="left">User revocation</th>
<th align="left">Collusion attack resistance</th>
<th align="left">Traceability</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Oruta [<xref ref-type="bibr" rid="ref-19">19</xref>]</td>
<td align="left">&#x221A;</td>
<td align="left">&#x221A;</td>
<td align="left"/>
<td align="left"/>
<td align="left"/>
</tr>
<tr>
<td align="left">Knox [<xref ref-type="bibr" rid="ref-22">22</xref>]</td>
<td align="left"/>
<td align="left">&#x221A;</td>
<td align="left"/>
<td align="left"/>
<td align="left">&#x221A;</td>
</tr>
<tr>
<td align="left">Panda [<xref ref-type="bibr" rid="ref-20">20</xref>]</td>
<td align="left">&#x221A;</td>
<td align="left"/>
<td align="left">&#x221A;</td>
<td align="left"/>
<td align="left">&#x221A;</td>
</tr>
<tr>
<td align="left">Jiang et al. [<xref ref-type="bibr" rid="ref-21">21</xref>]</td>
<td align="left">&#x221A;</td>
<td align="left">&#x221A;</td>
<td align="left">&#x221A;</td>
<td align="left">&#x221A;</td>
<td align="left"/>
</tr>
<tr>
<td align="left">Our proposal</td>
<td align="left">&#x221A;</td>
<td align="left">&#x221A;</td>
<td align="left">&#x221A;</td>
<td align="left">&#x221A;</td>
<td align="left">&#x221A;</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>To evaluate the practical performance of our scheme, we deploy an instance of our proposed scheme on virtual private server (VPS), which has 1 CPU, 2GB memory and 2TB bandwidth. The server has installed the open source blockchain platform Hyperledger Fabric and we implemented chaincode for our scheme based on Fabric SDK for JAVA. Fabric offers necessary membership services, certificate authority management, consensus plugin and customizable endorsement policies, thus we can focus on implementing our scheme itself.</p>
<p>In our instance, the on-chain operations are wrapped as smart contracts, while off-chain algorithms are implemented in the form of local scripts, both written in Node.js. Entities in our scheme execute their local scripts to complete the off-chain computation and invoke smart contracts to finished the on-chain parts. In this way, we realize the separation of on-chain and off-chain parts.</p>
<p>Choosing a secure length of 1024 bit, time for the off-chain part of generating signature is shown in <xref ref-type="fig" rid="fig-7">Fig. 7</xref>. We deploy two patterns of our proposal--original and simplified ones. For one file divided into blocks, an intuitive way to reduce computational overhead and storage cost is using the same ring for all the blocks, which will not compromise the security, called &#x2018;&#x2019;simplified&#x2019;&#x2019;. We also implement a few comparable works under the same security length, in order to present efficiency of our proposal.</p>
<fig id="fig-7">
<label>Figure 7</label>
<caption>
<title>Time for signature generation</title></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="CSSE_31030-fig-7.png"/>
</fig>
<p>As the size of ring length grows, time of generating signature for data owner increases from 10.07 ms per block to 39.36 ms for our original proposal, as well as from 5.39 to 6.16 ms for simplified mode. However, previous works cost much more time to generate signatures. The main reason is that Knox needs to compute more modular exponential operations and Oruta has complex progress of group signature computation. Work of Jiang et al. [<xref ref-type="bibr" rid="ref-21">21</xref>] has the same signing algorithms with those of Knox, and will undoubtedly suffer from the heavy overhead of modular exponentiation. The result also suggests that choosing a reasonable size of ring, computation overhead of our proposal for data owner is very low.</p>
<p>Under the same secure length mentioned above, we also measure the time cost of re-signing signature for the new data owner, as shown in <xref ref-type="fig" rid="fig-8">Fig. 8</xref>. The time cost varies from 0.19 to 0.84&#x2005;ms per block along with the increasing of ring length. Comparing to generating signature, the computation overhead of re-signing is relatively much lower, which also shows the efficiency of our scheme.</p>
<fig id="fig-8">
<label>Figure 8</label>
<caption>
<title>Time for re-signing signature</title></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="CSSE_31030-fig-8.png"/>
</fig>
<p>To evaluate the performance of on-chain operations in blockchain network, we also perform smart contracts in VPS. We employ the benchmark test tool Hyperledger Caliper, which enables users to write the test and network configuration, launching an instance and executing required smart contracts defined in given chaincode automatically. We execute 7 rounds of test, 100 times per round. Each round the proportion of challenged blocks varies from 1&#x0025;, 10&#x0025;, 20&#x0025;, 40&#x0025; to 100&#x0025;. Since the verification is the most expensive part for endorsement peer (TPA), we choose it as the test chaincode. <xref ref-type="fig" rid="fig-9">Fig. 9</xref> shows the indicators of efficiency for each round. The figure suggests that each round does not show a huge difference in verification. The possible reason is that we use an aggregated proof, thus the main cost of such verification lies in the computation of bilinear mapping. It also proves that our scheme has a relatively smooth performance in on-chain operation.</p>
<fig id="fig-9">
<label>Figure 9</label>
<caption>
<title>7-round test for on-chain verification</title></caption>
<graphic mimetype="image" mime-subtype="png" xlink:href="CSSE_31030-fig-9.png"/>
</fig>
</sec>
</sec>
<sec id="s6">
<label>6</label>
<title>Conclusion</title>
<p>This paper focuses on exploring a public PDP scheme for shared data with secure group user revocation. We find that previous works failed to obtain both security and identity privacy for group users. We design a re-signing method for public PDP scheme to hide the identity of data owner in a n-member ring. On the other hand, we also try to build a non-repudiation scheme which can resist collusion between CSP, TPA and users. Blockchain network and smart contracts offer reliable properties to solve such problem. Blending the two points above, we design a novel blockchain-based PDP scheme with group user revocation. Security analysis and performance evaluation prove that our scheme is both secure and efficient.</p>
</sec>
</body>
<back><fn-group>
<fn fn-type="other">
<p><bold>Funding Statement:</bold> The work is supported by the National Key Research and Development Program of China (No. 2018YFC1604002) and the National Natural Science Foundation of China (No. U1836204, No. U1936208, No. U1936216, No. 62002197).</p>
</fn>
<fn fn-type="conflict">
<p><bold>Conflicts of Interest:</bold> The authors declare that they have no conflicts of interest to report regarding the present study.</p>
</fn>
</fn-group>
<ref-list content-type="authoryear">
<title>References</title>
<ref id="ref-1"><label>[1]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>A.</given-names> <surname>Rudniy</surname></string-name></person-group>, &#x201C;<article-title>Data warehouse design for big data in academia</article-title>,&#x201D; <source>Computers, Materials &#x0026; Continua</source>, vol. <volume>71</volume>, no. <issue>1</issue>, pp. <fpage>979</fpage>&#x2013;<lpage>992</lpage>, <year>2022</year>.</mixed-citation></ref>
<ref id="ref-2"><label>[2]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>A.</given-names> <surname>Berguiga</surname></string-name> and <string-name><given-names>A.</given-names> <surname>Harchay</surname></string-name></person-group>, &#x201C;<article-title>An IoT-based intrusion detection system approach for tcp syn attacks</article-title>,&#x201D; <source>Computers, Materials &#x0026; Continua</source>, vol. <volume>71</volume>, no. <issue>2</issue>, pp. <fpage>3839</fpage>&#x2013;<lpage>3851</lpage>, <year>2022</year>.</mixed-citation></ref>
<ref id="ref-3"><label>[3]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>R.</given-names> <surname>Jia</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Xin</surname></string-name>, <string-name><given-names>B.</given-names> <surname>Liu</surname></string-name> and <string-name><given-names>Q.</given-names> <surname>Qin</surname></string-name></person-group>, &#x201C;<article-title>Dynamic encryption and secure transmission of terminal data files</article-title>,&#x201D; <source>Computers, Materials &#x0026; Continua</source>, vol. <volume>71</volume>, no. <issue>1</issue>, pp. <fpage>1221</fpage>&#x2013;<lpage>1232</lpage>, <year>2022</year>.</mixed-citation></ref>
<ref id="ref-4"><label>[4]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>J.</given-names> <surname>Almutairi</surname></string-name> and <string-name><given-names>M.</given-names> <surname>Aldossary</surname></string-name></person-group>, &#x201C;<article-title>Exploring and modelling IoT offloading policies in edge cloud environments</article-title>,&#x201D; <source>Computer Systems Science and Engineering</source>, vol. <volume>41</volume>, no. <issue>2</issue>, pp. <fpage>611</fpage>&#x2013;<lpage>624</lpage>, <year>2022</year>.</mixed-citation></ref>
<ref id="ref-5"><label>[5]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>L.</given-names> <surname>Jiang</surname></string-name> and <string-name><given-names>Z.</given-names> <surname>Fu</surname></string-name></person-group>, &#x201C;<article-title>Privacy-preserving genetic algorithm outsourcing in cloud computing</article-title>,&#x201D; <source>Journal of Cyber Security</source>, vol. <volume>2</volume>, no. <issue>1</issue>, pp. <fpage>49</fpage>&#x2013;<lpage>61</lpage>, <year>2020</year>.</mixed-citation></ref>
<ref id="ref-6"><label>[6]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>M.</given-names> <surname>Naor</surname></string-name> and <string-name><given-names>G. N.</given-names> <surname>Rothblum</surname></string-name></person-group>, &#x201C;<article-title>The complexity of online memory checking</article-title>,&#x201D; <source>Journal of the ACM</source>, vol. <volume>56</volume>, no. <issue>1</issue>, pp. <fpage>1</fpage>&#x2013;<lpage>46</lpage>, <year>2009</year>.</mixed-citation></ref>
<ref id="ref-7"><label>[7]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>A.</given-names> <surname>Oprea</surname></string-name>, <string-name><given-names>M. K.</given-names> <surname>Reiter</surname></string-name> and <string-name><given-names>K.</given-names> <surname>Yang</surname></string-name></person-group>, &#x201C;<article-title>Space-efficient block storage integrity</article-title>,&#x201D; in <conf-name>Proc. of 12th Annual Network and Distributed System Security Symp. (NDSS)</conf-name>, <conf-loc>San Diego, California, USA</conf-loc>, <year>2005</year>.</mixed-citation></ref>
<ref id="ref-8"><label>[8]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>G.</given-names> <surname>Ateniese</surname></string-name>, <string-name><given-names>R.</given-names> <surname>Burns</surname></string-name>, <string-name><given-names>R.</given-names> <surname>Curtmola</surname></string-name>, <string-name><given-names>J.</given-names> <surname>Herring</surname></string-name>, <string-name><given-names>L.</given-names> <surname>Kissner</surname></string-name> <etal>et al.,</etal></person-group> &#x201C;<article-title>Provable data possession at untrusted stores</article-title>,&#x201D; in <conf-name>Proc. of 14th ACM Conf. Computer and Communication Security (CCS &#x2018;07)</conf-name>, <conf-loc>Alexandria, Virginia, USA</conf-loc>, pp. <fpage>598</fpage>&#x2013;<lpage>609</lpage>, <year>2007</year>.</mixed-citation></ref>
<ref id="ref-9"><label>[9]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>Q.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>C.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>K.</given-names> <surname>Ren</surname></string-name>, <string-name><given-names>W.</given-names> <surname>Lou</surname></string-name> and <string-name><given-names>J.</given-names> <surname>Li</surname></string-name></person-group>, &#x201C;<article-title>Enabling public auditability and data dynamics for storage security in cloud computing</article-title>,&#x201D; <source>IEEE Transactions on Parallel and Distributed Systems</source>, vol. <volume>22</volume>, no. <issue>5</issue>, pp. <fpage>847</fpage>&#x2013;<lpage>859</lpage>, <year>2011</year>.</mixed-citation></ref>
<ref id="ref-10"><label>[10]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>X.</given-names> <surname>Tang</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Qi</surname></string-name> and <string-name><given-names>Y.</given-names> <surname>Huang</surname></string-name></person-group>, &#x201C;<article-title>Reputation audit in multi-cloud storage through integrity verification and data dynamics</article-title>,&#x201D; in <conf-name>Proc. of 2016 IEEE 9th Int. Conf. on Cloud Computing (CLOUD)</conf-name>, <conf-loc>San Francisco, California, USA</conf-loc>, pp. <fpage>624</fpage>&#x2013;<lpage>631</lpage>, <year>2016</year>.</mixed-citation></ref>
<ref id="ref-11"><label>[11]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>Z.</given-names> <surname>Mo</surname></string-name>, <string-name><given-names>Y. A.</given-names> <surname>Zhou</surname></string-name>, <string-name><given-names>S. G.</given-names> <surname>Chen</surname></string-name> and <string-name><given-names>C. Z.</given-names> <surname>Xu</surname></string-name></person-group>, &#x201C;<article-title>Enabling non-repudiable data possession verification in cloud storage systems</article-title>,&#x201D; in <conf-name>Proc. of 2014 IEEE 7th Int. Conf. on Cloud Computing (CLOUD)</conf-name>, <conf-loc>Anchorage, Alaska, USA</conf-loc>, pp. <fpage>232</fpage>&#x2013;<lpage>239</lpage>, <year>2014</year>.</mixed-citation></ref>
<ref id="ref-12"><label>[12]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>H.</given-names> <surname>Jin</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Jiang</surname></string-name> and <string-name><given-names>K.</given-names> <surname>Zhou</surname></string-name></person-group>, &#x201C;<article-title>Dynamic and public auditing with fair arbitration for cloud data</article-title>,&#x201D; <source>IEEE Transactions on Cloud Computing</source>, vol. <volume>6</volume>, no. <issue>3</issue>, pp. <fpage>680</fpage>&#x2013;<lpage>693</lpage>, <year>2018</year>.</mixed-citation></ref>
<ref id="ref-13"><label>[13]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>C.</given-names> <surname>Liu</surname></string-name>, <string-name><given-names>R.</given-names> <surname>Ranjan</surname></string-name>, <string-name><given-names>C.</given-names> <surname>Yang</surname></string-name>, <string-name><given-names>X.</given-names> <surname>Zhang</surname></string-name>, <string-name><given-names>L.</given-names> <surname>Wang</surname></string-name> <etal>et al.,</etal></person-group> &#x201C;<article-title>MuR-DPA: Top-down levelled multi-replica merkle hash tree based secure public auditing for dynamic big data storage on cloud</article-title>,&#x201D; <source>IEEE Transactions on Computers</source>, vol. <volume>64</volume>, no. <issue>9</issue>, pp. <fpage>2609</fpage>&#x2013;<lpage>2622</lpage>, <year>2015</year>.</mixed-citation></ref>
<ref id="ref-14"><label>[14]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>Z.</given-names> <surname>Mo</surname></string-name>, <string-name><given-names>Y. A.</given-names> <surname>Zhou</surname></string-name> and <string-name><given-names>S.</given-names> <surname>Chen</surname></string-name></person-group>, &#x201C;<article-title>A dynamic proof of retrievability (POR) scheme with O(log n) complexity</article-title>,&#x201D; in <conf-name>Proc. of 2012 IEEE Int. Conf. on Communications (ICC)</conf-name>, <conf-loc>Ottawa, Canada</conf-loc>, pp. <fpage>912</fpage>&#x2013;<lpage>916</lpage>, <year>2012</year>.</mixed-citation></ref>
<ref id="ref-15"><label>[15]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Zhu</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>Z.</given-names> <surname>Hu</surname></string-name>, <string-name><given-names>G. J.</given-names> <surname>Ahn</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Hu</surname></string-name> <etal>et al.,</etal></person-group> &#x201C;<article-title>Dynamic audit services for integrity verification of outsourced storages in clouds</article-title>,&#x201D; in <conf-name>Proc. of ACM Symp. on Applied Computing (SAC &#x2018;11)</conf-name>, <conf-loc>TaiChung, Taiwan</conf-loc>, pp. <fpage>1550</fpage>&#x2013;<lpage>1557</lpage>, <year>2011</year>.</mixed-citation></ref>
<ref id="ref-16"><label>[16]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Zhu</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Hu</surname></string-name>, <string-name><given-names>G. J.</given-names> <surname>Ahn</surname></string-name> and <string-name><given-names>M.</given-names> <surname>Yu</surname></string-name></person-group>, &#x201C;<article-title>Cooperative provable data possession for integrity verification in multi-cloud storage</article-title>,&#x201D; <source>IEEE Transactions on Parallel and Distributed Systems</source>, vol. <volume>23</volume>, no. <issue>12</issue>, pp. <fpage>2231</fpage>&#x2013;<lpage>2244</lpage>, <year>2012</year>.</mixed-citation></ref>
<ref id="ref-17"><label>[17]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>K.</given-names> <surname>Yang</surname></string-name> and <string-name><given-names>X.</given-names> <surname>Jia</surname></string-name></person-group>, &#x201C;<article-title>An efficient and secure dynamic auditing protocol for data storage in cloud computing</article-title>,&#x201D; <source>IEEE Transactions on Parallel and Distributed Systems</source>, vol. <volume>24</volume>, no. <issue>9</issue>, pp. <fpage>1717</fpage>-<lpage>1726</lpage>, <year>2013</year>.</mixed-citation></ref>
<ref id="ref-18"><label>[18]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>H.</given-names> <surname>Tian</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Chen</surname></string-name>, <string-name><given-names>C. C.</given-names> <surname>Chang</surname></string-name>, <string-name><given-names>H.</given-names> <surname>Jiang</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Huang</surname></string-name> <etal>et al.,</etal></person-group> &#x201C;<article-title>Dynamic-hash-table based public auditing for secure cloud storage</article-title>,&#x201D; <source>IEEE Transactions on Services Computing</source>, vol. <volume>10</volume>, no. <issue>5</issue>, pp. <fpage>701</fpage>&#x2013;<lpage>714</lpage>, <year>2017</year>.</mixed-citation></ref>
<ref id="ref-19"><label>[19]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>B.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>B.</given-names> <surname>Li</surname></string-name> and <string-name><given-names>H.</given-names> <surname>Li</surname></string-name></person-group>, &#x201C;<article-title>Oruta: Privacy-preserving public auditing for shared data in the cloud</article-title>,&#x201D; <source>IEEE Transactions on Cloud Computing</source>, vol. <volume>2</volume>, no. <issue>1</issue>, pp. <fpage>43</fpage>&#x2013;<lpage>56</lpage>, <year>2014</year>.</mixed-citation></ref>
<ref id="ref-20"><label>[20]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>B.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>B.</given-names> <surname>Li</surname></string-name>, and <string-name><given-names>H.</given-names> <surname>Li</surname></string-name></person-group>. &#x201C;<article-title>Panda: Public auditing for shared data with efficient user revocation in the cloud</article-title>,&#x201D; <source>IEEE Transactions on Services Computing</source>, vol. <volume>8</volume>, no. <issue>1</issue>, pp. <fpage>92</fpage>&#x2013;<lpage>106</lpage>, <year>2013</year>.</mixed-citation></ref>
<ref id="ref-21"><label>[21]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>T.</given-names> <surname>Jiang</surname></string-name>, <string-name><given-names>X.</given-names> <surname>Chen</surname></string-name> and <string-name><given-names>J.</given-names> <surname>Ma</surname></string-name></person-group>, &#x201C;<article-title>Public integrity auditing for shared dynamic cloud data with group user revocation</article-title>,&#x201D; <source>IEEE Transactions on Computers</source>, vol. <volume>65</volume>, no. <issue>8</issue>, pp. <fpage>2363</fpage>&#x2013;<lpage>2373</lpage>, <year>2015</year>.</mixed-citation></ref>
<ref id="ref-22"><label>[22]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>B.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>B.</given-names> <surname>Li</surname></string-name> and <string-name><given-names>H.</given-names> <surname>Li</surname></string-name></person-group>, &#x201C;<article-title>Knox: Privacy-preserving auditing for shared data with large groups in the cloud</article-title>,&#x201D; in <conf-name>Proc. of Int. Conf. on Applied Cryptography and Network Security</conf-name>, <conf-loc>Berlin, Heidelberg</conf-loc>, <publisher-name>Springer</publisher-name>, <year>2012</year>.</mixed-citation></ref>
<ref id="ref-23"><label>[23]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>H.</given-names> <surname>Wang</surname></string-name></person-group>, &#x201C;<article-title>Proxy provable data possession in public clouds</article-title>,&#x201D; <source>IEEE Transactions on Services Computing</source>, vol. <volume>6</volume>, no. <issue>4</issue>, pp. <fpage>551</fpage>&#x2013;<lpage>559</lpage>, <year>2013</year>.</mixed-citation></ref>
<ref id="ref-24"><label>[24]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>J.</given-names> <surname>Yuan</surname></string-name> and <string-name><given-names>S.</given-names> <surname>Yu</surname></string-name></person-group>, &#x201C;<article-title>Efficient public integrity checking for cloud data sharing with multi-user modification</article-title>,&#x201D; in <conf-name>Proc. of 2014 IEEE Int. Conf. on Computer Communications (INFOCOM)</conf-name>, <conf-loc>Toronto, Canada</conf-loc>, pp. <fpage>2121</fpage>&#x2013;<lpage>2129</lpage>, <year>2014</year>.</mixed-citation></ref>
<ref id="ref-25"><label>[25]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>Y.</given-names> <surname>Zhang</surname></string-name>, <string-name><given-names>C.</given-names> <surname>Xu</surname></string-name>, <string-name><given-names>X.</given-names> <surname>Lin</surname></string-name> and <string-name><given-names>X. S.</given-names> <surname>Shen</surname></string-name></person-group>, &#x201C;<article-title>Blockchain-based public integrity verification for cloud storage against procrastinating auditors</article-title>,&#x201D; <source>IEEE Transactions on Cloud Computing</source>, vol. <volume>9</volume>, no. <issue>3</issue>, pp. <fpage>923</fpage>&#x2013;<lpage>937</lpage>, <year>2021</year>.</mixed-citation></ref>
<ref id="ref-26"><label>[26]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><given-names>P. C.</given-names> <surname>Wei</surname></string-name>, <string-name><given-names>D.</given-names> <surname>Wang</surname></string-name>, <string-name><given-names>Y.</given-names> <surname>Zhao</surname></string-name>, <string-name><given-names>S. K. S.</given-names> <surname>Tyagi</surname></string-name> and <string-name><given-names>N.</given-names> <surname>Kumar</surname></string-name></person-group>, &#x201C;<article-title>Blockchain data-based cloud data integrity protection mechanism</article-title>,&#x201D; <source>Future Generation Computer Systems</source>, vol. <volume>102</volume>, pp. <fpage>902</fpage>&#x2013;<lpage>911</lpage>, <year>2020</year>.</mixed-citation></ref>
<ref id="ref-27"><label>[27]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><given-names>J. K.</given-names> <surname>Liu</surname></string-name>, <string-name><given-names>V. K.</given-names> <surname>Wei</surname></string-name> and <string-name><given-names>D. S.</given-names> <surname>Wong</surname></string-name></person-group>, &#x201C;<article-title>Linkable spontaneous anonymous group signature for ad hoc groups</article-title>,&#x201D; in <conf-name>Proc. of Australasian Conf. on Information Security and Privacy</conf-name>, <conf-loc>Sydney, Australia</conf-loc>, pp. <fpage>325</fpage>&#x2013;<lpage>335</lpage>, <year>2004</year>.</mixed-citation></ref>
</ref-list>
</back>
</article>