<?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">63274</article-id>
<article-id pub-id-type="doi">10.32604/cmc.2025.063274</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Article</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>Efficient Searchable Encryption Scheme Supporting Fuzzy Multi-Keyword Ranking Search on Blockchain</article-title>
<alt-title alt-title-type="left-running-head">Efficient Searchable Encryption Scheme Supporting Fuzzy Multi-Keyword Ranking Search on Blockchain</alt-title>
<alt-title alt-title-type="right-running-head">Efficient Searchable Encryption Scheme Supporting Fuzzy Multi-Keyword Ranking Search on Blockchain</alt-title>
</title-group>
<contrib-group>
<contrib id="author-1" contrib-type="author">
<name name-style="western"><surname>Tian</surname><given-names>Hongliang</given-names></name></contrib>
<contrib id="author-2" contrib-type="author" corresp="yes">
<name name-style="western"><surname>Fan</surname><given-names>Zhong</given-names></name><email>2202300381@neepu.edu.cn</email></contrib>
<contrib id="author-3" contrib-type="author">
<name name-style="western"><surname>Ruan</surname><given-names>Zhiyang</given-names></name></contrib>
<contrib id="author-4" contrib-type="author">
<name name-style="western"><surname>Zhao</surname><given-names>Aomen</given-names></name></contrib>
<aff id="aff-1"><institution>College of Electrical Engineering, Northeast Electric Power University</institution>, <addr-line>Jilin, 132012</addr-line>, <country>China</country></aff>
</contrib-group>
<author-notes>
<corresp id="cor1"><label>&#x002A;</label>Corresponding Author: Zhong Fan. Email: <email>2202300381@neepu.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>19</day><month>05</month><year>2025</year>
</pub-date>
<volume>83</volume>
<issue>3</issue>
<fpage>5199</fpage>
<lpage>5217</lpage>
<history>
<date date-type="received">
<day>10</day>
<month>1</month>
<year>2025</year>
</date>
<date date-type="accepted">
<day>05</day>
<month>3</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_63274.pdf"></self-uri>
<abstract>
<p>With the continuous growth of exponential data in IoT, it is usually chosen to outsource data to the cloud server. However, cloud servers are usually provided by third parties, and there is a risk of privacy leakage. Encrypting data can ensure its security, but at the same time, it loses the retrieval function of IoT data. Searchable Encryption (SE) can achieve direct retrieval based on ciphertext data. The traditional searchable encryption scheme has the problems of imperfect function, low retrieval efficiency, inaccurate retrieval results, and centralized cloud servers being vulnerable and untrustworthy. This paper proposes an Efficient searchable encryption scheme supporting fuzzy multi-keyword ranking search on the blockchain. The blockchain and IPFS are used to store the index and encrypted files in a distributed manner respectively. The tamper resistance of the distributed ledger ensures the authenticity of the data. The data retrieval work is performed by the smart contract to ensure the reliability of the data retrieval. The Local Sensitive Hash (LSH) function is combined with the Bloom Filter (BF) to realize the fuzzy multi-keyword retrieval function. In addition, to measure the correlation between keywords and files, a new weighted statistical algorithm combining Regional Weight Score (RWS) and Term Frequency&#x2013;Inverse Document Frequency (TF-IDF) is proposed to rank the search results. The balanced binary tree is introduced to establish the index structure, and the index binary tree traversal strategy suitable for this scheme is constructed to optimize the index structure and improve the retrieval efficiency. The experimental results show that the scheme is safe and effective in practical applications.</p>
</abstract>
<kwd-group kwd-group-type="author">
<kwd>Blockchain</kwd>
<kwd>searchable encryption</kwd>
<kwd>TF-IDF</kwd>
<kwd>fuzzy multi-keyword search</kwd>
<kwd>index tree</kwd>
</kwd-group>
<funding-group>
<award-group id="awg1">
<funding-source>Jilin Provincial Department of Education Scientific Research</funding-source>
<award-id>JJKH20250872KJ</award-id>
</award-group>
</funding-group>
</article-meta>
</front>
<body>
<sec id="s1">
<label>1</label>
<title>Introduction</title>
<p>As the volume of data increases, data owners are starting to host their data with cloud service providers. Considering the sensitivity and privacy of the data, these data are usually encrypted before transmission to the cloud. The existing encryption mechanism makes the data in the ciphertext state unable to be retrieved directly in plaintext, thus losing the data retrieval function. The traditional approach is to first download all the encrypted data on the server to the local area, then use the key to decrypt all these data into plaintext format, and finally perform the retrieval operation. This approach may trigger overburdening of the server while consuming a large amount of local computational resources and inefficient retrieval. Searchable encryption technology can achieve effective retrieval based on ciphertext data. However, most of the existing searchable encryption schemes are based on cloud servers, which have the problem of single point of failure of centralized devices and are not credible. In addition, the existing schemes only return files containing search keywords, and cannot sort the returned files according to the importance of keywords in the file. Most of them only support single keyword or precise search, which has defects in function.</p>
<p>Aiming at these problems, a ciphertext retrieval scheme supporting fuzzy multi-keyword sorted search on blockchain is proposed. The scheme uses blockchain and IPFS to store index and encrypted files in a distributed manner, respectively. The distributed ledger of blockchain is tamper-proof, which ensures the authenticity of the stored index data. The smart contract based on blockchain is responsible for performing data retrieval. Due to the decentralization and non-tampering characteristics of blockchain, the smart contract can avoid the problems of dishonest search that may occur in traditional centralized servers when performing retrieval operations, thus ensuring the reliability of data retrieval. Implement fuzzy multi-keyword search in ciphertext state using LSH and BF. A weighted statistical algorithm combining TF-IDF and RWS is proposed to calculate the similarity between files and trapdoors to realize the ranking of query results, and a balanced binary tree is introduced to construct an index structure to improve the efficiency of ciphertext retrieval. The contributions of this article are as follows:
<list list-type="simple">
<list-item><label>(1)</label><p>Blockchain technology is introduced to store the index, smart contracts are utilized to carry out data search work, and ciphertext files are uploaded to IPFS for off-chain storage. It eliminates the problems of single point of failure and dishonest search that exist in traditional cloud servers and ensures the security of data and the reliability of data search.</p></list-item>
<list-item><label>(2)</label><p>Aiming at the functional limitations and low-performance problems of fuzzy multi-keyword searchable encryption schemes on the blockchain, the keywords are mapped into vectors by using the pairwise encoding function, and the fuzzy multi-keyword retrieval is realized with the help of locally sensitive hash and Bloom filter techniques. At the same time, the index vectors and query vectors are encrypted using the secure k-nearest neighbor algorithm. The relevance score is accurately calculated while avoiding privacy leakage.</p></list-item>
<list-item><label>(3)</label><p>Considering the importance of keywords in different regions of the file, this paper proposes a Region Weight Score weighting algorithm. The correlation between the two is measured by the position of the keyword in the file. Considering both word frequency and inverse document frequency, a weighted statistical algorithm combining TF-IDF and weight region score is proposed to calculate the similarity between the file and the trapdoor, so as to sort the query results. Improve the ranking quality and personalized experience of search results.</p></list-item>
<list-item><label>(4)</label><p>A balanced binary tree index structure was adopted, and a binary tree traversal strategy suitable for this scheme was designed to accurately return <italic>top &#x2013; k</italic> files without traversing all index vectors during the search, further improving retrieval efficiency and reducing storage space and communication overhead.</p></list-item>
</list></p>
</sec>
<sec id="s2">
<label>2</label>
<title>Related Work</title>
<p>In recent years, Song et al. [<xref ref-type="bibr" rid="ref-1">1</xref>] first introduced symmetric searchable encryption (SSE). By symmetrically encrypting the keywords and uploading them to the cloud server for storage. However, SSE needs to perform global traversal operations when performing search, which has the problems of low efficiency and large computational overhead. Wu et al. [<xref ref-type="bibr" rid="ref-2">2</xref>] proposed a public key authenticated encryption and fast keyword search scheme that can well protect indexing and keyword privacy. However, it is currently impossible to extend the PAEFKS scheme to multi-keyword search scenarios. Curtmola et al. [<xref ref-type="bibr" rid="ref-3">3</xref>] proposed a keyword-based search strategy that utilizes an inverted indexing method, which makes it possible to perform searches without having to retrieve all the files. However, the strategy is limited to single-keyword searches.</p>
<p>Aiming at these problems, Golle et al. [<xref ref-type="bibr" rid="ref-4">4</xref>] introduced the method of multi-keyword search and constructed a secure framework for performing conjunctive keyword searches of encrypted data. However, in the face of scenes that require approximate matching, the scheme shows obvious limitations. Wang et al. [<xref ref-type="bibr" rid="ref-5">5</xref>] proposed a secure sorted keyword search method for encrypted cloud data, which represents indexes and trapdoors in vector format and achieves retrieval by performing computation on the vectors. However, the scheme only focuses on single keyword search and does not involve multi-keyword search. Xia et al. [<xref ref-type="bibr" rid="ref-6">6</xref>] proposed a secure multi-keyword sorting search method for encrypted cloud data, which realized multi-keyword sorting search results through a vector space model and TF-IDF algorithm. However, the scheme does not take into account the importance of the position of the keywords in the document, and cannot achieve a fuzzy search function. Chen et al. [<xref ref-type="bibr" rid="ref-7">7</xref>] proposed a multi-keyword ciphertext retrieval method based on hierarchical clustering, which can achieve linear computational complexity with an exponentially growing document set. However, this method cannot evaluate the importance of keywords in the document. And does not support a fuzzy search function. Zhu et al. [<xref ref-type="bibr" rid="ref-8">8</xref>] proposed an indexing structure based on hierarchical cohesive clustering to gather highly relevant files in clusters to improve the efficiency of text retrieval. However, only exact keyword search is supported.</p>
<p>To solve the problem of users not being able to obtain correct search results due to spelling errors, Li et al. [<xref ref-type="bibr" rid="ref-9">9</xref>] proposed for the first time a fuzzy keyword search technique executed in a cloud computing environment. However, the scheme does not consider the semantic privacy of keywords, and attackers may be able to crack. Vaanchig et al. [<xref ref-type="bibr" rid="ref-10">10</xref>] proposed a temporary fuzzy keyword search public key cryptography method combining fuzzy functions and cryptographic trees and achieved secure retrieval of time-related data. However, the search results cannot be sorted according to the degree of relevance to the search keywords. Wang et al. [<xref ref-type="bibr" rid="ref-11">11</xref>] implemented fuzzy multi-keyword ciphertext search using Bloom Filter (BF) and Locality-Sensitive Hashing (LSH) techniques to eliminate predefined dictionaries. However, it is necessary to traverse the global file when performing the search, which leads to low efficiency. Liu et al. [<xref ref-type="bibr" rid="ref-12">12</xref>] proposed a matrix-based multi-keyword fuzzy search strategy, which realizes the of keywords with the help of the incommensurable nature of prime numbers. However, the search time of this scheme will increase with the increase in the number of query keywords.</p>
<p>To address the above challenges, Miao et al. [<xref ref-type="bibr" rid="ref-13">13</xref>] proposed a verifiable searchable encryption scheme that features short ciphertext length, fast ciphertext conversion, and an accelerated search process of search results. However, the scheme does not involve fuzzy keyword search functions, and cannot achieve sorting of search results. The schemes proposed by Ge et al. [<xref ref-type="bibr" rid="ref-14">14</xref>] and Liu et al. [<xref ref-type="bibr" rid="ref-15">15</xref>] validate multi-keyword search results through public key cryptography. While these schemes can verify document validity and keyword inclusion, they cannot guarantee that all relevant files are retrieved. The searchable encryption schemes mentioned above are all based on cloud servers, but the centralized cloud servers are vulnerable to a single point of failure, and the data may have the risk of leakage or tampering. Using decentralized blockchain technology can perfectly solve the problem of a single point of failure. Hu et al. [<xref ref-type="bibr" rid="ref-16">16</xref>] constructed a decentralized privacy-preserving search system that replaces the role of a central server with smart contracts to ensure that data owners have reliable access to accurate search results. Similarly, Zhang et al. [<xref ref-type="bibr" rid="ref-17">17</xref>] proposed a blockchain-based stable keyword search architecture that supports two-party verification and direct fair transactions, eliminating the involvement of a third party. Han et al. [<xref ref-type="bibr" rid="ref-18">18</xref>] proposed a blockchain-assisted multi-keyword searchable encryption scheme to solve the single-point failure problem of centralized systems. However, the above schemes do not support the function of fuzzy search and cannot sort the search results. Yan et al. [<xref ref-type="bibr" rid="ref-19">19</xref>] proposed a verifiable fuzzy searchable encryption scheme with blockchain-assisted multi-user scenarios to achieve fine-grained access control in multi-user scenarios. However, the returned files cannot be sorted according to the importance of keywords in the file.</p>
<p>At present, the existing searchable encryption schemes have their advantages and limitations. The existing schemes have the problems of imperfect functions, low retrieval efficiency, inaccurate retrieval results, and centralized cloud servers that are vulnerable and untrustworthy. A ciphertext retrieval scheme supporting fuzzy multi-keyword ranking search on the blockchain is proposed to solve the above problems.</p>
</sec>
<sec id="s3">
<label>3</label>
<title>Preliminaries</title>
<sec id="s3_1">
<label>3.1</label>
<title>TF-IDF Algorithm</title>
<p>TF-IDF technique is commonly used in information retrieval and text mining to evaluate the importance of a word for a particular document in a collection of files. The formula is shown below, Where <inline-formula id="ieqn-1"><mml:math id="mml-ieqn-1"><mml:mi>T</mml:mi><mml:msubsup><mml:mi>F</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> denotes the frequency of occurrence of keyword <inline-formula id="ieqn-2"><mml:math id="mml-ieqn-2"><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> in the file <inline-formula id="ieqn-3"><mml:math id="mml-ieqn-3"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, <inline-formula id="ieqn-4"><mml:math id="mml-ieqn-4"><mml:mi>I</mml:mi><mml:mi>D</mml:mi><mml:msubsup><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> denotes the frequency of occurrence of files containing the keyword <inline-formula id="ieqn-5"><mml:math id="mml-ieqn-5"><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> in the total set of files, <inline-formula id="ieqn-6"><mml:math id="mml-ieqn-6"><mml:msub><mml:mi>N</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula> denotes the number of keywords <inline-formula id="ieqn-7"><mml:math id="mml-ieqn-7"><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> in the file <inline-formula id="ieqn-8"><mml:math id="mml-ieqn-8"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, <inline-formula id="ieqn-9"><mml:math id="mml-ieqn-9"><mml:mi>N</mml:mi></mml:math></inline-formula> denotes the total number of files, <inline-formula id="ieqn-10"><mml:math id="mml-ieqn-10"><mml:msub><mml:mi>N</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula> denotes the number of files containing keyword <inline-formula id="ieqn-11"><mml:math id="mml-ieqn-11"><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, see <xref ref-type="disp-formula" rid="eqn-1">Eqs. (1)</xref> and <xref ref-type="disp-formula" rid="eqn-2">(2)</xref>.
<disp-formula id="eqn-1"><label>(1)</label><mml:math id="mml-eqn-1" 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:mi>T</mml:mi><mml:msubsup><mml:mi>F</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>+</mml:mo><mml:mi>ln</mml:mi><mml:mo>&#x2061;</mml:mo><mml:msub><mml:mi>N</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="eqn-2"><label>(2)</label><mml:math id="mml-eqn-2" 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:mi>I</mml:mi><mml:mi>D</mml:mi><mml:msubsup><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mi>ln</mml:mi><mml:mo>&#x2061;</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>1</mml:mn><mml:mo>+</mml:mo><mml:mi>N</mml:mi><mml:mrow><mml:mo>/</mml:mo></mml:mrow><mml:msub><mml:mi>N</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>Normalize it to get <xref ref-type="disp-formula" rid="eqn-3">Eqs. (3)</xref> and <xref ref-type="disp-formula" rid="eqn-4">(4)</xref>:
<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:mtd><mml:mi>T</mml:mi><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>T</mml:mi><mml:msubsup><mml:mi>F</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:msqrt><mml:munder><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2208;</mml:mo><mml:mi>W</mml:mi></mml:mrow></mml:munder><mml:mo stretchy="false">(</mml:mo><mml:mi>T</mml:mi><mml:msubsup><mml:mi>F</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:msqrt></mml:mfrac></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="eqn-4"><label>(4)</label><mml:math id="mml-eqn-4" 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:mi>I</mml:mi><mml:mi>D</mml:mi><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>I</mml:mi><mml:mi>D</mml:mi><mml:msubsup><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:msqrt><mml:munder><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x2208;</mml:mo><mml:mi>W</mml:mi></mml:mrow></mml:munder><mml:mo stretchy="false">(</mml:mo><mml:mi>I</mml:mi><mml:mi>D</mml:mi><mml:msubsup><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:msup><mml:mo stretchy="false">)</mml:mo><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:msqrt></mml:mfrac></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
</sec>
<sec id="s3_2">
<label>3.2</label>
<title>Regional Weighting Scores</title>
<p><inline-formula id="ieqn-12"><mml:math id="mml-ieqn-12"><mml:msub><mml:mi>Z</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula> denotes the weight region score, suppose a file has <inline-formula id="ieqn-13"><mml:math id="mml-ieqn-13"><mml:mi>&#x03C6;</mml:mi></mml:math></inline-formula> regions, let the weight coefficients of these <inline-formula id="ieqn-14"><mml:math id="mml-ieqn-14"><mml:mi>&#x03C6;</mml:mi></mml:math></inline-formula> regions are <inline-formula id="ieqn-15"><mml:math id="mml-ieqn-15"><mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>, <inline-formula id="ieqn-16"><mml:math id="mml-ieqn-16"><mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>,&#x2026;, <inline-formula id="ieqn-17"><mml:math id="mml-ieqn-17"><mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mi>&#x03C6;</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. Assume that the importance of these <inline-formula id="ieqn-18"><mml:math id="mml-ieqn-18"><mml:mi>&#x03C6;</mml:mi></mml:math></inline-formula> regions is decreasing. Their weight coefficients should satisfy <xref ref-type="disp-formula" rid="eqn-5">(5)</xref>&#x2013;<xref ref-type="disp-formula" rid="eqn-7">(7)</xref> three conditions:
<disp-formula id="eqn-5"><label>(5)</label><mml:math id="mml-eqn-5" 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:msub><mml:mi>g</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mi>&#x03C6;</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2208;</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="eqn-6"><label>(6)</label><mml:math id="mml-eqn-6" 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:mi></mml:mi><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>x</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>&#x03C6;</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="eqn-7"><label>(7)</label><mml:math id="mml-eqn-7" 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:msub><mml:mi>g</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x2265;</mml:mo><mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x2265;</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>&#x2265;</mml:mo><mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mi>&#x03C6;</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>If the keyword appears in region <inline-formula id="ieqn-19"><mml:math id="mml-ieqn-19"><mml:mi>i</mml:mi></mml:math></inline-formula> then let <inline-formula id="ieqn-20"><mml:math id="mml-ieqn-20"><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula>, otherwise 0. Derive the weighted region score <xref ref-type="disp-formula" rid="eqn-8">Eq. (8)</xref>:
<disp-formula id="eqn-8"><label>(8)</label><mml:math id="mml-eqn-8" display="block"><mml:msub><mml:mi>Z</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>x</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>&#x03C6;</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msub></mml:math></disp-formula></p>
</sec>
<sec id="s3_3">
<label>3.3</label>
<title>Localized Sensitive Hashing</title>
<p>LSH [<xref ref-type="bibr" rid="ref-20">20</xref>] is an algorithm for similarity searching of high-dimensional data. It utilizes a hash function to map similar points in a high-dimensional space into the same bucket to quickly search for points that are similar to the query point. When two points in a high-dimensional space are close together, there is a higher probability that they will be mapped to the same hash value. Conversely, there is a lower probability that two points will be mapped to the same hash value when they are farther apart. If any two points <inline-formula id="ieqn-21"><mml:math id="mml-ieqn-21"><mml:mi>s</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>&#x2208;</mml:mo><mml:msup><mml:mrow><mml:mo>{</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn><mml:mo>}</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> and <inline-formula id="ieqn-22"><mml:math id="mml-ieqn-22"><mml:mi>h</mml:mi><mml:mo>&#x2208;</mml:mo><mml:mi>H</mml:mi></mml:math></inline-formula> satisfy <xref ref-type="disp-formula" rid="eqn-9">(9)</xref> and <xref ref-type="disp-formula" rid="eqn-10">(10)</xref>:
<disp-formula id="eqn-9"><label>(9)</label><mml:math id="mml-eqn-9" 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:mi>d</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>s</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x2264;</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x003A;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mi>h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>s</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x2265;</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="eqn-10"><label>(10)</label><mml:math id="mml-eqn-10" 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:mi>d</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>s</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x2265;</mml:mo><mml:msub><mml:mi>r</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x003A;</mml:mo><mml:mo movablelimits="true" form="prefix">Pr</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mi>h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>s</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>t</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x2264;</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>Then the hash function family <italic>H</italic> is said to be sensitive, in the case of character input error is not big even if there is an input error that is easy to map in the near-neighborhood, constitutes a prerequisite for the realization of fuzzy retrieval. In this scheme, the <italic>p</italic>-stable distribution LSH function of the form of <xref ref-type="disp-formula" rid="eqn-11">Eq. (11)</xref> is used to realize the effective dimensionality reduction of high-dimensional vectors.
<disp-formula id="eqn-11"><label>(11)</label><mml:math id="mml-eqn-11" display="block"><mml:msub><mml:mi>h</mml:mi><mml:mrow><mml:mi>a</mml:mi><mml:mo>,</mml:mo><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mi>v</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:mo>&#x230A;</mml:mo><mml:mfrac><mml:mrow><mml:mi>a</mml:mi><mml:mo>&#x22C5;</mml:mo><mml:mi>v</mml:mi><mml:mo>+</mml:mo><mml:mi>b</mml:mi></mml:mrow><mml:mi>&#x03C9;</mml:mi></mml:mfrac><mml:mo>&#x230B;</mml:mo></mml:mrow></mml:math></disp-formula></p>
</sec>
<sec id="s3_4">
<label>3.4</label>
<title>Bloom Filter</title>
<p>The main use of BF is to determine whether an element belongs to a collection. It can be understood as a very long binary vector of 0 and 1 s, initially all 0 s by default. When an element is added, the element serves as input to the k hash function, whose output value corresponds to the subscript of the binary array, and the binary value corresponding to the subscript is changed from 0 to 1. When determining whether an element belongs to a set, it is again necessary to input the element into the <inline-formula id="ieqn-23"><mml:math id="mml-ieqn-23"><mml:mi>K</mml:mi></mml:math></inline-formula> hash function and determine the position in the Bloom filter array based on the output hash value. If any of the corresponding binary bits is 0, the element is not in the set; if all bits are 1, the element can be considered to be in the set. As shown in <xref ref-type="fig" rid="fig-1">Fig. 1</xref>, the BF has already stored the element set <inline-formula id="ieqn-24"><mml:math id="mml-ieqn-24"><mml:mrow><mml:mo>{</mml:mo><mml:mi>a</mml:mi><mml:mo>,</mml:mo><mml:mi>b</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula>. Now we want to query whether elements <inline-formula id="ieqn-25"><mml:math id="mml-ieqn-25"><mml:mi>a</mml:mi></mml:math></inline-formula> and <inline-formula id="ieqn-26"><mml:math id="mml-ieqn-26"><mml:mi>f</mml:mi></mml:math></inline-formula> are included in this set. Since element <inline-formula id="ieqn-27"><mml:math id="mml-ieqn-27"><mml:mi>a</mml:mi></mml:math></inline-formula>, after being mapped by two hash functions <inline-formula id="ieqn-28"><mml:math id="mml-ieqn-28"><mml:msub><mml:mi>h</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-29"><mml:math id="mml-ieqn-29"><mml:msub><mml:mi>h</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>, has all the values mapped to the BF as 1, it can be judged that a exists in the set. After element <inline-formula id="ieqn-30"><mml:math id="mml-ieqn-30"><mml:mi>f</mml:mi></mml:math></inline-formula> is mapped by the two hash functions <inline-formula id="ieqn-31"><mml:math id="mml-ieqn-31"><mml:msub><mml:mi>h</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-32"><mml:math id="mml-ieqn-32"><mml:msub><mml:mi>h</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>, there are 0 values among those mapped to the Bloom filter, so it can be judged that <inline-formula id="ieqn-33"><mml:math id="mml-ieqn-33"><mml:mi>f</mml:mi></mml:math></inline-formula> does not exist in the set.</p>
<fig id="fig-1">
<label>Figure 1</label>
<caption>
<title>Bloom filter query</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-1.tif"/>
</fig>
</sec>
</sec>
<sec id="s4">
<label>4</label>
<title>System Model</title>
<p>The scheme includes a total of four parts: Data Owner (DO), Data User (DU), Interplanetary File System (IPFS), and Blockchain (BC), and the specific modeling process is shown in <xref ref-type="fig" rid="fig-2">Fig. 2</xref>.</p>
<fig id="fig-2">
<label>Figure 2</label>
<caption>
<title>System model</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-2.tif"/>
</fig>
<p><bold>Data Owner (DO):</bold> The DO extracts the keyword set <inline-formula id="ieqn-34"><mml:math id="mml-ieqn-34"><mml:mi>W</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula> from the file set <inline-formula id="ieqn-35"><mml:math id="mml-ieqn-35"><mml:mi>F</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></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:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula>. A Bloom filter <inline-formula id="ieqn-36"><mml:math id="mml-ieqn-36"><mml:mi>B</mml:mi><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is generated for each file <inline-formula id="ieqn-37"><mml:math id="mml-ieqn-37"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, and the keywords are transformed into vectors by pairwise encoding and then it is loaded into the Bloom filter <inline-formula id="ieqn-38"><mml:math id="mml-ieqn-38"><mml:mi>B</mml:mi><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> through the LSH as the index vector <inline-formula id="ieqn-39"><mml:math id="mml-ieqn-39"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> of the file <inline-formula id="ieqn-40"><mml:math id="mml-ieqn-40"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. Using file information as leaf nodes, construct an index tree <inline-formula id="ieqn-41"><mml:math id="mml-ieqn-41"><mml:mi>I</mml:mi></mml:math></inline-formula> from bottom to top, and encrypt the index tree to obtain <inline-formula id="ieqn-42"><mml:math id="mml-ieqn-42"><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula>, and upload the encrypted index tree <inline-formula id="ieqn-43"><mml:math id="mml-ieqn-43"><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> to the blockchain. Encrypt the plaintext file to obtain an encrypted file <inline-formula id="ieqn-44"><mml:math id="mml-ieqn-44"><mml:mi>C</mml:mi></mml:math></inline-formula>, and upload it to IPFS.</p>
<p><bold>Data User (DU):</bold> After getting the authorization, the user generates the search vector <inline-formula id="ieqn-45"><mml:math id="mml-ieqn-45"><mml:mi>Q</mml:mi></mml:math></inline-formula> based on the set of search keywords <inline-formula id="ieqn-46"><mml:math id="mml-ieqn-46"><mml:msub><mml:mi>W</mml:mi><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. Upload the encrypted search vector <inline-formula id="ieqn-47"><mml:math id="mml-ieqn-47"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> to BC. After searching and matching to obtain the score list <inline-formula id="ieqn-48"><mml:math id="mml-ieqn-48"><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, DU accesses the IPFS to retrieve the <inline-formula id="ieqn-49"><mml:math id="mml-ieqn-49"><mml:mi>t</mml:mi><mml:mi>o</mml:mi><mml:mi>p</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mi>k</mml:mi></mml:math></inline-formula> most relevant ciphertext files.</p>
<p><bold>Blockchain (BC):</bold> The BC is mainly responsible for storing the encrypted index tree <inline-formula id="ieqn-50"><mml:math id="mml-ieqn-50"><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> and the search vector <inline-formula id="ieqn-51"><mml:math id="mml-ieqn-51"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula>. In addition, after receiving the search vector <inline-formula id="ieqn-52"><mml:math id="mml-ieqn-52"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> uploaded by the data user, the smart contract performs a search and matches through the index tree <inline-formula id="ieqn-53"><mml:math id="mml-ieqn-53"><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> to get the score list <inline-formula id="ieqn-54"><mml:math id="mml-ieqn-54"><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and sends it to the DU.</p>
<p><bold>Interplanetary File System (IPFS):</bold> IPFS is a distributed file system that can store the encrypted files and generate a unique hash value for each stored file. The relevant algorithms are defined below:
<list list-type="simple">
<list-item><label>(1)</label><p><inline-formula id="ieqn-55"><mml:math id="mml-ieqn-55"><mml:mi>S</mml:mi><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:msup><mml:mn>1</mml:mn><mml:mrow><mml:mi>&#x03BB;</mml:mi></mml:mrow></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Key generation algorithm. The security parameter <inline-formula id="ieqn-56"><mml:math id="mml-ieqn-56"><mml:mi>&#x03BB;</mml:mi></mml:math></inline-formula> is input by the DO and the key set <inline-formula id="ieqn-57"><mml:math id="mml-ieqn-57"><mml:mi>S</mml:mi><mml:mi>K</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula> is output, where <inline-formula id="ieqn-58"><mml:math id="mml-ieqn-58"><mml:mi>k</mml:mi></mml:math></inline-formula> is a symmetric key, <inline-formula id="ieqn-59"><mml:math id="mml-ieqn-59"><mml:mi>S</mml:mi></mml:math></inline-formula> is an m-dimensional binary vector, and <inline-formula id="ieqn-60"><mml:math id="mml-ieqn-60"><mml:msub><mml:mi>M</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-61"><mml:math id="mml-ieqn-61"><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> are m &#x00D7; m-dimensional invertible matrices.</p></list-item>
<list-item><label>(2)</label><p><inline-formula id="ieqn-62"><mml:math id="mml-ieqn-62"><mml:mi>C</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>E</mml:mi><mml:mi>n</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>F</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: symmetric encryption algorithm, which is performed by the DO. Input a collection of files <inline-formula id="ieqn-63"><mml:math id="mml-ieqn-63"><mml:mi>F</mml:mi></mml:math></inline-formula> and a symmetric key <inline-formula id="ieqn-64"><mml:math id="mml-ieqn-64"><mml:mi>k</mml:mi></mml:math></inline-formula>, output an encrypted file <inline-formula id="ieqn-65"><mml:math id="mml-ieqn-65"><mml:mi>C</mml:mi></mml:math></inline-formula>, and upload <inline-formula id="ieqn-66"><mml:math id="mml-ieqn-66"><mml:mi>C</mml:mi></mml:math></inline-formula> to IPFS.</p></list-item>
<list-item><label>(3)</label><p><inline-formula id="ieqn-67"><mml:math id="mml-ieqn-67"><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><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>S</mml:mi><mml:mi>K</mml:mi><mml:mo>,</mml:mo><mml:mi>F</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Index tree generation algorithm, which is executed by the DO. Input the key <inline-formula id="ieqn-68"><mml:math id="mml-ieqn-68"><mml:mi>S</mml:mi><mml:mi>K</mml:mi></mml:math></inline-formula> and the set of files <inline-formula id="ieqn-69"><mml:math id="mml-ieqn-69"><mml:mi>F</mml:mi></mml:math></inline-formula> to generate the index vector <inline-formula id="ieqn-70"><mml:math id="mml-ieqn-70"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> for each file <inline-formula id="ieqn-71"><mml:math id="mml-ieqn-71"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, which constitutes the index tree <inline-formula id="ieqn-72"><mml:math id="mml-ieqn-72"><mml:mi>I</mml:mi></mml:math></inline-formula>. The index tree is then encrypted to obtain <inline-formula id="ieqn-73"><mml:math id="mml-ieqn-73"><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula>, which is uploaded to the BC.</p></list-item>
<list-item><label>(4)</label><p><inline-formula id="ieqn-74"><mml:math id="mml-ieqn-74"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>G</mml:mi><mml:mi>e</mml:mi><mml:mi>n</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:mrow><mml:mo>(</mml:mo><mml:mi>S</mml:mi><mml:mi>K</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>W</mml:mi><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Trapdoor generation algorithm, executed by the DU. Input the key <inline-formula id="ieqn-75"><mml:math id="mml-ieqn-75"><mml:mi>S</mml:mi><mml:mi>K</mml:mi></mml:math></inline-formula> and the set of search keywords <inline-formula id="ieqn-76"><mml:math id="mml-ieqn-76"><mml:msub><mml:mi>W</mml:mi><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> to generate the search vector <inline-formula id="ieqn-77"><mml:math id="mml-ieqn-77"><mml:mi>Q</mml:mi></mml:math></inline-formula>, which is then encrypted to obtain <inline-formula id="ieqn-78"><mml:math id="mml-ieqn-78"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula>, and upload <inline-formula id="ieqn-79"><mml:math id="mml-ieqn-79"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> into the BC system.</p></list-item>
<list-item><label>(5)</label><p><inline-formula id="ieqn-80"><mml:math id="mml-ieqn-80"><mml:mi>S</mml:mi><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><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:mi>S</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi><mml:mi>r</mml:mi><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Search algorithms, executed by smart contracts. Input the encrypted index tree <inline-formula id="ieqn-81"><mml:math id="mml-ieqn-81"><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> and the search vector <inline-formula id="ieqn-82"><mml:math id="mml-ieqn-82"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula>, compute the corresponding inner products to obtain the relevance scores, and sort them to return the <inline-formula id="ieqn-83"><mml:math id="mml-ieqn-83"><mml:mi>t</mml:mi><mml:mi>o</mml:mi><mml:mi>p</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mi>k</mml:mi></mml:math></inline-formula> encrypted files with the highest relevance scores.</p></list-item>
<list-item><label>(6)</label><p><inline-formula id="ieqn-84"><mml:math id="mml-ieqn-84"><mml:mi>F</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>D</mml:mi><mml:mi>e</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>C</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: Decryption algorithm, performed by the DU. After obtaining the ciphertext sorting result, the ciphertext is decrypted by inputting the symmetric key <inline-formula id="ieqn-85"><mml:math id="mml-ieqn-85"><mml:mi>k</mml:mi></mml:math></inline-formula> to obtain the plaintext set <inline-formula id="ieqn-86"><mml:math id="mml-ieqn-86"><mml:mi>F</mml:mi></mml:math></inline-formula>.</p></list-item>
</list></p>
</sec>
<sec id="s5">
<label>5</label>
<title>Fuzzy Multi-Keyword Sorted Ciphertext Retrieval Scheme</title>
<p>In the field of encrypted data retrieval, traditional methods have many limitations in function and performance, which seriously affect the security, accuracy, and efficiency of data retrieval. This chapter proposes a fuzzy multi-keyword ranked ciphertext retrieval scheme based on blockchain. Among them, <xref ref-type="sec" rid="s5_1">Section 5.1</xref> mainly analyzes the construction algorithm of index and trapdoor, which is the basis of ciphertext retrieval. <xref ref-type="sec" rid="s5_2">Section 5.2</xref> introduces the data retrieval algorithm, which realizes the data retrieval operation based on index and trapdoor. In <xref ref-type="sec" rid="s5_3">Section 5.3</xref>, based on the above two algorithms, the specific ciphertext data retrieval scheme is elaborated in detail to form a complete ciphertext retrieval system.</p>
<sec id="s5_1">
<label>5.1</label>
<title>Index and Trapdoor Construction</title>
<p>(1) Index construction</p>
<p><bold>Keyword conversion:</bold> As shown in the keyword conversion section of <xref ref-type="fig" rid="fig-3">Fig. 3</xref>, the keywords are converted into vector form using pairwise encoding, which is the use of two adjacent characters in a string to generate a two-character set <inline-formula id="ieqn-87"><mml:math id="mml-ieqn-87"><mml:mi>B</mml:mi><mml:mi>S</mml:mi></mml:math></inline-formula>. Assuming a character <inline-formula id="ieqn-88"><mml:math id="mml-ieqn-88"><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula>, a vector <inline-formula id="ieqn-89"><mml:math id="mml-ieqn-89"><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula> with m-dimensional values all 0, where <inline-formula id="ieqn-90"><mml:math id="mml-ieqn-90"><mml:mi>m</mml:mi><mml:mo>&#x003E;&#x003E;</mml:mo><mml:mi>n</mml:mi></mml:math></inline-formula>. If <inline-formula id="ieqn-91"><mml:math id="mml-ieqn-91"><mml:mi>H</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:mi>h</mml:mi><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>j</mml:mi></mml:math></inline-formula>, then <inline-formula id="ieqn-92"><mml:math id="mml-ieqn-92"><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula>.</p>
<fig id="fig-3">
<label>Figure 3</label>
<caption>
<title>Index and trapdoor generation process</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-3.tif"/>
</fig>
<p><bold>BF generation:</bold> Inserting keywords into Bloom filters as shown in the index construction section of <xref ref-type="fig" rid="fig-3">Fig. 3</xref>, an m-dimensional Bloom filter <inline-formula id="ieqn-93"><mml:math id="mml-ieqn-93"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is generated for each file <inline-formula id="ieqn-94"><mml:math id="mml-ieqn-94"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and each bit is initialized to 0. For each keyword <inline-formula id="ieqn-95"><mml:math id="mml-ieqn-95"><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> in <inline-formula id="ieqn-96"><mml:math id="mml-ieqn-96"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, using <inline-formula id="ieqn-97"><mml:math id="mml-ieqn-97"><mml:mi>B</mml:mi><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> as the input of <inline-formula id="ieqn-98"><mml:math id="mml-ieqn-98"><mml:mi>l</mml:mi></mml:math></inline-formula> LSH functions, the output value represents the subscript of <inline-formula id="ieqn-99"><mml:math id="mml-ieqn-99"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and the value corresponding to the position of the subscript is changed to <inline-formula id="ieqn-100"><mml:math id="mml-ieqn-100"><mml:mi>T</mml:mi><mml:msubsup><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>&#x00D7;</mml:mo><mml:msub><mml:mi>Z</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula>, which is shown in <xref ref-type="fig" rid="fig-3">Fig. 3</xref>, the vector weighting part. By using independent hash functions <inline-formula id="ieqn-101"><mml:math id="mml-ieqn-101"><mml:mi>H</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mi>h</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>h</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>h</mml:mi><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula> to convert multiple binary m-dimensional vectors, utilizing the property of LSH, the same LSH function can map multiple similar keywords to the same position with high accuracy. The same keyword undergoes different LSH functions to achieve the final generalized word vector corresponding bits as similar or even the same. Eventually, the inner product of the index vector and the search vector represents the relevance of the document to the search keyword, as shown in the last step of <xref ref-type="fig" rid="fig-3">Fig. 3</xref>.</p>
<p><bold>Index tree construction:</bold> Create a node for each file as a leaf node of the tree. The internal nodes are then constructed based on the information from the child nodes Each node <inline-formula id="ieqn-102"><mml:math id="mml-ieqn-102"><mml:mi>u</mml:mi></mml:math></inline-formula> contains information: <inline-formula id="ieqn-103"><mml:math id="mml-ieqn-103"><mml:mi>u</mml:mi><mml:mo>=&#x003C;</mml:mo><mml:mi>f</mml:mi><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>i</mml:mi><mml:mi>l</mml:mi><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>i</mml:mi><mml:mi>l</mml:mi><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi>R</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub><mml:mo>&#x003E;</mml:mo></mml:math></inline-formula>, where <inline-formula id="ieqn-104"><mml:math id="mml-ieqn-104"><mml:mi>f</mml:mi><mml:mi>i</mml:mi><mml:mi>d</mml:mi></mml:math></inline-formula> denotes the file identifier, <inline-formula id="ieqn-105"><mml:math id="mml-ieqn-105"><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>i</mml:mi><mml:mi>l</mml:mi><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-106"><mml:math id="mml-ieqn-106"><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>i</mml:mi><mml:mi>l</mml:mi><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi>R</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> denote the pointers to the left and right child nodes, and <inline-formula id="ieqn-107"><mml:math id="mml-ieqn-107"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> denotes the index vector of the corresponding file of the node. For the leaf node, <inline-formula id="ieqn-108"><mml:math id="mml-ieqn-108"><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>i</mml:mi><mml:mi>l</mml:mi><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-109"><mml:math id="mml-ieqn-109"><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>i</mml:mi><mml:mi>l</mml:mi><mml:msub><mml:mi>d</mml:mi><mml:mrow><mml:mi>R</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> are null. For the internal node, <inline-formula id="ieqn-110"><mml:math id="mml-ieqn-110"><mml:mi>f</mml:mi><mml:mi>i</mml:mi><mml:mi>d</mml:mi></mml:math></inline-formula> is null, <inline-formula id="ieqn-111"><mml:math id="mml-ieqn-111"><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mi>u</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">[</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>=</mml:mo><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi><mml:mo fence="false" stretchy="false">{</mml:mo><mml:mi>u</mml:mi><mml:mo>.</mml:mo><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>i</mml:mi><mml:mi>l</mml:mi><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>L</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mi>u</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">[</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo>,</mml:mo><mml:mi>u</mml:mi><mml:mo>.</mml:mo><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mi>i</mml:mi><mml:mi>l</mml:mi><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>R</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">&#x2192;</mml:mo><mml:mrow><mml:msub><mml:mi>I</mml:mi><mml:mi>u</mml:mi></mml:msub></mml:mrow><mml:mo stretchy="false">[</mml:mo><mml:mi>i</mml:mi><mml:mo stretchy="false">]</mml:mo><mml:mo fence="false" stretchy="false">}</mml:mo></mml:math></inline-formula>. The specific steps are shown in <xref ref-type="fig" rid="fig-4">Fig. 4</xref> and Algorithm 1.</p>
<fig id="fig-4">
<label>Figure 4</label>
<caption>
<title>Index tree generation</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-4.tif"/>
</fig>
<fig id="fig-11">
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-11.tif"/>
</fig>
<p>(2) Trapdoor construction</p>
<p>Search vectors are constructed using the same principles as index vectors. The keywords are converted into vector form using pairwise encoding, which generates a two-character set <inline-formula id="ieqn-112"><mml:math id="mml-ieqn-112"><mml:mi>B</mml:mi><mml:msup><mml:mi>S</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> using two adjacent characters in a string. Suppose a character <inline-formula id="ieqn-113"><mml:math id="mml-ieqn-113"><mml:msup><mml:mi>w</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msubsup><mml:mi>s</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mi>s</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msubsup><mml:mi>s</mml:mi><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula>, a vector <inline-formula id="ieqn-114"><mml:math id="mml-ieqn-114"><mml:msup><mml:mi>V</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msubsup><mml:mi>x</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mi>x</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msubsup><mml:mi>x</mml:mi><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula> with m-dimensional values all 0, where <inline-formula id="ieqn-115"><mml:math id="mml-ieqn-115"><mml:mi>m</mml:mi><mml:mo>&#x003E;&#x003E;</mml:mo><mml:mi>n</mml:mi></mml:math></inline-formula>, and If <inline-formula id="ieqn-116"><mml:math id="mml-ieqn-116"><mml:mi>H</mml:mi><mml:mi>a</mml:mi><mml:mi>s</mml:mi><mml:mi>h</mml:mi><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>j</mml:mi></mml:math></inline-formula>, then <inline-formula id="ieqn-117"><mml:math id="mml-ieqn-117"><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula>. An m-dimensional Bloom filter <inline-formula id="ieqn-118"><mml:math id="mml-ieqn-118"><mml:mi>Q</mml:mi></mml:math></inline-formula> with the initial state of all 0 is set up for the search trapdoor, and the binary vector transformed into the search keyword is used as the input to the <inline-formula id="ieqn-119"><mml:math id="mml-ieqn-119"><mml:mi>l</mml:mi></mml:math></inline-formula> LSH functions and the output values represent the subscripts of <inline-formula id="ieqn-120"><mml:math id="mml-ieqn-120"><mml:mi>Q</mml:mi></mml:math></inline-formula>. The values corresponding to the positions of the subscripts are changed to the IDF-weighted values of the keywords. The trapdoor generation process is shown in <xref ref-type="fig" rid="fig-3">Fig. 3</xref>.</p>
</sec>
<sec id="s5_2">
<label>5.2</label>
<title>Data Retrieval</title>
<p>The data retrieval process is performed by the blockchain. The inner product between the index <inline-formula id="ieqn-121"><mml:math id="mml-ieqn-121"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and trapdoor <inline-formula id="ieqn-122"><mml:math id="mml-ieqn-122"><mml:mi>Q</mml:mi></mml:math></inline-formula> is then expressed as the correlation between file <inline-formula id="ieqn-123"><mml:math id="mml-ieqn-123"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and query keyword <inline-formula id="ieqn-124"><mml:math id="mml-ieqn-124"><mml:mi>w</mml:mi></mml:math></inline-formula>.At the beginning of the search, an empty score list <inline-formula id="ieqn-125"><mml:math id="mml-ieqn-125"><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:mo>=&#x003C;</mml:mo><mml:mi>f</mml:mi><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:mo>,</mml:mo><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:mo>&#x003E;</mml:mo></mml:math></inline-formula> is created, where <inline-formula id="ieqn-126"><mml:math id="mml-ieqn-126"><mml:mi>f</mml:mi><mml:mi>i</mml:mi><mml:mi>d</mml:mi></mml:math></inline-formula> denotes the file identifier and score denotes the score of the file associated with <inline-formula id="ieqn-127"><mml:math id="mml-ieqn-127"><mml:mi>f</mml:mi><mml:mi>i</mml:mi><mml:mi>d</mml:mi></mml:math></inline-formula>. Store the <inline-formula id="ieqn-128"><mml:math id="mml-ieqn-128"><mml:mi>t</mml:mi><mml:mi>o</mml:mi><mml:mi>p</mml:mi><mml:mo>&#x2212;</mml:mo><mml:mi>k</mml:mi></mml:math></inline-formula> files with the highest scores in the <inline-formula id="ieqn-129"><mml:math id="mml-ieqn-129"><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and sort them in descending order, where <inline-formula id="ieqn-130"><mml:math id="mml-ieqn-130"><mml:mi>k</mml:mi></mml:math></inline-formula> is determined by the DU based on their actual needs. According to the index tree generation strategy, the internal node vector value takes the maximum value of its child node vector. When performing data retrieval, the inner product of the search vector and the internal node vector is calculated. When the inner product is less than the minimum value of the score list, it will not continue to traverse down. The retrieval algorithm is shown below, where <inline-formula id="ieqn-131"><mml:math id="mml-ieqn-131"><mml:mi>u</mml:mi><mml:mo>.</mml:mo><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:math></inline-formula> is the inner product of the index vector <inline-formula id="ieqn-132"><mml:math id="mml-ieqn-132"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> in node <inline-formula id="ieqn-133"><mml:math id="mml-ieqn-133"><mml:mi>u</mml:mi></mml:math></inline-formula> and the search vector <inline-formula id="ieqn-134"><mml:math id="mml-ieqn-134"><mml:mi>Q</mml:mi></mml:math></inline-formula>, and <inline-formula id="ieqn-135"><mml:math id="mml-ieqn-135"><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi><mml:mi mathvariant="normal">&#x005F;</mml:mi><mml:mo movablelimits="true" form="prefix">min</mml:mo></mml:mrow></mml:msub></mml:math></inline-formula> is the score with the smallest correlation in the <inline-formula id="ieqn-136"><mml:math id="mml-ieqn-136"><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. Its data retrieval process is shown in <xref ref-type="fig" rid="fig-5">Fig. 5</xref>. The specific algorithm for data retrieval is shown in Algorithm 2.</p>
<fig id="fig-5">
<label>Figure 5</label>
<caption>
<title>Data retrieval based on index tree</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-5.tif"/>
</fig>
<fig id="fig-12">
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-12.tif"/>
</fig>
</sec>
<sec id="s5_3">
<label>5.3</label>
<title>Program Description</title>
<p>The blockchain-based fuzzy multi-keyword searchable encryption scheme is shown below. <xref ref-type="fig" rid="fig-6">Fig. 6</xref> is the algorithm timing diagram of this scheme, and the algorithm of the specific scheme is shown in Algorithm 3.</p>
<fig id="fig-6">
<label>Figure 6</label>
<caption>
<title>Timing diagram of the algorithm</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-6.tif"/>
</fig>
<p><list list-type="simple">
<list-item><label>(1)</label><p><inline-formula id="ieqn-138"><mml:math id="mml-ieqn-138"><mml:mi>S</mml:mi><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:msup><mml:mn>1</mml:mn><mml:mrow><mml:mi>&#x03BB;</mml:mi></mml:mrow></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: The DO inputs the security parameter &#x03BB; and outputs the key set <inline-formula id="ieqn-139"><mml:math id="mml-ieqn-139"><mml:mi>S</mml:mi><mml:mi>K</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>S</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula>. Where <inline-formula id="ieqn-140"><mml:math id="mml-ieqn-140"><mml:mi>k</mml:mi></mml:math></inline-formula> is a symmetric key that encrypts the file, <inline-formula id="ieqn-141"><mml:math id="mml-ieqn-141"><mml:mi>S</mml:mi></mml:math></inline-formula> is an m-dimensional binary vector, and <inline-formula id="ieqn-142"><mml:math id="mml-ieqn-142"><mml:msub><mml:mi>M</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula id="ieqn-143"><mml:math id="mml-ieqn-143"><mml:msub><mml:mi>M</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> are m &#x00D7; m-dimensional invertible matrices that serve to encrypt the index.</p></list-item>
<list-item><label>(2)</label><p><inline-formula id="ieqn-144"><mml:math id="mml-ieqn-144"><mml:mi>C</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>E</mml:mi><mml:mi>n</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>F</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: The DO encrypts <inline-formula id="ieqn-145"><mml:math id="mml-ieqn-145"><mml:mi>F</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></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:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula> using the symmetric key <inline-formula id="ieqn-146"><mml:math id="mml-ieqn-146"><mml:mi>k</mml:mi></mml:math></inline-formula> to obtain the encrypted file <inline-formula id="ieqn-147"><mml:math id="mml-ieqn-147"><mml:mi>C</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula> and stores it in IPFS.</p></list-item>
<list-item><label>(3)</label><p><inline-formula id="ieqn-148"><mml:math id="mml-ieqn-148"><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><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>S</mml:mi><mml:mi>K</mml:mi><mml:mo>,</mml:mo><mml:mi>F</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: The DO extracts the keyword <inline-formula id="ieqn-149"><mml:math id="mml-ieqn-149"><mml:msub><mml:mi>W</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x2026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula> in <inline-formula id="ieqn-150"><mml:math id="mml-ieqn-150"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. Generate an m-dimensional Bloom filter <inline-formula id="ieqn-151"><mml:math id="mml-ieqn-151"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> for each file <inline-formula id="ieqn-152"><mml:math id="mml-ieqn-152"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and initialize each bit to 0. For each keyword <inline-formula id="ieqn-153"><mml:math id="mml-ieqn-153"><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> in <inline-formula id="ieqn-154"><mml:math id="mml-ieqn-154"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, the keyword is transformed into a vector <inline-formula id="ieqn-155"><mml:math id="mml-ieqn-155"><mml:mi>B</mml:mi><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> by pairwise encoding, and utilizes <inline-formula id="ieqn-156"><mml:math id="mml-ieqn-156"><mml:mi>B</mml:mi><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> as the input of <inline-formula id="ieqn-157"><mml:math id="mml-ieqn-157"><mml:mi>l</mml:mi></mml:math></inline-formula> LSH functions, and the output values represent the subscripts of <inline-formula id="ieqn-158"><mml:math id="mml-ieqn-158"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, and the values corresponding to the positions of the subscripts are changed to <inline-formula id="ieqn-159"><mml:math id="mml-ieqn-159"><mml:mi>T</mml:mi><mml:msubsup><mml:mi>F</mml:mi><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mi>j</mml:mi></mml:msub></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>&#x00D7;</mml:mo><mml:msub><mml:mi>Z</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula>. The unencrypted index tree <inline-formula id="ieqn-160"><mml:math id="mml-ieqn-160"><mml:mi>I</mml:mi></mml:math></inline-formula> is generated by the index tree construction algorithm, which is described in <xref ref-type="sec" rid="s5_1">Section 5.1</xref>. Use <inline-formula id="ieqn-161"><mml:math id="mml-ieqn-161"><mml:mi>S</mml:mi></mml:math></inline-formula> to split the index vector <inline-formula id="ieqn-162"><mml:math id="mml-ieqn-162"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> in the node into two random vectors <inline-formula id="ieqn-163"><mml:math id="mml-ieqn-163"><mml:mrow><mml:mo>{</mml:mo><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:mrow></mml:msubsup><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula>. The rules are as follows: If <inline-formula id="ieqn-164"><mml:math id="mml-ieqn-164"><mml:mi>S</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula> then <inline-formula id="ieqn-165"><mml:math id="mml-ieqn-165"><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:msup><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:msubsup><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>, and <inline-formula id="ieqn-166"><mml:math id="mml-ieqn-166"><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula id="ieqn-167"><mml:math id="mml-ieqn-167"><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:msup><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:msubsup><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> can take any value; If <inline-formula id="ieqn-168"><mml:math id="mml-ieqn-168"><mml:mi>S</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula> then <inline-formula id="ieqn-169"><mml:math id="mml-ieqn-169"><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:msup><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:msubsup><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>. Obtain the encrypted index vector as <inline-formula id="ieqn-170"><mml:math id="mml-ieqn-170"><mml:msub><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:msup><mml:mi mathvariant="normal">&#x2032;</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:msubsup><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula>, and upload the encrypted index tree <inline-formula id="ieqn-171"><mml:math id="mml-ieqn-171"><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> to the blockchain.</p></list-item>
<list-item><label>(4)</label><p><inline-formula id="ieqn-172"><mml:math id="mml-ieqn-172"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>G</mml:mi><mml:mi>e</mml:mi><mml:mi>n</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:mrow><mml:mo>(</mml:mo><mml:mi>S</mml:mi><mml:mi>K</mml:mi><mml:mo>,</mml:mo><mml:msub><mml:mi>W</mml:mi><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: The DU generates a Bloom filter <inline-formula id="ieqn-173"><mml:math id="mml-ieqn-173"><mml:mi>Q</mml:mi></mml:math></inline-formula> based on the set of search keywords <inline-formula id="ieqn-174"><mml:math id="mml-ieqn-174"><mml:msub><mml:mi>W</mml:mi><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and initializes each bit to 0. For each keyword <inline-formula id="ieqn-175"><mml:math id="mml-ieqn-175"><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>z</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, the keyword is transformed into a vector <inline-formula id="ieqn-176"><mml:math id="mml-ieqn-176"><mml:mi>B</mml:mi><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi>z</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> by pairwise encoding, and utilizes <inline-formula id="ieqn-177"><mml:math id="mml-ieqn-177"><mml:mi>B</mml:mi><mml:msub><mml:mi>V</mml:mi><mml:mrow><mml:mi>z</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> as the input of <inline-formula id="ieqn-178"><mml:math id="mml-ieqn-178"><mml:mi>l</mml:mi></mml:math></inline-formula> LSH functions, the output value represents the subscript of <inline-formula id="ieqn-179"><mml:math id="mml-ieqn-179"><mml:mi>Q</mml:mi></mml:math></inline-formula>, and the value corresponding to the position of the subscript is changed to <inline-formula id="ieqn-180"><mml:math id="mml-ieqn-180"><mml:mi>I</mml:mi><mml:mi>D</mml:mi><mml:msub><mml:mi>F</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>z</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula>, the specific construction principle is shown in <xref ref-type="sec" rid="s5_1">Section 5.1</xref>. Use <inline-formula id="ieqn-181"><mml:math id="mml-ieqn-181"><mml:mi>S</mml:mi></mml:math></inline-formula> to split the search vector <inline-formula id="ieqn-182"><mml:math id="mml-ieqn-182"><mml:mi>Q</mml:mi></mml:math></inline-formula> in the node into two random vectors <inline-formula id="ieqn-183"><mml:math id="mml-ieqn-183"><mml:mrow><mml:mo>{</mml:mo><mml:msup><mml:mi>Q</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mrow><mml:msup><mml:mi>Q</mml:mi><mml:mi>&#x2033;</mml:mi></mml:msup></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula>. The rules are as follows: If <inline-formula id="ieqn-184"><mml:math id="mml-ieqn-184"><mml:mi>S</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula>, then <inline-formula id="ieqn-185"><mml:math id="mml-ieqn-185"><mml:msup><mml:mi>Q</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mi>Q</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:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Q</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>. If <inline-formula id="ieqn-186"><mml:math id="mml-ieqn-186"><mml:mi>S</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula> then <inline-formula id="ieqn-187"><mml:math id="mml-ieqn-187"><mml:msup><mml:mi>Q</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:msup><mml:mi>Q</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:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>Q</mml:mi><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>. <inline-formula id="ieqn-188"><mml:math id="mml-ieqn-188"><mml:msup><mml:mi>Q</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula id="ieqn-189"><mml:math id="mml-ieqn-189"><mml:msup><mml:mi>Q</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:mo>[</mml:mo><mml:mi>i</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> can take any value. Obtain the encrypted search vector <inline-formula id="ieqn-190"><mml:math id="mml-ieqn-190"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:msup><mml:mi>Q</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:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:msup><mml:mi>Q</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:math></inline-formula>, and upload the encrypted search vector <inline-formula id="ieqn-191"><mml:math id="mml-ieqn-191"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> to the blockchain.</p></list-item>
<list-item><label>(5)</label><p><inline-formula id="ieqn-192"><mml:math id="mml-ieqn-192"><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">&#x2190;</mml:mo><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:mi>S</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi><mml:mi>r</mml:mi><mml:mi>c</mml:mi><mml:mi>h</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: After receiving the <inline-formula id="ieqn-193"><mml:math id="mml-ieqn-193"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> submitted by the DU, the blockchain executes the search matching through the smart contract. The process is described in Algorithm 2, in which the inner product (i.e., relevance score) of the encrypted index vector and the search vector is computed as <xref ref-type="disp-formula" rid="eqn-12">Eq. (12)</xref>:</p></list-item>
</list>
<disp-formula id="eqn-12"><label>(12)</label><mml:math id="mml-eqn-12" display="block"><mml:mtable columnalign="left" columnspacing="1em" rowspacing="0.8em 0.8em 0.8em 0.8em 0.4em"><mml:mtr><mml:mtd><mml:mi>S</mml:mi><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:mrow><mml:mover><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub><mml:mo>~</mml:mo></mml:mover></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">~</mml:mo></mml:mover></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x2032;</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo>,</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mn>2</mml:mn><mml:mi>T</mml:mi></mml:msubsup><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x2032;</mml:mi><mml:mi>&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>}</mml:mo><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:msup><mml:mi>Q</mml:mi><mml:mi>&#x2032;</mml:mi></mml:msup><mml:mo>,</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x2212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:msup><mml:mi>Q</mml:mi><mml:mrow><mml:mi>&#x2032;</mml:mi><mml:mi>&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>}</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>I</mml:mi><mml:mi>u</mml:mi><mml:mi>&#x2032;</mml:mi></mml:msubsup><mml:mo>)</mml:mo></mml:mrow><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:msup><mml:mi>Q</mml:mi><mml:mi>&#x2032;</mml:mi></mml:msup><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:msubsup><mml:mi>M</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x2032;</mml:mi><mml:mi>&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x22C5;</mml:mo><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:msup><mml:mi>Q</mml:mi><mml:mrow><mml:mi>&#x2032;</mml:mi><mml:mi>&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>=</mml:mo><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:msup><mml:mi>Q</mml:mi><mml:mrow><mml:mi>&#x2032;</mml:mi></mml:mrow></mml:msup><mml:mo>+</mml:mo><mml:msubsup><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x2032;</mml:mi><mml:mi>&#x2032;</mml:mi></mml:mrow></mml:msubsup><mml:mo>&#x22C5;</mml:mo><mml:msup><mml:mi>Q</mml:mi><mml:mrow><mml:mi>&#x2032;</mml:mi><mml:mi>&#x2032;</mml:mi></mml:mrow></mml:msup></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>=</mml:mo><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:mi>Q</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>In <xref ref-type="disp-formula" rid="eqn-12">Eq. (12)</xref>, the result of making the inner product of vectors after encryption is the same as the result of making the inner product of plaintext vectors. After executing the query algorithm, the score list <inline-formula id="ieqn-194"><mml:math id="mml-ieqn-194"><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is returned and the corresponding ciphertext file is returned to the DU based on the <inline-formula id="ieqn-195"><mml:math id="mml-ieqn-195"><mml:mi>f</mml:mi><mml:mi>i</mml:mi><mml:mi>d</mml:mi></mml:math></inline-formula> in the list.
<list list-type="simple">
<list-item><label>(6)</label><p><inline-formula id="ieqn-196"><mml:math id="mml-ieqn-196"><mml:mi>F</mml:mi><mml:mo stretchy="false">&#x2190;</mml:mo><mml:mi>D</mml:mi><mml:mi>e</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>(</mml:mo><mml:mi>k</mml:mi><mml:mo>,</mml:mo><mml:mi>C</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>: After the DU gets the returned ciphertext file, the file is decrypted using the symmetric key <inline-formula id="ieqn-197"><mml:math id="mml-ieqn-197"><mml:mi>k</mml:mi></mml:math></inline-formula> to get the plaintext file.</p></list-item>
</list></p>
<fig id="fig-13">
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-13.tif"/>
</fig>
</sec>
<sec id="s5_4">
<label>5.4</label>
<title>Security Analysis</title>
<p><list list-type="simple">
<list-item><label>(1)</label><p>Document Privacy: The DO encrypts the collection of plaintext files before sending them to IPFS, and the DU gets the decryption key only after authorization, so only the DO and the authorized DU can get the plaintext files, and this scheme achieves document retrieval based on document identifiers, which has nothing to do with the content of the plaintext files and achieves the privacy of the files.</p></list-item>
<list-item><label>(2)</label><p>Confidentiality of encrypted index trees and search vector: This scheme utilizes the secure k-nearest neighbor algorithm to encrypt the index vectors <inline-formula id="ieqn-205"><mml:math id="mml-ieqn-205"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> of nodes in the index tree. Since the generated binary vector <inline-formula id="ieqn-206"><mml:math id="mml-ieqn-206"><mml:mi>S</mml:mi></mml:math></inline-formula> is random, the encrypted index vectors <inline-formula id="ieqn-207"><mml:math id="mml-ieqn-207"><mml:mrow><mml:mover><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub><mml:mo>&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> can not be associated with the unencrypted index vectors <inline-formula id="ieqn-208"><mml:math id="mml-ieqn-208"><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, and the generated encrypted vectors <inline-formula id="ieqn-209"><mml:math id="mml-ieqn-209"><mml:mrow><mml:mover><mml:msub><mml:mi>I</mml:mi><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub><mml:mo>&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> are different even for the files that have the same keywords. <inline-formula id="ieqn-210"><mml:math id="mml-ieqn-210"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> is obtained by encrypting the search vector <inline-formula id="ieqn-211"><mml:math id="mml-ieqn-211"><mml:mi>Q</mml:mi></mml:math></inline-formula> by the secure k-nearest neighbor algorithm, and even if the two sets of search keywords searched are the same, the obtained <inline-formula id="ieqn-212"><mml:math id="mml-ieqn-212"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula> is not the same.</p></list-item>
<list-item><label>(3)</label><p>Unrelatedness of queries: In this scheme, the search vector <inline-formula id="ieqn-213"><mml:math id="mml-ieqn-213"><mml:mi>Q</mml:mi></mml:math></inline-formula> achieves cryptographic uncertainty through the randomized decomposition of binary vectors. Even if the DU issues the same search request twice in a row, the vector <inline-formula id="ieqn-214"><mml:math id="mml-ieqn-214"><mml:mi>Q</mml:mi></mml:math></inline-formula> obtained after decomposition encryption will be different, thus ensuring the uncorrelatedness between queries. However, even if the same search vector is encrypted to obtain different search vectors, the relevance score calculated by the inner product is still the same. It follows that when correlating the same search requests, the retrieval or access pattern is leaked under the known ciphertext model.</p></list-item>
<list-item><label>(4)</label><p>Security of data storage and reliability of retrieval: The solution utilizes blockchain technology to store encrypted index trees and search vectors, and the ciphertext files are stored in the IPFS distributed file system, which eliminates the single point of failure that exists in traditional cloud servers, provides higher reliability, and ensures file integrity. Utilizing smart contracts to perform data retrieval solves the problem of dishonest searches on traditional cloud servers and ensures the reliability of data retrieval.</p>
<p>In <xref ref-type="table" rid="table-1">Table 1</xref>, we compare this scheme with other schemes in terms of the above security performance.</p>
</list-item>
</list></p>
<table-wrap id="table-1">
<label>Table 1</label>
<caption>
<title>Comparison of security schemes</title>
</caption>
<table>
<colgroup>
<col/>
<col/>
<col/>
<col/>
<col/>
</colgroup>
<thead>
<tr align="center">
<th>Scheme</th>
<th>Privacy</th>
<th>Index confidentiality</th>
<th>Distributed</th>
<th>Reliability</th>
</tr>
</thead>
<tbody>
<tr align="center">
<td>Scheme [<xref ref-type="bibr" rid="ref-21">21</xref>]</td>
<td>&#x2717;</td>
<td>&#x2717;</td>
<td>&#x2717;</td>
<td>&#x2713;</td>
</tr>
<tr align="center">
<td>Scheme [<xref ref-type="bibr" rid="ref-22">22</xref>]</td>
<td>&#x2717;</td>
<td>&#x2713;</td>
<td>&#x2717;</td>
<td>&#x2713;</td>
</tr>
<tr align="center">
<td>Ours scheme</td>
<td>&#x2713;</td>
<td>&#x2713;</td>
<td>&#x2713;</td>
<td>&#x2713;</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
</sec>
<sec id="s6">
<label>6</label>
<title>Performance</title>
<sec id="s6_1">
<label>6.1</label>
<title>Performance of Time Complexity</title>
<p>In this section, we analyze the communication complexity of the scheme from three key links: index upload stage, trapdoor upload stage, and data retrieval stage. And in <xref ref-type="table" rid="table-2">Table 2</xref> compared with the existing scheme. In the following analysis, <italic>n</italic> represents the number of files, <italic>m</italic> represents the dimension of the index or trapdoor, <italic>p</italic> is the number of exact keywords, and <italic>q</italic> is the maximum number of fuzzy keywords.</p>
<table-wrap id="table-2">
<label>Table 2</label>
<caption>
<title>Comparison of computational complexity schemes</title>
</caption>
<table>
<colgroup>
<col/>
<col/>
<col/>
<col/>
<col/>
</colgroup>
<thead>
<tr align="center">
<th>Scheme</th>
<th>Scheme [<xref ref-type="bibr" rid="ref-21">21</xref>]</th>
<th>Scheme [<xref ref-type="bibr" rid="ref-23">23</xref>]</th>
<th>Scheme [<xref ref-type="bibr" rid="ref-24">24</xref>]</th>
<th>Ours scheme</th>
</tr>
</thead>
<tbody>
<tr align="center">
<td>Index upload stage</td>
<td><italic>O(pq)</italic></td>
<td><italic>O(pq)</italic></td>
<td><italic>O(pq)</italic></td>
<td><italic>O(m</italic><sup><italic>2</italic></sup><italic>n &#x002B; nlog n)</italic></td>
</tr>
<tr align="center">
<td>Trapdoor upload stage</td>
<td><italic>O(q)</italic></td>
<td><italic>O(q)</italic></td>
<td><italic>O(q)</italic></td>
<td><italic>O(m</italic><sup><italic>2</italic></sup><italic>)</italic></td>
</tr>
<tr align="center">
<td>Data retrieval stage</td>
<td><italic>O(q)</italic></td>
<td><italic>O(qlog p)</italic></td>
<td><italic>O(qlog p)</italic></td>
<td><italic>O(mlog n)</italic></td>
</tr>
</tbody>
</table>
</table-wrap>
<p><list list-type="simple">
<list-item><label>(1)</label><p>Index upload phase: This stage mainly includes two stages: plaintext index generation and index encryption. The generation of the plaintext index is mainly affected by the number of keywords in the file, and the generation of the index tree is affected by the number of files. The time overhead of index encryption mainly depends on matrix multiplication. Therefore, the communication overhead of the index upload phase of this scheme is <italic>O</italic>(<italic>m</italic><sup>2</sup><italic>n &#x002B; n</italic>log <italic>n</italic>), and the other schemes are <italic>O(q)</italic>.</p></list-item>
<list-item><label>(2)</label><p>Trapdoor upload stage: Similarly, the trapdoor upload phase mainly includes matrix multiplication, so the time complexity of this phase is <italic>O(m</italic><sup>2</sup><italic>)</italic>, and the time complexity of trapdoor generation in other schemes is <italic>O(q)</italic>.</p></list-item>
<list-item><label>(3)</label><p>Data retrieval phase: The time complexity of the search phase after constructing the index tree mainly depends on the height of the index tree, and the height of the index tree is determined by the number of leaf nodes (number of files) <italic>n</italic>. Since the balanced binary tree is used to construct the index structure, the time complexity is <italic>O</italic>(<italic>m</italic>log <italic>n</italic>).</p></list-item>
</list></p>
<p><italic>m</italic> is the length of the index or trapdoor, which can be regarded as a constant. Because of <inline-formula id="ieqn-215"><mml:math id="mml-ieqn-215"><mml:mi>n</mml:mi><mml:mo>&#x003C;&#x003C;</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x003C;&#x003C;</mml:mo><mml:mi>q</mml:mi></mml:math></inline-formula>, the computational complexity of this scheme is better than that of the existing schemes in the index establishment, trapdoor generation, and data retrieval stages.</p>
</sec>
<sec id="s6_2">
<label>6.2</label>
<title>Performance Testing</title>
<p>The experimental environment in this study is a 64-bit Windows 10 operating system, with an Intel(R) Core(TM) i5-7300HQ CPU running at 2.50 GHz and 16 GB of RAM. The proposed solution is implemented by writing the smart contract in the Go language and using Fabric to set up a local blockchain network for deploying the smart contract. Terminal commands are then employed to interact with the deployed smart contract. We randomly selected 3000 files from the IEEE database as the dataset and extracted approximately 65,000 keywords from the dataset. The minimum number of keywords in a file is 107, while the maximum is 396. The number of LSH functions is set to <inline-formula id="ieqn-216"><mml:math id="mml-ieqn-216"><mml:mi>l</mml:mi></mml:math></inline-formula> &#x003D; 20, and the length of the Bloom filter is set to m &#x003D; 5000. To demonstrate the fuzzy search capability of the data, we adopt a similar approach to the original method. We randomly select a keyword and then alter one of its characters to construct a fuzzy keyword. The experimental part mainly measures the time consumption of the index construction stage, trapdoor construction stage, and search matching stage.</p>
<sec id="s6_2_1">
<label>6.2.1</label>
<title>Single File Index Generation</title>
<p><xref ref-type="fig" rid="fig-7">Fig. 7</xref> shows how the time taken for index generation changes with the number of keywords. Literature [<xref ref-type="bibr" rid="ref-25">25</xref>] needs to perform encryption operations on each keyword to generate an index. Therefore, the time spent on generating the index increases with the increase in the number of keywords. In this scheme and reference [<xref ref-type="bibr" rid="ref-26">26</xref>], the increase in the number of keywords has almost no impact on the time required to generate indexes. This is because both this scheme and Literature [<xref ref-type="bibr" rid="ref-26">26</xref>] map all keywords to the Bloom filter, and the time consumed for index construction is more related to the number of Bloom filter bits and less related to the number of keywords. On this basis, the index construction efficiency of this scheme is better than that of Literature [<xref ref-type="bibr" rid="ref-26">26</xref>], because this scheme uses dual encoding functions to directly convert keywords into vectors, while Literature [<xref ref-type="bibr" rid="ref-26">26</xref>] needs first to convert keywords into lowercase and then extract the stem before converting them into vectors.</p>
<fig id="fig-7">
<label>Figure 7</label>
<caption>
<title>Time cost of index generation [<xref ref-type="bibr" rid="ref-25">25</xref>,<xref ref-type="bibr" rid="ref-26">26</xref>]</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-7.tif"/>
</fig>
</sec>
<sec id="s6_2_2">
<label>6.2.2</label>
<title>Trapdoor Generation</title>
<p>As shown in <xref ref-type="fig" rid="fig-8">Fig. 8</xref>, the trapdoor generation time in [<xref ref-type="bibr" rid="ref-25">25</xref>] increases with the number of keywords. When the number of keywords is 10, the time consumption is about 110 ms, and the increase in the number of keywords has almost no effect on the time consumption of trapdoor generation in this scheme and Literature [<xref ref-type="bibr" rid="ref-26">26</xref>]. This is because both this scheme and Literature [<xref ref-type="bibr" rid="ref-26">26</xref>] map all keywords to the Bloom filter, and the time consumed by constructing trapdoors is more related to the number of Bloom filter bits and less related to the number of keywords. On this basis, the overall efficiency of trapdoor generation in this scheme is better than that of Literature [<xref ref-type="bibr" rid="ref-26">26</xref>]. When the number of keywords is 4, the time cost is about 10 ms, while the time cost of Literature [<xref ref-type="bibr" rid="ref-26">26</xref>] is about 43 ms. The reason is that this scheme utilizes dual encoding functions to directly convert keywords into vectors, which is more efficient compared to Literature [<xref ref-type="bibr" rid="ref-26">26</xref>].</p>
<fig id="fig-8">
<label>Figure 8</label>
<caption>
<title>Time cost of trapdoor generation [<xref ref-type="bibr" rid="ref-25">25</xref>,<xref ref-type="bibr" rid="ref-26">26</xref>]</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-8.tif"/>
</fig>
</sec>
<sec id="s6_2_3">
<label>6.2.3</label>
<title>Index Tree Construction</title>
<p><xref ref-type="fig" rid="fig-9">Fig. 9</xref> illustrates how the time cost for generating the entire index tree varies with the number of files when the index tree is constructed based on all files. As shown in the figure, the time cost for index generation increases with the number of files. When the number of files reaches 3000, the indexing generation stage of this scheme takes 200 s, which is much lower than other schemes. This is because the index structure is different from other schemes. As shown in <xref ref-type="fig" rid="fig-7">Fig. 7</xref>, the index generation time of this scheme is mainly related to the number of files, while the index generation time of other schemes is mainly related to the number of keywords contained in the files. Among them, Literature [<xref ref-type="bibr" rid="ref-24">24</xref>] has the highest time cost because it uses the RSA accumulator for verification.</p>
<fig id="fig-9">
<label>Figure 9</label>
<caption>
<title>Time cost of index building [<xref ref-type="bibr" rid="ref-21">21</xref>,<xref ref-type="bibr" rid="ref-23">23</xref>,<xref ref-type="bibr" rid="ref-24">24</xref>]</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-9.tif"/>
</fig>
</sec>
<sec id="s6_2_4">
<label>6.2.4</label>
<title>Search Matching</title>
<p>Since the comparative scheme only supports fuzzy searches for single keywords, we also conducted fuzzy single-keyword searches to enable a fair comparison. As shown in <xref ref-type="fig" rid="fig-10">Fig. 10</xref>, the time consumed during the data retrieval phase increases approximately linearly with the number of files. When the number of files is 3000, the data retrieval time for the scheme in [<xref ref-type="bibr" rid="ref-22">22</xref>] is 3.2 s, while the retrieval times for the scheme in [<xref ref-type="bibr" rid="ref-21">21</xref>,<xref ref-type="bibr" rid="ref-23">23</xref>], and [<xref ref-type="bibr" rid="ref-24">24</xref>] are 5.1, 5.3, and 16 s, respectively. The time costs of Literature [<xref ref-type="bibr" rid="ref-21">21</xref>] and Literature [<xref ref-type="bibr" rid="ref-23">23</xref>] are similar, and when the number of files is 1000, the increased time consumption of both schemes is significantly reduced. Because both of these schemes are based on building an index for a single keyword, as the number of files increases, the growth rate of different keywords slows down, which is equivalent to the growth rate of different indexes slowing down, resulting in a slower growth rate of search time. As shown in the experimental figure, when the number of files is 3000, the data retrieval time for this scheme is only 0.6 s. Compared to the scheme in [<xref ref-type="bibr" rid="ref-22">22</xref>], this scheme demonstrates higher retrieval efficiency. This is because this scheme is based on an index tree to construct an index structure. By using the pruning technique of the index tree, the most relevant k files can be obtained without traversing all the index vectors. Literature [<xref ref-type="bibr" rid="ref-24">24</xref>] still has the highest search time overhead due to the use of the RSA accumulator.</p>
<fig id="fig-10">
<label>Figure 10</label>
<caption>
<title>Search time [<xref ref-type="bibr" rid="ref-21">21</xref>&#x2013;<xref ref-type="bibr" rid="ref-24">24</xref>]</title>
</caption>
<graphic mimetype="image" mime-subtype="tif" xlink:href="CMC_63274-fig-10.tif"/>
</fig>
</sec>
</sec>
</sec>
<sec id="s7">
<label>7</label>
<title>Conclusion</title>
<p>This paper proposes a blockchain-based fuzzy multi-keyword ranked ciphertext retrieval scheme to overcome the limitations of traditional searchable encryption schemes in terms of functionality, performance, and security. The scheme utilizes blockchain technology to store file indexes, IPFS to store encrypted files, and smart contracts to perform data retrieval tasks. It effectively addresses the issues of single point of failure and dishonest search associated with centralized servers, ensuring the security of data and the reliability of retrieval. By leveraging LSH and BF techniques, the scheme achieves fault tolerance for spelling errors and supports multi-keyword retrieval, thereby enhancing the accuracy and comprehensiveness of the search results. By combining the TF-IDF algorithm with RWS, the scheme more accurately evaluates the relevance between keywords and files, enabling ranking of the retrieval results and enhancing the user experience. The index structure is built using a balanced binary tree, coupled with pruning techniques, which significantly improves retrieval efficiency while reducing storage space and communication overhead. The experimental results show that this scheme is superior to existing schemes in terms of index construction efficiency, data retrieval efficiency, and security, providing new ideas and methods for the field of encrypted data retrieval. Future work could further explore how to apply this scheme to a broader range of application scenarios and investigate more efficient index structures and retrieval algorithms.</p>
</sec>
</body>
<back>
<ack>
<p>We would like to acknowledge the editors and reviewers for their comments.</p>
</ack>
<sec>
<title>Funding Statement</title>
<p>This research was funded by the Jilin Provincial Department of Education Scientific Research Project (Project No. JJKH20250872KJ). The funding body had no role in the design of the study, collection, analysis, and interpretation of data, or in writing the manuscript.</p>
</sec>
<sec>
<title>Author Contributions</title>
<p>The authors confirm their contribution to the paper as follows: Data curation, conceptualization, Hongliang Tian; methodology, writing&#x2014;review, editing, writing&#x2014;original draft preparation, software and validation, Zhong Fan; formal analysis, investigation and resources, Zhiyang Ruan; visualization and supervision, Aomen Zhao. 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>The data that support the findings of this study are available from the corresponding author, Z. F. 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>
<glossary content-type="abbreviations" id="glossary-1">
<title>Abbreviations</title>
<def-list>
<def-item>
<term><bold>Sign</bold></term>
<def>
<p><bold>Definition</bold></p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-217"><mml:math id="mml-ieqn-217"><mml:mi>w</mml:mi></mml:math></inline-formula></term>
<def>
<p>Keyword</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-218"><mml:math id="mml-ieqn-218"><mml:mi>f</mml:mi></mml:math></inline-formula></term>
<def>
<p>File</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-219"><mml:math id="mml-ieqn-219"><mml:msub><mml:mi>W</mml:mi><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula></term>
<def>
<p>Search keyword set</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-220"><mml:math id="mml-ieqn-220"><mml:mi>N</mml:mi></mml:math></inline-formula></term>
<def>
<p>Merge file</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-221"><mml:math id="mml-ieqn-221"><mml:msub><mml:mi>N</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula></term>
<def>
<p>Number of files containing the keyword <inline-formula id="ieqn-222"><mml:math id="mml-ieqn-222"><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula></p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-223"><mml:math id="mml-ieqn-223"><mml:msub><mml:mi>N</mml:mi><mml:mrow><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>,</mml:mo><mml:mrow><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula></term>
<def>
<p>The number of keywords <inline-formula id="ieqn-224"><mml:math id="mml-ieqn-224"><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> in file <inline-formula id="ieqn-225"><mml:math id="mml-ieqn-225"><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula></p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-226"><mml:math id="mml-ieqn-226"><mml:msub><mml:mi>g</mml:mi><mml:mrow><mml:mi>&#x03C6;</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula></term>
<def>
<p>Weight coefficient</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-227"><mml:math id="mml-ieqn-227"><mml:mi>C</mml:mi></mml:math></inline-formula></term>
<def>
<p>Ciphertext file</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-228"><mml:math id="mml-ieqn-228"><mml:mi>I</mml:mi></mml:math></inline-formula></term>
<def>
<p>Unencrypted index tree</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-229"><mml:math id="mml-ieqn-229"><mml:mrow><mml:mover><mml:mi>I</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula></term>
<def>
<p>Encrypted index tree</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-230"><mml:math id="mml-ieqn-230"><mml:mi>S</mml:mi></mml:math></inline-formula></term>
<def>
<p>M-dimensional binary vector</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-231"><mml:math id="mml-ieqn-231"><mml:mi>k</mml:mi></mml:math></inline-formula></term>
<def>
<p>Symmetric-key</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-232"><mml:math id="mml-ieqn-232"><mml:mi>D</mml:mi><mml:mi>O</mml:mi></mml:math></inline-formula></term>
<def>
<p>Data Owner</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-233"><mml:math id="mml-ieqn-233"><mml:mi>D</mml:mi><mml:mi>U</mml:mi></mml:math></inline-formula></term>
<def>
<p>Data User</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-234"><mml:math id="mml-ieqn-234"><mml:mi>I</mml:mi><mml:mi>P</mml:mi><mml:mi>F</mml:mi><mml:mi>S</mml:mi></mml:math></inline-formula></term>
<def>
<p>InterPlanetary file system</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-235"><mml:math id="mml-ieqn-235"><mml:mi>B</mml:mi><mml:mi>C</mml:mi></mml:math></inline-formula></term>
<def>
<p>Blockchain</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-236"><mml:math id="mml-ieqn-236"><mml:mi>F</mml:mi></mml:math></inline-formula></term>
<def>
<p>Plaintext file set</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-237"><mml:math id="mml-ieqn-237"><mml:mi>W</mml:mi></mml:math></inline-formula></term>
<def>
<p>Keywords set</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-238"><mml:math id="mml-ieqn-238"><mml:mi>S</mml:mi><mml:mi>K</mml:mi></mml:math></inline-formula></term>
<def>
<p>System key</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-239"><mml:math id="mml-ieqn-239"><mml:mi>Q</mml:mi></mml:math></inline-formula></term>
<def>
<p>Unencrypted search vector</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-240"><mml:math id="mml-ieqn-240"><mml:mrow><mml:mover><mml:mi>Q</mml:mi><mml:mo stretchy="false">&#x007E;</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula></term>
<def>
<p>Encrypted search vector</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-241"><mml:math id="mml-ieqn-241"><mml:mi>&#x03BB;</mml:mi></mml:math></inline-formula></term>
<def>
<p>Safety parameter</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-242"><mml:math id="mml-ieqn-242"><mml:msub><mml:mi>M</mml:mi><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>M</mml:mi><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula></term>
<def>
<p>m <inline-formula id="ieqn-243"><mml:math id="mml-ieqn-243"><mml:mo>&#x00D7;</mml:mo></mml:math></inline-formula> m-dimensional invertible matrix</p>
</def>
</def-item>
<def-item>
<term><inline-formula id="ieqn-244"><mml:math id="mml-ieqn-244"><mml:msub><mml:mi>S</mml:mi><mml:mrow><mml:mi>L</mml:mi><mml:mi>i</mml:mi><mml:mi>s</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula></term>
<def>
<p>Score list</p>
</def>
</def-item>
</def-list>
</glossary>
<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>2000 IEEE Symposium on Security &#x0026; Privacy (IEEE S&#x0026;P)</conf-name>; <year>2000 May 14&#x2013;17</year>; <publisher-loc>Berkeley, CA, USA</publisher-loc>. p. <fpage>44</fpage>&#x2013;<lpage>55</lpage>. doi:<pub-id pub-id-type="doi">10.1109/SECPRI.2000.848445</pub-id>.</mixed-citation></ref>
<ref id="ref-2"><label>[2]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Wu</surname> <given-names>M</given-names></string-name>, <string-name><surname>Dong</surname> <given-names>X</given-names></string-name>, <string-name><surname>Cao</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Shen</surname> <given-names>J</given-names></string-name></person-group>. <article-title>A privacy preserving public-key searchable encryption scheme with fast keyword search</article-title>. In: <conf-name>2017 International Conference on Computer Technology, Electronics and Communication (ICCTEC)</conf-name>; <year>2017 Dec 19&#x2013;21</year>; <publisher-loc>Dalian, China</publisher-loc>. p. <fpage>579</fpage>&#x2013;<lpage>85</lpage>. doi:<pub-id pub-id-type="doi">10.1109/ICCTEC.2017.00131</pub-id>.</mixed-citation></ref>
<ref id="ref-3"><label>[3]</label><mixed-citation publication-type="journal"><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>. <source>J Comput Secur</source>. <year>2011</year>;<volume>19</volume>(<issue>5</issue>):<fpage>895</fpage>&#x2013;<lpage>934</lpage>. doi:<pub-id pub-id-type="doi">10.3233/JCS-2011-0426</pub-id>.</mixed-citation></ref>
<ref id="ref-4"><label>[4]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Golle</surname> <given-names>P</given-names></string-name>, <string-name><surname>Staddon</surname> <given-names>J</given-names></string-name>, <string-name><surname>Waters</surname> <given-names>BR</given-names></string-name></person-group>. <article-title>Secure conjunctive keyword search over encrypted data</article-title>. In: <conf-name>2004 Cryptography &#x0026; Network Security Conference (ACNS)</conf-name>; <year>2004 Jun 8&#x2013;11</year>; <publisher-loc>China</publisher-loc>: <publisher-name>Yellow Mountain</publisher-name>. p. <fpage>31</fpage>&#x2013;<lpage>45</lpage>. doi:<pub-id pub-id-type="doi">10.1007/978-3-540-24852-1_3</pub-id>.</mixed-citation></ref>
<ref id="ref-5"><label>[5]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Wang</surname> <given-names>C</given-names></string-name>, <string-name><surname>Cao</surname> <given-names>N</given-names></string-name>, <string-name><surname>Li</surname> <given-names>J</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>Secure ranked keyword search over encrypted cloud data</article-title>. In: <conf-name>2010 IEEE 30th International Conference on Distributed Computing Systems (ICDCS)</conf-name>; <year>2010 Jun 21&#x2013;25</year>; <publisher-loc>Genoa, Italy</publisher-loc>. p. <fpage>253</fpage>&#x2013;<lpage>62</lpage>.</mixed-citation></ref>
<ref id="ref-6"><label>[6]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Xia</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>X</given-names></string-name>, <string-name><surname>Sun</surname> <given-names>X</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>Q</given-names></string-name></person-group>. <article-title>A secure and dynamic multi-keyword ranked search scheme over encrypted cloud data</article-title>. <source>IEEE Trans Parallel Distrib Syst</source>. <year>2016</year>;<volume>27</volume>(<issue>2</issue>):<fpage>340</fpage>&#x2013;<lpage>52</lpage>. doi:<pub-id pub-id-type="doi">10.1109/TPDS.2015.2401003</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>Chen</surname> <given-names>C</given-names></string-name>, <string-name><surname>Zhu</surname> <given-names>X</given-names></string-name>, <string-name><surname>Shen</surname> <given-names>P</given-names></string-name>, <string-name><surname>Hu</surname> <given-names>J</given-names></string-name>, <string-name><surname>Guo</surname> <given-names>S</given-names></string-name>, <string-name><surname>Zahir</surname> <given-names>T</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>An efficient privacy-preserving ranked keyword search method</article-title>. <source>IEEE Trans Parallel Distrib Syst</source>. <year>2016</year>;<volume>27</volume>(<issue>4</issue>):<fpage>951</fpage>&#x2013;<lpage>63</lpage>. doi:<pub-id pub-id-type="doi">10.1109/TPDS.2015.2425407</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>Zhu</surname> <given-names>X</given-names></string-name>, <string-name><surname>Dai</surname> <given-names>H</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>, <string-name><surname>Li</surname> <given-names>H</given-names></string-name></person-group>. <article-title>Muse: an efficient and accurate verifiable privacy-preserving multi-keyword text search over encrypted cloud data</article-title>. <source>Secur Commun Netw</source>. <year>2017</year>;<volume>2017</volume>:<fpage>1</fpage>&#x2013;<lpage>17</lpage>.</mixed-citation></ref>
<ref id="ref-9"><label>[9]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Li</surname> <given-names>J</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>C</given-names></string-name>, <string-name><surname>Cao</surname> <given-names>N</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>Fuzzy keyword search over encrypted data in cloud computing</article-title>. In: <conf-name>2010 Proceedings IEEE International Conference on Computer Communications</conf-name>; <year>2010 Mar 14&#x2013;19</year>; <publisher-loc>San Diego, CA, USA</publisher-loc>. p. <fpage>1</fpage>&#x2013;<lpage>5</lpage>.</mixed-citation></ref>
<ref id="ref-10"><label>[10]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Vaanchig</surname> <given-names>N</given-names></string-name>, <string-name><surname>Qin</surname> <given-names>Z</given-names></string-name></person-group>. <article-title>Public key encryption with temporary and fuzzy keyword search</article-title>. <source>Math Biosci Eng</source>. <year>2019</year>;<volume>16</volume>(<issue>5</issue>):<fpage>3914</fpage>&#x2013;<lpage>35</lpage>. doi:<pub-id pub-id-type="doi">10.3934/mbe.2019193</pub-id>; <pub-id pub-id-type="pmid">31499642</pub-id></mixed-citation></ref>
<ref id="ref-11"><label>[11]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Wang</surname> <given-names>B</given-names></string-name>, <string-name><surname>Yu</surname> <given-names>S</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></person-group>. <article-title>Privacy-preserving multi-keyword fuzzy search over encrypted data in the cloud</article-title>. In: <conf-name>2014 Proceedings IEEE International Conference on Computer Communications</conf-name>; <year>2014 Apr 27&#x2013;May 2</year>; <publisher-loc>Toronto, ON, Canada</publisher-loc>. p. <fpage>2112</fpage>&#x2013;<lpage>20</lpage>.</mixed-citation></ref>
<ref id="ref-12"><label>[12]</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>Wu</surname> <given-names>J</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>T</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>G</given-names></string-name></person-group>. <article-title>Secure multi-keyword fuzzy searches with enhanced service quality in cloud computing</article-title>. <source>IEEE Trans Netw Serv Manag</source>. <year>2021</year>;<volume>18</volume>(<issue>2</issue>):<fpage>2046</fpage>&#x2013;<lpage>62</lpage>. doi:<pub-id pub-id-type="doi">10.1109/TNSM.2020.3045467</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>Miao</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Deng</surname> <given-names>RH</given-names></string-name>, <string-name><surname>Choo</surname> <given-names>KKR</given-names></string-name>, <string-name><surname>Liu</surname> <given-names>X</given-names></string-name>, <string-name><surname>Ning</surname> <given-names>J</given-names></string-name>, <string-name><surname>Li</surname> <given-names>H</given-names></string-name></person-group>. <article-title>Optimized verifiable fine-grained keyword search in dynamic multi-owner settings</article-title>. <source>IEEE Trans Dependable Secur Comput</source>. <year>2021</year>;<volume>18</volume>(<issue>4</issue>):<fpage>1804</fpage>&#x2013;<lpage>20</lpage>.</mixed-citation></ref>
<ref id="ref-14"><label>[14]</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-15"><label>[15]</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 multi-keyword search encryption scheme with anonymous key generation for medical internet of things</article-title>. <source>IEEE Internet Things J</source>. <year>2022</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-16"><label>[16]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Hu</surname> <given-names>S</given-names></string-name>, <string-name><surname>Cai</surname> <given-names>C</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>C</given-names></string-name>, <string-name><surname>Luo</surname> <given-names>X</given-names></string-name>, <string-name><surname>Ren</surname> <given-names>K</given-names></string-name></person-group>. <article-title>Searching an encrypted cloud meets blockchain: a decentralized, reliable and fair realization</article-title>. In: <conf-name>2018 Proceedings IEEE International Conference on Computer Communications</conf-name>; <year>2018 Apr 16&#x2013;19</year>; <publisher-loc>Honolulu, HI, USA</publisher-loc>. p. <comment>792&#x2013;800</comment>.</mixed-citation></ref>
<ref id="ref-17"><label>[17]</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>Deng</surname> <given-names>RH</given-names></string-name>, <string-name><surname>Shu</surname> <given-names>J</given-names></string-name>, <string-name><surname>Yang</surname> <given-names>K</given-names></string-name>, <string-name><surname>Zheng</surname> <given-names>D</given-names></string-name></person-group>. <article-title>Tkse: trustworthy keyword search over encrypted data with two-side verifiability via blockchain</article-title>. <source>IEEE Access</source>. <year>2018</year>;<volume>6</volume>:<fpage>31077</fpage>&#x2013;<lpage>87</lpage>. doi:<pub-id pub-id-type="doi">10.1109/ACCESS.2018.2844400</pub-id>.</mixed-citation></ref>
<ref id="ref-18"><label>[18]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Han</surname> <given-names>H</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Xu</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Dong</surname> <given-names>X</given-names></string-name>, <string-name><surname>Tian</surname> <given-names>W</given-names></string-name></person-group>. <article-title>Enhancing IoT security and efficiency: a blockchain-assisted multi-keyword searchable encryption scheme</article-title>. <source>IEEE Access</source>. <year>2024</year>;<volume>12</volume>:<fpage>148677</fpage>&#x2013;<lpage>92</lpage>. doi:<pub-id pub-id-type="doi">10.1109/ACCESS.2024.3472119</pub-id>.</mixed-citation></ref>
<ref id="ref-19"><label>[19]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Yan</surname> <given-names>X</given-names></string-name>, <string-name><surname>Cheng</surname> <given-names>P</given-names></string-name>, <string-name><surname>Tang</surname> <given-names>Y</given-names></string-name>, <string-name><surname>Zhang</surname> <given-names>J</given-names></string-name></person-group>. <article-title>Blockchain-assisted verifiable and multi-user fuzzy search encryption scheme</article-title>. <source>Appl Sci</source>. <year>2024</year>;<volume>14</volume>(<issue>24</issue>):<fpage>11740</fpage>. doi:<pub-id pub-id-type="doi">10.3390/app142411740</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>G</given-names></string-name>, <string-name><surname>Yang</surname> <given-names>G</given-names></string-name>, <string-name><surname>Bai</surname> <given-names>S</given-names></string-name>, <string-name><surname>Zhou</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Dai</surname> <given-names>H</given-names></string-name></person-group>. <article-title>Fsse: an effective fuzzy semantic searchable encryption scheme over encrypted cloud data</article-title>. <source>IEEE Access</source>. <year>2020</year>;<volume>8</volume>:<fpage>71893</fpage>&#x2013;<lpage>906</lpage>. doi:<pub-id pub-id-type="doi">10.1109/ACCESS.2020.2966367</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>Ge</surname> <given-names>X</given-names></string-name>, <string-name><surname>Yu</surname> <given-names>J</given-names></string-name>, <string-name><surname>Hu</surname> <given-names>C</given-names></string-name>, <string-name><surname>Zhang</surname> <given-names>H</given-names></string-name>, <string-name><surname>Hao</surname> <given-names>R</given-names></string-name></person-group>. <article-title>Enabling efficient verifiable fuzzy keyword search over encrypted data in cloud computing</article-title>. <source>IEEE Access</source>. <year>2018</year>;<volume>6</volume>:<fpage>45725</fpage>&#x2013;<lpage>39</lpage>. doi:<pub-id pub-id-type="doi">10.1109/ACCESS.2018.2866031</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>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>2023</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-23"><label>[23]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Wang</surname> <given-names>J</given-names></string-name>, <string-name><surname>Ma</surname> <given-names>H</given-names></string-name>, <string-name><surname>Tang</surname> <given-names>Q</given-names></string-name>, <string-name><surname>Li</surname> <given-names>J</given-names></string-name>, <string-name><surname>Zhu</surname> <given-names>H</given-names></string-name>, <string-name><surname>Ma</surname> <given-names>S</given-names></string-name>, <etal>et al</etal></person-group>. <article-title>Efficient verifiable fuzzy keyword search over encrypted data in cloud computing</article-title>. <source>Comput Sci Inf Syst</source>. <year>2013</year>;<volume>10</volume>(<issue>2</issue>):<fpage>667</fpage>&#x2013;<lpage>84</lpage>. doi:<pub-id pub-id-type="doi">10.2298/CSIS121104028W</pub-id>.</mixed-citation></ref>
<ref id="ref-24"><label>[24]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Huang</surname> <given-names>R</given-names></string-name>, <string-name><surname>Li</surname> <given-names>Z</given-names></string-name>, <string-name><surname>Wu</surname> <given-names>G</given-names></string-name></person-group>. <article-title>A verifiable encryption scheme supporting fuzzy search</article-title>. In: <conf-name>2019 International Conference on Security, Privacy, and Anonymity in Computation, Communication, and Storage (SpaCCS)</conf-name>; <year>2019 Jul 14&#x2013;17</year>; <publisher-loc>Atlanta, GA, USA</publisher-loc>. p. <fpage>397</fpage>&#x2013;<lpage>411</lpage>.</mixed-citation></ref>
<ref id="ref-25"><label>[25]</label><mixed-citation publication-type="journal"><person-group person-group-type="author"><string-name><surname>Shu</surname> <given-names>J</given-names></string-name>, <string-name><surname>Yang</surname> <given-names>K</given-names></string-name>, <string-name><surname>Jia</surname> <given-names>X</given-names></string-name>, <string-name><surname>Liu</surname> <given-names>X</given-names></string-name>, <string-name><surname>Wang</surname> <given-names>C</given-names></string-name>, <string-name><surname>Deng</surname> <given-names>RH</given-names></string-name></person-group>. <article-title>Proxy-free privacy-preserving task matching with efficient revocation in crowdsourcing</article-title>. <source>IEEE Trans Dependable Secur Comput</source>. <year>2021</year>;<volume>18</volume>(<issue>1</issue>):<fpage>117</fpage>&#x2013;<lpage>30</lpage>. doi:<pub-id pub-id-type="doi">10.1109/TDSC.2018.2875682</pub-id>.</mixed-citation></ref>
<ref id="ref-26"><label>[26]</label><mixed-citation publication-type="conf-proc"><person-group person-group-type="author"><string-name><surname>Wang</surname> <given-names>B</given-names></string-name>, <string-name><surname>Fu</surname> <given-names>S</given-names></string-name>, <string-name><surname>Zhang</surname> <given-names>X</given-names></string-name>, <string-name><surname>Xie</surname> <given-names>T</given-names></string-name>, <string-name><surname>Lyu</surname> <given-names>L</given-names></string-name>, <string-name><surname>Luo</surname> <given-names>Y</given-names></string-name></person-group>. <article-title>Reliable and privacy-preserving task matching in blockchain-based crowdsourcing</article-title>. In: <conf-name>2021 Proceedings of the 30th ACM International Conference on Information and Knowledge Management (CIKM)</conf-name>; <year>2021 Nov 1&#x2013;5</year>; <publisher-loc>New York, NY, USA</publisher-loc>. p. <fpage>1879</fpage>&#x2013;<lpage>88</lpage>. doi:<pub-id pub-id-type="doi">10.1145/3459637.3482385</pub-id>.</mixed-citation></ref>
</ref-list>
</back></article>