<?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" xml:lang="en" article-type="research-article" dtd-version="1.1">
<front>
<journal-meta>
<journal-id journal-id-type="pmc">CMC</journal-id>
<journal-id journal-id-type="nlm-ta">CMC</journal-id>
<journal-id journal-id-type="publisher-id">CMC</journal-id>
<journal-title-group>
<journal-title>Computers, Materials &#x0026; Continua</journal-title>
</journal-title-group>
<issn pub-type="epub">1546-2226</issn>
<issn pub-type="ppub">1546-2218</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">69240</article-id>
<article-id pub-id-type="doi">10.32604/cmc.2025.069240</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Article</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>A Blockchain-Based Efficient Verification Scheme for Context Semantic-Aware Ciphertext Retrieval</article-title>
<alt-title alt-title-type="left-running-head">A Blockchain-Based Efficient Verification Scheme for Context Semantic-Aware Ciphertext Retrieval</alt-title>
<alt-title alt-title-type="right-running-head">A Blockchain-Based Efficient Verification Scheme for Context Semantic-Aware Ciphertext Retrieval</alt-title>
</title-group>
<contrib-group>
<contrib id="author-1" contrib-type="author">
<name name-style="western"><surname>Bao</surname><given-names>Haochen</given-names></name><xref ref-type="aff" rid="aff-1">1</xref></contrib>
<contrib id="author-2" contrib-type="author" corresp="yes">
<name name-style="western"><surname>Yuan</surname><given-names>Lingyun</given-names></name><xref ref-type="aff" rid="aff-1">1</xref><xref ref-type="aff" rid="aff-2">2</xref><email>yuanlingyun@ynnu.edu.cn</email></contrib>
<contrib id="author-3" contrib-type="author">
<name name-style="western"><surname>Xie</surname><given-names>Tianyu</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>Chen</surname><given-names>Han</given-names></name><xref ref-type="aff" rid="aff-1">1</xref></contrib>
<contrib id="author-5" contrib-type="author">
<name name-style="western"><surname>Dai</surname><given-names>Hui</given-names></name><xref ref-type="aff" rid="aff-1">1</xref></contrib>
<aff id="aff-1"><label>1</label><institution>The School of Information Science and Technology, Yunnan Normal University</institution>, <addr-line>Kunming, 650500</addr-line>, <country>China</country></aff>
<aff id="aff-2"><label>2</label><institution>The Key Laboratory of Educational Information for Nationalities, Ministry of Education</institution>, <addr-line>Kunming, 650500</addr-line>, <country>China</country></aff>
</contrib-group>
<author-notes>
<corresp id="cor1"><label>&#x002A;</label>Corresponding Author: Lingyun Yuan. Email: <email>yuanlingyun@ynnu.edu.cn</email></corresp>
</author-notes>
<pub-date date-type="collection" publication-format="electronic">
<year>2025</year></pub-date>
<pub-date date-type="pub" publication-format="electronic">
<day>10</day>
<month>11</month>
<year>2025</year>
</pub-date>
<volume>86</volume>
<issue>1</issue>
<fpage>1</fpage>
<lpage>30</lpage>
<history>
<date date-type="received">
<day>18</day>
<month>6</month>
<year>2025</year>
</date>
<date date-type="accepted">
<day>30</day>
<month>7</month>
<year>2025</year>
</date>
</history>
<permissions>
<copyright-statement>&#x00A9; 2025 The Authors.</copyright-statement>
<copyright-year>2025</copyright-year>
<copyright-holder>Published by Tech Science Press.</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_CMC_69240.pdf"></self-uri>
<abstract>
<p>In the age of big data, ensuring data privacy while enabling efficient encrypted data retrieval has become a critical challenge. Traditional searchable encryption schemes face difficulties in handling complex semantic queries. Additionally, they typically rely on honest but curious cloud servers, which introduces the risk of repudiation. Furthermore, the combined operations of search and verification increase system load, thereby reducing performance. Traditional verification mechanisms, which rely on complex hash constructions, suffer from low verification efficiency. To address these challenges, this paper proposes a blockchain-based contextual semantic-aware ciphertext retrieval scheme with efficient verification. Building on existing single and multi-keyword search methods, the scheme uses vector models to semantically train the dataset, enabling it to retain semantic information and achieve context-aware encrypted retrieval, significantly improving search accuracy. Additionally, a blockchain-based updatable master-slave chain storage model is designed, where the master chain stores encrypted keyword indexes and the slave chain stores verification information generated by zero-knowledge proofs, thus balancing system load while improving search and verification efficiency. Finally, an improved non-interactive zero-knowledge proof mechanism is introduced, reducing the computational complexity of verification and ensuring efficient validation of search results. Experimental results demonstrate that the proposed scheme offers stronger security, balanced overhead, and higher search verification efficiency.</p>
</abstract>
<kwd-group kwd-group-type="author">
<kwd>Searchable encryption</kwd>
<kwd>blockchain</kwd>
<kwd>context semantic awareness</kwd>
<kwd>zero-knowledge proof</kwd>
</kwd-group>
<funding-group>
<award-group id="awg1">
<funding-source>National Natural Science Foundation of China</funding-source>
<award-id>62262073</award-id>
</award-group>
<award-group id="awg2">
<funding-source>Yunnan Provincial</funding-source>
<award-id>YNWR-QNBJ-2019-237</award-id>
</award-group>
<award-group id="awg3">
<funding-source>Yunnan Provincial Major Science</funding-source>
<award-id>202402AD080002</award-id>
</award-group>
</funding-group>
</article-meta>
</front>
<body>
<sec id="s1">
<label>1</label>
<title>Introduction</title>
<p>With the proliferation of cloud computing, data storage and management have become increasingly convenient and efficient. Cloud storage provides users with easy storage and access services, but it also raises data privacy and security concerns. The devices directly used to store data are often untrusted third-party cloud servers, prompting users to encrypt their data before uploading it to the server. While this approach mitigates the risks of malicious attacks from the server, it also introduces new challenges for data retrieval. Efficient and rapid retrieval from encrypted data remains a significant issue worthy of further research. To address this, Searchable Encryption (SE) [<xref ref-type="bibr" rid="ref-1">1</xref>] technology has emerged, allowing users to perform keyword searches over encrypted data without revealing the original data content, thereby achieving secure data retrieval.</p>
<p>Traditional SE schemes generally support only exact matching for single or multiple keywords, which makes them inadequate for complex semantic queries involving contextual relationships [<xref ref-type="bibr" rid="ref-2">2</xref>&#x2013;<xref ref-type="bibr" rid="ref-4">4</xref>]. For example, in a computer science context, when using keywords related to &#x201C;nerve,&#x201D; the retrieval engine often performs simple keyword matching based on a predefined lexicon, resulting in search results that may include content from various fields, such as neurological diseases in medicine, neural networks in computer science, and nerve cells in biology. However, what we actually wish to retrieve are data related to computer neural networks. Such results clearly do not meet expectations, as traditional SE techniques cannot accurately perform searches based on the semantic context of the keywords, leading to decreased efficiency and precision in retrieval.</p>
<p>Since SE schemes rely on honest-but-curious cloud servers, there is a high risk of data leakage and dispute between transacting parties. Therefore, researchers have begun to explore the integration of blockchain technology with SE to address these security concerns [<xref ref-type="bibr" rid="ref-5">5</xref>,<xref ref-type="bibr" rid="ref-6">6</xref>]. However, existing schemes typically adopt a single-chain architecture to store indices and perform both search and verification operations, resulting in high on-chain load and difficulties in handling large-scale data storage and dynamic updates [<xref ref-type="bibr" rid="ref-7">7</xref>,<xref ref-type="bibr" rid="ref-8">8</xref>]. Thus, there is an urgent need for a concise and efficient architecture that can support large-scale index storage and updating while ensuring balanced system load and enabling efficient search and verification [<xref ref-type="bibr" rid="ref-9">9</xref>&#x2013;<xref ref-type="bibr" rid="ref-11">11</xref>]. A promising approach is to allocate system workloads and decouple the architecture design of different functional modules to address the performance bottlenecks of previous single-chain solutions.</p>
<p>In SE systems, data users not only expect correctness and completeness of the search results but also require consistency, meaning that the data have not been tampered with. However, existing verification mechanisms, such as homomorphic MACs [<xref ref-type="bibr" rid="ref-9">9</xref>], Merkle hash trees [<xref ref-type="bibr" rid="ref-12">12</xref>], and trusted third-party entities [<xref ref-type="bibr" rid="ref-4">4</xref>,<xref ref-type="bibr" rid="ref-13">13</xref>], can theoretically ensure data integrity but often rely on frequent interactions between the cloud server and the user in practice. These multi-round interactive verifications significantly increase time and computational costs, making them unsuitable for real-time requirements in large-scale data retrieval. Hence, there is an urgent need for a solution that can reduce interaction frequency while ensuring the accuracy of search results and maintaining verification efficiency. Zero-knowledge succint non-interactive arguments of knowledge (zk-SNARK) [<xref ref-type="bibr" rid="ref-14">14</xref>], as an advanced zero-knowledge proof technology, provides a potential solution by enabling efficient verification of the correctness of search results without disclosing any sensitive information. However, the polynomial commitment schemes offered by existing zk-SNARK technology are not applicable to searchable encryption.</p>
<p>To address these challenges, this paper proposes a blockchain-based efficient verification scheme for context semantic-aware ciphertext retrieval (BC-VSCR). This scheme employs a word2vec model to retain semantic information in encrypted data, and uses blockchain technology for storing and verifying encrypted indices to prevent unfair transactions among data-sharing participants. It also introduces a fair trade contract to address unfaithful execution by the cloud server. Moreover, a verification scheme supporting dynamic updates is constructed based on zk-SNARK. Due to its lightweight and non-interactive nature, it is highly suitable for verification on the slave chain without generating significant communication or computational overhead, ensuring the correctness and integrity of the search results. The main contributions of this paper are as follows:
<list list-type="bullet">
<list-item>
<p>We propose a context semantic-aware ciphertext retrieval scheme. The word vector model is applied during the index construction process for encrypted datasets to capture semantic relationships between words, generating encrypted word vector indices and thus improving retrieval accuracy.</p></list-item>
<list-item>
<p>An updatable blockchain-based master-slave chain storage model for searchable encryption is designed. The master chain stores encrypted keyword indices, while the slave chain stores verification information generated by zero-knowledge proofs. By separating the search and verification processes, this approach not only balances the system load and avoids the bottleneck of a single-chain design but also significantly enhances both search and verification efficiencies, while ensuring fair data transactions.</p></list-item>
<list-item>
<p>We propose an improved verification mechanism that combines blockchain with an enhanced non-interactive zero-knowledge proof protocol, simplifying the snark proof generation process and effectively reducing the computational complexity of search result verification, achieving efficient and secure verification of search results.</p></list-item>
</list></p>
</sec>
<sec id="s2">
<label>2</label>
<title>Related Work</title>
<p>Searchable encryption (SE) was first introduced by Song et al. [<xref ref-type="bibr" rid="ref-1">1</xref>] in 2000, employing a single keyword search method without index structures for encrypted data retrieval. However, due to the lack of support from an index structure, the search overhead was significant. As research progressed, various SE schemes were proposed to meet different needs. Goh [<xref ref-type="bibr" rid="ref-15">15</xref>] constructed a secure index model, defined security patterns, used pseudorandom numbers to generate secure indices, and stored document keywords in Bloom filters to enable efficient ciphertext search. In 2006, Curtmola et al. [<xref ref-type="bibr" rid="ref-16">16</xref>] introduced the leakage model and demonstrated that, apart from leakage functions, searchable symmetric encryption (SSE) does not reveal other information through Real and Ideal games. During this period, many researchers [<xref ref-type="bibr" rid="ref-17">17</xref>&#x2013;<xref ref-type="bibr" rid="ref-19">19</xref>] proposed optimizations to improve the performance of SSE. However, these works largely focused on single-keyword ciphertext search, which could not meet the demand for multi-keyword searches. As a result, numerous multi-keyword SE schemes were introduced [<xref ref-type="bibr" rid="ref-4">4</xref>,<xref ref-type="bibr" rid="ref-10">10</xref>,<xref ref-type="bibr" rid="ref-20">20</xref>,<xref ref-type="bibr" rid="ref-21">21</xref>], supporting multi-keyword search requests. However, these schemes mainly relied on keyword frequency statistics, neglecting the importance of contextual semantics.</p>
<p>In recent years, with the evolution of machine learning and related technologies, significant advances have been made in SE focused on contextual semantics, resulting in many innovative solutions. Cao et al. [<xref ref-type="bibr" rid="ref-22">22</xref>] first proposed a scheme to solve the multi-keyword ranked search problem over encrypted cloud data (MRSE), employing inner product similarity and coordinate matching to evaluate the relevance scores between keywords and files. Fu et al. [<xref ref-type="bibr" rid="ref-23">23</xref>] further utilized conceptual graphs (CG) as knowledge representation tools to convert CG into linear forms for quantitative analysis. However, this scheme remained at the level of fuzzy search and did not achieve true semantic search over ciphertext. Consequently, their team later attempted to use machine learning tools such as BERT [<xref ref-type="bibr" rid="ref-24">24</xref>] to enhance understanding of text semantics, proposing secure and semantic retrieval schemes based on BERT (SSRB), achieving promising retrieval results. Subsequently, more machine learning methods were applied to context semantic-aware search. Dai et al. [<xref ref-type="bibr" rid="ref-25">25</xref>] extracted features from document collections using the Doc2Vec model and performed semantic search based on these features, significantly improving search accuracy and efficiency while supporting dynamic updates to document collections. Zhou et al. [<xref ref-type="bibr" rid="ref-26">26</xref>] proposed two schemes, AF-SRSE and EF-SRSE, for enhancing privacy-preserving semantic-aware search in cloud environments. The former prioritized search accuracy using the Latent Dirichlet Allocation (LDA) model and bisecting k-means clustering, suitable for high-precision search scenarios, while the latter optimized the search structure, sacrificing some accuracy to improve efficiency. Ge et al. [<xref ref-type="bibr" rid="ref-27">27</xref>] introduced lookup tables and a two-stage query strategy, enabling not only the verification of whether the returned files correctly contained the query phrases but also ensuring that all files containing the phrase were returned. Chen et al. [<xref ref-type="bibr" rid="ref-28">28</xref>] proposed a context-aware semantically extensible searchable symmetric encryption scheme based on the Word2vec model, using the original dataset to train the Word2vec model and achieve semantic expansion of query keywords, thus significantly improving search accuracy and efficiency. The scheme also employed a two-tier index structure to improve search efficiency and provided security guarantees under known ciphertext and background models. However, this scheme required re-indexing during dynamic updates, potentially introducing additional computational overhead in frequently updated scenarios. Liu et al. [<xref ref-type="bibr" rid="ref-29">29</xref>] proposed an LDA topic model-based scheme, incorporating an <inline-formula id="ieqn-1"><mml:math id="mml-ieqn-1"><mml:mi>&#x03C9;</mml:mi></mml:math></inline-formula>-path balanced search tree index and a filter threshold lookup table for semantic retrieval. Hou et al. [<xref ref-type="bibr" rid="ref-30">30</xref>] introduced a lattice-based semantic-aware searchable encryption scheme, incorporating fully homomorphic encryption and proxy re-encryption technologies to support multi-user environments with multi-keyword and semantic-aware searches.</p>
<p>The aforementioned search operations are executed by the cloud server, and dishonest cloud servers may produce fraudulent search results or results aligned with specific business objectives. Therefore, verifying search results and addressing dishonest behavior by both parties are equally crucial. While the schemes in [<xref ref-type="bibr" rid="ref-26">26</xref>,<xref ref-type="bibr" rid="ref-31">31</xref>] included verification mechanisms, they were limited to multi-keyword search. Li et al. [<xref ref-type="bibr" rid="ref-31">31</xref>] designed basic and enhanced verification mechanisms based on semantic understanding using the LDA topic model to ensure the correctness and completeness of search results. However, these schemes still could not resolve fairness issues in transactions.</p>
<p>The emergence of blockchain offers a new perspective for addressing these challenges. Utilizing the traceable and tamper-proof features of blockchain, fairness between transacting parties can be ensured. In situations such as a user refusing to pay or the cloud server being dishonest, smart contracts on the blockchain can provide immediate feedback and post-event handling. As a result, several researchers have explored blockchain-based searchable encryption. Yang et al. [<xref ref-type="bibr" rid="ref-32">32</xref>] proposed a secure heuristic semantic search scheme verified by blockchain. The primary advantage of this scheme lies in combining privacy-preserving non-linear word matching with blockchain consensus mechanisms, ensuring high accuracy in search results even in untrusted environments, while enabling a fair payment mechanism through blockchain technology. Huang et al. [<xref ref-type="bibr" rid="ref-5">5</xref>] effectively reduced the risk of data leakage by combining blockchain with multi-cloud storage technology and adopted a tree structure index for efficient ciphertext retrieval. Additionally, the use of smart contracts ensured fairness in data transactions. Although the introduction of blockchain technology in the above scheme enhances the trustworthiness and verifiability of data, it also introduces additional storage and computational overhead, which becomes more significant, especially when dealing with large-scale transactions or complex smart contracts. Moreover, these schemes still fail to effectively verify the correctness of search results. Thus, existing SE schemes often suffer from incomplete semantic search, difficulty in verification, and lack of fairness. In response, this paper proposes a blockchain-based efficient verification scheme for context semantic-aware ciphertext retrieva scheme.</p>
</sec>
<sec id="s3">
<label>3</label>
<title>Preliminary Knowledge</title>
<sec id="s3_1">
<label>3.1</label>
<title>Word2vec Model</title>
<p>When handling text data, the Word2vec model embeds words into a high-dimensional vector space, capturing the semantic relationships between words [<xref ref-type="bibr" rid="ref-33">33</xref>]. There are two main training methods for Word2vec: Skip-gram and Continuous Bag of Words (CBOW). In the Skip-gram model, the goal is to predict surrounding words based on a given word. For each word <inline-formula id="ieqn-2"><mml:math id="mml-ieqn-2"><mml:msub><mml:mi>w</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula>, a fixed-size window <inline-formula id="ieqn-3"><mml:math id="mml-ieqn-3"><mml:mi>c</mml:mi></mml:math></inline-formula> is set, where the words within the window are considered the context of that word. In BC-VSCR, Skip-gram is fully utilized to convert text into word vectors, and k-means clustering is used to cluster these vectors. The objective function is minimized to determine each cluster center, iteratively updating the cluster centers and assigning points to the nearest cluster center to minimize the objective function.</p>
</sec>
<sec id="s3_2">
<label>3.2</label>
<title>Adaptive Hash Indexing and Incremental Index Updatel</title>
<p>The adaptive hash indexing mechanism works as follows: if a word <inline-formula id="ieqn-4"><mml:math id="mml-ieqn-4"><mml:msub><mml:mi>w</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula> has a cluster index, we first access the cluster center of <inline-formula id="ieqn-5"><mml:math id="mml-ieqn-5"><mml:msub><mml:mi>w</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula>, retrieve the primary key ID from the index, and use this ID to fetch the corresponding data from the primary key index tree. When a cluster center is frequently queried, the associated data items are stored in a separate hash table, significantly speeding up subsequent queries. Due to its dynamic nature, the adaptive hash index can effectively reduce hash collisions and avoid the potential query performance degradation issues that may arise in the master chain index.</p>
<p>Incremental index updating refers to updating only the changed part of the data rather than regenerating the entire index each time the data changes. Let <inline-formula id="ieqn-6"><mml:math id="mml-ieqn-6"><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mi>D</mml:mi></mml:math></inline-formula> be the set of data changes, and <inline-formula id="ieqn-7"><mml:math id="mml-ieqn-7"><mml:mrow><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mi>I</mml:mi></mml:mrow></mml:math></inline-formula> be the incremental index generated by <inline-formula id="ieqn-8"><mml:math id="mml-ieqn-8"><mml:mrow><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mi>D</mml:mi></mml:mrow></mml:math></inline-formula>. The new index can then be represented as <inline-formula id="ieqn-9"><mml:math id="mml-ieqn-9"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mrow><mml:mtext>new</mml:mtext></mml:mrow></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mrow><mml:mtext>old</mml:mtext></mml:mrow></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mi>I</mml:mi></mml:math></inline-formula>. By handling only the changed part, re-indexing the entire dataset can be avoided, significantly improving update efficiency. Once the index is adjusted, the corresponding hash function also needs to be adapted. Thus, adaptive hash indexing dynamically adjusts the hash function to accommodate changes in data and query demands. Suppose there is a hash function <inline-formula id="ieqn-10"><mml:math id="mml-ieqn-10"><mml:mi>h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>; when the data changes, the hash function can be adjusted, i.e., <inline-formula id="ieqn-11"><mml:math id="mml-ieqn-11"><mml:mi>h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo stretchy="false">&#x2192;</mml:mo><mml:msup><mml:mi>h</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, to adapt to the new data distribution.</p>
</sec>
<sec id="s3_3">
<label>3.3</label>
<title>zk-SNARK</title>
<p>Zero-Knowledge Succinct Non-Interactive Argument of Knowledge (zk-SNARK) is a zero-knowledge proof technology characterized by its succinctness, non-interactivity, and efficiency. It allows one to prove the truth of a statement without revealing any data content. Typically, zk-SNARK transforms the computation to be proven into a circuit <italic>C</italic>, consisting of logic gates that describe all operations during the computation process. Then, a generator algorithm <italic>G</italic> is used to generate public parameters <inline-formula id="ieqn-12"><mml:math id="mml-ieqn-12"><mml:mi>p</mml:mi></mml:math></inline-formula> (for use by both prover and verifier) and a verification key <inline-formula id="ieqn-13"><mml:math id="mml-ieqn-13"><mml:mi>v</mml:mi><mml:mi>k</mml:mi></mml:math></inline-formula> (used by the verifier): <inline-formula id="ieqn-14"><mml:math id="mml-ieqn-14"><mml:mrow><mml:mo>(</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi>v</mml:mi><mml:mi>k</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>G</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:msup><mml:mn>1</mml:mn><mml:mi>&#x03BB;</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:mi>C</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. When verification is needed, the prover uses the proving algorithm <italic>P</italic>, based on the public parameters p and private input <inline-formula id="ieqn-15"><mml:math id="mml-ieqn-15"><mml:mi>w</mml:mi></mml:math></inline-formula>, to generate a proof <inline-formula id="ieqn-16"><mml:math id="mml-ieqn-16"><mml:mi>&#x03C0;</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>P</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>w</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. The verifier uses the verification algorithm <italic>V</italic> and the verification key <inline-formula id="ieqn-17"><mml:math id="mml-ieqn-17"><mml:mi>v</mml:mi><mml:mi>k</mml:mi></mml:math></inline-formula> to verify the correctness of the computation based on public input <inline-formula id="ieqn-18"><mml:math id="mml-ieqn-18"><mml:mi>x</mml:mi></mml:math></inline-formula> and proof <inline-formula id="ieqn-19"><mml:math id="mml-ieqn-19"><mml:mi>&#x03C0;</mml:mi></mml:math></inline-formula>. However, directly constructing zk-SNARKs for such scenarios is challenging; multiple modules are needed to build the proof system, followed by a general transformation to convert an ideal model into a zk-SNARK that works in real-world scenarios. Polynomial commitment schemes are essential in any zero-knowledge proof system, and their development largely determines the iteration process of zero-knowledge proof systems.</p>
<p>KZG [<xref ref-type="bibr" rid="ref-34">34</xref>] (based on elliptic curves) and hash function-based protocols [<xref ref-type="bibr" rid="ref-35">35</xref>] are the most common polynomial commitment schemes today. KZG polynomial commitments feature low verification costs and constant-sized evaluation proofs for univariate polynomial verification. However, their generation process depends on a trusted setup, and the computation for the prover is intensive, requiring extensive Fast Fourier Transform (FFT) and Multi-Scalar Multiplication (MSM) calculations. Elliptic curve-based polynomial commitments (such as Bulletproofs) offer homomorphic properties, support efficient batch processing, and significantly reduce verification time, though they produce larger proof sizes. Hash function-based polynomial commitments (such as FRI) [<xref ref-type="bibr" rid="ref-36">36</xref>] do not require MSM operations, support recursive computation, balance proof and verification costs, and have quantum security. However, they lack homomorphic hiding, which limits their application in specific scenarios. For text data, directly applying FRI polynomial commitments may face challenges. However, in the BC-VSCR scheme, by processing text data to generate word vectors, polynomial commitments can be applied effectively, making the process simpler and more efficient. Due to zk-SNARK&#x2019;s advantages of succinct proofs, efficient verification, and non-interactivity, it is suitable for scenarios like blockchain where efficient verification is required. If the server behaves maliciously, the client can detect it by verifying the succinct proof.</p>
</sec>
</sec>
<sec id="s4">
<label>4</label>
<title>BC-VSCR Scheme Overview</title>
<sec id="s4_1">
<label>4.1</label>
<title>System Model</title>
<p>To achieve secure and efficient encrypted data retrieval, we constructed a context semantic-aware ciphertext retrieval system model based on blockchain technology. The model includes several modules and roles: Data Owner (DO), Data User (DU), Blockchain (BC), and Cloud Server (CS). The following describes the workflow and interactions among these roles in detail. In the system model, the DO first processes the plaintext dataset <italic>D</italic> to generate the encrypted dataset <italic>C</italic> and the encrypted index <italic>I</italic>. The encrypted index is then stored on the BC, while the encrypted data are uploaded to the CS. When the DU needs to perform a query, a query request <italic>Q</italic> is generated and sent to the DO. The DO then generates a trapdoor <italic>T</italic> based on <italic>Q</italic> and returns it to the DU. The DU sends the trapdoor <italic>T</italic> to the cloud server, which searches the encrypted dataset <italic>C</italic> based on <italic>T</italic> and returns the search result <italic>R</italic> to the DU. The DU then decrypts the result and verifies its integrity and correctness. The system model is illustrated in <xref ref-type="fig" rid="fig-1">Fig. 1</xref>.</p>
<fig id="fig-1">
<label>Figure 1</label>
<caption>
<title>System model</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-1.tif"/>
</fig>
</sec>
<sec id="s4_2">
<label>4.2</label>
<title>Formal Definitions</title>
<p>To describe the key steps and corresponding algorithm processes of the proposed scheme, this section provides formal definitions for each module.</p>
<p><inline-formula id="ieqn-20"><mml:math id="mml-ieqn-20"><mml:mi>K</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><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:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Key Generation Algorithm. DO runs this algorithm, taking the security parameter <inline-formula id="ieqn-21"><mml:math id="mml-ieqn-21"><mml:mi>&#x03BB;</mml:mi></mml:math></inline-formula> as input, and outputs the key set <inline-formula id="ieqn-22"><mml:math id="mml-ieqn-22"><mml:mi>K</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mi>S</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mi>y</mml:mi><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>. Here, <italic>S</italic> is a randomly generated vector of dimension <inline-formula id="ieqn-23"><mml:math id="mml-ieqn-23"><mml:mi>&#x03BB;</mml:mi></mml:math></inline-formula>, <inline-formula id="ieqn-24"><mml:math id="mml-ieqn-24"><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-25"><mml:math id="mml-ieqn-25"><mml:msub><mml:mi>M</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula> are two invertible <inline-formula id="ieqn-26"><mml:math id="mml-ieqn-26"><mml:mi>n</mml:mi><mml:mo>&#x00A0;</mml:mo><mml:mo>&#x00D7;</mml:mo><mml:mi>n</mml:mi></mml:math></inline-formula> matrices, and <inline-formula id="ieqn-27"><mml:math id="mml-ieqn-27"><mml:mi>k</mml:mi><mml:mi>y</mml:mi></mml:math></inline-formula> is the symmetric key used for data encryption. After generating the keys, DO deploys the verification key <inline-formula id="ieqn-28"><mml:math id="mml-ieqn-28"><mml:mi>v</mml:mi><mml:mi>k</mml:mi></mml:math></inline-formula> on the blockchain <inline-formula id="ieqn-29"><mml:math id="mml-ieqn-29"><mml:mrow><mml:mtext>B</mml:mtext></mml:mrow><mml:msub><mml:mrow><mml:mtext>C</mml:mtext></mml:mrow><mml:mrow><mml:mrow><mml:mtext>2</mml:mtext></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula> for subsequent index and result verification.</p>
<p><inline-formula id="ieqn-30"><mml:math id="mml-ieqn-30"><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>B</mml:mi><mml:mi>u</mml:mi><mml:mi>i</mml:mi><mml:mi>l</mml:mi><mml:mi>d</mml:mi><mml:mi>I</mml:mi><mml:mi>n</mml:mi><mml:mi>d</mml:mi><mml:mi>e</mml:mi><mml:mi>x</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>K</mml:mi><mml:mo>,</mml:mo><mml:mi>W</mml:mi><mml:mo>,</mml:mo><mml:mi>D</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Index Construction Algorithm. The DO runs this algorithm with the key <italic>K</italic>, keyword dictionary <italic>W</italic>, and document set <italic>D</italic> as inputs. Keywords are extracted from the document set <italic>D</italic> to form the dictionary <inline-formula id="ieqn-31"><mml:math id="mml-ieqn-31"><mml:mi>W</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>. The word vectors are clustered using the k-means algorithm, generating the cluster center set <italic>G</italic>. The secure kNN algorithm is then used to encrypt the indices, resulting in the master chain encrypted index <inline-formula id="ieqn-32"><mml:math id="mml-ieqn-32"><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> and slave chain encrypted index <inline-formula id="ieqn-33"><mml:math id="mml-ieqn-33"><mml:msub><mml:mi>I</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula>, ensuring that the master chain is used for retrieval and the slave chain for verification.</p>
<p><inline-formula id="ieqn-34"><mml:math id="mml-ieqn-34"><mml:mi>C</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mrow><mml:mtext>Encrypt</mml:mtext></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>K</mml:mi><mml:mo>,</mml:mo><mml:mi>D</mml:mi><mml:mo>,</mml:mo><mml:mi>&#x03B3;</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Data Encryption Algorithm. The DO runs this algorithm, taking <italic>K</italic> and set <italic>D</italic> as inputs, and outputs the ciphertext set <italic>C</italic>. Each document <inline-formula id="ieqn-35"><mml:math id="mml-ieqn-35"><mml:mi>d</mml:mi><mml:mo>&#x00A0;</mml:mo><mml:mo>&#x2208;</mml:mo><mml:mi>D</mml:mi></mml:math></inline-formula> is encrypted using the symmetric key <inline-formula id="ieqn-36"><mml:math id="mml-ieqn-36"><mml:mi>k</mml:mi><mml:mi>y</mml:mi></mml:math></inline-formula> and random number <inline-formula id="ieqn-37"><mml:math id="mml-ieqn-37"><mml:mi>&#x03BB;</mml:mi></mml:math></inline-formula>, generating the ciphertext set <italic>C</italic>. The ciphertext set <italic>C</italic> is stored on the cloud server CS, along with recording the contract address and API (Application Programming Interface) endpoint for future queries by the DU.</p>
<p><inline-formula id="ieqn-38"><mml:math id="mml-ieqn-38"><mml:mi>T</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mrow><mml:mtext>GenerateTrapdoor</mml:mtext></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>K</mml:mi><mml:mo>,</mml:mo><mml:mi>Q</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Trapdoor Generation Algorithm. DU runs this algorithm, taking the key <italic>K</italic> and query keyword set <italic>Q</italic> as inputs, and outputs the query trapdoor <italic>T</italic>. The DU hashes the keyword set <italic>Q</italic> using a hash function, then combines it with the key <italic>K</italic> to generate the query trapdoor <italic>T</italic>. A verification token is also generated, and both the search trapdoor <italic>T</italic> and verification token are sent to <inline-formula id="ieqn-39"><mml:math id="mml-ieqn-39"><mml:mrow><mml:mtext>B</mml:mtext></mml:mrow><mml:msub><mml:mrow><mml:mtext>C</mml:mtext></mml:mrow><mml:mrow><mml:mrow><mml:mtext>1</mml:mtext></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula>, triggering the verification contract and ensuring that the DU has deposited sufficient search fees.</p>
<p><inline-formula id="ieqn-40"><mml:math id="mml-ieqn-40"><mml:mi>R</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mrow><mml:mtext>Search</mml:mtext></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>T</mml:mi><mml:mo>,</mml:mo><mml:mi>C</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Search Algorithm. This algorithm is executed by the cloud server CS. It takes the query trapdoor <italic>T</italic>, ciphertext set <italic>C</italic>, and master chain index <inline-formula id="ieqn-41"><mml:math id="mml-ieqn-41"><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> as inputs, and outputs the search result set <italic>R</italic>. The CS performs a search over the ciphertext set <italic>C</italic> using <italic>T</italic> and <inline-formula id="ieqn-42"><mml:math id="mml-ieqn-42"><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula>, computes similarity scores, and returns the matched result <italic>R</italic> to <inline-formula id="ieqn-43"><mml:math id="mml-ieqn-43"><mml:mrow><mml:mtext>B</mml:mtext></mml:mrow><mml:msub><mml:mrow><mml:mtext>C</mml:mtext></mml:mrow><mml:mrow><mml:mrow><mml:mtext>1</mml:mtext></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula>. Before executing the search, the cloud server receives a verification broadcast from the slave chain <inline-formula id="ieqn-44"><mml:math id="mml-ieqn-44"><mml:mrow><mml:mtext>B</mml:mtext></mml:mrow><mml:msub><mml:mrow><mml:mtext>C</mml:mtext></mml:mrow><mml:mrow><mml:mrow><mml:mtext>2</mml:mtext></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula> to ensure that the DU&#x2019;s authorization and payment status have been verified.</p>
<p><inline-formula id="ieqn-45"><mml:math id="mml-ieqn-45"><mml:mi>v</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mrow><mml:mtext>Verify</mml:mtext></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>R</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Verification Algorithm. The DU invokes the smart contract API to run this algorithm, taking the search result <italic>R</italic> and the slave chain index <inline-formula id="ieqn-46"><mml:math id="mml-ieqn-46"><mml:msub><mml:mi>I</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula> as inputs to verify the search result, and outputs the verification result <inline-formula id="ieqn-47"><mml:math id="mml-ieqn-47"><mml:mi>v</mml:mi></mml:math></inline-formula>. If the verification is successful, <inline-formula id="ieqn-48"><mml:math id="mml-ieqn-48"><mml:mi>v</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula> is returned, and the result is sent back to the DU. If verification fails, both the CS and DU fees are refunded.</p>
<p><inline-formula id="ieqn-49"><mml:math id="mml-ieqn-49"><mml:msubsup><mml:mi>I</mml:mi><mml:mn>1</mml:mn><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mi>I</mml:mi><mml:mn>2</mml:mn><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:msubsup><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mrow><mml:mtext>Update</mml:mtext></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mi>D</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Index Update Algorithm. The DO runs this algorithm, taking the document set changes <inline-formula id="ieqn-50"><mml:math id="mml-ieqn-50"><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mi>D</mml:mi></mml:math></inline-formula>, <inline-formula id="ieqn-51"><mml:math id="mml-ieqn-51"><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula>, and <inline-formula id="ieqn-52"><mml:math id="mml-ieqn-52"><mml:msub><mml:mi>I</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula> as inputs. The document set and indices are synchronously updated using an incremental update mechanism, and the update status is synchronized to <inline-formula id="ieqn-53"><mml:math id="mml-ieqn-53"><mml:mrow><mml:mtext>B</mml:mtext></mml:mrow><mml:msub><mml:mrow><mml:mtext>C</mml:mtext></mml:mrow><mml:mrow><mml:mrow><mml:mtext>1</mml:mtext></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-54"><mml:math id="mml-ieqn-54"><mml:mrow><mml:mtext>B</mml:mtext></mml:mrow><mml:msub><mml:mrow><mml:mtext>C</mml:mtext></mml:mrow><mml:mrow><mml:mrow><mml:mtext>2</mml:mtext></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula>, resulting in updated master chain index <inline-formula id="ieqn-55"><mml:math id="mml-ieqn-55"><mml:msubsup><mml:mi>I</mml:mi><mml:mn>1</mml:mn><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:msubsup></mml:math></inline-formula> and slave chain index <inline-formula id="ieqn-56"><mml:math id="mml-ieqn-56"><mml:msubsup><mml:mi>I</mml:mi><mml:mn>2</mml:mn><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:msubsup></mml:math></inline-formula>.</p>
<p><xref ref-type="fig" rid="fig-2">Fig. 2</xref> illustrates the workflow of the algorithms in the proposed scheme.</p>
<fig id="fig-2">
<label>Figure 2</label>
<caption>
<title>Time series diagram</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-2.tif"/>
</fig>
</sec>
<sec id="s4_3">
<label>4.3</label>
<title>Contextual Semantic Similarity Calculation Method</title>
<sec id="s4_3_1">
<label>4.3.1</label>
<title>Word Vector Model Construction Based on Negative Sampling</title>
<p>In the word vector model of BC-VSCR, we employ the word2vec approach based on negative sampling for word vector training. The target word is treated as a positive sample, while other words are treated as negative samples. Due to the large number of negative samples, we use a negative sampling algorithm to simplify the computation process. The core idea of negative sampling is to optimize the model by selecting only a small subset of negative samples to reduce computational complexity, rather than traversing all possible words. Before sampling, we divide a line segment of length 1 into <italic>M</italic> equal parts. Next, each word <italic>w</italic> in the vocabulary <italic>W</italic> is mapped to the [0, 1] interval according to its occurrence frequency. Each of the <italic>M</italic> segments will fall on the line segment corresponding to a word. The word corresponding to the segment of the sampled position is our negative sample <inline-formula id="ieqn-57"><mml:math id="mml-ieqn-57"><mml:mi>N</mml:mi><mml:mi>E</mml:mi><mml:mi>G</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. The occurrence count of each word <italic>w</italic> in the corpus, <inline-formula id="ieqn-58"><mml:math id="mml-ieqn-58"><mml:mrow><mml:mtext>count</mml:mtext></mml:mrow><mml:mspace width="negativethinmathspace"></mml:mspace><mml:mrow><mml:mo>(</mml:mo><mml:mi>w</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, is normalized to obtain the probability distribution for each word:
<disp-formula id="eqn-1"><label>(1)</label><mml:math id="mml-eqn-1" display="block"><mml:mi>P</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>w</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mrow><mml:mtext>count</mml:mtext></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>w</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:munder><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>u</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mi>W</mml:mi></mml:mrow></mml:munder><mml:mrow><mml:mtext>count</mml:mtext></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>u</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:math></disp-formula></p>
<p>Subsequently, we map each word in the vocabulary to a segment on the interval [0, 1], with the length of the segment being proportional to the frequency of the word&#x2019;s occurrence. Words with higher frequencies occupy larger portions of the interval space. During the mapping process, we assume the initial node to be <inline-formula id="ieqn-59"><mml:math id="mml-ieqn-59"><mml:msub><mml:mi>l</mml:mi><mml:mn>0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>, and define the position of the <inline-formula id="ieqn-60"><mml:math id="mml-ieqn-60"><mml:mi>i</mml:mi></mml:math></inline-formula>-th node as <inline-formula id="ieqn-61"><mml:math id="mml-ieqn-61"><mml:msub><mml:mi>l</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>l</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mi>P</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. Words in the vocabulary are subsequently mapped to an interval set <inline-formula id="ieqn-62"><mml:math id="mml-ieqn-62"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi>l</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>l</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>]</mml:mo></mml:mrow><mml:msubsup><mml:mo fence="false" stretchy="false">}</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>N</mml:mi></mml:msubsup></mml:math></inline-formula>. Then, an equidistant segmentation is introduced over the interval [0, 1], resulting in division points <inline-formula id="ieqn-63"><mml:math id="mml-ieqn-63"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>m</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:msubsup><mml:mo fence="false" stretchy="false">}</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mi>M</mml:mi></mml:msubsup></mml:math></inline-formula>. To ensure a sufficient granularity of segmentation, <inline-formula id="ieqn-64"><mml:math id="mml-ieqn-64"><mml:mrow><mml:mtext>M</mml:mtext></mml:mrow><mml:mo>&#x226B;</mml:mo><mml:mrow><mml:mtext>N</mml:mtext></mml:mrow></mml:math></inline-formula> must hold. As a result, the internal segmentation points <inline-formula id="ieqn-65"><mml:math id="mml-ieqn-65"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>m</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:msubsup><mml:mo fence="false" stretchy="false">}</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mi>M</mml:mi></mml:msubsup></mml:math></inline-formula> are projected onto a non-equidistant partition, establishing a mapping between <inline-formula id="ieqn-66"><mml:math id="mml-ieqn-66"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>m</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:msubsup><mml:mo fence="false" stretchy="false">}</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mi>M</mml:mi></mml:msubsup></mml:math></inline-formula> and words <inline-formula id="ieqn-67"><mml:math id="mml-ieqn-67"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:msubsup><mml:mo fence="false" stretchy="false">}</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mi>N</mml:mi></mml:msubsup></mml:math></inline-formula>. Finally, negative samples <inline-formula id="ieqn-68"><mml:math id="mml-ieqn-68"><mml:mi>N</mml:mi><mml:mi>E</mml:mi><mml:mi>G</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>k</mml:mi></mml:msub></mml:math></inline-formula> are chosen by selecting points from the <italic>M</italic> segments, with corresponding words acting as negative samples.</p>
<p>These negative samples are subsequently used to optimize the model parameters, allowing the model to better distinguish the target word from randomly chosen negative words during training. In the CBOW model, the target word is predicted based on its surrounding context. Given the context, the model learns the word vectors through training, optimizing parameters to predict the target word&#x2019;s vector effectively. This model consists of an input layer, a projection layer, and an output layer, and it uses backpropagation to adjust its parameters. Conversely, the Skip-Gram model aims to predict the context given the target word, adjusting the word vector representation by maximizing the co-occurrence probability between the target word and the context words. Similar to CBOW, the Skip-Gram model includes an input layer, a projection layer, and an output layer, and utilizes stochastic gradient ascent for parameter updates. By leveraging the Word2Vec model, we can effectively capture the semantic relationships among words, thereby enhancing the accuracy of encrypted data retrieval. The process of constructing the word vector model is shown in <xref ref-type="fig" rid="fig-3">Fig. 3</xref>.</p>
<fig id="fig-3">
<label>Figure 3</label>
<caption>
<title>Construction of word vector model</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-3.tif"/>
</fig>
</sec>
<sec id="s4_3_2">
<label>4.3.2</label>
<title>Topic Vector and Index Tree Construction</title>
<p>After obtaining word vectors, we utilize the k-means clustering algorithm to assign each word to its nearest cluster center. The assignment minimizes the Euclidean distance between the word vector <inline-formula id="ieqn-69"><mml:math id="mml-ieqn-69"><mml:msub><mml:mi>x</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula> and the cluster center <inline-formula id="ieqn-70"><mml:math id="mml-ieqn-70"><mml:msub><mml:mi>y</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math></inline-formula>, calculated as follows:
<disp-formula id="eqn-2"><label>(2)</label><mml:math id="mml-eqn-2" display="block"><mml:mi>d</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi>x</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>y</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msqrt><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:munderover><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi>x</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>y</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:msqrt></mml:math></disp-formula></p>
<p>The cluster centers are iteratively recalculated by averaging all word vectors within each cluster, and the algorithm converges when the positions of all cluster centers no longer change. At this point, word vectors are partitioned into several clusters, each representing a distinct topic. The quality of clustering is typically evaluated using the silhouette coefficient, which ranges from &#x2212;1 to 1. A higher silhouette coefficient, closer to 1, indicates better clustering quality, as it suggests that the word vectors are well-matched to their own cluster and poorly matched to neighboring clusters.</p>
<p>The clustering results of each word vector are mapped to their corresponding topic words. Using each topic word <inline-formula id="ieqn-71"><mml:math id="mml-ieqn-71"><mml:msub><mml:mi>T</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula> as the root node, we construct an index tree that stores not only the topic word <inline-formula id="ieqn-72"><mml:math id="mml-ieqn-72"><mml:msub><mml:mi>T</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula> itself but also its associated word vectors and document information <inline-formula id="ieqn-73"><mml:math id="mml-ieqn-73"><mml:msub><mml:mi>D</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula>. Each leaf node can be regarded as an independent index unit. The constructed index is then stored on the BC-VSCR master chain, encompassing all semantic information associated with a specific topic word.</p>
</sec>
<sec id="s4_3_3">
<label>4.3.3</label>
<title>Semantic Similarity Calculation</title>
<p>During the retrieval process, to evaluate the relevance between the query keywords and the documents, we use a similarity scoring method. The similarity score is calculated by taking the inner product between the query vector <italic>T</italic> and the document index vector <italic>I</italic>, as follows:
<disp-formula id="eqn-3"><label>(3)</label><mml:math id="mml-eqn-3" display="block"><mml:mtable columnalign="right left right left right left right left right left right left" rowspacing="3pt" columnspacing="0em 2em 0em 2em 0em 2em 0em 2em 0em 2em 0em" displaystyle="true"><mml:mtr><mml:mtd><mml:mi>s</mml:mi><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>r</mml:mi><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>T</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mo>{</mml:mo><mml:msup><mml:mrow><mml:msubsup><mml:mi>M</mml:mi><mml:mn>1</mml:mn><mml:mi>T</mml:mi></mml:msubsup><mml:mi>I</mml:mi></mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mrow><mml:msubsup><mml:mi>M</mml:mi><mml:mn>2</mml:mn><mml:mi>T</mml:mi></mml:msubsup><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>}</mml:mo></mml:mrow><mml:mi>T</mml:mi></mml:msup><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mrow><mml:mover><mml:msub><mml:mi>Q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mn>2</mml:mn><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mrow><mml:mover><mml:msub><mml:mi>Q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:msup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:msup></mml:mrow><mml:mi>T</mml:mi></mml:msup><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mrow><mml:mover><mml:msub><mml:mi>Q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>+</mml:mo><mml:msup><mml:mrow><mml:msup><mml:mi>I</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:mi>T</mml:mi></mml:msup><mml:msub><mml:mi>M</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mn>2</mml:mn><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mrow><mml:mover><mml:msub><mml:mi>Q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:msup><mml:mi>I</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:msup></mml:mrow><mml:mi>T</mml:mi></mml:msup><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>Q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>+</mml:mo><mml:msup><mml:mrow><mml:msup><mml:mi>I</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:mi>T</mml:mi></mml:msup><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>Q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mo>{</mml:mo><mml:msup><mml:mi>I</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mi>I</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>}</mml:mo></mml:mrow><mml:mi>T</mml:mi></mml:msup><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>Q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>Q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:mi>I</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>The result of the inner product, <inline-formula id="ieqn-74"><mml:math id="mml-ieqn-74"><mml:mi>s</mml:mi><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>r</mml:mi><mml:mi>e</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>T</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, is a real number that quantifies the degree of match between the query and the document. A higher score indicates a stronger correlation and higher relevance, directly reflecting the proximity of the word embeddings generated by Word2Vec. Additionally, before computing the similarity, we normalize the vectors to ensure that their magnitude is standardized to 1. This step prevents discrepancies in vector lengths from affecting the inner product results, ensuring that the calculated score reflects only the directional similarity between vectors rather than their lengths. After calculating the similarity scores for all documents, the system can identify the most relevant documents for each query and return them in ranked order to the user.</p>
</sec>
</sec>
<sec id="s4_4">
<label>4.4</label>
<title>Smart Contract Workflow</title>
<p>This solution adopts a dual-chain architecture, with the platform being the consortium blockchain Hyperledger Fabric 2.5.4. In this architecture, we typically establish Shim as an intermediary between the node and the chaincode. When the chaincode needs to perform read/write operations on the ledger, it sends the corresponding contract information to the node via the shim layer. This approach combines the main chain and the slave chain to implement the query and verification mechanisms for encrypted data.</p>
<p>Users initiate a query request via the DU-side SDK (Data User-side Software Development Kit), submitting a proposal containing the query keywords, query ID, and payment information, which is then sent to the endorsement nodes in Fabric for validation. The endorsement nodes verify the request&#x2019;s permissions, and once validated, the query request is recorded on the main chain. The endorsement nodes validate the transaction proposal, simulate the query execution, and interact with the chaincode Docker to ensure the legality of the query data. Once verified, the endorsement conclusions are returned to the DU.</p>
<p>After the query request is validated, it is submitted to both the main chain and the slave chain. The main chain stores the encrypted data index to ensure data integrity, while the slave chain records the verification information generated by the zero-knowledge proof to ensure the correctness of the query results. The query results are then returned to the user, and based on the payment conditions, the transaction status is updated. Payment and query transaction records are written to the blockchain.</p>
<p>Upon completion of the query, the smart contract updates the index data on both the main chain and the slave chain, ensuring the coordinated operation of the dual-chain architecture. Finally, all data is written to the blockchain via the slave chain&#x2019;s verification information. The detailed process is shown in <xref ref-type="fig" rid="fig-4">Fig. 4</xref>. Through the collaboration of the dual-chain architecture, efficient data querying, verification, and payment processes are achieved, ensuring high system performance and data immutability.</p>
<fig id="fig-4">
<label>Figure 4</label>
<caption>
<title>Smart contract workflowl</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-4.tif"/>
</fig>
</sec>
<sec id="s4_5">
<label>4.5</label>
<title>Verification Scheme</title>
<sec id="s4_5_1">
<label>4.5.1</label>
<title>zk-SNARK Design</title>
<p>We construct a succinct non-interactive argument of knowledge scheme with zero-knowledge properties by organically combining the Polynomial Commitment Scheme (PCS) with the FRI protocol and transforming the interactive proof into a non-interactive one using the Fiat-Shamir heuristic.</p>
<p>The PCS is utilized to generate a compact commitment for any polynomial <inline-formula id="ieqn-75"><mml:math id="mml-ieqn-75"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. Let <inline-formula id="ieqn-76"><mml:math id="mml-ieqn-76"><mml:mrow><mml:mi mathvariant="double-struck">F</mml:mi></mml:mrow></mml:math></inline-formula> be a finite field, and let <inline-formula id="ieqn-77"><mml:math id="mml-ieqn-77"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> be a polynomial defined over <inline-formula id="ieqn-78"><mml:math id="mml-ieqn-78"><mml:mrow><mml:mi mathvariant="double-struck">F</mml:mi></mml:mrow></mml:math></inline-formula>. The range of <inline-formula id="ieqn-79"><mml:math id="mml-ieqn-79"><mml:mrow><mml:mi mathvariant="double-struck">F</mml:mi></mml:mrow></mml:math></inline-formula> depends on the range of vector points extracted from the plaintext. The prover <italic>P</italic> first uses PCS to generate a compact commitment of the polynomial:
<disp-formula id="eqn-4"><label>(4)</label><mml:math id="mml-eqn-4" display="block"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:msub><mml:mi>W</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></disp-formula>where the size of the commitment <inline-formula id="ieqn-80"><mml:math id="mml-ieqn-80"><mml:msub><mml:mi>C</mml:mi><mml:mi>f</mml:mi></mml:msub></mml:math></inline-formula> is independent of the degree of the polynomial <inline-formula id="ieqn-81"><mml:math id="mml-ieqn-81"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. To enable efficient verification, we model the evaluation of the polynomial at sampling points in the plaintext as an inner product operation between two vectors. The modeling process is as follows:</p>
<p>Let <italic>N</italic> &#x003D; |<italic>H</italic>| be the size of a multiplicative subgroup, <inline-formula id="ieqn-82"><mml:math id="mml-ieqn-82"><mml:mrow><mml:mover><mml:mi>c</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>c</mml:mi><mml:mi>N</mml:mi></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> represent the coefficient vector of polynomial <inline-formula id="ieqn-83"><mml:math id="mml-ieqn-83"><mml:mi>f</mml:mi></mml:math></inline-formula>, and <inline-formula id="ieqn-84"><mml:math id="mml-ieqn-84"><mml:mrow><mml:mover><mml:mi>T</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>T</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>T</mml:mi><mml:mi>N</mml:mi></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> be the evaluation vector of the polynomial at point <inline-formula id="ieqn-85"><mml:math id="mml-ieqn-85"><mml:mi>t</mml:mi></mml:math></inline-formula>, where <inline-formula id="ieqn-86"><mml:math id="mml-ieqn-86"><mml:mi>a</mml:mi><mml:mo>,</mml:mo><mml:mi>b</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mi>H</mml:mi></mml:math></inline-formula>. According to the definition of the polynomial, we can represent <inline-formula id="ieqn-87"><mml:math id="mml-ieqn-87"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> as the inner product of these two vectors:<inline-formula id="ieqn-88"><mml:math id="mml-ieqn-88"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:msubsup><mml:mo movablelimits="false">&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mi>T</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula>. Using the evaluation of polynomial <inline-formula id="ieqn-89"><mml:math id="mml-ieqn-89"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> at the given point <inline-formula id="ieqn-90"><mml:math id="mml-ieqn-90"><mml:mi>t</mml:mi></mml:math></inline-formula>, we interpolate these vectors into polynomials <inline-formula id="ieqn-91"><mml:math id="mml-ieqn-91"><mml:mi>l</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> and <inline-formula id="ieqn-92"><mml:math id="mml-ieqn-92"><mml:mi>q</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> as follows:
<disp-formula id="eqn-5"><label>(5)</label><mml:math id="mml-eqn-5" display="block"><mml:mi>l</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>a</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mi>H</mml:mi></mml:mrow></mml:munder><mml:munderover><mml:mo>&#x220F;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:mrow><mml:mo>(</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>1</mml:mn><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>1</mml:mn><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>a</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:msub><mml:mi>a</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:mi>l</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>a</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></disp-formula>
<disp-formula id="eqn-6"><label>(6)</label><mml:math id="mml-eqn-6" display="block"><mml:mi>q</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>b</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mi>H</mml:mi></mml:mrow></mml:munder><mml:munderover><mml:mo>&#x220F;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:mrow><mml:mo>(</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>1</mml:mn><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>1</mml:mn><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>b</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>t</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:msub><mml:mi>b</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>b</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></disp-formula></p>
<p>Thus, <inline-formula id="ieqn-93"><mml:math id="mml-ieqn-93"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> can be further represented as:
<disp-formula id="eqn-7"><label>(7)</label><mml:math id="mml-eqn-7" display="block"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>a</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mi>H</mml:mi></mml:mrow></mml:munder><mml:mi>l</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>a</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x22C5;</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>a</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></disp-formula></p>
</sec>
<sec id="s4_5_2">
<label>4.5.2</label>
<title>Folding</title>
<p>In the zk-SNARK scheme design, inspired by the folding concept in the FRI protocol, we introduce the folding operation to progressively reduce the degree of the polynomial while retaining its structural properties, thus enabling more efficient proof generation.</p>
<p>The core idea of folding is to recursively reduce the degree of a high-degree polynomial. Let <inline-formula id="ieqn-94"><mml:math id="mml-ieqn-94"><mml:mi>&#x03C9;</mml:mi></mml:math></inline-formula> be an <inline-formula id="ieqn-95"><mml:math id="mml-ieqn-95"><mml:mi>n</mml:mi></mml:math></inline-formula>-th root of unity in a finite field <inline-formula id="ieqn-96"><mml:math id="mml-ieqn-96"><mml:mrow><mml:mi mathvariant="double-struck">F</mml:mi></mml:mrow></mml:math></inline-formula>, i.e., <inline-formula id="ieqn-97"><mml:math id="mml-ieqn-97"><mml:msup><mml:mi>&#x03C9;</mml:mi><mml:mi>n</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula> and <inline-formula id="ieqn-98"><mml:math id="mml-ieqn-98"><mml:msup><mml:mi>&#x03C9;</mml:mi><mml:mi>k</mml:mi></mml:msup><mml:mo>&#x2260;</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula> for <inline-formula id="ieqn-99"><mml:math id="mml-ieqn-99"><mml:mn>0</mml:mn><mml:mo>&#x003C;</mml:mo><mml:mi>k</mml:mi><mml:mo>&#x003C;</mml:mo><mml:mi>n</mml:mi></mml:math></inline-formula>. To fold the polynomial, we apply the transformation <inline-formula id="ieqn-100"><mml:math id="mml-ieqn-100"><mml:msup><mml:mi>f</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x00B1;</mml:mo><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03C9;</mml:mi><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:mfrac></mml:math></inline-formula>, which reduces the degree of the polynomial by half while preserving its properties in the field. If the degree of <inline-formula id="ieqn-101"><mml:math id="mml-ieqn-101"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> is <inline-formula id="ieqn-102"><mml:math id="mml-ieqn-102"><mml:mi>d</mml:mi></mml:math></inline-formula>, then the degree of <inline-formula id="ieqn-103"><mml:math id="mml-ieqn-103"><mml:msup><mml:mi>f</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> is <inline-formula id="ieqn-104"><mml:math id="mml-ieqn-104"><mml:mfrac><mml:mi>d</mml:mi><mml:mn>2</mml:mn></mml:mfrac></mml:math></inline-formula>. The folding operation is applied recursively until the degree of the polynomial reaches the desired level.</p>
<p>Although a single folding operation effectively reduces the degree of the polynomial, to better control the randomness of the polynomial and ensure the security of the proof, we typically employ a recursive folding method, as illustrated in <xref ref-type="fig" rid="fig-5">Fig. 5</xref>. In the first iteration of folding, random coefficients <inline-formula id="ieqn-105"><mml:math id="mml-ieqn-105"><mml:msub><mml:mi>r</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-106"><mml:math id="mml-ieqn-106"><mml:msub><mml:mi>r</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula> are introduced to perform a linear combination, ensuring that the polynomial retains its randomness at each step. After <inline-formula id="ieqn-107"><mml:math id="mml-ieqn-107"><mml:mi>k</mml:mi></mml:math></inline-formula> recursive foldings, the new polynomial is:<disp-formula id="eqn-8"><label>(8)</label><mml:math id="mml-eqn-8" display="block"><mml:msub><mml:mi>f</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03C9;</mml:mi><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></disp-formula></p>
<fig id="fig-5">
<label>Figure 5</label>
<caption>
<title>The zk-Snark construction</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-5.tif"/>
</fig>
<p>To formalize this folding process, we define the polynomial construction in the operation as a triplet of algorithms <inline-formula id="ieqn-108"><mml:math id="mml-ieqn-108"><mml:mo stretchy="false">(</mml:mo><mml:mi>G</mml:mi><mml:mo>,</mml:mo><mml:mi>P</mml:mi><mml:mo>,</mml:mo><mml:mi>V</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. If the following conditions are satisfied, the system is considered a succinct proof system.
<list list-type="bullet">
<list-item>
<p>Completeness: For every public parameter <inline-formula id="ieqn-109"><mml:math id="mml-ieqn-109"><mml:mi>p</mml:mi></mml:math></inline-formula> generated by <inline-formula id="ieqn-110"><mml:math id="mml-ieqn-110"><mml:mi>G</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> and <inline-formula id="ieqn-111"><mml:math id="mml-ieqn-111"><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>w</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x2208;</mml:mo><mml:mi>R</mml:mi></mml:math></inline-formula>, the proof and verification process always completes successfully. Specifically, for any <inline-formula id="ieqn-112"><mml:math id="mml-ieqn-112"><mml:mi>x</mml:mi></mml:math></inline-formula> that belongs to the relation <italic>R</italic>, the verifier <italic>V</italic> will always accept the proof provided by the prover <italic>P</italic>:<inline-formula id="ieqn-113"><mml:math id="mml-ieqn-113"><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mo fence="false" stretchy="false">&#x27E8;</mml:mo><mml:mi>P</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi>w</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>V</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo fence="false" stretchy="false">&#x27E9;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula>.</p></list-item>
<list-item>
<p>Soundness: For any probabilistic polynomial-time (PPT) prover <inline-formula id="ieqn-114"><mml:math id="mml-ieqn-114"><mml:msup><mml:mi>P</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup></mml:math></inline-formula>, there exists a PPT extractor <inline-formula id="ieqn-115"><mml:math id="mml-ieqn-115"><mml:mi>&#x03F5;</mml:mi></mml:math></inline-formula> such that for every <inline-formula id="ieqn-116"><mml:math id="mml-ieqn-116"><mml:mi>p</mml:mi></mml:math></inline-formula> output by <inline-formula id="ieqn-117"><mml:math id="mml-ieqn-117"><mml:mi>G</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> and any <inline-formula id="ieqn-118"><mml:math id="mml-ieqn-118"><mml:mi>x</mml:mi></mml:math></inline-formula>, the following probability is negligible: <inline-formula id="ieqn-119"><mml:math id="mml-ieqn-119"><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mo fence="false" stretchy="false">&#x27E8;</mml:mo><mml:msup><mml:mi>P</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>V</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo fence="false" stretchy="false">&#x27E9;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>&#x2223;</mml:mo><mml:mi>x</mml:mi><mml:mo>&#x2209;</mml:mo><mml:mi>R</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x2248;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>. This ensures that a malicious prover <inline-formula id="ieqn-120"><mml:math id="mml-ieqn-120"><mml:msup><mml:mi>P</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup></mml:math></inline-formula> cannot deceive the verifier into accepting a proof for an <inline-formula id="ieqn-121"><mml:math id="mml-ieqn-121"><mml:mi>x</mml:mi></mml:math></inline-formula> that does not belong to the relation <italic>R</italic>.</p></list-item>
<list-item>
<p>Zero-Knowledge: There exists a PPT simulator <italic>S</italic> such that for any PPT verifier <inline-formula id="ieqn-122"><mml:math id="mml-ieqn-122"><mml:msup><mml:mi>V</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup></mml:math></inline-formula>, auxiliary input <inline-formula id="ieqn-123"><mml:math id="mml-ieqn-123"><mml:mi>z</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn><mml:msup><mml:mo fence="false" stretchy="false">}</mml:mo><mml:mo>&#x2217;</mml:mo></mml:msup></mml:math></inline-formula>, and <inline-formula id="ieqn-124"><mml:math id="mml-ieqn-124"><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>w</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x2208;</mml:mo><mml:mi>R</mml:mi></mml:math></inline-formula>, the following relation holds: <inline-formula id="ieqn-125"><mml:math id="mml-ieqn-125"><mml:mtext>View</mml:mtext><mml:mrow><mml:mo>(</mml:mo><mml:mo fence="false" stretchy="false">&#x27E8;</mml:mo><mml:mi>P</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi>w</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:msup><mml:mi>V</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi>z</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo fence="false" stretchy="false">&#x27E9;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x2248;</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:msup><mml:mi>V</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>z</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. This ensures that the verifier <italic>V</italic> cannot gain any additional information about <inline-formula id="ieqn-126"><mml:math id="mml-ieqn-126"><mml:mi>w</mml:mi></mml:math></inline-formula> during the verification process, thus preserving the privacy of the prover.</p></list-item>
</list></p>
</sec>
<sec id="s4_5_3">
<label>4.5.3</label>
<title>Blockchain-Based Zero-Knowledge Verifiable Polynomial Commitment (zkBC)</title>
<p>Although the verification scheme described above is capable of validating results, to further ensure data privacy and computational correctness, this section introduces a Blockchain-based Zero-Knowledge Verifiable Polynomial Commitment (zkBC) scheme. This scheme combines polynomial commitments with blockchain technology, utilizing decentralized verification to achieve an efficient and secure polynomial verification process.</p>
<p>In the blockchain environment, the generation of polynomial commitments and their storage on the blockchain are crucial steps to ensuring transparency and immutability of the entire system. The verifier selects a point <inline-formula id="ieqn-127"><mml:math id="mml-ieqn-127"><mml:mi>t</mml:mi></mml:math></inline-formula> for validation. The prover <italic>P</italic> first generates a commitment for the target polynomial <inline-formula id="ieqn-128"><mml:math id="mml-ieqn-128"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, which is then recorded on the blockchain. The entire process can be broken down into the following steps:
<list list-type="bullet">
<list-item>
<p><inline-formula id="ieqn-129"><mml:math id="mml-ieqn-129"><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>zkBC.KeyGen</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>: The verifier first executes the key generation algorithm, producing public parameters <inline-formula id="ieqn-130"><mml:math id="mml-ieqn-130"><mml:mi>p</mml:mi></mml:math></inline-formula>, where <inline-formula id="ieqn-131"><mml:math id="mml-ieqn-131"><mml:mi>&#x03BB;</mml:mi></mml:math></inline-formula> is the security parameter. The public parameters <inline-formula id="ieqn-132"><mml:math id="mml-ieqn-132"><mml:mi>p</mml:mi></mml:math></inline-formula> include the basic configuration for polynomial commitments, which are used for subsequent commitment generation and verification.</p></list-item>
<list-item>
<p><inline-formula id="ieqn-133"><mml:math id="mml-ieqn-133"><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>zkBC.Commit</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>f</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>: The prover <italic>P</italic> generates the commitment for the polynomial <inline-formula id="ieqn-134"><mml:math id="mml-ieqn-134"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. A random value <inline-formula id="ieqn-135"><mml:math id="mml-ieqn-135"><mml:msub><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:msub></mml:math></inline-formula> is used during the commitment generation process to ensure randomness. The resulting commitment <inline-formula id="ieqn-136"><mml:math id="mml-ieqn-136"><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:math></inline-formula> is then hashed and recorded on the slave chain, ensuring its public availability and immutability.</p></list-item>
</list></p>
<p>In the slave chain, the verification process can be executed via a smart contract on the blockchain, ensuring decentralized and independent validation. The verifier <italic>V</italic> selects a verification point <inline-formula id="ieqn-137"><mml:math id="mml-ieqn-137"><mml:mi>t</mml:mi></mml:math></inline-formula> and initiates a verification request via the smart contract. The prover <italic>P</italic> must submit the corresponding proof and polynomial evaluation at <inline-formula id="ieqn-138"><mml:math id="mml-ieqn-138"><mml:mi>t</mml:mi></mml:math></inline-formula>, denoted as: <inline-formula id="ieqn-139"><mml:math id="mml-ieqn-139"><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BC;</mml:mi><mml:mo>,</mml:mo><mml:mi>&#x03C0;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mtext>zkBC.Open</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>f</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mtext>zkBC.Verify</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mtext>com</mml:mtext><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. Here, <inline-formula id="ieqn-140"><mml:math id="mml-ieqn-140"><mml:mi>&#x03BC;</mml:mi><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> is the polynomial evaluation at the point <inline-formula id="ieqn-141"><mml:math id="mml-ieqn-141"><mml:mi>t</mml:mi></mml:math></inline-formula>, and <inline-formula id="ieqn-142"><mml:math id="mml-ieqn-142"><mml:mi>&#x03C0;</mml:mi></mml:math></inline-formula> is the proof provided by the prover. The verifier and prover interact through the smart contract to verify the polynomial evaluation. Both the proof <inline-formula id="ieqn-143"><mml:math id="mml-ieqn-143"><mml:mi>&#x03C0;</mml:mi></mml:math></inline-formula> and the polynomial evaluation <inline-formula id="ieqn-144"><mml:math id="mml-ieqn-144"><mml:mi>&#x03BC;</mml:mi></mml:math></inline-formula> are submitted to the blockchain, allowing all nodes to independently verify the correctness of the process. The verifier <italic>V</italic> uses the commitment <inline-formula id="ieqn-145"><mml:math id="mml-ieqn-145"><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:math></inline-formula> and proof <inline-formula id="ieqn-146"><mml:math id="mml-ieqn-146"><mml:mi>&#x03C0;</mml:mi></mml:math></inline-formula> to validate whether the polynomial evaluation at <inline-formula id="ieqn-147"><mml:math id="mml-ieqn-147"><mml:mi>t</mml:mi></mml:math></inline-formula> is correct, by executing the verification: <inline-formula id="ieqn-148"><mml:math id="mml-ieqn-148"><mml:mrow><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:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>&#x03C0;</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. The following describes the satisfaction of completeness, soundness, and zero-knowledge properties for the proposed blockchain-based storage model:
<list list-type="bullet">
<list-item>
<p>Completeness: In the blockchain environment, completeness ensures that any honest prover <italic>P</italic> can submit a proof and commitment to the blockchain, enabling the verifier <italic>V</italic> to successfully verify the correctness of the polynomial <inline-formula id="ieqn-149"><mml:math id="mml-ieqn-149"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> at point <inline-formula id="ieqn-150"><mml:math id="mml-ieqn-150"><mml:mi>t</mml:mi></mml:math></inline-formula>. Specifically, for <inline-formula id="ieqn-151"><mml:math id="mml-ieqn-151"><mml:mi>p</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>zkBC.KeyGen</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> and <inline-formula id="ieqn-152"><mml:math id="mml-ieqn-152"><mml:mtext>com</mml:mtext><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>zkBC.Commit</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>f</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, we have: <inline-formula id="ieqn-153"><mml:math id="mml-ieqn-153"><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mo fence="false" stretchy="false">&#x27E8;</mml:mo><mml:mtext>zkBC.Open</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>f</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mtext>zkBC.Verify</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mtext>com</mml:mtext><mml:mo stretchy="false">)</mml:mo><mml:mo fence="false" stretchy="false">&#x27E9;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula></p></list-item>
<list-item>
<p>Soundness: To ensure that a malicious prover cannot deceive the verifier into accepting an incorrect polynomial evaluation, for any probabilistic polynomial-time (PPT) adversary <italic>A</italic>, the probability that <italic>A</italic> forges a commitment <inline-formula id="ieqn-154"><mml:math id="mml-ieqn-154"><mml:msup><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow><mml:mo>&#x2217;</mml:mo></mml:msup></mml:math></inline-formula> and corresponding proof <inline-formula id="ieqn-155"><mml:math id="mml-ieqn-155"><mml:msup><mml:mi>&#x03C0;</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup></mml:math></inline-formula> to convince the verifier should be negligible: <inline-formula id="ieqn-156"><mml:math id="mml-ieqn-156"><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:msup><mml:mi>&#x03BD;</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mi>&#x03C0;</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo>,</mml:mo><mml:mn>1</mml:mn><mml:mo>)</mml:mo></mml:mrow><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>zkBC.Verify</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:msup><mml:mtext>com</mml:mtext><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x2264;</mml:mo><mml:mspace width="thinmathspace"></mml:mspace><mml:mspace width="thinmathspace"></mml:mspace><mml:mo>&#x003B5;</mml:mo><mml:mspace width="negativethinmathspace"></mml:mspace><mml:mspace width="negativethinmathspace"></mml:mspace><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. This guarantees that a malicious prover cannot successfully deceive the verifier into accepting a false proof for an <inline-formula id="ieqn-157"><mml:math id="mml-ieqn-157"><mml:mi>x</mml:mi></mml:math></inline-formula> not belonging to the relation <italic>R</italic>.</p></list-item>
<list-item>
<p>Zero-Knowledge: Zero-knowledge ensures that the verifier only learns the polynomial evaluation <inline-formula id="ieqn-158"><mml:math id="mml-ieqn-158"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> at the specific point <inline-formula id="ieqn-159"><mml:math id="mml-ieqn-159"><mml:mi>t</mml:mi></mml:math></inline-formula> and gains no additional information about the structure of the polynomial or any other evaluations. By introducing zero-knowledge proofs, we preserve the privacy of the prover. A simulator <italic>S</italic> can simulate proofs and outcomes that are computationally indistinguishable from real interactions:<inline-formula id="ieqn-160"><mml:math id="mml-ieqn-160"><mml:mtext>View</mml:mtext><mml:mrow><mml:mo>(</mml:mo><mml:mo fence="false" stretchy="false">&#x27E8;</mml:mo><mml:mtext>zkBC.Open</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>f</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mtext>zkBC.Verify</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mtext>com</mml:mtext><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo fence="false" stretchy="false">&#x27E9;</mml:mo><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x2248;</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mi>V</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. This ensures that the verifier cannot learn anything beyond the correct evaluation of the polynomial, maintaining the privacy of the prover.</p></list-item>
</list></p>
</sec>
</sec>
<sec id="s4_6">
<label>4.6</label>
<title>Security Definition</title>
<p>In the Adaptive Chosen Keyword Attack (ACK) model [<xref ref-type="bibr" rid="ref-16">16</xref>], the security definition of the BC-VSCR scheme is similar to the non-adaptive model, with the key difference being that the adversary can adaptively choose queries based on the query history. Specifically, in the adaptive model, the adversary first submits the document set <italic>D</italic>, then receives the encrypted index <inline-formula id="ieqn-161"><mml:math id="mml-ieqn-161"><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. After obtaining the index, the adversary selects the first query <inline-formula id="ieqn-162"><mml:math id="mml-ieqn-162"><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula>, and the system returns the corresponding trapdoor <inline-formula id="ieqn-163"><mml:math id="mml-ieqn-163"><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. Subsequently, the adversary adaptively selects the second query <inline-formula id="ieqn-164"><mml:math id="mml-ieqn-164"><mml:msub><mml:mi>q</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula> based on the result of the first query, and so on, until all queries <inline-formula id="ieqn-165"><mml:math id="mml-ieqn-165"><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>m</mml:mi></mml:msub></mml:math></inline-formula> and their corresponding trapdoors are generated.</p>
<p>In this scenario, the adversary in the adaptive model is capable of performing more complex attacks than in the non-adaptive model because they can dynamically adjust their strategy based on the feedback from previous queries. The adversary can not only infer information from the index but also gain insights by observing the relationships between query trapdoors.</p>
<p>We define the adaptive semantic security by introducing a polynomial-time simulator <italic>S</italic>, ensuring that the adversary&#x2019;s output is indistinguishable between the real world and the simulation world. The definition is as follows:</p>
<p>Let <inline-formula id="ieqn-166"><mml:math id="mml-ieqn-166"><mml:mi>&#x03BB;</mml:mi><mml:mo>&#x2208;</mml:mo><mml:msup><mml:mrow><mml:mi mathvariant="double-struck">Z</mml:mi></mml:mrow><mml:mi>N</mml:mi></mml:msup></mml:math></inline-formula> be the security parameter of the system, and let the adversary <inline-formula id="ieqn-167"><mml:math id="mml-ieqn-167"><mml:mi>A</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>A</mml:mi><mml:mn>0</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>A</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>A</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> and simulator <inline-formula id="ieqn-168"><mml:math id="mml-ieqn-168"><mml:mi>S</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mn>0</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> be given. Consider the following two probability experiments:
<list list-type="bullet">
<list-item>
<p>Real Experiment <inline-formula id="ieqn-169"><mml:math id="mml-ieqn-169"><mml:msubsup><mml:mtext>Real</mml:mtext><mml:mi>A</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msubsup><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>:</p>
<p>The system generates the secret key <inline-formula id="ieqn-170"><mml:math id="mml-ieqn-170"><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>KeyGen</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. The adversary <inline-formula id="ieqn-171"><mml:math id="mml-ieqn-171"><mml:msub><mml:mi>A</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:math></inline-formula> submits the document set <italic>D</italic>, and the system generates the encrypted documents <inline-formula id="ieqn-172"><mml:math id="mml-ieqn-172"><mml:mtext>Enc</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>Encrypt</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. For each document <inline-formula id="ieqn-173"><mml:math id="mml-ieqn-173"><mml:msub><mml:mi>D</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula>, the system constructs the index <inline-formula id="ieqn-174"><mml:math id="mml-ieqn-174"><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>BuildIndex</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, and generates the index set <inline-formula id="ieqn-175"><mml:math id="mml-ieqn-175"><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mrow><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>D</mml:mi><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>. The adversary then submits the first query <inline-formula id="ieqn-176"><mml:math id="mml-ieqn-176"><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mi>A</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mtext>Enc</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, and the system generates the corresponding trapdoor <inline-formula id="ieqn-177"><mml:math id="mml-ieqn-177"><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>Trapdoor</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>.</p>
<p>For each subsequent query <inline-formula id="ieqn-178"><mml:math id="mml-ieqn-178"><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:math></inline-formula>, the adversary <inline-formula id="ieqn-179"><mml:math id="mml-ieqn-179"><mml:msub><mml:mi>A</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math></inline-formula> adaptively selects the next query <inline-formula id="ieqn-180"><mml:math id="mml-ieqn-180"><mml:msub><mml:mi>q</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math></inline-formula> based on the previous query trapdoors <inline-formula id="ieqn-181"><mml:math id="mml-ieqn-181"><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, and the system generates the corresponding trapdoor <inline-formula id="ieqn-182"><mml:math id="mml-ieqn-182"><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>.</p>
<p>Finally, the system outputs <inline-formula id="ieqn-183"><mml:math id="mml-ieqn-183"><mml:mi>V</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mtext>Enc</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>Q</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>, where <inline-formula id="ieqn-184"><mml:math id="mml-ieqn-184"><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>Q</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>.</p></list-item>
<list-item>
<p>Simulation Experiment <inline-formula id="ieqn-185"><mml:math id="mml-ieqn-185"><mml:msubsup><mml:mtext>Sim</mml:mtext><mml:mi>A</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msubsup><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>:</p>
<p>The adversary <inline-formula id="ieqn-186"><mml:math id="mml-ieqn-186"><mml:msub><mml:mi>A</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:math></inline-formula> submits the document set <italic>D</italic>, and the simulator <inline-formula id="ieqn-187"><mml:math id="mml-ieqn-187"><mml:msub><mml:mi>S</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:math></inline-formula> outputs the encrypted documents and index <inline-formula id="ieqn-188"><mml:math id="mml-ieqn-188"><mml:mo stretchy="false">(</mml:mo><mml:mtext>Enc</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mn>0</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mtext>Tr</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. The adversary then submits the first query <inline-formula id="ieqn-189"><mml:math id="mml-ieqn-189"><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula>, and the simulator generates the trapdoor <inline-formula id="ieqn-190"><mml:math id="mml-ieqn-190"><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mtext>Tr</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>.</p>
<p>For each subsequent query <inline-formula id="ieqn-191"><mml:math id="mml-ieqn-191"><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:math></inline-formula>, the adversary <inline-formula id="ieqn-192"><mml:math id="mml-ieqn-192"><mml:msub><mml:mi>A</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math></inline-formula> submits a query, and the simulator generates the corresponding trapdoor <inline-formula id="ieqn-193"><mml:math id="mml-ieqn-193"><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mi>S</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mtext>Tr</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>.</p>
<p>Finally, the simulator outputs <inline-formula id="ieqn-194"><mml:math id="mml-ieqn-194"><mml:mi>V</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mtext>Enc</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>Q</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>.</p></list-item>
</list></p>
<p>If for any polynomial-time adversary <italic>A</italic>, there exists a polynomial-time simulator <italic>S</italic> such that for any polynomial-time distinguisher <italic>D</italic>, the following difference is negligible:
<disp-formula id="eqn-9"><label>(9)</label><mml:math id="mml-eqn-9" display="block"><mml:mrow><mml:mo>|</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>V</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mrow><mml:mtext>Real</mml:mtext></mml:mrow><mml:mi>A</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">]</mml:mo><mml:mo>&#x2212;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>V</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mrow><mml:mtext>Sim</mml:mtext></mml:mrow><mml:mi>A</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">]</mml:mo><mml:mo>|</mml:mo></mml:mrow><mml:mo>&#x2264;</mml:mo><mml:mrow><mml:mtext>negl</mml:mtext></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></disp-formula>then it follows that even when the adversary can dynamically adjust its strategy based on query history and trapdoor information, the system&#x2019;s encrypted documents, indices, and query results remain statistically indistinguishable to the adversary. This ensures that the BC-VSCR scheme is semantically secure under adaptive chosen keyword attacks.</p>
</sec>
</sec>
<sec id="s5">
<label>5</label>
<title>Algorithm Construction</title>
<sec id="s5_1">
<label>5.1</label>
<title><inline-formula id="ieqn-195"><mml:math id="mml-ieqn-195"><mml:mi mathvariant="bold-italic">K</mml:mi><mml:mi mathvariant="bold-italic">e</mml:mi><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="bold-italic">G</mml:mi><mml:mi mathvariant="bold-italic">e</mml:mi><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mo mathvariant="bold" stretchy="false">(</mml:mo><mml:mi mathvariant="bold-italic">&#x03BB;</mml:mi><mml:mo mathvariant="bold" stretchy="false">)</mml:mo><mml:mo mathvariant="bold" stretchy="false">&#x2192;</mml:mo><mml:mi mathvariant="bold-italic">K</mml:mi></mml:math></inline-formula></title>
<p>The key generation algorithm is used for system initialization. It takes the security parameter <inline-formula id="ieqn-196"><mml:math id="mml-ieqn-196"><mml:mi>&#x03BB;</mml:mi></mml:math></inline-formula> as input and outputs the system key set <inline-formula id="ieqn-197"><mml:math id="mml-ieqn-197"><mml:mi>K</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mi>S</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mtext>ky</mml:mtext><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>. Here, <italic>S</italic> is a randomly generated vector of dimension <inline-formula id="ieqn-198"><mml:math id="mml-ieqn-198"><mml:mi>&#x03BB;</mml:mi></mml:math></inline-formula>, <inline-formula id="ieqn-199"><mml:math id="mml-ieqn-199"><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-200"><mml:math id="mml-ieqn-200"><mml:msub><mml:mi>M</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula> are two randomly generated invertible matrices of dimension <inline-formula id="ieqn-201"><mml:math id="mml-ieqn-201"><mml:mi>n</mml:mi><mml:mo>&#x00D7;</mml:mo><mml:mi>n</mml:mi></mml:math></inline-formula>, and <inline-formula id="ieqn-202"><mml:math id="mml-ieqn-202"><mml:mtext>ky</mml:mtext></mml:math></inline-formula> is the key used for symmetric encryption. To enhance the randomness of encryption, a random vector <inline-formula id="ieqn-203"><mml:math id="mml-ieqn-203"><mml:mrow><mml:mover><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> is introduced, resulting in the encrypted vector <inline-formula id="ieqn-204"><mml:math id="mml-ieqn-204"><mml:mrow><mml:mover><mml:msub><mml:mi>c</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>d</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mover><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula>, where <inline-formula id="ieqn-205"><mml:math id="mml-ieqn-205"><mml:mrow><mml:mover><mml:msub><mml:mi>d</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> is a word vector pre-trained using the Word2Vec model. CS cannot access the specific content of <italic>K</italic>, while both the DO and DU know <italic>K</italic>.</p>
</sec>
<sec id="s5_2">
<label>5.2</label>
<title><inline-formula id="ieqn-206"><mml:math id="mml-ieqn-206"><mml:mi mathvariant="bold-italic">B</mml:mi><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mi mathvariant="bold-italic">i</mml:mi><mml:mi mathvariant="bold-italic">l</mml:mi><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi mathvariant="bold-italic">I</mml:mi><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi mathvariant="bold-italic">e</mml:mi><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo mathvariant="bold" stretchy="false">(</mml:mo><mml:mi mathvariant="bold-italic">K</mml:mi><mml:mo mathvariant="bold">,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mrow><mml:mtext mathvariant="italic">1</mml:mtext></mml:mrow></mml:msub><mml:mo mathvariant="bold">,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mrow><mml:mtext mathvariant="italic">2</mml:mtext></mml:mrow></mml:msub><mml:mo mathvariant="bold">,</mml:mo><mml:mi mathvariant="bold-italic">W</mml:mi><mml:mo mathvariant="bold">,</mml:mo><mml:mi mathvariant="bold-italic">D</mml:mi><mml:mo mathvariant="bold" stretchy="false">)</mml:mo><mml:mo mathvariant="bold" stretchy="false">&#x2192;</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">I</mml:mi><mml:mrow><mml:mtext mathvariant="italic">1</mml:mtext></mml:mrow></mml:msub><mml:mo mathvariant="bold">,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">I</mml:mi><mml:mrow><mml:mtext mathvariant="italic">2</mml:mtext></mml:mrow></mml:msub></mml:math></inline-formula></title>
<p>The index construction algorithm works as follows. During the preprocessing phase, we conduct semantic training on the dataset <italic>D</italic> to generate the word vector set <inline-formula id="ieqn-207"><mml:math id="mml-ieqn-207"><mml:mrow><mml:mover><mml:mi>W</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>w</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>w</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>w</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>. The k-means algorithm is then applied to cluster the word vectors, resulting in the cluster center set <italic>G</italic>. Subsequently, the secure kNN algorithm is used to generate two invertible matrices, <inline-formula id="ieqn-208"><mml:math id="mml-ieqn-208"><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-209"><mml:math id="mml-ieqn-209"><mml:msub><mml:mi>M</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula>, along with a random binary vector <inline-formula id="ieqn-210"><mml:math id="mml-ieqn-210"><mml:mi>S</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>s</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>s</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>s</mml:mi><mml:mi>d</mml:mi></mml:msub><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>.</p>
<p>For each word vector <inline-formula id="ieqn-211"><mml:math id="mml-ieqn-211"><mml:mrow><mml:mover><mml:mi>W</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>w</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>w</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>w</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>, we split it according to the corresponding value <inline-formula id="ieqn-212"><mml:math id="mml-ieqn-212"><mml:msub><mml:mi>s</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math></inline-formula> in <italic>S</italic>:
<disp-formula id="eqn-10"><label>(10)</label><mml:math id="mml-eqn-10" display="block"><mml:mrow><mml:mo>{</mml:mo><mml:mtable columnalign="left left" rowspacing=".2em" columnspacing="1em" displaystyle="false"><mml:mtr><mml:mtd><mml:mrow><mml:mrow><mml:msup><mml:mi>I</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msup><mml:mi>I</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo></mml:mrow></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>;</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:mrow><mml:msup><mml:mi>I</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>+</mml:mo><mml:msup><mml:mi>I</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mrow></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mrow><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>1.</mml:mn></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mo fence="true" stretchy="true" symmetric="true"></mml:mo></mml:mrow></mml:math></disp-formula></p>
<p>The resulting two sub-vectors, <italic>I</italic><sup><italic>&#x2032;</italic></sup> and <italic>I</italic><sup>&#x2033;</sup>, are then linearly transformed to obtain the encrypted index vector <italic>I</italic>. The vector is further processed using an adaptive hash function <italic>H</italic>, and subsequently stored on the blockchain.
<list list-type="order">
<list-item>
<p>Master Chain: The master chain index <inline-formula id="ieqn-213"><mml:math id="mml-ieqn-213"><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> is constructed using the Euclidean distance-based method described in <xref ref-type="sec" rid="s4_3_2">Section 4.3.2</xref>. It is important to note that the index tree on the master chain is used for search operations, and must correspond to the verification work on the slave chain. Therefore, a unique identifier <italic>I</italic><sup><italic>&#x2032;</italic></sup> is assigned to each index node, which corresponds to the topic cluster center <italic>G</italic>. The mapping relation, similar to a pointer, enables access to the corresponding nodes on the slave chain <inline-formula id="ieqn-214"><mml:math id="mml-ieqn-214"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:msup><mml:mo fence="false" stretchy="false">}</mml:mo><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula>.</p></list-item>
<list-item>
<p>Slave Chain: The index on the slave chain is used for verification purposes. Using the polynomial commitment of BC-VSCR, a low-degree polynomial commitment is generated as <inline-formula id="ieqn-215"><mml:math id="mml-ieqn-215"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mn>2</mml:mn><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x00B1;</mml:mo><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03B1;</mml:mi><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>x</mml:mi></mml:mrow></mml:mfrac></mml:math></inline-formula>. The challenge <inline-formula id="ieqn-216"><mml:math id="mml-ieqn-216"><mml:msup><mml:mi>&#x03BB;</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mn>2</mml:mn><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> is then computed, and the final polynomial is constructed following the method in <xref ref-type="sec" rid="s4_5">Section 4.5</xref> of BC-VSCR to ensure its intractability within finite time. The hash of the polynomial proof is stored on the slave chain as <inline-formula id="ieqn-217"><mml:math id="mml-ieqn-217"><mml:msubsup><mml:mi>I</mml:mi><mml:mn>2</mml:mn><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>.</p></list-item>
</list></p>
<p>The specific algorithm is illustrated in Algorithm 1:</p>
<fig id="fig-15">
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-15.tif"/>
</fig>
</sec>
<sec id="s5_3">
<label>5.3</label>
<title><inline-formula id="ieqn-231"><mml:math id="mml-ieqn-231"><mml:mi mathvariant="bold-italic">E</mml:mi><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi mathvariant="bold-italic">t</mml:mi><mml:mo mathvariant="bold" stretchy="false">(</mml:mo><mml:mi mathvariant="bold-italic">K</mml:mi><mml:mo mathvariant="bold">,</mml:mo><mml:mi mathvariant="bold-italic">D</mml:mi><mml:mo mathvariant="bold" stretchy="false">)</mml:mo><mml:mo mathvariant="bold" stretchy="false">&#x2192;</mml:mo><mml:mi mathvariant="bold-italic">C</mml:mi></mml:math></inline-formula></title>
<p>The encryption algorithm is used by the DO to encrypt each plaintext document <inline-formula id="ieqn-232"><mml:math id="mml-ieqn-232"><mml:mi>D</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula> using the symmetric encryption key <italic>K</italic>, generating the corresponding ciphertexts <inline-formula id="ieqn-233"><mml:math id="mml-ieqn-233"><mml:mi>C</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>. These encrypted documents are then stored on the cloud server.</p>
</sec>
<sec id="s5_4">
<label>5.4</label>
<title><inline-formula id="ieqn-234"><mml:math id="mml-ieqn-234"><mml:mi mathvariant="bold-italic">G</mml:mi><mml:mi mathvariant="bold-italic">e</mml:mi><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mi mathvariant="bold-italic">e</mml:mi><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mi mathvariant="bold-italic">t</mml:mi><mml:mi mathvariant="bold-italic">e</mml:mi><mml:mi mathvariant="bold-italic">T</mml:mi><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi mathvariant="bold-italic">o</mml:mi><mml:mi mathvariant="bold-italic">o</mml:mi><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mo mathvariant="bold" stretchy="false">(</mml:mo><mml:mi mathvariant="bold-italic">K</mml:mi><mml:mo mathvariant="bold">,</mml:mo><mml:mi mathvariant="bold-italic">Q</mml:mi><mml:mo mathvariant="bold" stretchy="false">)</mml:mo><mml:mo mathvariant="bold" stretchy="false">&#x2192;</mml:mo><mml:mi mathvariant="bold-italic">T</mml:mi></mml:math></inline-formula></title>
<p>The trapdoor generation algorithm is executed by the DO, taking the query keyword set <inline-formula id="ieqn-235"><mml:math id="mml-ieqn-235"><mml:mi>Q</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>Q</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula> and the key set <italic>K</italic> as inputs to generate the query trapdoor <italic>T</italic>. First, the hash function <italic>H</italic> is applied to the query keyword set <italic>Q</italic> to generate the hash value of the query keywords. The hash value is then combined with the key set <italic>K</italic> to produce the query trapdoor <italic>T</italic>, which is returned to the DU.</p>
<p>Initially, we set the sliding window size <inline-formula id="ieqn-236"><mml:math id="mml-ieqn-236"><mml:mi>c</mml:mi></mml:math></inline-formula> to define the context for processing. For each center word, the CBOW model predicts the context words within the window to generate the word vector for the target word. Suppose we have a sequence in the text <inline-formula id="ieqn-237"><mml:math id="mml-ieqn-237"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>, where <inline-formula id="ieqn-238"><mml:math id="mml-ieqn-238"><mml:msub><mml:mi>w</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula> is the target word. The CBOW model uses the context <inline-formula id="ieqn-239"><mml:math id="mml-ieqn-239"><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>t</mml:mi><mml:mo>+</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula> to generate the vector representation <inline-formula id="ieqn-240"><mml:math id="mml-ieqn-240"><mml:mrow><mml:mover><mml:msub><mml:mi>v</mml:mi><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> of the target word <inline-formula id="ieqn-241"><mml:math id="mml-ieqn-241"><mml:msub><mml:mi>w</mml:mi><mml:mi>t</mml:mi></mml:msub></mml:math></inline-formula>. Then, all word vectors within the sliding window are summed with weights to generate a query vector enriched with semantic information: <inline-formula id="ieqn-242"><mml:math id="mml-ieqn-242"><mml:mrow><mml:mover><mml:mi>q</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:msubsup><mml:mo movablelimits="false">&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mi>&#x03B1;</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>v</mml:mi><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula>, where <inline-formula id="ieqn-243"><mml:math id="mml-ieqn-243"><mml:msub><mml:mi>&#x03B1;</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula> represents the semantic similarity of each context word vector. Using the key set <italic>K</italic>, we apply a linear transformation to the query vector <inline-formula id="ieqn-244"><mml:math id="mml-ieqn-244"><mml:mrow><mml:mover><mml:mi>q</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> using the encryption matrix <inline-formula id="ieqn-245"><mml:math id="mml-ieqn-245"><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula>. Finally, the query trapdoor <italic>T</italic> is generated by applying the hash function: <inline-formula id="ieqn-246"><mml:math id="mml-ieqn-246"><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mi>H</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:mi>q</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mover><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. where <inline-formula id="ieqn-247"><mml:math id="mml-ieqn-247"><mml:mrow><mml:mover><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> is a random vector to further enhance the security of the trapdoor generation process.</p>
</sec>
<sec id="s5_5">
<label>5.5</label>
<title><inline-formula id="ieqn-248"><mml:math id="mml-ieqn-248"><mml:mi mathvariant="bold-italic">S</mml:mi><mml:mi mathvariant="bold-italic">e</mml:mi><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="bold-italic">c</mml:mi><mml:mi mathvariant="bold-italic">h</mml:mi><mml:mo mathvariant="bold" stretchy="false">(</mml:mo><mml:mi mathvariant="bold-italic">T</mml:mi><mml:mo mathvariant="bold">,</mml:mo><mml:mi mathvariant="bold-italic">C</mml:mi><mml:mo mathvariant="bold">,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">I</mml:mi><mml:mrow><mml:mtext mathvariant="italic">1</mml:mtext></mml:mrow></mml:msub><mml:mo mathvariant="bold" stretchy="false">)</mml:mo><mml:mo mathvariant="bold" stretchy="false">&#x2192;</mml:mo><mml:mi mathvariant="bold-italic">R</mml:mi></mml:math></inline-formula></title>
<p>The search algorithm begins when the CS receives the query trapdoor <inline-formula id="ieqn-249"><mml:math id="mml-ieqn-249"><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>Q</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> sent by the DU. The CS uses the query trapdoor <italic>T</italic> to search within the encrypted dataset <italic>C</italic>, locating the matching encrypted documents and returning the search result <italic>R</italic> to the DU. The encrypted dataset <italic>C</italic> consists of multiple encrypted documents, each of which corresponds to an encrypted vector representation and has a corresponding node in the index tree for efficient document matching.</p>
<p>The cloud server searches for matching hash value nodes in the master chain index <inline-formula id="ieqn-250"><mml:math id="mml-ieqn-250"><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula> using the query trapdoor <italic>T</italic>. For each matching node, the server extracts the corresponding encrypted document <inline-formula id="ieqn-251"><mml:math id="mml-ieqn-251"><mml:msub><mml:mi>c</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:math></inline-formula>, then calculates the inner product score <inline-formula id="ieqn-252"><mml:math id="mml-ieqn-252"><mml:mtext>score</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>T</mml:mi><mml:mo>,</mml:mo><mml:mi>I</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> between the query trapdoor <italic>T</italic> and the secure index <inline-formula id="ieqn-253"><mml:math id="mml-ieqn-253"><mml:msub><mml:mi>I</mml:mi><mml:mn>1</mml:mn></mml:msub></mml:math></inline-formula>. After calculating the similarity scores for all relevant documents, the CS sorts the documents based on the scores and selects the highest-scoring document as the search result <italic>R</italic>, which is then returned to the DU.</p>
</sec>
<sec id="s5_6">
<label>5.6</label>
<title><inline-formula id="ieqn-254"><mml:math id="mml-ieqn-254"><mml:mi mathvariant="bold-italic">V</mml:mi><mml:mi mathvariant="bold-italic">e</mml:mi><mml:mi mathvariant="bold-italic">r</mml:mi><mml:mi mathvariant="bold-italic">i</mml:mi><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mi mathvariant="bold-italic">y</mml:mi><mml:mo mathvariant="bold" stretchy="false">(</mml:mo><mml:mi mathvariant="bold-italic">R</mml:mi><mml:mo mathvariant="bold">,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">I</mml:mi><mml:mrow><mml:mtext mathvariant="italic">2</mml:mtext></mml:mrow></mml:msub><mml:mo mathvariant="bold" stretchy="false">)</mml:mo><mml:mo mathvariant="bold" stretchy="false">&#x2192;</mml:mo><mml:mi mathvariant="bold-italic">v</mml:mi></mml:math></inline-formula></title>
<p>The verification algorithm is executed by the DU to validate the query results <italic>R</italic> and the slave chain index <inline-formula id="ieqn-255"><mml:math id="mml-ieqn-255"><mml:msub><mml:mi>I</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula>. The DU uses zk-SNARK technology to verify the correctness of the query results and outputs the verification result <inline-formula id="ieqn-256"><mml:math id="mml-ieqn-256"><mml:mi>v</mml:mi></mml:math></inline-formula>. The steps are as follows:
<list list-type="simple">
<list-item><label>1.</label><p>Generate Public Parameters: First, the public parameters <inline-formula id="ieqn-257"><mml:math id="mml-ieqn-257"><mml:mi>p</mml:mi><mml:mi>p</mml:mi></mml:math></inline-formula> are generated using the security parameter <inline-formula id="ieqn-258"><mml:math id="mml-ieqn-258"><mml:mi>&#x03BB;</mml:mi></mml:math></inline-formula> via <inline-formula id="ieqn-259"><mml:math id="mml-ieqn-259"><mml:mtext>KeyGen</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. In the multiplicative subgroup <italic>N</italic> &#x003D; |<italic>H</italic>|, let <italic>U</italic> &#x003D; <italic>L</italic> &#x2212; <italic>H</italic>, where <italic>L</italic> is the superset of the verification set.</p></list-item>
<list-item><label>2.</label><p>Polynomial Commitment Generation: The prover <italic>P</italic> generates a commitment to the polynomial <inline-formula id="ieqn-260"><mml:math id="mml-ieqn-260"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> using the commitment algorithm <inline-formula id="ieqn-261"><mml:math id="mml-ieqn-261"><mml:mtext>Commit</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>f</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>p</mml:mi><mml:mi>p</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. The prover computes the unique univariate polynomial <inline-formula id="ieqn-262"><mml:math id="mml-ieqn-262"><mml:mi>l</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> such that <inline-formula id="ieqn-263"><mml:math id="mml-ieqn-263"><mml:mi>l</mml:mi><mml:msub><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>H</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>c</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:msub><mml:mi>c</mml:mi><mml:mi>N</mml:mi></mml:msub><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. Then, the prover randomly samples a polynomial <inline-formula id="ieqn-264"><mml:math id="mml-ieqn-264"><mml:mi>r</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> of degree <inline-formula id="ieqn-265"><mml:math id="mml-ieqn-265"><mml:mi>k</mml:mi></mml:math></inline-formula> and sets <inline-formula id="ieqn-266"><mml:math id="mml-ieqn-266"><mml:msup><mml:mi>l</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mi>l</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>Z</mml:mi><mml:mi>H</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x22C5;</mml:mo><mml:mi>r</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, where <inline-formula id="ieqn-267"><mml:math id="mml-ieqn-267"><mml:msub><mml:mi>Z</mml:mi><mml:mi>H</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mo movablelimits="false">&#x220F;</mml:mo><mml:mrow><mml:mi>a</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mi>H</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mi>a</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. The prover computes <inline-formula id="ieqn-268"><mml:math id="mml-ieqn-268"><mml:msup><mml:mi>l</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>U</mml:mi></mml:msub></mml:math></inline-formula> and runs <inline-formula id="ieqn-269"><mml:math id="mml-ieqn-269"><mml:msub><mml:mtext>root</mml:mtext><mml:mrow><mml:msup><mml:mi>l</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:msub><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>Commit</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:msup><mml:mi>l</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>U</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> outputting the final commitment <inline-formula id="ieqn-270"><mml:math id="mml-ieqn-270"><mml:mtext>com</mml:mtext><mml:mo>=</mml:mo><mml:msub><mml:mtext>root</mml:mtext><mml:mrow><mml:msup><mml:mi>l</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:msub></mml:math></inline-formula>.</p></list-item>
<list-item><label>3.</label><p>Generate Verification Values and Polynomial: The prover <italic>P</italic> first calculates the value of the polynomial <inline-formula id="ieqn-271"><mml:math id="mml-ieqn-271"><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> at a specific point <inline-formula id="ieqn-272"><mml:math id="mml-ieqn-272"><mml:mi>t</mml:mi></mml:math></inline-formula>, denoted as <inline-formula id="ieqn-273"><mml:math id="mml-ieqn-273"><mml:mi>&#x03BC;</mml:mi><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, and sends it to the verifier <italic>V</italic>. Next, the prover calculates the evaluation vector <inline-formula id="ieqn-274"><mml:math id="mml-ieqn-274"><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>W</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>W</mml:mi><mml:mi>N</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>t</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, and finds the unique univariate polynomial <inline-formula id="ieqn-275"><mml:math id="mml-ieqn-275"><mml:mi>q</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> such that <inline-formula id="ieqn-276"><mml:math id="mml-ieqn-276"><mml:mi>q</mml:mi><mml:msub><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>H</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mi>T</mml:mi></mml:math></inline-formula>.</p></list-item>
<list-item><label>4.</label><p>Introduce Randomized Polynomial: To ensure the zero-knowledge property of the verification, the prover <italic>P</italic> randomly samples a polynomial <inline-formula id="ieqn-277"><mml:math id="mml-ieqn-277"><mml:mi>s</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> of degree <inline-formula id="ieqn-278"><mml:math id="mml-ieqn-278"><mml:mn>2</mml:mn><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>H</mml:mi><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mi>&#x03BA;</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula>. The prover computes and sends <inline-formula id="ieqn-279"><mml:math id="mml-ieqn-279"><mml:msub><mml:mo movablelimits="false">&#x2211;</mml:mo><mml:mrow><mml:mi>a</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mi>H</mml:mi></mml:mrow></mml:msub><mml:mi>s</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>a</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> to the verifier <italic>V</italic> and runs <inline-formula id="ieqn-280"><mml:math id="mml-ieqn-280"><mml:msub><mml:mtext>root</mml:mtext><mml:mi>s</mml:mi></mml:msub><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mtext>Commit</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>s</mml:mi><mml:msub><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>U</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> for subsequent verification.</p></list-item>
<list-item><label>5.</label><p>Polynomial Combination and Low Degree Test: The verifier <italic>V</italic> randomly selects an <inline-formula id="ieqn-281"><mml:math id="mml-ieqn-281"><mml:mi>&#x03B1;</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mi>F</mml:mi></mml:math></inline-formula> and sends it to the prover <italic>P</italic> for polynomial combination. The prover then computes the combined polynomial <inline-formula id="ieqn-282"><mml:math id="mml-ieqn-282"><mml:mi>&#x03B1;</mml:mi><mml:msup><mml:mi>l</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x22C5;</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi>s</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> and decomposes it into <inline-formula id="ieqn-283"><mml:math id="mml-ieqn-283"><mml:mi>g</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mi>Z</mml:mi><mml:mi>H</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x22C5;</mml:mo><mml:mi>h</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, where the degrees of <inline-formula id="ieqn-284"><mml:math id="mml-ieqn-284"><mml:mi>g</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> and <inline-formula id="ieqn-285"><mml:math id="mml-ieqn-285"><mml:mi>h</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> are strictly less than |<italic>H</italic>| and <inline-formula id="ieqn-286"><mml:math id="mml-ieqn-286"><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>H</mml:mi><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mi>k</mml:mi></mml:math></inline-formula>, respectively. To ensure the low-degree property of the polynomial verification, we define:
<disp-formula id="eqn-11"><label>(11)</label><mml:math id="mml-eqn-11" display="block"><mml:mi>p</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>H</mml:mi><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03B1;</mml:mi><mml:msup><mml:mi>l</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x22C5;</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi>s</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x2212;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03B1;</mml:mi><mml:mi>&#x03BC;</mml:mi><mml:mo>+</mml:mo><mml:mi>S</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x2212;</mml:mo><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>H</mml:mi><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mi>Z</mml:mi><mml:mi>H</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x22C5;</mml:mo><mml:mi>h</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mi>H</mml:mi><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:mi>x</mml:mi></mml:mrow></mml:mfrac></mml:math></disp-formula></p>
</list-item>
</list></p>
<p>The prover and verifier jointly perform a low-degree test to verify the correctness of the polynomial <inline-formula id="ieqn-287"><mml:math id="mml-ieqn-287"><mml:mi>p</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. The verifier needs to perform <inline-formula id="ieqn-288"><mml:math id="mml-ieqn-288"><mml:mi>&#x03BA;</mml:mi></mml:math></inline-formula> Oracle accesses to the combined polynomial and <inline-formula id="ieqn-289"><mml:math id="mml-ieqn-289"><mml:mi>p</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. If the test fails, the verifier aborts and outputs <inline-formula id="ieqn-290"><mml:math id="mml-ieqn-290"><mml:mi>v</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>. The verifier then checks the combined polynomial at the point <inline-formula id="ieqn-291"><mml:math id="mml-ieqn-291"><mml:msub><mml:mi>a</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula>. If all checks pass, the verifier accepts the proof and outputs <inline-formula id="ieqn-292"><mml:math id="mml-ieqn-292"><mml:mi>v</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula>; otherwise, <inline-formula id="ieqn-293"><mml:math id="mml-ieqn-293"><mml:mi>v</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>. The specific algorithm is shown in Algorithm 2:</p>
<fig id="fig-16">
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-16.tif"/>
</fig>
</sec>
<sec id="s5_7">
<label>5.7</label>
<title><inline-formula id="ieqn-309"><mml:math id="mml-ieqn-309"><mml:mi mathvariant="bold-italic">U</mml:mi><mml:mi mathvariant="bold-italic">p</mml:mi><mml:mi mathvariant="bold-italic">d</mml:mi><mml:mi mathvariant="bold-italic">a</mml:mi><mml:mi mathvariant="bold-italic">t</mml:mi><mml:mi mathvariant="bold-italic">e</mml:mi><mml:mo mathvariant="bold" stretchy="false">(</mml:mo><mml:mi mathvariant="bold-italic">D</mml:mi><mml:mo mathvariant="bold">,</mml:mo><mml:mi mathvariant="bold">&#x0394;</mml:mi><mml:mi mathvariant="bold-italic">D</mml:mi><mml:mo mathvariant="bold">,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">I</mml:mi><mml:mrow><mml:mtext mathvariant="italic">1</mml:mtext></mml:mrow></mml:msub><mml:mo mathvariant="bold">,</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">I</mml:mi><mml:mrow><mml:mtext mathvariant="italic">2</mml:mtext></mml:mrow></mml:msub><mml:mo mathvariant="bold" stretchy="false">)</mml:mo><mml:mo mathvariant="bold" stretchy="false">&#x2192;</mml:mo><mml:mo mathvariant="bold">,</mml:mo><mml:msubsup><mml:mi mathvariant="bold-italic">I</mml:mi><mml:mrow><mml:mtext mathvariant="italic">1</mml:mtext></mml:mrow><mml:mrow><mml:mi mathvariant="bold">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo mathvariant="bold">,</mml:mo><mml:msubsup><mml:mi mathvariant="bold-italic">I</mml:mi><mml:mrow><mml:mtext mathvariant="italic">2</mml:mtext></mml:mrow><mml:mrow><mml:mi mathvariant="bold">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula></title>
<p>In our scheme, when the DO initiates an update operation, the system handles the changes in the new data and index through incremental updates. At the same time, the synchronization of the master chain and slave chain updates is ensured by adaptive hash indexing. The specific steps are as follows:
<list list-type="simple">
<list-item><label>1.</label><p>Incremental Data and Index Update: For the data documents that need to be added to the index tree, suppose a node <inline-formula id="ieqn-310"><mml:math id="mml-ieqn-310"><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>v</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> in the index tree corresponds to an updated document set <inline-formula id="ieqn-311"><mml:math id="mml-ieqn-311"><mml:msub><mml:mi>D</mml:mi><mml:mi>v</mml:mi></mml:msub></mml:math></inline-formula>. The new incremental index is given by: <inline-formula id="ieqn-312"><mml:math id="mml-ieqn-312"><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mi>I</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>v</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mo movablelimits="false">&#x2211;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2208;</mml:mo><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mi>D</mml:mi></mml:mrow></mml:msub><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. By adding the incremental index, the updated index becomes <inline-formula id="ieqn-313"><mml:math id="mml-ieqn-313"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mtext>new</mml:mtext></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mtext>old</mml:mtext></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mi mathvariant="normal">&#x0394;</mml:mi><mml:mi>I</mml:mi></mml:math></inline-formula>. The update process proceeds from the bottom up, with each affected parent node being updated layer by layer until the root node is reached.</p></list-item>
<list-item><label>2.</label><p>Adaptive Hash Index Update: During the index update process, the hash index must be adjusted according to changes in the data. Suppose the original hash function is <inline-formula id="ieqn-314"><mml:math id="mml-ieqn-314"><mml:mi>h</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, and as the data grows, the hash function may no longer maintain a uniform distribution of the index. Therefore, for the new document set <inline-formula id="ieqn-315"><mml:math id="mml-ieqn-315"><mml:msub><mml:mi>D</mml:mi><mml:mrow><mml:mtext>new</mml:mtext></mml:mrow></mml:msub></mml:math></inline-formula>, if its data distribution changes, the system will compute a new hash function <inline-formula id="ieqn-316"><mml:math id="mml-ieqn-316"><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. The updated hash index is then: <inline-formula id="ieqn-317"><mml:math id="mml-ieqn-317"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mtext>new</mml:mtext></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mrow><mml:mtext>new</mml:mtext></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. The update of the hash function <inline-formula id="ieqn-318"><mml:math id="mml-ieqn-318"><mml:msup><mml:mi>h</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> is performed by analyzing the distribution characteristics of the data to minimize the probability of hash collisions while maintaining a uniform distribution.</p></list-item>
<list-item><label>3.</label><p>zk-SNARK Dynamic Verification Update: For the newly updated data documents <inline-formula id="ieqn-319"><mml:math id="mml-ieqn-319"><mml:msub><mml:mi>D</mml:mi><mml:mrow><mml:mtext>new</mml:mtext></mml:mrow></mml:msub></mml:math></inline-formula>, the system generates a new verification polynomial <inline-formula id="ieqn-320"><mml:math id="mml-ieqn-320"><mml:msub><mml:mi>P</mml:mi><mml:mrow><mml:mtext>new</mml:mtext></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> by taking points and quickly merges it into the existing structure without the need to regenerate the entire polynomial. That is, <inline-formula id="ieqn-321"><mml:math id="mml-ieqn-321"><mml:msub><mml:mi>P</mml:mi><mml:mrow><mml:mtext>new</mml:mtext></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mi>P</mml:mi><mml:mrow><mml:mtext>old</mml:mtext></mml:mrow></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mo movablelimits="false">&#x2211;</mml:mo><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2208;</mml:mo><mml:msub><mml:mi>D</mml:mi><mml:mrow><mml:mtext>new</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mi>f</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. The folded verification information ensures the correctness of the incremental data, and the verification is performed through the non-interactive zero-knowledge proof mechanism of zk-SNARK.</p></list-item>
</list></p>
</sec>
</sec>
<sec id="s6">
<label>6</label>
<title>Scheme Analysis</title>
<sec id="s6_1">
<label>6.1</label>
<title>Correctness Analysis</title>
<p>In the <inline-formula id="ieqn-322"><mml:math id="mml-ieqn-322"><mml:mi>B</mml:mi><mml:mi>u</mml:mi><mml:mi>i</mml:mi><mml:mi>l</mml:mi><mml:mi>d</mml:mi><mml:mi>I</mml:mi><mml:mi>n</mml:mi><mml:mi>d</mml:mi><mml:mi>e</mml:mi><mml:mi>x</mml:mi></mml:math></inline-formula> algorithm, we encrypt the plaintext document vector <inline-formula id="ieqn-323"><mml:math id="mml-ieqn-323"><mml:mrow><mml:mover><mml:mi>d</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> to generate the encrypted vector <inline-formula id="ieqn-324"><mml:math id="mml-ieqn-324"><mml:mrow><mml:mover><mml:mi>c</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:mi>d</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mover><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula>. Upon executing the <inline-formula id="ieqn-325"><mml:math id="mml-ieqn-325"><mml:mi>G</mml:mi><mml:mi>e</mml:mi><mml:mi>n</mml:mi><mml:mi>e</mml:mi><mml:mi>r</mml:mi><mml:mi>a</mml:mi><mml:mi>t</mml:mi><mml:mi>e</mml:mi><mml:mi>T</mml:mi><mml:mi>r</mml:mi><mml:mi>a</mml:mi><mml:mi>p</mml:mi><mml:mi>d</mml:mi><mml:mi>o</mml:mi><mml:mi>o</mml:mi><mml:mi>r</mml:mi></mml:math></inline-formula> algorithm, the query trapdoor <inline-formula id="ieqn-326"><mml:math id="mml-ieqn-326"><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:msubsup><mml:mi>M</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:mi>w</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> is generated. The encrypted vector and the query trapdoor are then subjected to an inner product, and the calculation unfolds as follows:
<disp-formula id="eqn-12"><label>(12)</label><mml:math id="mml-eqn-12" display="block"><mml:mtable columnalign="right left right left right left right left right left right left" rowspacing="3pt" columnspacing="0em 2em 0em 2em 0em 2em 0em 2em 0em 2em 0em" displaystyle="true"><mml:mtr><mml:mtd><mml:mi>R</mml:mi></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mover><mml:mi>c</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:mi>T</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:mi>d</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mover><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x22C5;</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:mi>w</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mover><mml:mi>d</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:mi>w</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mover><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:mi>w</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>Here, <inline-formula id="ieqn-327"><mml:math id="mml-ieqn-327"><mml:mrow><mml:mover><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> and <inline-formula id="ieqn-328"><mml:math id="mml-ieqn-328"><mml:msubsup><mml:mi>M</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:math></inline-formula> are randomly generated, and since <inline-formula id="ieqn-329"><mml:math id="mml-ieqn-329"><mml:mrow><mml:mover><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> is a random vector, <inline-formula id="ieqn-330"><mml:math id="mml-ieqn-330"><mml:mrow><mml:mover><mml:mi>r</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mn>1</mml:mn><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:mi>w</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> will be a random value whose expected value is zero. Therefore, the primary contribution to the result comes from <inline-formula id="ieqn-331"><mml:math id="mml-ieqn-331"><mml:mrow><mml:mover><mml:mi>d</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mover><mml:mi>w</mml:mi><mml:mo stretchy="false">&#x2192;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula>, and the introduction of the random vector and matrix does not affect the final matching result. This ensures the correctness of the query result.</p>
</sec>
<sec id="s6_2">
<label>6.2</label>
<title>Security Analysis</title>
<p>Based on the semantic security definition in <xref ref-type="sec" rid="s4_5">Section 4.5</xref>, the proposed BC-VSCR scheme satisfies the CKA [<xref ref-type="bibr" rid="ref-16">16</xref>]. By constructing a simulator, we prove that in both the real and simulated worlds, the adversary cannot distinguish between real encrypted documents and simulated encrypted documents, thus proving the adaptive semantic security of the system.</p>
<p>During the simulated ciphertext generation phase, the adversary <inline-formula id="ieqn-332"><mml:math id="mml-ieqn-332"><mml:msub><mml:mi>A</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:math></inline-formula> attempts to use the document set <inline-formula id="ieqn-333"><mml:math id="mml-ieqn-333"><mml:msup><mml:mi>D</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup></mml:math></inline-formula> to perform queries, obtaining a document <italic>D</italic> that is similar to <inline-formula id="ieqn-334"><mml:math id="mml-ieqn-334"><mml:msup><mml:mi>D</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup></mml:math></inline-formula>. The encryption of the ciphertext uses AES (Advanced Encryption Standard). When the adversary runs <inline-formula id="ieqn-335"><mml:math id="mml-ieqn-335"><mml:mtext>Encrypt</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:msup><mml:mi>K</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo>,</mml:mo><mml:msup><mml:mi>D</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2192;</mml:mo><mml:msup><mml:mi>C</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup></mml:math></inline-formula>, for two random values <inline-formula id="ieqn-336"><mml:math id="mml-ieqn-336"><mml:msub><mml:mi>d</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math></inline-formula> in the sample space <inline-formula id="ieqn-337"><mml:math id="mml-ieqn-337"><mml:mi>D</mml:mi><mml:mo>=</mml:mo><mml:mo fence="false" stretchy="false">{</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>, the distance between <inline-formula id="ieqn-338"><mml:math id="mml-ieqn-338"><mml:msub><mml:mi>d</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-339"><mml:math id="mml-ieqn-339"><mml:msub><mml:mi>d</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math></inline-formula> is:
<disp-formula id="eqn-13"><label>(13)</label><mml:math id="mml-eqn-13" display="block"><mml:mtable columnalign="right left right left right left right left right left right left" rowspacing="3pt" columnspacing="0em 2em 0em 2em 0em 2em 0em 2em 0em 2em 0em" displaystyle="true"><mml:mtr><mml:mtd><mml:mrow><mml:mi mathvariant="normal">&#x0394;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:mfrac><mml:mn>1</mml:mn><mml:mn>2</mml:mn></mml:mfrac><mml:munder><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>&#x03B1;</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mi>D</mml:mi></mml:mrow></mml:munder><mml:mrow><mml:mo>|</mml:mo><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mi>&#x03B1;</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:msub><mml:mi>d</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mi>&#x03B1;</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>|</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:munder><mml:mo movablelimits="true" form="prefix">max</mml:mo><mml:mrow><mml:msup><mml:mi>D</mml:mi><mml:mrow><mml:mo>&#x2217;</mml:mo></mml:mrow></mml:msup><mml:mo>&#x2286;</mml:mo><mml:mi>D</mml:mi></mml:mrow></mml:munder><mml:mstyle scriptlevel="0"><mml:mrow><mml:mo maxsize="1.2em" minsize="1.2em">|</mml:mo></mml:mrow></mml:mstyle><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mstyle scriptlevel="0"><mml:mrow><mml:mo maxsize="1.2em" minsize="1.2em">[</mml:mo></mml:mrow></mml:mstyle><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2208;</mml:mo><mml:mi>D</mml:mi><mml:mstyle scriptlevel="0"><mml:mrow><mml:mo maxsize="1.2em" minsize="1.2em">]</mml:mo></mml:mrow></mml:mstyle><mml:mo>&#x2212;</mml:mo><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mstyle scriptlevel="0"><mml:mrow><mml:mo maxsize="1.2em" minsize="1.2em">[</mml:mo></mml:mrow></mml:mstyle><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2208;</mml:mo><mml:mi>D</mml:mi><mml:mstyle scriptlevel="0"><mml:mrow><mml:mo maxsize="1.2em" minsize="1.2em">]</mml:mo></mml:mrow></mml:mstyle><mml:mstyle scriptlevel="0"><mml:mrow><mml:mo maxsize="1.2em" minsize="1.2em">|</mml:mo></mml:mrow></mml:mstyle></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>&#x2264;</mml:mo><mml:mi>n</mml:mi><mml:mi>e</mml:mi><mml:mi>g</mml:mi><mml:mi>l</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>his ensures that the ciphertext generated by <inline-formula id="ieqn-340"><mml:math id="mml-ieqn-340"><mml:msubsup><mml:mtext>Real</mml:mtext><mml:mi>A</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msubsup><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> and <inline-formula id="ieqn-341"><mml:math id="mml-ieqn-341"><mml:msubsup><mml:mtext>Sim</mml:mtext><mml:mi>A</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msubsup><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> is computationally indistinguishable, i.e., <inline-formula id="ieqn-342"><mml:math id="mml-ieqn-342"><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mi>C</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mtext>Real</mml:mtext><mml:mi>A</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">]</mml:mo><mml:mo>&#x2212;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:msup><mml:mi>C</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mtext>Sim</mml:mtext><mml:mi>A</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">]</mml:mo><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo>&#x2264;</mml:mo><mml:msub><mml:mtext>negl</mml:mtext><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. In this stage, if the adversary attempts to infer plaintext information by observing the ciphertext index <italic>I</italic>, the simulator <inline-formula id="ieqn-343"><mml:math id="mml-ieqn-343"><mml:msubsup><mml:mtext>Sim</mml:mtext><mml:mi>A</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msubsup></mml:math></inline-formula> performs linear transformations on <italic>I</italic><sup><italic>&#x2032;</italic></sup> and <italic>I</italic><sup>&#x2033;</sup> to generate the encrypted form of the index item <inline-formula id="ieqn-344"><mml:math id="mml-ieqn-344"><mml:msup><mml:mi>I</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup></mml:math></inline-formula>. Due to the randomness of the matrices <inline-formula id="ieqn-345"><mml:math id="mml-ieqn-345"><mml:msub><mml:mi>M</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:math></inline-formula> and the binary vector <inline-formula id="ieqn-346"><mml:math id="mml-ieqn-346"><mml:msub><mml:mi>S</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math></inline-formula>, the index generation process for <italic>I</italic> statistically maintains indistinguishability, i.e., <inline-formula id="ieqn-347"><mml:math id="mml-ieqn-347"><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mtext>Real</mml:mtext><mml:mi>A</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">]</mml:mo><mml:mo>&#x2212;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:msup><mml:mi>I</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mtext>Sim</mml:mtext><mml:mi>A</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">]</mml:mo><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo>&#x2264;</mml:mo><mml:msub><mml:mtext>negl</mml:mtext><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>.</p>
<p>The adversary may attempt to leak information through the search pattern by obtaining the search token <inline-formula id="ieqn-348"><mml:math id="mml-ieqn-348"><mml:msup><mml:mi>T</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>Q</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. However, since the key <inline-formula id="ieqn-349"><mml:math id="mml-ieqn-349"><mml:mi>s</mml:mi><mml:mi>k</mml:mi></mml:math></inline-formula> generated by the DO is pseudorandom, the randomness ensures that the output distribution of <inline-formula id="ieqn-350"><mml:math id="mml-ieqn-350"><mml:msup><mml:mi>T</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>Q</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> can be represented as a conditional probability: <inline-formula id="ieqn-351"><mml:math id="mml-ieqn-351"><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:msup><mml:mi>T</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>Q</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x2223;</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>&#x2248;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mi>T</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>Q</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>&#x2223;</mml:mo><mml:mi>s</mml:mi><mml:mi>k</mml:mi><mml:mo stretchy="false">]</mml:mo></mml:math></inline-formula>.</p>
<p>In this case, even if the adversary observes multiple trapdoors from repeated queries, due to the randomness in the trapdoor generation function, the adversary cannot distinguish whether these trapdoors correspond to the same keyword <italic>Q</italic> or different keywords. Therefore, as long as <inline-formula id="ieqn-352"><mml:math id="mml-ieqn-352"><mml:mi>s</mml:mi><mml:mi>k</mml:mi></mml:math></inline-formula> is not leaked, the trapdoors appear indistinguishable to the adversary for any query <inline-formula id="ieqn-353"><mml:math id="mml-ieqn-353"><mml:msub><mml:mi>q</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:math></inline-formula> where <inline-formula id="ieqn-354"><mml:math id="mml-ieqn-354"><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:mi>m</mml:mi></mml:math></inline-formula>. Thus, <inline-formula id="ieqn-355"><mml:math id="mml-ieqn-355"><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:mi>T</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:msub><mml:mtext>Real</mml:mtext><mml:mi>A</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">]</mml:mo><mml:mo>&#x2212;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mo stretchy="false">[</mml:mo><mml:msup><mml:mi>T</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">(</mml:mo><mml:mi>Q</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:msub><mml:mtext>Sim</mml:mtext><mml:mi>A</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">]</mml:mo><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo>&#x2264;</mml:mo><mml:msub><mml:mtext>negl</mml:mtext><mml:mn>3</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. Let <inline-formula id="ieqn-356"><mml:math id="mml-ieqn-356"><mml:mtext>negl</mml:mtext><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:msub><mml:mtext>negl</mml:mtext><mml:mn>1</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mtext>negl</mml:mtext><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mtext>negl</mml:mtext><mml:mn>3</mml:mn></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, then:
<disp-formula id="eqn-14"><label>(14)</label><mml:math id="mml-eqn-14" display="block"><mml:mtable columnalign="right left right left right left right left right left right left" rowspacing="3pt" columnspacing="0em 2em 0em 2em 0em 2em 0em 2em 0em 2em 0em" displaystyle="true"><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>V</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>R</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi><mml:msub><mml:mi>l</mml:mi><mml:mi>A</mml:mi></mml:msub><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mi>D</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>V</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>S</mml:mi><mml:mi>i</mml:mi><mml:msub><mml:mi>m</mml:mi><mml:mi>A</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo stretchy="false">)</mml:mo><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>]</mml:mo></mml:mrow><mml:mrow><mml:mo stretchy="false">|</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>|</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mi>C</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>R</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi><mml:msub><mml:mi>l</mml:mi><mml:mi>A</mml:mi></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:msup><mml:mi>C</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mi>S</mml:mi><mml:mi>i</mml:mi><mml:msub><mml:mi>m</mml:mi><mml:mi>A</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mo>|</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>+</mml:mo><mml:mrow><mml:mo>|</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>R</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi><mml:msub><mml:mi>l</mml:mi><mml:mi>A</mml:mi></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:msup><mml:mi>I</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mi>D</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mi>S</mml:mi><mml:mi>i</mml:mi><mml:msub><mml:mi>m</mml:mi><mml:mi>A</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mo>|</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>+</mml:mo><mml:mrow><mml:mo>|</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mi>T</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>R</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi><mml:msub><mml:mi>l</mml:mi><mml:mi>A</mml:mi></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:msup><mml:mi>T</mml:mi><mml:mo>&#x2217;</mml:mo></mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mi>Q</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mi>S</mml:mi><mml:mi>i</mml:mi><mml:msub><mml:mi>m</mml:mi><mml:mi>A</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mo>|</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd></mml:mtd><mml:mtd><mml:mi></mml:mi><mml:mo>&#x2264;</mml:mo><mml:mi>n</mml:mi><mml:mi>e</mml:mi><mml:mi>g</mml:mi><mml:msub><mml:mi>l</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mi>n</mml:mi><mml:mi>e</mml:mi><mml:mi>g</mml:mi><mml:msub><mml:mi>l</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mi>n</mml:mi><mml:mi>e</mml:mi><mml:mi>g</mml:mi><mml:msub><mml:mi>l</mml:mi><mml:mn>3</mml:mn></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>n</mml:mi><mml:mi>e</mml:mi><mml:mi>g</mml:mi><mml:mi>l</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>&#x03BB;</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>This demonstrates that even if the adversary can dynamically adjust its strategy based on query history and trapdoor information, the system&#x2019;s encrypted documents, indices, and query results remain statistically indistinguishable to the adversary. Thus, the BC-VSCR scheme ensures semantic security under adaptive chosen keyword attacks.</p>
<p>To further validate that our solution can resist attacks such as replay attacks and man-in-the-middle attacks, we used the ProVerif verification tool to conduct experimental tests, and the results are shown in the <xref ref-type="fig" rid="fig-6">Fig. 6</xref>.</p>
<fig id="fig-6">
<label>Figure 6</label>
<caption>
<title>ProVerif testing</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-6.tif"/>
</fig>
<p>In the ProVerif verification analysis, we first verified whether the key-sharing process could be successfully executed. The query results showed that the event reachK (lambda) is guaranteed to occur, indicating that the key-sharing mechanism in the protocol is effective. Next, the private key (AttestationPrivatekey) was found to be adequately protected, and the attacker could not steal the private key (attsk[]), ensuring the confidentiality of the key. Finally, the public key (AttestationPublicKey) was also effectively protected, and the attacker could not steal the public key (attpp[]), even though public keys are usually exposed. This is because additional protection was applied to the public key in the model.</p>
<p>In conclusion, both the private and public keys in the protocol are effectively protected, ensuring the security of the key-sharing process.</p>
</sec>
<sec id="s6_3">
<label>6.3</label>
<title>Security Analysis</title>
<p>If a user attempts to tamper with the search request or results after each transaction to gain unfair advantage, the smart contract will prevent such actions. When the DU initiates a search request, they must send both the search token and the verification token to the slave chain, and deposit a sufficient search fee in the smart contract on the master chain as collateral. The smart contract will verify the DU&#x2019;s authorization and fee deposit. If the verification fails, the search request will not be broadcast, thereby blocking any fraudulent requests. Additionally, the master chain&#x2019;s smart contract records all transaction information, ensuring that the DU cannot alter this data.</p>
<p>If the CS attempts to return incorrect search results or forged verification proofs, the smart contract will automatically validate whether these proofs are correct. When the CS returns search results and verification proofs from the slave chain, they must submit these results to the master chain&#x2019;s smart contract for validation. The smart contract uses the pre-stored verification key to perform the validation. If the validation fails, the CS will not receive the service fee and will forfeit the previously paid deposit, with the search fee being refunded to the DU.</p>
</sec>
</sec>
<sec id="s7">
<label>7</label>
<title>Performance Analysis</title>
<sec id="s7_1">
<label>7.1</label>
<title>Functional Analysis</title>
<p>To evaluate the performance of the proposed scheme, a comprehensive performance assessment and comparison analysis is conducted with relevant studies from the literature. This analysis covers key metrics including keyword search, contextual semantics support, fairness, search time, verification time, and storage overhead. A detailed comparison is presented in the <xref ref-type="table" rid="table-1">Table 1</xref>:</p>
<table-wrap id="table-1">
<label>Table 1 </label>
<caption>
<title>Functional comparison</title>
</caption>
<table>
<colgroup>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
<col align="center"/>
</colgroup>
<thead>
<tr>
<th align="center">Scheme</th>
<th align="center">Keyword</th>
<th align="center">Contextual semantics</th>
<th align="center">Fairness</th>
<th align="center">Verify</th>
<th align="center">Search time</th>
<th align="center">Verification time</th>
<th align="center">Storage overhead</th>
</tr>
</thead>
<tbody>
<tr>
<td>[<xref ref-type="bibr" rid="ref-22">22</xref>]</td>
<td>&#x2713;</td>
<td>&#x2713;</td>
<td>&#x2717;</td>
<td>&#x2717;</td>
<td><inline-formula id="ieqn-357"><mml:math id="mml-ieqn-357"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mi>n</mml:mi><mml:mo>+</mml:mo><mml:mi>U</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mtext>log</mml:mtext></mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>n</mml:mi><mml:mo>+</mml:mo><mml:mi>U</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td>&#x2013;</td>
<td>Low</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-2">2</xref>]</td>
<td>&#x2713;</td>
<td>&#x2717;</td>
<td>&#x2717;</td>
<td>&#x2717;</td>
<td><inline-formula id="ieqn-358"><mml:math id="mml-ieqn-358"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>l</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td>&#x2013;</td>
<td>Low</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-3">3</xref>]</td>
<td>&#x2713;</td>
<td>&#x2717;</td>
<td>&#x2717;</td>
<td>&#x2717;</td>
<td><inline-formula id="ieqn-359"><mml:math id="mml-ieqn-359"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mi>n</mml:mi><mml:mo>+</mml:mo><mml:mi>U</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td>&#x2013;</td>
<td>Medium</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-24">24</xref>]</td>
<td>&#x2713;</td>
<td>&#x2713;</td>
<td>&#x2717;</td>
<td>&#x2717;</td>
<td><inline-formula id="ieqn-360"><mml:math id="mml-ieqn-360"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mi>d</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td>&#x2013;</td>
<td>Medium</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-4">4</xref>]</td>
<td>&#x2713;</td>
<td>&#x2717;</td>
<td>&#x2717;</td>
<td>&#x2713;</td>
<td><inline-formula id="ieqn-361"><mml:math id="mml-ieqn-361"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>d</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn><mml:mo>)</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td><inline-formula id="ieqn-362"><mml:math id="mml-ieqn-362"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mi>m</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td>Medium</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-7">7</xref>]</td>
<td>&#x2713;</td>
<td>&#x2717;</td>
<td>&#x2713;</td>
<td>&#x2713;</td>
<td><inline-formula id="ieqn-363"><mml:math id="mml-ieqn-363"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>C</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>w</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td><inline-formula id="ieqn-364"><mml:math id="mml-ieqn-364"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mi>m</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td>High</td>
</tr>
<tr>
<td>[<xref ref-type="bibr" rid="ref-32">32</xref>]</td>
<td>&#x2713;</td>
<td>&#x2717;</td>
<td>&#x2713;</td>
<td>&#x2713;</td>
<td><inline-formula id="ieqn-365"><mml:math id="mml-ieqn-365"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:msup><mml:mi>n</mml:mi><mml:mn>2</mml:mn></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td><inline-formula id="ieqn-366"><mml:math id="mml-ieqn-366"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mi>n</mml:mi><mml:mo>+</mml:mo><mml:mrow><mml:mtext>log</mml:mtext></mml:mrow><mml:mi>n</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td>Medium</td>
</tr>
<tr>
<td>Ours</td>
<td>&#x2713;</td>
<td>&#x2713;</td>
<td>&#x2713;</td>
<td>&#x2713;</td>
<td><inline-formula id="ieqn-367"><mml:math id="mml-ieqn-367"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td><inline-formula id="ieqn-368"><mml:math id="mml-ieqn-368"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mtext>log</mml:mtext></mml:mrow><mml:mi>n</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula></td>
<td>Medium</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Through theoretical comparative analysis, it is evident that our scheme outperforms existing approaches in several key areas, including keyword search, contextual semantics support, fairness, search and verification time, and storage overhead. Compared to works in [<xref ref-type="bibr" rid="ref-2">2</xref>,<xref ref-type="bibr" rid="ref-22">22</xref>], we introduce contextual semantics-aware technology, which further enhances the accuracy of multi-keyword queries. The time complexity of our search operation is <inline-formula id="ieqn-369"><mml:math id="mml-ieqn-369"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, which is more efficient than the complexities <inline-formula id="ieqn-370"><mml:math id="mml-ieqn-370"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mi>d</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> and <inline-formula id="ieqn-371"><mml:math id="mml-ieqn-371"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>C</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mi>w</mml:mi></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula> in [<xref ref-type="bibr" rid="ref-7">7</xref>,<xref ref-type="bibr" rid="ref-24">24</xref>].</p>
<p>In terms of contextual semantics support, the scheme in [<xref ref-type="bibr" rid="ref-24">24</xref>] uses the BERT model for semantic search, which has limitations in handling semantic associations. In contrast, our word vector model effectively captures complex contextual semantics, especially in dealing with polysemy and dynamic data, leading to search results that more accurately align with user intent.</p>
<p>Furthermore, our scheme ensures fairness in search transactions through the blockchain master-slave chain architecture, addressing the issues of denial of transaction responsibility seen in [<xref ref-type="bibr" rid="ref-2">2</xref>&#x2013;<xref ref-type="bibr" rid="ref-4">4</xref>,<xref ref-type="bibr" rid="ref-22">22</xref>,<xref ref-type="bibr" rid="ref-24">24</xref>]. Regarding search and verification efficiency, we improve the zk-SNARK verification mechanism, achieving a verification time complexity of <inline-formula id="ieqn-372"><mml:math id="mml-ieqn-372"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mi>log</mml:mi><mml:mo>&#x2061;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>, which is more efficient than the linear complexities of other schemes [<xref ref-type="bibr" rid="ref-4">4</xref>,<xref ref-type="bibr" rid="ref-7">7</xref>,<xref ref-type="bibr" rid="ref-8">8</xref>].</p>
<p>Additionally, by separating the encrypted index and verification information, we distribute the storage load effectively across the master and slave chains. Our scheme reduces storage overhead, making it more suitable for large-scale, dynamic data environments, with a lower storage requirement compared to the approaches in [<xref ref-type="bibr" rid="ref-7">7</xref>] and others.</p>
</sec>
<sec id="s7_2">
<label>7.2</label>
<title>Experimental Environment</title>
<p>To more comprehensively evaluate the performance of our solution, we conducted experimental comparisons and analysis with the following schemes: MRSE [<xref ref-type="bibr" rid="ref-22">22</xref>], FWSR [<xref ref-type="bibr" rid="ref-2">2</xref>], HLZ [<xref ref-type="bibr" rid="ref-3">3</xref>], SSRB [<xref ref-type="bibr" rid="ref-24">24</xref>], and VSRD [<xref ref-type="bibr" rid="ref-4">4</xref>]. The experimental data were sourced from a real-world dataset: Semantic Textual Similarity. The dataset underwent standard preprocessing steps, including stopword removal, stemming, and other common text processing techniques. The RSA (Rivest-Shamir-Adleman) digital signature used a public exponent of 65,537 and a key length of 2048 bits. The experimental results were obtained by averaging 100 local executions. The experimental setup is detailed in <xref ref-type="table" rid="table-2">Table 2</xref>.</p>
<table-wrap id="table-2">
<label>Table 2 </label>
<caption>
<title>Experimental environment</title>
</caption>
<table>
<colgroup>
<col/>
<col/>
</colgroup>
<thead>
<tr>
<th>Supporting environment</th>
<th>Version</th>
</tr>
</thead>
<tbody>
<tr>
<td>Server CPU</td>
<td>13th Gen Inter(R) Core (TM)</td>
</tr>
<tr>
<td></td>
<td>i9-13900HX@2.10 GHz</td>
</tr>
<tr>
<td>Server RAM</td>
<td>36 G</td>
</tr>
<tr>
<td>Graphics Card</td>
<td>GeForce RTX 4060</td>
</tr>
<tr>
<td>Ubuntu</td>
<td>22.04</td>
</tr>
<tr>
<td>Pycharm</td>
<td>2023.1</td>
</tr>
<tr>
<td>Hyperledger Fabric</td>
<td>2.5.4</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s7_3">
<label>7.3</label>
<title>Computational Overhead</title>
<sec id="s7_3_1">
<label>7.3.1</label>
<title>Model Training Time and Index Construction Overhead</title>
<p><xref ref-type="fig" rid="fig-7">Fig. 7</xref> illustrates the model training time for preprocessing the DO data using word2vec. From the figure, it is evident that as the number of documents increases, the training time exhibits a linear growth trend. This process only requires training once, and the trained model can be reused multiple times without affecting the efficiency of subsequent index construction or trapdoor generation. During subsequent updates, only a small number of randomly selected negative samples undergo gradient updates, rather than performing a full update on all vocabulary.</p>
<fig id="fig-7">
<label>Figure 7</label>
<caption>
<title>Training time</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-7.tif"/>
</fig>
<p>After the completion of word vector training, the system proceeds to the index generation and blockchain uploading phase. To conduct a comparative analysis of the performance of different schemes, we evaluated the index construction time from two dimensions. As shown in <xref ref-type="fig" rid="fig-8">Fig. 8a</xref>, with a fixed document count of 100, we assessed the impact of varying keyword counts on the index construction time overhead. In [<xref ref-type="bibr" rid="ref-2">2</xref>,<xref ref-type="bibr" rid="ref-3">3</xref>], the use of a counting Bloom filter for pre-mapping keywords leads to relatively higher computational overhead during the index generation process. Scheme [<xref ref-type="bibr" rid="ref-4">4</xref>] constructs the index using vector range decisions, whereas our approach significantly reduces index generation time by employing clustered topic word vectors as parent nodes. Overall, the index construction overhead of our scheme is similar to that of scheme [<xref ref-type="bibr" rid="ref-4">4</xref>], but it is notably lower than the overhead in [<xref ref-type="bibr" rid="ref-2">2</xref>,<xref ref-type="bibr" rid="ref-3">3</xref>].</p>
<fig id="fig-8">
<label>Figure 8</label>
<caption>
<title>Index construction overhead. (a) Impact of different keyword counts on index construction time, (b) Impact of different document counts on index construction time</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-8.tif"/>
</fig>
<p><xref ref-type="fig" rid="fig-8">Fig. 8b</xref> illustrates the impact of varying document counts on the index construction overhead, with the keyword count fixed at 100. As the document count increases, the index construction time for all schemes shows an upward trend. Schemes [<xref ref-type="bibr" rid="ref-22">22</xref>,<xref ref-type="bibr" rid="ref-24">24</xref>] generate the index directly from the document dictionary, while our scheme introduces a clustering algorithm to reduce the index construction time. Compared to scheme [<xref ref-type="bibr" rid="ref-22">22</xref>], our approach reduces the index construction time by approximately 54%, and by about 24% compared to scheme [<xref ref-type="bibr" rid="ref-24">24</xref>]. Overall, our scheme outperforms the other comparative schemes in terms of index construction efficiency.</p>
</sec>
<sec id="s7_3_2">
<label>7.3.2</label>
<title>Trapdoor Generation Time</title>
<p><xref ref-type="fig" rid="fig-9">Fig. 9</xref> shows the overhead of trapdoor generation time. Similar to the index construction scheme, the time overhead of trapdoor generation increases as the number of query keywords grows. Compared to the trapdoor generation scheme in [<xref ref-type="bibr" rid="ref-4">4</xref>], where the three steps&#x2014;generation, sharing, and distribution&#x2014;are processed separately, our scheme incurs slightly higher overhead due to the need to first locate the corresponding topic word vectors during trapdoor generation. However, this overhead remains within an acceptable range. In [<xref ref-type="bibr" rid="ref-22">22</xref>], trapdoor randomization is achieved by adding fake keywords, and in [<xref ref-type="bibr" rid="ref-3">3</xref>], a counting Bloom filter is used for trapdoor processing, both of which result in relatively high overhead. Additionally, in [<xref ref-type="bibr" rid="ref-24">24</xref>], the dimensionality of the vectors increases with the number of query keywords, leading to higher trapdoor generation costs. When the number of query keywords reaches 1000, our scheme effectively leverages contextual semantic information, controlling the trapdoor generation time to 2.927 s, significantly outperforming the schemes in [<xref ref-type="bibr" rid="ref-3">3</xref>,<xref ref-type="bibr" rid="ref-22">22</xref>,<xref ref-type="bibr" rid="ref-24">24</xref>].</p>
<fig id="fig-9">
<label>Figure 9</label>
<caption>
<title>Trapdoor generation time</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-9.tif"/>
</fig>
</sec>
<sec id="s7_3_3">
<label>7.3.3</label>
<title>Search Overhead</title>
<p>To provide a more intuitive comparison with existing literature, we evaluated the search overhead of our scheme from two dimensions. The part a of <xref ref-type="fig" rid="fig-10">Fig. 10</xref> illustrates the impact of varying keyword counts on query time overhead with a fixed document count of 100. Schemes in [<xref ref-type="bibr" rid="ref-2">2</xref>,<xref ref-type="bibr" rid="ref-3">3</xref>] implement search by combining traditional LSH (Locality Sensitive Hashing) with Bloom filters. However, when the number of keywords increases to 1000, these schemes fail to fully capture the semantic intent of the DU, and the search time overhead exceeds 3 s, making it difficult to handle complex semantic queries. The search time overhead of our scheme is similar to that of [<xref ref-type="bibr" rid="ref-4">4</xref>], but since our similarity scoring mechanism directly matches with the on-chain index, it better understands and reflects the user&#x2019;s semantic information. As a result, it performs better than the range decision search approach in [<xref ref-type="bibr" rid="ref-4">4</xref>] when handling complex semantic queries.</p>
<fig id="fig-10">
<label>Figure 10</label>
<caption>
<title>Search overhead. (a) Impact of varying keyword counts on query time overhead, (b) Impact of varying document counts on query time overhead</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-10.tif"/>
</fig>
<p>Part b of <xref ref-type="fig" rid="fig-10">Fig. 10</xref> shows the impact of varying document counts on query overhead with the number of keywords fixed at 100. Scheme [<xref ref-type="bibr" rid="ref-22">22</xref>] requires not only the computation of index and trapdoor inner products but also TF-IDF-based similarity score calculations for result ranking, leading to relatively higher overhead. In contrast, our scheme performs both search and ranking with only inner product calculations, resulting in lower overhead. Compared to the semantic search scheme based on the BERT model in [<xref ref-type="bibr" rid="ref-24">24</xref>], our scheme significantly reduces time overhead while maintaining search accuracy, achieving higher efficiency.</p>
</sec>
<sec id="s7_3_4">
<label>7.3.4</label>
<title>Accuracy</title>
<p>Search accuracy is one of the core metrics for evaluating the effectiveness of a scheme. In this experiment, we use Precision to measure the retrieval performance of BC-VSCR. Precision is defined as the proportion of relevant documents among all retrieved documents, calculated as follows:
<disp-formula id="eqn-15"><label>(15)</label><mml:math id="mml-eqn-15" display="block"><mml:mrow><mml:mi>P</mml:mi><mml:mi>r</mml:mi><mml:mi>e</mml:mi><mml:mi>c</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>i</mml:mi><mml:mi>o</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>T</mml:mi><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi><mml:mi>P</mml:mi><mml:mo>+</mml:mo><mml:mi>F</mml:mi><mml:mi>P</mml:mi></mml:mrow></mml:mfrac></mml:math></disp-formula></p>
<p>As shown in the <xref ref-type="fig" rid="fig-11">Fig. 11</xref>, the search accuracy of BC-VSCR demonstrates a noticeable improvement as the number of documents increases. The specific data are shown in the figure. The average precision of BC-VSCR is 96.64%. Scheme [<xref ref-type="bibr" rid="ref-2">2</xref>], which uses Bloom filters, is limited by its false positive rate, resulting in a decline in query accuracy. In contrast, Scheme [<xref ref-type="bibr" rid="ref-24">24</xref>], which is also based on machine learning, achieves a precision of 85.11% under the same conditions. Scheme [<xref ref-type="bibr" rid="ref-4">4</xref>], due to its use of vector range decisions, performs slightly better than our scheme on small-scale datasets with precise keywords. However, as the document count increases, Scheme [<xref ref-type="bibr" rid="ref-4">4</xref>] shows a decline, which is attributed to the limitations of its vector range decision approach. Our machine learning-based scheme, on the other hand, is capable of extracting more contextual semantic features, which Scheme [<xref ref-type="bibr" rid="ref-4">4</xref>] does not, leading to a steady increase in accuracy as the document count grows. Overall, our scheme demonstrates superior search accuracy.</p>
<fig id="fig-11">
<label>Figure 11</label>
<caption>
<title>Accuracy</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-11.tif"/>
</fig>
</sec>
<sec id="s7_3_5">
<label>7.3.5</label>
<title>Verification Time</title>
<p>In terms of verification overhead, schemes [<xref ref-type="bibr" rid="ref-2">2</xref>,<xref ref-type="bibr" rid="ref-3">3</xref>,<xref ref-type="bibr" rid="ref-24">24</xref>] do not provide a verification mechanism for search results, which undoubtedly increases the risk of server malfeasance. Compared to scheme [<xref ref-type="bibr" rid="ref-4">4</xref>], the verification time overhead of our scheme is <inline-formula id="ieqn-373"><mml:math id="mml-ieqn-373"><mml:mrow><mml:mi>&#x1D4AA;</mml:mi></mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mi>log</mml:mi><mml:mo>&#x2061;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy="false">)</mml:mo></mml:math></inline-formula>. As shown in the <xref ref-type="fig" rid="fig-12">Fig. 12</xref>, when verifying a large number of documents, the verification time of our scheme is significantly reduced. When the document count reaches 10,000, our scheme completes the verification in just 4.3274 s, achieving a 47% improvement in efficiency compared to scheme [<xref ref-type="bibr" rid="ref-4">4</xref>]. This improvement is attributed to the zk-SNARK verification mechanism in our scheme, coupled with the independent on-chain storage of the verification proof, which greatly reduces the verification time overhead.</p>
<fig id="fig-12">
<label>Figure 12</label>
<caption>
<title>Verification time</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-12.tif"/>
</fig>
</sec>
<sec id="s7_3_6">
<label>7.3.6</label>
<title>System Performance</title>
<p>In terms of smart contract storage, the vector inner product result is a 4-dimensional row vector, with each element being a double-precision floating point (8 bytes), totaling 32 bytes. The index operation is based on the algorithm described in <xref ref-type="sec" rid="s4_3_2">Section 4.3.2</xref> for index construction, generating a 256-bit hash that occupies 32 bytes of space. The verification identifier generates a 128-bit ciphertext (16 bytes). When <inline-formula id="ieqn-374"><mml:math id="mml-ieqn-374"><mml:mi>w</mml:mi><mml:mo>=</mml:mo><mml:mn>1000</mml:mn></mml:math></inline-formula> and Oracle access <inline-formula id="ieqn-375"><mml:math id="mml-ieqn-375"><mml:mi>&#x03BA;</mml:mi><mml:mo>=</mml:mo><mml:mn>10</mml:mn></mml:math></inline-formula>, the storage size of the main chain index is 343.75 KB, and the storage size of the verification identifier is 15.625 KB. Overall, the storage overhead of our solution is minimal.</p>
<p>To comprehensively assess the performance of blockchain smart contracts in BC-VSCR under high concurrency, we used Hyperledger Fabric&#x2019;s performance testing tool, Tape, to evaluate several dimensions of concurrent transactions, including throughput, transaction duration, latency, and success rate. In the experiment, we simulated between 100 and 1000 concurrent query requests, focusing on evaluating the execution efficiency of the main chain and slave chain smart contracts in Search and Verify operations.</p>
<p>The experimental results show that as the number of concurrent transactions increases, the transaction duration grows linearly. With 1000 concurrent transactions, the transaction duration for search and verification operations was 21.6 and 22.8 s, respectively. Throughout the entire test, throughput remained relatively stable, with the average throughput for both search and verification consistently around 45 TPS (transactions per second), as shown in <xref ref-type="fig" rid="fig-13">Fig. 13</xref>. Even under high concurrency, the system&#x2019;s throughput remained at a high level, significantly outperforming similar solutions.</p>
<fig id="fig-13">
<label>Figure 13</label>
<caption>
<title>TPS</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-13.tif"/>
</fig>
<p>We also measured latency (the average time from sending the request to receiving the response) and success rate. When the number of concurrent requests reached 1000, the latency for search and verification operations was 32 and 37 ms, respectively, demonstrating good response times. Additionally, all operations achieved a 99.8<inline-formula id="ieqn-376"><mml:math id="mml-ieqn-376"><mml:mi mathvariant="normal">%</mml:mi></mml:math></inline-formula> success rate throughout the entire test. This shows that even in a high-concurrency environment, the smart contracts on the blockchain maintained extremely high reliability and stability.</p>
<p>In the experiment, the search smart contract on the main chain was primarily responsible for the lookup and matching of the encrypted index, while the verification smart contract on the slave chain was used to validate the correctness of the search results. As shown in <xref ref-type="fig" rid="fig-14">Fig. 14</xref>, as the number of concurrent requests increased, the average computation time for the search operation on the main chain was 2.92 s, with a slight increase but still within an acceptable range. On the other hand, the average computation time for the verification operation on the slave chain was 2.45 s, demonstrating higher processing efficiency. Even when handling up to 1000 concurrent query requests, the system maintained low latency, high throughput, and extremely high transaction success rates. The main chain handles fast lookups of the encrypted index, while the slave chain focuses on the verification operation. Together, they complement each other, effectively reducing computational pressure and improving the overall efficiency of the system.</p>
<fig id="fig-14">
<label>Figure 14</label>
<caption>
<title>Computation time</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_69240-fig-14.tif"/>
</fig>
</sec>
</sec>
</sec>
<sec id="s8">
<label>8</label>
<title>Conclusion</title>
<p>This paper addresses the challenges faced by traditional SE schemes in ciphertext retrieval, including the inability to handle complex semantic queries, frequent data leakage and repudiation issues, and the high overhead of existing verification mechanisms. We propose a blockchain-based, efficient verification contextual semantic-aware ciphertext retrieval scheme.The proposed scheme introduces the word2vec word vector model to construct a semantically-aware encrypted index, enabling ciphertext retrieval that is no longer limited to simple keyword matching. This significantly improves retrieval accuracy in the context of complex queries. To further reduce system load and ensure fairness in data exchange, the scheme designs an updatable master-slave chain blockchain structure. The master chain stores encrypted keyword indices, while the slave chain stores verification information generated by zero-knowledge proofs, thereby ensuring load balancing and effectively improving the system&#x2019;s search and verification efficiency. In terms of the verification mechanism, we integrate zk-SNARK zero-knowledge proofs with blockchain technology, simplifying the proof generation process and storing the proof on-chain, enabling fast, non-interactive verification of search results. Experimental results demonstrate that the proposed scheme outperforms existing approaches in terms of keyword search accuracy, response time, verification efficiency, and dynamic data processing capability, offering superior performance, more comprehensive functionality, broader application adaptability, and higher practicality.</p>
<p>Future research will continue to optimize the verification process to reduce computational costs and explore more potential applications of deep learning models combined with blockchain technology.</p>
</sec>
</body>
<back>
<ack>
<p>Not applicable.</p>
</ack>
<sec>
<title>Funding Statement</title>
<p>This work was supported in part by the National Natural Science Foundation of China under Grant 62262073; in part by the Yunnan Provincial Ten Thousand People Program for Young Top Talents under Grant YNWR-QNBJ-2019-237; and in part by the Yunnan Provincial Major Science and Technology Special Program under Grant 202402AD080002.</p>
</sec>
<sec>
<title>Author Contributions</title>
<p>Haochen Bao conceptualized the research, designed the methodology, and wrote the main manuscript text. Lingyun Yuan supervised the project, acquired funding, and contributed to the writing&#x2014;review &#x0026; editing and validation. Tianyu Xie contributed to the conceptualization, methodology, visualization, and formal analysis. Han Chen contributed to the visualization, validation, and formal analysis. Hui Dai contributed to the visualization, validation, and formal analysis. All authors reviewed the results and approved the final version of the manuscript.</p>
</sec>
<sec sec-type="data-availability">
<title>Availability of Data and Materials</title>
<p>Data sets used in this study can be in the following website for: <ext-link ext-link-type="uri" xlink:href="https://paperswithcode.com/dataset/sts-benchmark">https://paperswithcode.com/dataset/sts-benchmark</ext-link> (accessed on 29 July 2025). Experimental data will be shared upon reasonable request.</p>
</sec>
<sec>
<title>Ethics Approval</title>
<p>Not applicable.</p>
</sec>
<sec sec-type="COI-statement">
<title>Conflicts of Interest</title>
<p>The authors declare no conflicts of interest to report regarding the present study.</p>
</sec>
<ref-list content-type="authoryear">
<title>References</title>
<ref id="ref-1"><label>[1]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Song</surname> <given-names>DX</given-names></string-name>, <string-name><surname>Wagner</surname> <given-names>D</given-names></string-name>, <string-name><surname>Perrig</surname> <given-names>A</given-names></string-name></person-group>. <article-title>Practical techniques for searches on encrypted data</article-title>. In: <conf-name>Proceeding 2000 IEEE Symposium on Security and Privacy, S&#x0026;P 2000</conf-name>; <year>2000 May 14&#x2013;17</year>; <publisher-loc>Berkeley, CA, USA</publisher-loc>. p. <fpage>44</fpage>&#x2013;<lpage>55</lpage>.</mixed-citation></ref>
<ref id="ref-2"><label>[2]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Fu</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Wu</surname> <given-names>X</given-names></string-name>, <string-name><surname>Guan</surname> <given-names>C</given-names></string-name>, <string-name><surname>Sun</surname> <given-names>X</given-names></string-name>, <string-name><surname>Ren</surname> <given-names>K</given-names></string-name></person-group>. <article-title>Toward efficient multi-keyword fuzzy search over encrypted outsourced data with accuracy improvement</article-title>. <source>IEEE Trans Inf Forensics Secur</source>. <year>2016</year>;<volume>11</volume>(<issue>12</issue>):<fpage>2706</fpage>&#x2013;<lpage>16</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tifs.2016.2596138</pub-id>.</mixed-citation></ref>
<ref id="ref-3"><label>[3]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>He</surname> <given-names>H</given-names></string-name>, <string-name><surname>Liu</surname> <given-names>C</given-names></string-name>, <string-name><surname>Zhou</surname> <given-names>X</given-names></string-name>, <string-name><surname>Feng</surname> <given-names>K</given-names></string-name></person-group>. <article-title>FMSM: a fuzzy multi-keyword search scheme for encrypted cloud data based on multi-chain network</article-title>. In: <conf-name>50th International Conference on Parallel Processing Workshop</conf-name>; <year>2021 Aug 9&#x2013;12</year>; <publisher-loc>Lemont, IL, USA</publisher-loc>. p. <fpage>1</fpage>&#x2013;<lpage>8</lpage>.</mixed-citation></ref>
<ref id="ref-4"><label>[4]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Han</surname> <given-names>J</given-names></string-name>, <string-name><surname>Qi</surname> <given-names>L</given-names></string-name>, <string-name><surname>Zhuang</surname> <given-names>J</given-names></string-name></person-group>. <article-title>Vector sum range decision for verifiable multiuser fuzzy keyword search in cloud-assisted IoT</article-title>. <source>IEEE Internet Things J</source>. <year>2023</year>;<volume>11</volume>(<issue>1</issue>):<fpage>931</fpage>&#x2013;<lpage>43</lpage>. doi:<pub-id pub-id-type="doi">10.1109/jiot.2023.3288276</pub-id>.</mixed-citation></ref>
<ref id="ref-5"><label>[5]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Huang</surname> <given-names>W</given-names></string-name>, <string-name><surname>Chen</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Jing</surname> <given-names>D</given-names></string-name>, <string-name><surname>Feng</surname> <given-names>J</given-names></string-name>, <string-name><surname>Han</surname> <given-names>G</given-names></string-name>, <string-name><surname>Zhang</surname> <given-names>W</given-names></string-name></person-group>. <article-title>A multi-cloud collaborative data security sharing scheme with blockchain indexing in industrial Internet environments</article-title>. <source>IEEE Internet Things J</source>. <year>2024</year>;<volume>11</volume>(<issue>16</issue>):<fpage>27532</fpage>&#x2013;<lpage>44</lpage>. doi:<pub-id pub-id-type="doi">10.1109/jiot.2024.3398774</pub-id>.</mixed-citation></ref>
<ref id="ref-6"><label>[6]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Liu</surname> <given-names>P</given-names></string-name>, <string-name><surname>He</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Zhao</surname> <given-names>B</given-names></string-name>, <string-name><surname>Guo</surname> <given-names>B</given-names></string-name>, <string-name><surname>Zhai</surname> <given-names>Z</given-names></string-name></person-group>. <article-title>Efficient multi-authority attribute-based searchable encryption scheme with blockchain assistance for cloud-edge coordination</article-title>. <source>Comput Mater Contin</source>. <year>2023</year>;<volume>76</volume>(<issue>3</issue>):<fpage>3325</fpage>&#x2013;<lpage>43</lpage>. doi:<pub-id pub-id-type="doi">10.32604/cmc.2023.041167</pub-id>.</mixed-citation></ref>
<ref id="ref-7"><label>[7]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Xu</surname> <given-names>C</given-names></string-name>, <string-name><surname>Yu</surname> <given-names>L</given-names></string-name>, <string-name><surname>Zhu</surname> <given-names>L</given-names></string-name>, <string-name><surname>Zhang</surname> <given-names>C</given-names></string-name></person-group>. <article-title>A blockchain-based dynamic searchable symmetric encryption scheme under multiple clouds</article-title>. <source>Peer-Peer Netw Appl</source>. <year>2021</year>;<volume>14</volume>(<issue>6</issue>):<fpage>3647</fpage>&#x2013;<lpage>59</lpage>. doi:<pub-id pub-id-type="doi">10.1007/s12083-021-01202-6</pub-id>.</mixed-citation></ref>
<ref id="ref-8"><label>[8]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>He</surname> <given-names>K</given-names></string-name>, <string-name><surname>Chen</surname> <given-names>J</given-names></string-name>, <string-name><surname>Zhou</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Du</surname> <given-names>R</given-names></string-name>, <string-name><surname>Xiang</surname> <given-names>Y</given-names></string-name></person-group>. <article-title>Secure dynamic searchable symmetric encryption with constant client storage cost</article-title>. <source>IEEE Trans Inf Forensics Secur</source>. <year>2020</year>;<volume>16</volume>:<fpage>1538</fpage>&#x2013;<lpage>49</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tifs.2020.3033412</pub-id>.</mixed-citation></ref>
<ref id="ref-9"><label>[9]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Li</surname> <given-names>X</given-names></string-name>, <string-name><surname>Tong</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Zhao</surname> <given-names>J</given-names></string-name>, <string-name><surname>Miao</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Ma</surname> <given-names>S</given-names></string-name>, <string-name><surname>Weng</surname> <given-names>J</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>VRFMS: verifiable ranked fuzzy multi-keyword search over encrypted data</article-title>. <source>IEEE Trans Serv Comput</source>. <year>2022</year>;<volume>16</volume>(<issue>1</issue>):<fpage>698</fpage>&#x2013;<lpage>710</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tsc.2021.3140092</pub-id>.</mixed-citation></ref>
<ref id="ref-10"><label>[10]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Sun</surname> <given-names>W</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>B</given-names></string-name>, <string-name><surname>Cao</surname> <given-names>N</given-names></string-name>, <string-name><surname>Li</surname> <given-names>M</given-names></string-name>, <string-name><surname>Lou</surname> <given-names>W</given-names></string-name>, <string-name><surname>Hou</surname> <given-names>YT</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>Verifiable privacy-preserving multi-keyword text search in the cloud supporting similarity-based ranking</article-title>. <source>IEEE Trans Parallel Distrib Syst</source>. <year>2013</year>;<volume>25</volume>(<issue>11</issue>):<fpage>3025</fpage>&#x2013;<lpage>35</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tpds.2013.282</pub-id>.</mixed-citation></ref>
<ref id="ref-11"><label>[11]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Liu</surname> <given-names>X</given-names></string-name>, <string-name><surname>Yang</surname> <given-names>X</given-names></string-name>, <string-name><surname>Luo</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Zhang</surname> <given-names>Q</given-names></string-name></person-group>. <article-title>Verifiable multikeyword search encryption scheme with anonymous key generation for medical Internet of Things</article-title>. <source>IEEE Internet Things J</source>. <year>2021</year>;<volume>9</volume>(<issue>22</issue>):<fpage>22315</fpage>&#x2013;<lpage>26</lpage>. doi:<pub-id pub-id-type="doi">10.1109/jiot.2021.3056116</pub-id>.</mixed-citation></ref>
<ref id="ref-12"><label>[12]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Tong</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Miao</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Weng</surname> <given-names>J</given-names></string-name>, <string-name><surname>Liu</surname> <given-names>X</given-names></string-name>, <string-name><surname>Choo</surname> <given-names>KKR</given-names></string-name>, <string-name><surname>Deng</surname> <given-names>RH</given-names></string-name></person-group>. <article-title>Verifiable fuzzy multi-keyword search over encrypted data with adaptive security</article-title>. <source>IEEE Trans Knowl Data Eng</source>. <year>2022</year>;<volume>35</volume>(<issue>5</issue>):<fpage>5386</fpage>&#x2013;<lpage>99</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tkde.2022.3152033</pub-id>.</mixed-citation></ref>
<ref id="ref-13"><label>[13]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Zhang</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Zhu</surname> <given-names>T</given-names></string-name>, <string-name><surname>Guo</surname> <given-names>R</given-names></string-name>, <string-name><surname>Xu</surname> <given-names>S</given-names></string-name>, <string-name><surname>Cui</surname> <given-names>H</given-names></string-name>, <string-name><surname>Cao</surname> <given-names>J</given-names></string-name></person-group>. <article-title>Multi-keyword searchable and verifiable attribute-based encryption over cloud data</article-title>. <source>IEEE Trans Cloud Comput</source>. <year>2021</year>;<volume>11</volume>(<issue>1</issue>):<fpage>971</fpage>&#x2013;<lpage>83</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tcc.2023.3312918</pub-id>.</mixed-citation></ref>
<ref id="ref-14"><label>[14]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Parno</surname> <given-names>B</given-names></string-name>, <string-name><surname>Howell</surname> <given-names>J</given-names></string-name>, <string-name><surname>Gentry</surname> <given-names>C</given-names></string-name>, <string-name><surname>Raykova</surname> <given-names>M</given-names></string-name></person-group>. <article-title>Pinocchio: nearly practical verifiable computation</article-title>. <source>Commun ACM</source>. <year>2016</year>;<volume>59</volume>(<issue>2</issue>):<fpage>103</fpage>&#x2013;<lpage>12</lpage>.</mixed-citation></ref>
<ref id="ref-15"><label>[15]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><surname>Goh</surname> <given-names>EJ</given-names></string-name></person-group>. <article-title>Building secure indexes for searching efficiently on encrypted compressed data. Cryptology ePrint Archive: 2003/216. 2003</article-title>.</mixed-citation></ref>
<ref id="ref-16"><label>[16]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Curtmola</surname> <given-names>R</given-names></string-name>, <string-name><surname>Garay</surname> <given-names>J</given-names></string-name>, <string-name><surname>Kamara</surname> <given-names>S</given-names></string-name>, <string-name><surname>Ostrovsky</surname> <given-names>R</given-names></string-name></person-group>. <article-title>Searchable symmetric encryption: improved definitions and efficient constructions</article-title>. In: <conf-name>Proceedings of the 13th ACM Conference on Computer and Communications Security</conf-name>; <year>2006 Oct 30&#x2013;Nov 3</year>; <publisher-loc>Alexandria, VA, USA</publisher-loc>. p. <fpage>79</fpage>&#x2013;<lpage>88</lpage>.</mixed-citation></ref>
<ref id="ref-17"><label>[17]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Chang</surname> <given-names>YC</given-names></string-name>, <string-name><surname>Mitzenmacher</surname> <given-names>M</given-names></string-name></person-group>. <article-title>Privacy preserving keyword searches on remote encrypted data</article-title>. In: <conf-name>International Conference on Applied Cryptography and Network Security</conf-name>. <publisher-loc>Berlin/Heidelberg, Gearmany</publisher-loc>: <publisher-name>Springer</publisher-name>; <year>2005</year>. p. <fpage>442</fpage>&#x2013;<lpage>55</lpage>.</mixed-citation></ref>
<ref id="ref-18"><label>[18]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Kamara</surname> <given-names>S</given-names></string-name>, <string-name><surname>Papamanthou</surname> <given-names>C</given-names></string-name>, <string-name><surname>Roeder</surname> <given-names>T</given-names></string-name></person-group>. <article-title>Dynamic searchable symmetric encryption</article-title>. In: <conf-name>Proceedings of the 2012 ACM Conference on Computer and Communications Security</conf-name>; <year>2012 Oct 16&#x2013;18</year>; <publisher-loc>Raleigh, NC, USA</publisher-loc>. p. <fpage>965</fpage>&#x2013;<lpage>76</lpage>.</mixed-citation></ref>
<ref id="ref-19"><label>[19]</label><mixed-citation publication-type="book"><person-group person-group-type="author"><string-name><surname>Kurosawa</surname> <given-names>K</given-names></string-name>, <string-name><surname>Ohtaki</surname> <given-names>Y</given-names></string-name></person-group>. <chapter-title>UC-secure searchable symmetric encryption</chapter-title>. In: <source>Financial Cryptography and Data Securit</source>. <publisher-loc>Berlin/Heidelberg, Gearmany</publisher-loc>: <publisher-name>Springer</publisher-name>; <year>2012</year>. p. <fpage>285</fpage>&#x2013;<lpage>98</lpage>. doi:<pub-id pub-id-type="doi">10.1007/978-3-642-32946-3_21</pub-id>.</mixed-citation></ref>
<ref id="ref-20"><label>[20]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Liu</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Peng</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Pei</surname> <given-names>S</given-names></string-name>, <string-name><surname>Wu</surname> <given-names>J</given-names></string-name>, <string-name><surname>Peng</surname> <given-names>T</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>G</given-names></string-name></person-group>. <article-title>Prime inner product encoding for effective wildcard-based multi-keyword fuzzy search</article-title>. <source>IEEE Trans Serv Comput</source>. <year>2020</year>;<volume>15</volume>(<issue>4</issue>):<fpage>1799</fpage>&#x2013;<lpage>812</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tsc.2020.3020688</pub-id>.</mixed-citation></ref>
<ref id="ref-21"><label>[21]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Zhong</surname> <given-names>H</given-names></string-name>, <string-name><surname>Li</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Cui</surname> <given-names>J</given-names></string-name>, <string-name><surname>Sun</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Liu</surname> <given-names>L</given-names></string-name></person-group>. <article-title>Efficient dynamic multi-keyword fuzzy search over encrypted cloud data</article-title>. <source>J Netw Comput Appl</source>. <year>2020</year>;<volume>149</volume>(<issue>1</issue>):<fpage>102469</fpage>. doi:<pub-id pub-id-type="doi">10.1016/j.jnca.2019.102469</pub-id>.</mixed-citation></ref>
<ref id="ref-22"><label>[22]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Cao</surname> <given-names>N</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>C</given-names></string-name>, <string-name><surname>Li</surname> <given-names>M</given-names></string-name>, <string-name><surname>Ren</surname> <given-names>K</given-names></string-name>, <string-name><surname>Lou</surname> <given-names>W</given-names></string-name></person-group>. <article-title>Privacy-preserving multi-keyword ranked search over encrypted cloud data</article-title>. <source>IEEE Trans Parallel Distrib Syst</source>. <year>2013</year>;<volume>25</volume>(<issue>1</issue>):<fpage>222</fpage>&#x2013;<lpage>33</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tpds.2013.45</pub-id>.</mixed-citation></ref>
<ref id="ref-23"><label>[23]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Fu</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Huang</surname> <given-names>F</given-names></string-name>, <string-name><surname>Ren</surname> <given-names>K</given-names></string-name>, <string-name><surname>Weng</surname> <given-names>J</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>C</given-names></string-name></person-group>. <article-title>Privacy-preserving smart semantic search based on conceptual graphs over encrypted outsourced data</article-title>. <source>IEEE Trans Inf Forensics Secur</source>. <year>2017</year>;<volume>12</volume>(<issue>8</issue>):<fpage>1874</fpage>&#x2013;<lpage>84</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tifs.2017.2692728</pub-id>.</mixed-citation></ref>
<ref id="ref-24"><label>[24]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Fu</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Sun</surname> <given-names>X</given-names></string-name>, <string-name><surname>Zhang</surname> <given-names>X</given-names></string-name></person-group>. <article-title>Semantic and secure search over encrypted outsourcing cloud based on BERT</article-title>. <source>Front Comput Sci</source>. <year>2022</year>;<volume>16</volume>(<issue>2</issue>):<fpage>162802</fpage>. doi:<pub-id pub-id-type="doi">10.1007/s11704-021-0277-0</pub-id>.</mixed-citation></ref>
<ref id="ref-25"><label>[25]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Dai</surname> <given-names>X</given-names></string-name>, <string-name><surname>Dai</surname> <given-names>H</given-names></string-name>, <string-name><surname>Yang</surname> <given-names>G</given-names></string-name>, <string-name><surname>Yi</surname> <given-names>X</given-names></string-name>, <string-name><surname>Huang</surname> <given-names>H</given-names></string-name></person-group>. <article-title>An efficient and dynamic semantic-aware multikeyword ranked search scheme over encrypted cloud data</article-title>. <source>IEEE Access</source>. <year>2019</year>;<volume>7</volume>:<fpage>142855</fpage>&#x2013;<lpage>65</lpage>. doi:<pub-id pub-id-type="doi">10.1109/access.2019.2944476</pub-id>.</mixed-citation></ref>
<ref id="ref-26"><label>[26]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Zhou</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Dai</surname> <given-names>H</given-names></string-name>, <string-name><surname>Hu</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Liu</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Yang</surname> <given-names>G</given-names></string-name></person-group>. <article-title>Accuracy-first and efficiency-first privacy-preserving semantic-aware ranked searches in the cloud</article-title>. <source>Int J Intell Syst</source>. <year>2022</year>;<volume>37</volume>(<issue>11</issue>):<fpage>9213</fpage>&#x2013;<lpage>44</lpage>. doi:<pub-id pub-id-type="doi">10.1002/int.22989</pub-id>.</mixed-citation></ref>
<ref id="ref-27"><label>[27]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Ge</surname> <given-names>X</given-names></string-name>, <string-name><surname>Yu</surname> <given-names>J</given-names></string-name>, <string-name><surname>Chen</surname> <given-names>F</given-names></string-name>, <string-name><surname>Kong</surname> <given-names>F</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>H</given-names></string-name></person-group>. <article-title>Toward verifiable phrase search over encrypted cloud-based IoT data</article-title>. <source>IEEE Internet Things J</source>. <year>2021</year>;<volume>8</volume>(<issue>16</issue>):<fpage>12902</fpage>&#x2013;<lpage>18</lpage>. doi:<pub-id pub-id-type="doi">10.1109/jiot.2021.3063855</pub-id>.</mixed-citation></ref>
<ref id="ref-28"><label>[28]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Chen</surname> <given-names>L</given-names></string-name>, <string-name><surname>Xue</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Mu</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Zeng</surname> <given-names>L</given-names></string-name>, <string-name><surname>Rezaeibagha</surname> <given-names>F</given-names></string-name>, <string-name><surname>Deng</surname> <given-names>RH</given-names></string-name></person-group>. <article-title>Case-SSE: context-aware semantically extensible searchable symmetric encryption for encrypted cloud data</article-title>. <source>IEEE Trans Serv Comput</source>. <year>2022</year>;<volume>16</volume>(<issue>2</issue>):<fpage>1011</fpage>&#x2013;<lpage>22</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tsc.2022.3162266</pub-id>.</mixed-citation></ref>
<ref id="ref-29"><label>[29]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Liu</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Dai</surname> <given-names>H</given-names></string-name>, <string-name><surname>Zhou</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Li</surname> <given-names>P</given-names></string-name>, <string-name><surname>Yi</surname> <given-names>X</given-names></string-name>, <string-name><surname>Yang</surname> <given-names>G</given-names></string-name></person-group>. <article-title>EPSMR: an efficient privacy-preserving semantic-aware multi-keyword ranked search scheme in cloud</article-title>. <source>Future Gener Comput Syst</source>. <year>2024</year>;<volume>159</volume>(<issue>1</issue>):<fpage>1</fpage>&#x2013;<lpage>14</lpage>. doi:<pub-id pub-id-type="doi">10.1016/j.future.2024.04.058</pub-id>.</mixed-citation></ref>
<ref id="ref-30"><label>[30]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Hou</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Yao</surname> <given-names>W</given-names></string-name>, <string-name><surname>Li</surname> <given-names>X</given-names></string-name>, <string-name><surname>Xia</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>M</given-names></string-name></person-group>. <article-title>Lattice-based semantic-aware searchable encryption for Internet of Things</article-title>. <source>IEEE Internet Things J</source>. <year>2024</year>;<volume>11</volume>(<issue>17</issue>):<fpage>28370</fpage>&#x2013;<lpage>84</lpage>. doi:<pub-id pub-id-type="doi">10.1109/jiot.2024.3400816</pub-id>.</mixed-citation></ref>
<ref id="ref-31"><label>[31]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Li</surname> <given-names>J</given-names></string-name>, <string-name><surname>Ma</surname> <given-names>J</given-names></string-name>, <string-name><surname>Miao</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Chen</surname> <given-names>L</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Liu</surname> <given-names>X</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>Verifiable semantic-aware ranked keyword search in cloud-assisted edge computing</article-title>. <source>IEEE Trans Serv Comput</source>. <year>2021</year>;<volume>15</volume>(<issue>6</issue>):<fpage>3591</fpage>&#x2013;<lpage>605</lpage>. doi:<pub-id pub-id-type="doi">10.1109/tsc.2021.3098864</pub-id>.</mixed-citation></ref>
<ref id="ref-32"><label>[32]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Yang</surname> <given-names>W</given-names></string-name>, <string-name><surname>Sun</surname> <given-names>B</given-names></string-name>, <string-name><surname>Zhu</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Wu</surname> <given-names>D</given-names></string-name></person-group>. <article-title>A secure heuristic semantic searching scheme with blockchain-based verification</article-title>. <source>Inf Process Manag</source>. <year>2021</year>;<volume>58</volume>(<issue>4</issue>):<fpage>102548</fpage>.</mixed-citation></ref>
<ref id="ref-33"><label>[33]</label><mixed-citation publication-type="other"><person-group person-group-type="author"><string-name><surname>Mikolov</surname> <given-names>T</given-names></string-name></person-group>. <article-title>Efficient estimation of word representations in vector space</article-title>. <comment>arXiv:1301.3781. 2013</comment>.</mixed-citation></ref>
<ref id="ref-34"><label>[34]</label><mixed-citation publication-type="book"><person-group person-group-type="author"><string-name><surname>Kate</surname> <given-names>A</given-names></string-name>, <string-name><surname>Zaverucha</surname> <given-names>GM</given-names></string-name>, <string-name><surname>Goldberg</surname> <given-names>I</given-names></string-name></person-group>. <chapter-title>Constant-size commitments to polynomials and their applications</chapter-title>. In: <source>Advances in cryptology-ASIACRYPT 2010</source>. <publisher-loc>Berlin/Heidelberg, Gearmany</publisher-loc>: <publisher-name>Springer</publisher-name>; <year>2010</year>. p. <fpage>177</fpage>&#x2013;<lpage>94</lpage>. doi:<pub-id pub-id-type="doi">10.1007/978-3-642-17373-8_11</pub-id>.</mixed-citation></ref>
<ref id="ref-35"><label>[35]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>B&#x00FC;nz</surname> <given-names>B</given-names></string-name>, <string-name><surname>Bootle</surname> <given-names>J</given-names></string-name>, <string-name><surname>Boneh</surname> <given-names>D</given-names></string-name>, <string-name><surname>Poelstra</surname> <given-names>A</given-names></string-name>, <string-name><surname>Wuille</surname> <given-names>P</given-names></string-name>, <string-name><surname>Maxwell</surname> <given-names>G</given-names></string-name></person-group>. <article-title>Bulletproofs: short proofs for confidential transactions and more</article-title>. In: <conf-name>2018 IEEE Symposium on Security and Privacy (SP)</conf-name>. <publisher-loc>San Francisco, CA, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>; <year>2018</year>. p. <fpage>315</fpage>&#x2013;<lpage>34</lpage>.</mixed-citation></ref>
<ref id="ref-36"><label>[36]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Chen</surname> <given-names>B</given-names></string-name>, <string-name><surname>B&#x00FC;nz</surname> <given-names>B</given-names></string-name>, <string-name><surname>Boneh</surname> <given-names>D</given-names></string-name>, <string-name><surname>Zhang</surname> <given-names>Z</given-names></string-name></person-group>. <article-title>Hyperplonk: plonk with linear-time prover and high-degree custom gates</article-title>. In: <conf-name>Annual International Conference on the Theory and Applications of Cryptographic Techniques</conf-name>. <publisher-loc>Cham, Switzerland</publisher-loc>: <publisher-name>Springer</publisher-name>; <year>2023</year>. p. <fpage>499</fpage>&#x2013;<lpage>530</lpage>.</mixed-citation></ref>
</ref-list>
</back></article>