<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.3 20210610//EN" "JATS-journalpublishing1-3-mathml3.dtd">
<article xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ali="http://www.niso.org/schemas/ali/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" dtd-version="1.3" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Comput. Sci.</journal-id>
<journal-title-group>
<journal-title>Frontiers in Computer Science</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Comput. Sci.</abbrev-journal-title>
</journal-title-group>
<issn pub-type="epub">2624-9898</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3389/fcomp.2025.1643075</article-id>
<article-version article-version-type="Version of Record" vocab="NISO-RP-8-2008"/>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Original Research</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>Input parameters authentication through dynamic software watermarking</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>P&#x000E9;rez Gort</surname> <given-names>Maikel L&#x000E1;zaro</given-names></name>
<xref ref-type="aff" rid="aff1"/>
<xref ref-type="corresp" rid="c001"><sup>&#x0002A;</sup></xref>
<uri xlink:href="https://loop.frontiersin.org/people/2320889"/>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Writing &#x2013; original draft" vocab-term-identifier="https://credit.niso.org/contributor-roles/writing-original-draft/">Writing &#x2013; original draft</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Writing &#x2013; review &amp; editing" vocab-term-identifier="https://credit.niso.org/contributor-roles/writing-review-editing/">Writing &#x2013; review &#x00026; editing</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Conceptualization" vocab-term-identifier="https://credit.niso.org/contributor-roles/conceptualization/">Conceptualization</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Methodology" vocab-term-identifier="https://credit.niso.org/contributor-roles/methodology/">Methodology</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Software" vocab-term-identifier="https://credit.niso.org/contributor-roles/supervision/">Software</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Validation" vocab-term-identifier="https://credit.niso.org/contributor-roles/validation/">Validation</role>
</contrib>
</contrib-group>
<aff id="aff1"><institution>Department of Environmental Sciences, Informatics and Statistics, Ca&#x00027; Foscari University of Venice</institution>, <city>Venice</city>, <country country="it">Italy</country></aff>
<author-notes>
<corresp id="c001"><label>&#x0002A;</label>Correspondence: Maikel L&#x000E1;zaro P&#x000E9;rez Gort, <email xlink:href="mailto:maikel.perezgort@unive.it">maikel.perezgort@unive.it</email></corresp>
</author-notes>
<pub-date publication-format="electronic" date-type="pub" iso-8601-date="2025-11-11">
<day>11</day>
<month>11</month>
<year>2025</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2025</year>
</pub-date>
<volume>7</volume>
<elocation-id>1643075</elocation-id>
<history>
<date date-type="received">
<day>07</day>
<month>06</month>
<year>2025</year>
</date>
<date date-type="accepted">
<day>27</day>
<month>10</month>
<year>2025</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x000A9; 2025 P&#x000E9;rez Gort.</copyright-statement>
<copyright-year>2025</copyright-year>
<copyright-holder>P&#x000E9;rez Gort</copyright-holder>
<license>
<ali:license_ref start_date="2025-11-11">https://creativecommons.org/licenses/by/4.0/</ali:license_ref>
<license-p>This is an open-access article distributed under the terms of the <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution License (CC BY)</ext-link>. The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</license-p>
</license>
</permissions>
<abstract>
<p>Modern civilization relies on computers and the Internet. Web services and microservices make many processes more accessible, often without users realizing the extent of their dependency. As digitalization spreads, the integrity of input parameters used by programmed methods becomes crucial for generating accurate and reliable outcomes, which are essential for the proper functioning of society. This paper introduces a dynamic software watermarking approach designed to validate the authenticity of input parameters in high-level programming language functions. The proposed approach operates without interfering with software functionalities and is resilient to code optimization, obfuscation, and other transformations. The experimental results demonstrate the robustness of our method, ensuring 100% accuracy in detecting tampering with parameter values across all test cases.</p></abstract>
<kwd-group>
<kwd>software watermarking</kwd>
<kwd>parameter authentication</kwd>
<kwd>software verification</kwd>
<kwd>dynamic watermarking</kwd>
<kwd>security</kwd>
</kwd-group>
<funding-group>
<funding-statement>The author(s) declare that financial support was received for the research and/or publication of this article. This study was partially funded by the European Union - NextGenerationEU, in the framework of the iNEST - Interconnected Nord-Est Innovation Ecosystem (iNEST ECS_00000043 - CUP H43C22000540006), SERICS (PE00000014 - CUP H73C2200089001), and PADS4Health (PRIN PNRR 2022 P2022MSMAW - CUP N. H53D23010880001).</funding-statement>
</funding-group>
<counts>
<fig-count count="8"/>
<table-count count="8"/>
<equation-count count="3"/>
<ref-count count="72"/>
<page-count count="19"/>
<word-count count="15296"/>
</counts>
<custom-meta-group>
<custom-meta>
<meta-name>section-at-acceptance</meta-name>
<meta-value>Software</meta-value>
</custom-meta>
</custom-meta-group>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="s1">
<label>1</label>
<title>Introduction</title>
<p>Since the creation of the Internet, the use of web services has steadily increased. Today, they enable businesses to expand their reach and improve profitability by offering platform access to customers worldwide. Our reliance on web services has become so ingrained that users often utilize them without even realizing it. However, this dependence has a downside: the widespread tendency to accept information from online sources without questioning its authenticity.</p>
<p>As more services and digital assets are deployed in the cloud, the risks of tampering increases. Data can be altered and communications intercepted, allowing intruders to manipulate content or modify parameters passed to web services, which can result in unauthorized, inaccurate, or misleading information.</p>
<p>Such malicious actions can compromise the authenticity of web service outcomes, degrade service quality, and damage an organization&#x00027;s reputation and competitiveness. The severity of these incidents depends on the organization&#x00027;s role and responsibilities. For example, consequences can range from providing incorrect navigation directions to overlooking critical medical conditions in hospitals, which can potentially lead to life-threatening consequences. Therefore, ensuring the correct and reliable operation of web services is always paramount.</p>
<p>A concrete incident that illustrates the risks described above is the Panera Bread case (April 2018), in which millions of customer records were exposed via an API endpoint.<xref ref-type="fn" rid="fn0001"><sup>1</sup></xref> Another example is the Optus data breach (September 2022), which underscored that an unauthenticated, Internet-facing API, combined with insufficient parameter handling and authorization, can permit large-scale data access<xref ref-type="fn" rid="fn0002"><sup>2</sup></xref><sup>,</sup> <xref ref-type="fn" rid="fn0003"><sup>3</sup></xref>. Beyond individual breaches, studies of HTTP Parameter Pollution (HPP) show how duplicate or injected parameters can alter back-end behavior. A large-scale measurement revealed HPP issues affecting high-profile sites, including Google, PayPal, and Microsoft (<xref ref-type="bibr" rid="B3">Balduzzi et al., 2011</xref>). E-commerce provides further evidence: publicly disclosed bug bounty reports and practitioner surveys document price manipulation via parameter tampering in checkout flows (e.g., altering amount/discount fields), highlighting the persistence of business-logic vulnerabilities despite conventional input filtering and web application firewalls (WAFs).<xref ref-type="fn" rid="fn0004"><sup>4</sup></xref></p>
<p>An important number of web services are implemented using high-level programming languages. The primary objective of this work is to propose an approach for validating the authenticity of input parameters in high-level programming language functions that are crucial to web service development, thereby protecting business processes even when other security measures fail, as prior cases illustrate. The study performed in this research evaluates the strengths and limitations of existing solutions and explores the potential benefits of integrating them. Particular attention is given to dynamic software watermarking, emphasizing its adaptability to software runtime behavior, with a focus on the role of managed data.</p>
<p>This work is guided by three research questions: (i) - Does the proposed approach detect tampering of input parameters with a high true-positive rate and low false-positive rate across representative workloads? (ii) - Does integrating the approach preserve the functional output of protected functions when the input parameters are authentic? (iii) - Does integrating the approach impose a bounded, predictable overhead in code size and execution time, with runtime scaling linearly in input size across representative workloads? (iv) - Are authentication decisions robust to compiler/interpreter optimizations, code obfuscation, common refactoring, and heterogeneous runtime environments?</p>
<p>With the proposed approach, execution is blocked when parameters are flagged as non-authentic, thereby preventing computation on tainted values, even if the function would otherwise run correctly. The approach is validated through a Python implementation; however, the solution can be extended to various environments where processes are implemented using high-level programming languages. In doing so, the integrity of web services and microservices can be safeguarded.</p>
<p>The rest of this paper is organized as follows: Section 2 introduces the preliminaries of software watermarking. Section 3 presents related work as part of potential solutions to address the stated problem and outlines the leading dynamic software watermarking techniques proposed so far. Section 4 provides details of the proposed approach, and Section 5 presents the results of the experiments conducted to validate it. Section 6 outlines the added value of our approach, which extends beyond conventional integrity mechanisms. Finally, Section 7 concludes.</p></sec>
<sec id="s2">
<label>2</label>
<title>Preliminaries</title>
<p>Digital watermarking techniques enable the verification of ownership, detection of data tampering, validation of content authenticity, tracing of data copies, and enforcement of licensing conditions (<xref ref-type="bibr" rid="B70">Vivekananthan et al., 2021</xref>). They work by embedding a watermark into the protected digital asset, also known as the carrier. The watermark consists of bits, each constituting a mark, and can store copyright information or be generated from the content to verify its authenticity.</p>
<p>A watermarking technique consists of two basic processes: watermark embedding and extraction. Extraction may occur when there is suspicion of copyright violation, false ownership claims, data tampering, or whenever required to trace users violating purchase contracts, also known as traitors. Watermarking techniques have proven highly effective in protecting various types of digital assets, including multimedia data (such as images, audio, or video), relational data, graphs, documents, and software.</p>
<sec>
<label>2.1</label>
<title>Software watermarking architecture</title>
<p>The architecture defining software watermarking approaches is characterized by a watermark <italic>W</italic> embedded into a program <italic>P</italic> in such a way that <italic>W</italic> can be reliably located and extracted from <italic>P</italic>, even after <italic>P</italic> has undergone semantics-preserving transformations such as code optimization and obfuscation. The watermark <italic>W</italic> should be stealthy, have a high data rate, and not affect the performance of <italic>P</italic>. Additionally, it must be demonstrated that the presence of <italic>W</italic> in <italic>P</italic> is a result of deliberate actions (<xref ref-type="bibr" rid="B20">Collberg and Thomborson, 1998</xref>; <xref ref-type="bibr" rid="B67">Thomborson et al., 2004</xref>).</p>
<p>The software watermarking architecture is driven by the implementation of the embedding and extraction functions, denoted as <inline-formula><mml:math id="M1"><mml:mrow><mml:mi mathvariant="script">I</mml:mi></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>&#x000B7;</mml:mo></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M2"><mml:mrow><mml:mi mathvariant="script">E</mml:mi></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>&#x000B7;</mml:mo></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, respectively.<xref ref-type="fn" rid="fn0005"><sup>5</sup></xref> The embedding is featured by <inline-formula><mml:math id="M3"><mml:msup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mrow><mml:mi mathvariant="script">I</mml:mi></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>W</mml:mi><mml:mo>,</mml:mo><mml:mi>P</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, where <inline-formula><mml:math id="M4"><mml:mrow><mml:mi mathvariant="script">I</mml:mi></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>&#x000B7;</mml:mo></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> inputs are the watermark <italic>W</italic>, the program <italic>P</italic>, and the program&#x00027;s owner cryptography secret key <italic>k</italic>. As a result, the watermarked version of the program, denoted as <italic>P</italic>&#x02032;, is obtained. The extraction function, on the other hand, is featured by <inline-formula><mml:math id="M5"><mml:msup><mml:mrow><mml:mi>W</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mrow><mml:mi mathvariant="script">E</mml:mi></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, where <italic>W</italic>&#x02032; is the watermark extracted from <italic>P</italic>&#x02032;. For the final assertion, ownership or lack of tampering is proven if both watermarks are similar enough, according to <italic>W</italic>&#x02261;<italic>W</italic>&#x02032;. The operator &#x02261; considers inconsistencies in detection due to benign operations or attacks that do not impact software performance or the watermark recognition.</p>
</sec>
<sec>
<label>2.2</label>
<title>Static and dynamic approaches</title>
<p>Software watermarking techniques can be classified into two categories: static and dynamic. Static techniques embed the watermark directly into the software&#x00027;s static artifacts, such as its source code, compiled binary, data files, or the application executable itself. There, the watermark remains as part of the software regardless of whether it is running or not. On the other hand, dynamic watermarking techniques store the watermark in the program execution state (<xref ref-type="bibr" rid="B72">Wu et al., 2024</xref>). Dynamic watermarks can be processed, verified, or executed during the runtime of the software or application. They are tied to the behavior or state of the application as it operates (<xref ref-type="bibr" rid="B60">Pieprzyk, 1999</xref>; <xref ref-type="bibr" rid="B31">Dey et al., 2019</xref>). <xref ref-type="table" rid="T1">Table 1</xref> resumes the differences between dynamic and static software watermarking.</p>
<table-wrap position="float" id="T1">
<label>Table 1</label>
<caption><p>Main differences between dynamic and static software watermarking.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th valign="top" align="left"><bold>Criterion</bold></th>
<th valign="top" align="left"><bold>Static watermarking</bold></th>
<th valign="top" align="left"><bold>Dynamic watermarking</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">Embedding</td>
<td valign="top" align="left">Watermark embedded into static components (code or binaries) at design/compile time.</td>
<td valign="top" align="left">Watermark embedded during runtime, based on the application&#x00027;s state or inputs.</td>
</tr>
<tr>
<td valign="top" align="left">Tied to execution</td>
<td valign="top" align="left">No, the watermark exists independently of runtime.</td>
<td valign="top" align="left">Yes, they rely on the software running to produce or verify the watermark.</td>
</tr></tbody>
</table>
</table-wrap>
<p>According to <xref ref-type="bibr" rid="B20">Collberg and Thomborson (1998</xref>), there are three types of dynamic software watermarking approaches: (i) Easter egg watermarking, (ii) data structure watermarking, and (iii) execution trace watermarking. Easter egg watermarking is based on activating a code fragment when the application is run using an unusual input. As a result, the software performs an action immediately perceptible to its users, such as displaying a copyright message, which makes the watermark&#x00027;s presence evident. On the other hand, data structure approaches are based on embedding the watermark in a specific program state, which is obtained when a particular input sequence is used. In this approach, the watermark is extracted by examining the current values of the variables after the input sequence has ended. The extraction can be done using a dedicated watermark extraction routine linked to the executing program or by running the program under a debugger. Given that no output is ever produced, it is not evident to an adversary when the special input sequence has been entered. Finally, execution trace approaches embed the watermark into instructions and/or addresses, as the program is run with a particular input. In that case, the watermark is extracted by monitoring (statistical) properties of the address trace and/or the sequence of operators executed.</p>
<p>This research aligns with dynamic software watermarking, particularly dynamic data structure watermarking, as it proposes an approach that generates and validates watermarks as part of the software&#x00027;s runtime behavior to verify the authenticity of input parameters for functions. Since static watermarking requires embedding the watermark in the source code or compiled software itself, which does not contribute to solving the targeted problem, it is excluded from this work.</p>
</sec>
<sec>
<label>2.3</label>
<title>Watermarking requirements</title>
<p>When designing a software watermarking approach, certain conditions must be fulfilled, regardless of whether the technique is static or dynamic. As previously mentioned, the watermark <italic>W</italic> must be embedded into the program <italic>P</italic>, ensuring its detectability despite benign operations such as code optimization and obfuscation. Besides detectability, other requirements must be fulfilled, such as stealthiness and a high data rate <xref ref-type="bibr" rid="B50">Ma et al., (2019)</xref>. These are all requirements that work in favor of the watermarking tradeoff between data rate (or capacity), robustness, and stealthiness (or imperceptibility) (<xref ref-type="bibr" rid="B23">Cox et al., 2007</xref>; <xref ref-type="bibr" rid="B59">P&#x000E9;rez Gort et al., 2021</xref>). It is paramount to avoid collusion with the program performance by ensuring that the watermark does not alter its size or significantly impact its execution time (<xref ref-type="bibr" rid="B1">Alitavoli et al., 2013</xref>; <xref ref-type="bibr" rid="B47">Kumar et al., 2015</xref>).</p>
<p>In addition to the above requirements, this research also considers the blindness property, which applies broadly to watermarking irrespective of the protected digital asset. A watermarking technique is blind if the watermark extraction does not require access to either the original (unwatermarked) content or the watermark payload itself (<xref ref-type="bibr" rid="B38">Halder et al., 2010</xref>; <xref ref-type="bibr" rid="B57">P&#x000E9;rez Gort et al., 2017</xref>). Techniques lacking this property are non-blind. Ensuring blindness reduces the risk of unauthorized detection or removal, because the detector does not need to store or transmit the original content or embedding materials, thereby lowering the likelihood of sensitive information leakage.</p>
</sec>
<sec>
<label>2.4</label>
<title>Adversary model</title>
<p>Despite the requirements, watermarking techniques must guarantee resilience against attacks aiming at removing the watermark to allow adversaries to claim software ownership or perform tampering without being noticed. According to the related literature, some of the more relevant attacks are <xref ref-type="bibr" rid="B53">Myles and Collberg (2006</xref>) and <xref ref-type="bibr" rid="B27">Dalla Preda and Ianni (2024)</xref>:</p>
<list list-type="bullet">
<list-item><p><bold>Subtractive attacks:</bold> Based on subtracting the watermark from the protected software without compromising its performance.</p></list-item>
<list-item><p><bold>Distortive attacks:</bold> Based on distorting the software to compromise the watermark detection before affecting the software functionality.</p></list-item>
<list-item><p><bold>Additive attacks:</bold> Based on inserting a secondary watermark owned by the adversary, expecting to totally or partially overwrite the original watermark, compromising its recognition or making it impossible to prove its temporal precedence.</p></list-item>
</list>
<p>Other attacks have been defined as particular implementations or extensions of the previously mentioned ones <xref ref-type="bibr" rid="B32">Dey et al., (2020)</xref>. For example, <italic>local modification attacks</italic> modify the code similarly to how watermark insertion is performed. Thus, it can be defined as a refined version of a <italic>distortive attack</italic>. The <italic>code reordering attack</italic> modifies the code by reordering large independent pieces of it. The <italic>code addition attack</italic> works by adding a piece of code to the program that should either not be executed or do nothing, thereby preserving the program&#x00027;s functionality. Additionally, the <italic>code decompilation attack</italic> involves decompiling and recompiling the code. In contrast, the <italic>code compression attack</italic> modifies the code using compression tools, reducing the code size and adding a decompression routine to it (<xref ref-type="bibr" rid="B65">Stern et al., 2000</xref>).</p>
<p>Other attacks are more focused on targeting the engines used for watermark identification. This is the case of the <italic>recognition attack</italic>, focused on modifying or disabling the watermark detector to obtain misleading results (<xref ref-type="bibr" rid="B16">Chroni and Nikolopoulos, 2011</xref>). There is also the <italic>protocol attack</italic>, which describes cases where the owner lacks complete security over the choice of the recognition (or extraction) engine and the secret keys involved in the watermark synchronization.<xref ref-type="fn" rid="fn0006"><sup>6</sup></xref> In such cases, the adversary can proceed by using a fake secret key that purports to prove the existence of his watermark in the unmodified program using the program owner&#x00027;s recognition function (<xref ref-type="bibr" rid="B22">Collberg et al., 2007</xref>).</p>
<p>Some attacks focus on the type of watermarks. For example, fingerprinting approaches, which mark different copies of the same asset with distinct watermarks, must be resilient to <italic>collusion attacks</italic>. They are based on combining non-intersecting parts of different copies of the same digital asset, to make it impossible to recognize any of the watermarks embedded in each copy (<xref ref-type="bibr" rid="B28">Dalla Preda and Pasqua, 2019</xref>).</p>
<p>Increased resilience to attacks can be achieved by increasing watermark capacity. However, this can compromise its imperceptibility and provoke he technique to interfere with the software&#x00027;s correct functioning. No single technique can guarantee robustness to all attacks. Instead, better results can be obtained by combining different security approaches simultaneously (<xref ref-type="bibr" rid="B8">Bender et al., 1996</xref>; <xref ref-type="bibr" rid="B20">Collberg and Thomborson, 1998</xref>). Regarding watermarking, the best possible results can be achieved by creating a technique that can withstand the attacks expected in the scenario in which it will be used.</p>
</sec>
</sec>
<sec id="s3">
<label>3</label>
<title>Related work</title>
<p>The first software watermarking technique was a static approach based on an algorithm that encoded the watermark by reordering the program&#x00027;s basic blocks (<xref ref-type="bibr" rid="B29">Davidson and Myhrvold, 1996</xref>). Since then, several static and dynamic techniques have been proposed, increasing both the complexity and diversity in the field (<xref ref-type="bibr" rid="B39">Hamilton and Danicic, 2010</xref>). The first dynamic approach was proposed by <xref ref-type="bibr" rid="B20">Collberg and Thomborson (1998</xref>), and was later followed by other methods based on similar principles. Examples include the proposal by <xref ref-type="bibr" rid="B55">Palsberg et al. (2000</xref>), which embeds the watermark into dynamic data structures, and the technique by <xref ref-type="bibr" rid="B60">Pieprzyk (1999)</xref>, which focuses on copyright protection for classified software identities using fingerprinting. Another proposal by <xref ref-type="bibr" rid="B55">Palsberg et al. (2000)</xref> aims to protect Java programs with minimal changes in code size and execution time while offering substantial robustness against subtractive, distortive, and additive attacks. <xref ref-type="bibr" rid="B18">Collberg et al. (2004b)</xref> introduced a graph-based dynamic watermarking architecture called UWStego. In their work, the authors also presented several metrics to evaluate the effectiveness of various watermarking techniques.</p>
<p><xref ref-type="bibr" rid="B25">Curran et al. (2004)</xref> addressed the practical implications of graph-based dynamic watermarking, with a primary focus on stealth. <xref ref-type="bibr" rid="B66">Tamada et al. (2004)</xref> proposed a dynamic approach for detecting the theft of Windows applications, showcasing strong resilience to various attacks. <xref ref-type="bibr" rid="B17">Collberg et al. (2004a)</xref> introduced a dynamic path-based method that embeds the watermark in the program&#x00027;s runtime branch structure. <xref ref-type="bibr" rid="B67">Thomborson et al. (2004)</xref> developed a tamper-proofing technique called constant encoding, which embeds the watermark into dynamic data structures. <xref ref-type="bibr" rid="B15">Chiru (2005)</xref> proposed a dynamic method that watermarks programs by slightly altering their numeric outputs, focusing on intellectual property protection and ownership proof. <xref ref-type="bibr" rid="B54">Myles and Jin (2005)</xref> combined code obfuscation with tamper detection to trace the source of illegal redistribution, also enabling pre-packaged, fingerprinted software distribution tied to individual users. <xref ref-type="bibr" rid="B52">Madou et al. (2005)</xref> analyzed potential attacks on path-based watermarking, using the proposal by <xref ref-type="bibr" rid="B17">Collberg et al. (2004a)</xref> as a case study. <xref ref-type="bibr" rid="B53">Myles and Collberg (2006)</xref> explored watermarking Java programs through the use of opaque predicates and reported on both static and dynamic techniques implemented in the Sandmark framework <xref ref-type="bibr" rid="B19">Collberg et al., (2003)</xref>.</p>
<p>The variety of techniques highlights the diversity of the field. For instance, <xref ref-type="bibr" rid="B26">Dalla Preda et al. (2008)</xref> proposed a method that hides the watermark using semantic instances within loop structures. Techniques by <xref ref-type="bibr" rid="B10">Chan et al. (2012</xref>) and <xref ref-type="bibr" rid="B69">Tian et al. (2015)</xref> leverage software birthmarks&#x02013;unique program characteristics&#x02013;for detecting software plagiarism. Other approaches, such as that by <xref ref-type="bibr" rid="B51">Ma et al. (2015)</xref>, utilize return-oriented programming to embed watermarks in the data region, thereby avoiding code-analysis-based attacks. <xref ref-type="bibr" rid="B12">Chen et al. (2017)</xref>, <xref ref-type="bibr" rid="B13">(2018)</xref> focused on strengthening the connection between the watermark and the program&#x00027;s semantics, addressing a common weakness in many techniques.</p>
<p>Some proposals are defined as chaos-based approaches. For example, <xref ref-type="bibr" rid="B42">Ke-xin et al. (2009)</xref> used chaotic encryption to split the watermark using the Shamir threshold scheme (<xref ref-type="bibr" rid="B30">Desmedt, 2025</xref>), which allows watermark recovery from partial information and enhances resilience. citechionis2013dynamic combined opaque predicates with graph theory to increase complexity. <xref ref-type="bibr" rid="B2">Alrehily and Thayananthan (2018)</xref> proposed a return-oriented programming technique based on gadget analysis, using their categories and quantity as central research elements. <xref ref-type="bibr" rid="B71">Wang et al. (2018</xref>) introduced an approach that exploits exception handling&#x02013;a common but difficult-to-remove component of software&#x02013;to resist additive and subtractive attacks.</p>
<p>Despite the wide variety, most dynamic techniques fall into two main categories: (i) path-based and (ii) graph-based approaches. Notable examples of path-based techniques include those by <xref ref-type="bibr" rid="B35">Gupta and Pieprzyk (2006)</xref>, <xref ref-type="bibr" rid="B36">(2007)</xref>. Graph-based techniques are more numerous, including proposals by <xref ref-type="bibr" rid="B56">Patel and Pattewar (2014)</xref>, <xref ref-type="bibr" rid="B14">Chionis et al. (2014)</xref>, and <xref ref-type="bibr" rid="B11">Chen et al. (2016)</xref>.</p>
<p>Today, the boundaries of software watermarking have significantly expanded, with new goals and applications. For instance, <xref ref-type="bibr" rid="B48">Lee et al. (2023</xref>) proposed a technique to identify code generated by machine learning models, and <xref ref-type="bibr" rid="B43">Kim et al. (2023</xref>) developed a method for ownership protection of smart contracts. Nevertheless, despite the range of problems addressed by dynamic watermarking, no technique has yet been proposed to verify the authenticity of input parameters.</p></sec>
<sec id="s4">
<label>4</label>
<title>Proposed approach</title>
<p>The technique proposed in this work does not rely on modifying the source code or binary files of the software to embed the watermark. Instead, it leverages the dynamic structures created by the software when it is executed to synchronize the watermark and verify the authenticity of the parameters received as input by the program&#x00027;s functions. Details about the approach are presented in this section.</p>
<sec>
<label>4.1</label>
<title>Architecture of data structure approaches</title>
<p>Dynamic data structure watermarking requires setting up the program in a way that allows specific values representing the watermark to be computed at runtime. These computations are triggered only under specific execution conditions, such as certain inputs or execution paths. The watermark is encoded into the control or data flow, which often requires the insertion of new functions or procedures, additional data structures, or conditional logic to hide and trigger watermark behavior. Although the watermark is revealed dynamically during execution, setting up that watermark requires injecting code. This can be improved if the injected code is done in a stealthy or obfuscated manner. Generally, the modifications made to the program code are non-trivial, as they are designed to be challenging to detect and remove. Considering this, a general description of the architecture of data structure dynamic software watermarking techniques is depicted in <xref ref-type="fig" rid="F1">Figure 1</xref>.</p>
<fig position="float" id="F1">
<label>Figure 1</label>
<caption><p>General architecture of data structure dynamic software watermarking techniques.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0001.tif">
<alt-text content-type="machine-generated">Diagram showing the general architecture of data structure dynamic software watermarking techniques. A program labeled &#x0201C;P&#x0201D; is processed with a watermark encoding box. The watermark labeled &#x0201C;W&#x0201D; is generated as a graph that is stored in &#x0201C;memory&#x0201D;. An arrow points to a &#x0201C;Controller,&#x0201D; leading to an &#x0201C;Outcome.&#x0201D; A green box labeled &#x0201C;k_I&#x0201D; points to the program, indicating input parameters.</alt-text>
</graphic>
</fig>
<p>In <xref ref-type="fig" rid="F1">Figure 1</xref>, <italic>P</italic> represents the program acting as a carrier. Inside <italic>P</italic>, the block named &#x0201C;Watermark Encoding&#x0201D; represents the scattered code injected and obfuscated to build <italic>W</italic> after a particular set of inputs <italic>I</italic> is given to the program. Notice that in this case, we model the secret key <italic>k</italic> as part of <italic>I</italic>, which is not necessarily always the case.</p>
<p>After <italic>P</italic> is executed, the <italic>Controller</italic>, considered an external application, accesses the memory and tries to detect <italic>W</italic> from it. Finally, a secret code computed using the detected watermark is compared with the one expected to be generated for the correct input, and a final assessment is provided regarding the integrity and authenticity of <italic>I</italic>.</p>
</sec>
<sec>
<label>4.2</label>
<title>Architecture of the parameters authentication approach</title>
<p>The architecture of the approach proposed in this work is built based on dynamic data structure watermarking. In this case, the <italic>Controller</italic> is embedded in the program <italic>P</italic> as scattered and obfuscated code. Since the main goal is to validate <italic>I</italic> for the function <italic>F</italic>, <italic>P</italic> can be stored and deployed in a more secure environment. Nevertheless, this is not a requirement.</p>
<p>The logic of the <italic>Controller</italic> is placed between the &#x0201C;Watermark Encoding&#x0201D; logic and <italic>F</italic> execution. After an outcome is obtained, if the secret code built with the detected watermark matches the expected value (i.e., the parameters are considered authentic), the process flow is given to <italic>F</italic> with the input set <italic>I</italic>. This call is denoted <italic>F</italic><sup><italic>I</italic></sup>. On the contrary, if the parameters are considered non-authentic, alternative processing is performed, either by ignoring <italic>F</italic> call or by passing other parameters to it to indicate the required alternative processing. This stage for <italic>F</italic> calling is defined as <italic>F</italic><sup>&#x003D5;</sup>. The entire architecture of this approach is depicted in <xref ref-type="fig" rid="F2">Figure 2</xref>.</p>
<fig position="float" id="F2">
<label>Figure 2</label>
<caption><p>Architecture of the input parameters authentication approach.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0002.tif">
<alt-text content-type="machine-generated">Diagram illustrating the architecture of the input parameter authentication approach. A process involves encoding a watermark using the input data I. The controller verifies the validity of the watermark by accessing memory and comparing the encoded watermark W with the expected code. Valid outputs are executed in FI, while invalid ones pass through Ff.</alt-text>
</graphic>
</fig>
</sec>
<sec>
<label>4.3</label>
<title>Watermark construction</title>
<p>In this work, the watermark is built based on the principles introduced in <xref ref-type="bibr" rid="B20">Collberg and Thomborson (1998)</xref>. Based on the premise that <italic>W</italic> is a set of mathematical structures, and <italic>p</italic> a predicate such as &#x02200;<italic>w</italic> &#x02208; <italic>W</italic>:<italic>p</italic>(<italic>w</italic>), we need to choose <italic>p</italic> and <italic>W</italic> such that the probability of <italic>p</italic>(<italic>x</italic>) for a random <italic>x</italic>&#x02209;<italic>W</italic> is small. Thus, <italic>p</italic> is typical for <italic>W</italic>, but atypical outside of it. An example to illustrate the selection of <italic>W</italic> and <italic>p</italic> is considering <italic>W</italic> to be the set of even numbers from 1 to 100 (formally, <italic>W</italic> &#x0003D; {<italic>x</italic> &#x02208; &#x02124;<sup>&#x0002B;</sup>|1 &#x02264; <italic>x</italic> &#x02264; 100&#x02227;<italic>x</italic> mod 2 &#x0003D; 0}), and <italic>p</italic>(<italic>x</italic>) the predicate &#x0201C;<italic>x is divisible by 2&#x0201D;</italic>. Considering that, after picking a random value <italic>x</italic> &#x02208; {1, ..., 100}, if <italic>x</italic> is odd, <italic>p</italic>(<italic>x</italic>) is false. Thus, <italic>p</italic> is rare outside <italic>W</italic>.</p>
<p>Although <italic>W</italic> can be embedded in the topology of any data structure built dynamically in the memory, graphs are particularly a good choice, considering that code that manipulates dynamic graph structures is hard to analyze due to pointer aliasing effects. Due to this, semantics-preserving transformations that make fundamental changes to a graph are more complex to construct <xref ref-type="bibr" rid="B21">Collberg and Thomborson, (1999)</xref>.</p>
<p>One of the advantages of targeting high-level programming languages is that there is high coverage to pass values in <italic>I</italic> that will contribute to the creation of <italic>W</italic>. Every object can be dynamically created and stored on the heap, and references can be used to develop pointer-like structures. The defined references can be traversed similarly in a graph or another structure storing a different representation of a predefined graph, such as a linked list. This work applies <italic>steganography</italic> principles to hide in <italic>I</italic> the values that will trigger the dynamic construction of <italic>W</italic>. Formally, <italic>I</italic> is composed of a set of input parameters <italic>i</italic><sub><italic>l</italic></sub>:<italic>l</italic> &#x02208; [0, |<italic>I</italic>|), along with the secret key <italic>k</italic>.</p>
</sec>
<sec>
<label>4.4</label>
<title>Development of the parameter authentication approach</title>
<p>The construction of the proposed approach requires adjusting to the highest possible level of abstraction, resorting to using references and objects instead of raw pointers and memory, utilizing custom classes to simulate nodes and graphs, among other strategies. All watermarking functionalities embedded into the program must be integrated and dispersed throughout the main logic of the code. Further robustness can be added by obfuscating the code. Nevertheless, higher resilience must be focused on the data structure in memory that stores the watermark.</p>
<p>The parameter authentication approach uses the watermark to verify the authenticity of input parameters, essentially treating the watermark as a covert integrity check. It utilizes a hidden heap-based watermark graph that is only constructed when the program receives the correct input parameters. Later, the program can: (i) decode the watermark at runtime, (ii) verify that the decoded value matches the expected ones, and (iii) proceed only if the input is considered authentic due to the triggering of the correct watermark.</p>
<p>An important feature of the watermark encoding is the addition of fake values into <italic>I</italic>. They are called &#x0201C;<italic>fake&#x0201D;</italic>, considering that they do not originally belong to <italic>I</italic> but are introduced to support the construction of the watermark. If these values are not contained in the set of parameters, the instance of <italic>I</italic> is reported as non-authentic, considering that the correct watermark cannot be reconstructed. The fake values constitute watermark hints, which are initially computed from the binary notation of a secret integer code &#x003B6; (denoted by &#x003B6;<sub>2</sub>) that represents the watermark in numeric format. Next, &#x003B6;<sub>2</sub> is used to build &#x003A0;, which is scattered into <italic>I</italic> using the secret key <italic>k</italic> to guarantee the synchronization whenever extraction is required. Finally, when the program receives the parameters, the fake values are extracted from <italic>I</italic> to rebuild &#x003A0; and get the code for checking the authenticity of <italic>I</italic> by building the watermark and comparing it with the original one.</p>
<p>There are different alternatives to synchronize the watermark hints &#x003A0; in <italic>I</italic>. The most appropriate choice depends on the data types present in <italic>I</italic> and the design priorities of the system architecture. Priorities can focus on making hints unnoticeable or ensuring their preservation despite updates to parameter values, which in fact transitions from <italic>steganography</italic> to watermarking principles <xref ref-type="bibr" rid="B40">Katz et al., (1996)</xref>; <xref ref-type="bibr" rid="B4">Bar&#x000E1;n et al., (2001)</xref>. Nevertheless, our proposal focuses on making the presence of hints unnoticeable, since any change made to the input parameters must compromise the hints so that tampering can be detected. Some of the alternatives to implement the hints synchronization are: (i) positional (index-based) encoding (<xref ref-type="bibr" rid="B41">Katzenbeisser and Petitcolas, 2016</xref>), (ii) value modification based on less significant bit (<italic>lsb</italic>) encoding (<xref ref-type="bibr" rid="B24">Cox et al., 2008</xref>), (iii) spread spectrum embedding (<xref ref-type="bibr" rid="B6">Barni et al., 2001</xref>), (iv) statistical property encoding (<xref ref-type="bibr" rid="B63">Sion et al., 2003</xref>), and (v) redundant data slot (<xref ref-type="bibr" rid="B62">Provos and Honeyman, 2003</xref>).</p>
<p>We use the case of a function receiving an array of integers to model and validate our approach. We implement the hints synchronization using <italic>lsb</italic> encoding based on difference expansion (<xref ref-type="bibr" rid="B37">Gupta and Pieprzyk, 2009</xref>). This approach guarantees high capability for the hints encoding as well as reversibility, which ensures that once the hints are extracted, the parameters are restored to their original values. Consequently, if the parameters are considered authentic, the function can proceed to compute an authentic result that is not affected by the presence of the watermarking mechanism.</p>
<p>A more detailed description of the approach is provided below, outlining the procedures that define the watermark encoding and the controller. <xref ref-type="statement" rid="algo1">Algorithm 1</xref> defines the watermark encoding, using as input the secret key <italic>k</italic>, the input set <italic>I</italic>, and the length of the secret code&#x00027;s binary notation &#x003B6;<sub>2</sub> (denoted by &#x003B7;). First, it uses <italic>k</italic> to compute a <monospace>seed</monospace> utilizing a pseudo-random number generator implemented by the function <sc>PRNG</sc>(&#x000B7;) (see line 1). Then, the <monospace>seed</monospace> is used by the function <sc>KEYED_PERMUTATION</sc>(&#x000B7;) to produce a permutation of the &#x0230A;|<italic>I</italic>|/2&#x0230B; disjoint pairs in <italic>I</italic>, which determines the pair order for difference expansion (see line 2). The function returns the keyed deterministic permutation index list <inline-formula><mml:math id="M6"><mml:mi>&#x02119;</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi>&#x02124;</mml:mi></mml:mrow><mml:mrow><mml:mo>&#x0002B;</mml:mo></mml:mrow></mml:msup><mml:mo>|</mml:mo><mml:mn>0</mml:mn><mml:mo>&#x02264;</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mrow><mml:mo>&#x0230A;</mml:mo><mml:mrow><mml:mo>|</mml:mo><mml:mi>I</mml:mi><mml:mo>|</mml:mo><mml:mo>/</mml:mo><mml:mn>2</mml:mn></mml:mrow><mml:mo>&#x0230B;</mml:mo></mml:mrow></mml:mrow><mml:mo>}</mml:mo></mml:mrow></mml:math></inline-formula>. The permutation is reproducible for the same inputs to <sc>KEYED_PERMUTATION</sc>(&#x000B7;), unpredictable without the seed, and aligns with deterministic pseudorandom function (PRF)-driven derivations in cryptographic standards (<xref ref-type="bibr" rid="B5">Barker and Kelsey, 2012</xref>; <xref ref-type="bibr" rid="B61">Pornin, 2013</xref>).</p>
<statement content-type="algorithm" id="algo1">
<label>Algorithm 1</label>
<title>Watermark encoding procedure.</title>
<p><monospace><bold>Input</bold>: <italic>k</italic>, <italic>I</italic>, &#x003B7;</monospace></p>
<p><monospace>1<monospace>seed</monospace>&#x02190;<sc>PRNG</sc>(<italic>k</italic>) &#x02119;&#x02190; K<sc>eyed_permutation</sc>(<monospace>seed</monospace>,&#x0230A;|<italic>I</italic>|/2&#x0230B;)</monospace></p>
<p><monospace>2&#x003A0;&#x02190;<sc>HINTS_DETECTION</sc>(<italic>I</italic>, &#x02119;)</monospace></p>
<p><monospace>3&#x003B6;<sub>2</sub>&#x02190;<sc>CODE_BUILDER</sc>(&#x003A0;, &#x003B7;, <italic>k</italic>, &#x02119;)</monospace></p>
<p><monospace>4&#x003B6;<sub>6</sub>&#x02190;<sc>BASE_CONVERT</sc>(&#x003B6;<sub>2</sub>, 2 &#x02192; 6)</monospace></p>
<p><monospace>5<italic>N</italic><sub>0</sub>&#x02190;<sc>ENCODE_WATERMARK</sc>(&#x003B6;<sub>6</sub>)</monospace></p>
</statement>
<p>After obtaining the permutation index list &#x02119;, we proceed with the detection and extraction of the hints from <italic>I</italic> to assemble &#x003A0;. This is done by the function <sc>HINTS_DETECTION</sc>(&#x000B7;) that takes as input <italic>I</italic>, and &#x02119; (see line 3). Notice that for the synchronization to be successful, the same permutation had to be used to embed the hints into <italic>I</italic>. Nevertheless, as previously mentioned, as long as <sc>KEYED_PERMUTATION</sc>(&#x000B7;) is used with the same parameter values, this is guaranteed.</p>
<p><xref ref-type="statement" rid="algo2">Algorithm 2</xref> breaks down the logic of <sc>HINTS_DETECTION</sc>(&#x000B7;). It takes as input the parameters described above and returns an ordered hint set as &#x003A0;. The operations depicted in this algorithm correspond to the extraction of bits based on the difference expansion method. Therefore, an even number of items is required in <italic>I</italic>. Thus, if an odd number of values is contained in <italic>I</italic>, one parameter is not involved in the synchronization.</p>
<statement content-type="algorithm" id="algo2">
<label>Algorithm 2</label>
<p><sc>HINTS_DETECTION FUNCTION</sc>.
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0009.tif"/>
</p>
</statement>
<p>First, &#x003A0; is allocated as an array of &#x0230A;|<italic>I</italic>|/2&#x0230B; bits with all entries initialized to 0 (see line 1). The number of elements in &#x003A0; is defined by |<italic>I</italic>|, which denotes the cardinality of <italic>I</italic>. The symbols &#x0230A;&#x000B7;&#x0230B; denote the floor function, used in case <italic>I</italic> is composed of an odd number of elements. &#x02119; is utilized to partition <italic>I</italic> into adjacent pairs (<italic>x, y</italic>) &#x0003D; (<italic>I</italic><sub>2<italic>p</italic></sub>, <italic>I</italic><sub>2<italic>p</italic>&#x0002B;1</sub>) (see lines 3 and 4). Scanning pairs in this order, we read the bit embedded by difference expansion and store it into <italic>b</italic><sub><italic>p</italic></sub> (see line 5).<xref ref-type="fn" rid="fn0007"><sup>7</sup></xref> Finally, the bit <italic>b</italic><sub><italic>p</italic></sub> obtained for the current pair of values is added to the position indexed by <italic>p</italic> in &#x003A0; (see line 6).</p>
<p>After obtaining &#x003A0;, line 4 of <xref ref-type="statement" rid="algo1">Algorithm 1</xref> computes &#x003B6;<sub>2</sub> using the function <sc>CODE_BUILDER</sc>(&#x000B7;) that takes as input &#x003A0;, &#x003B7;, <italic>k</italic> and &#x02119;. Considering this approach is symmetric, the key supplied to <sc>CODE_BUILDER</sc>(&#x000B7;) must match the key used when encoding the watermark hints in <italic>I</italic>. <xref ref-type="statement" rid="algo3">Algorithm 3</xref> breaks down <sc>Code_builder</sc>(&#x000B7;), which assembles its output by mapping each index in &#x02119; to a target position in &#x003B6;<sub>2</sub> via a keyed, uniform index function, defined as <sc>KEYED_INDEX</sc>(&#x000B7;) (see lines 5 to 7). First, the binary arrays &#x003B6;<sub>2</sub>, <monospace>ones</monospace>, and <monospace>zeros</monospace>, each of length &#x003B7;, are initialized with 0 (see lines 1 to 3). The arrays <monospace>ones</monospace> and <monospace>zeros</monospace> are used to check if, for the same position in &#x003B6;<sub>2</sub>, different bit values are identified in &#x003A0;, which basically means data tampering is being performed in <italic>I</italic>. The bit targeted in &#x003A0; can be obtained after knowing its index, which is extracted from &#x02119; (see lines 5 and 7). Depending on the value of the bit selected from the <italic>p</italic>&#x02212;th position in &#x003A0;, the variables <monospace>ones</monospace> and <monospace>zeros</monospace> (counting the number of bits with 1 and 0 values for the matching position <italic>j</italic>, respectively) are incremented by one (see lines 8 to 11). Once all indices from &#x02119; are considered, the consistency checking of the values detected for each position in &#x003B6;<sub>2</sub> proceeds (see lines 12 to 21).</p>
<statement content-type="algorithm" id="algo3">
<label>Algorithm 3</label>
<p><sc>CODE_BUILDER FUNCTION</sc>.
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0010.tif"/>
</p>
</statement>
<p>Consistency at position <italic>j</italic> is established by inspecting the tallies in <monospace>ones</monospace> and <monospace>zeros</monospace> for that index. If <monospace>ones</monospace>[<italic>j</italic>]&#x0003E;0 and <monospace>zeros</monospace>[<italic>j</italic>] &#x0003D; 0, we set &#x003B6;<sub>2</sub>[<italic>j</italic>]&#x02190;1 (see lines 15 and 16); if <monospace>zeros</monospace>[<italic>j</italic>]&#x0003E;0 and <monospace>ones</monospace>[<italic>j</italic>] &#x0003D; 0, we set &#x003B6;<sub>2</sub>[<italic>j</italic>]&#x02190;0 (see lines 17 and 18). Otherwise, either no votes (<monospace>ones</monospace>[<italic>j</italic>] &#x0003D; <monospace>zeros</monospace>[<italic>j</italic>] &#x0003D; 0) or a discrepancy (<monospace>ones</monospace>[<italic>j</italic>]&#x0003E;0&#x02227;<monospace>zeros</monospace>[<italic>j</italic>]&#x0003E;0), we treat the event as potential tampering and resolve it with a keyed tie-breaker <sc>KEYED_BIT</sc>(&#x000B7;) (see lines 20 and 21). This yields a deterministic, key-scoped bit that prevents chance agreement on manipulated inputs while remaining reproducible during verification. The generative key-based routines <sc>KEYED_PERMUTATION</sc>(&#x000B7;), <sc>KEYED_INDEX</sc>(&#x000B7;), and <sc>KEYED_BIT</sc>(&#x000B7;) are described in Section 4.5.</p>
<p>After the function <sc>Code_builder</sc> returns &#x003B6;<sub>2</sub>, the code is represented in base-6 notation (denoted by &#x003B6;<sub>6</sub>) by a simple base change operation performed by the function <sc>BASE_CONVERT</sc>(&#x000B7;) (see line 5 of <xref ref-type="statement" rid="algo1">Algorithm 1</xref>). Next, the graph representing the watermark is generated by the function <sc>ENCODE_WATERMARK</sc>(&#x000B7;) taking as input &#x003B6;<sub>6</sub> (see line 6).</p>
<p>The generation of the watermark is based on the graph representation of base-6 numbers presented in <xref ref-type="bibr" rid="B21">Collberg and Thomborson (1999</xref>). <xref ref-type="statement" rid="algo4">Algorithm 4</xref> details the construction of the graph <italic>G</italic> from &#x003B6;<sub>6</sub>. For this, &#x003B6;<sub>6</sub> is treated as an array of &#x003BC; elements. The algorithm receives &#x003B6;<sub>6</sub> (which can also be used to obtain &#x003BC;), and returns the head node <italic>N</italic><sub>0</sub> of a circular list representing the graph. The watermark construction works by building a circular singly linked list of &#x003BC; nodes <italic>N</italic><sub>0</sub>, &#x02026;, <italic>N</italic><sub>&#x003BC;&#x02212;1</sub>, where each node has two pointer fields: <monospace>next</monospace> and <monospace>digit</monospace>. The <monospace>next</monospace> field forms a ring, according to <italic>N</italic><sub><italic>r</italic></sub>.<monospace>next</monospace> &#x0003D; <italic>N</italic><sub>(<italic>r</italic>&#x0002B;1) mod &#x003BC;</sub> with <italic>r</italic> &#x02208; &#x02124;<sup>&#x0002B;</sup>|0 &#x02264; <italic>r</italic> &#x02264; &#x003BC;&#x02212;1. The watermark is encoded solely by the <monospace>digit</monospace> pointers: if &#x003B6;<sub>6</sub>[<italic>r</italic>] &#x0003D; 0 then <italic>N</italic><sub><italic>r</italic></sub>.<monospace>digit</monospace> &#x0003D; <monospace>null</monospace>; otherwise <italic>N</italic><sub><italic>r</italic></sub>.<monospace>digit</monospace> &#x0003D; <italic>N</italic><sub>(<italic>r</italic>&#x0002B;<sub>&#x003B6;</sub><sub>6</sub>[<italic>r</italic>]&#x02212;1) mod &#x003BC;</sub>. Intuitively, the digit is the forward offset along the ring: 1= self, 2= next, 3= next&#x02013;next, and so on (with modulo wrap-around); 0 is indicated by the absence of a pointer.</p>
<statement content-type="algorithm" id="algo4">
<label>Algorithm 4</label>
<p><sc>ENCODE_WATERMARK FUNCTION</sc>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0011.tif"/>
</p>
</statement>
<p>In the algorithm, all nodes are allocated with fields <monospace>next</monospace>, <monospace>digit</monospace> (see line 1). Next, the circular link between the nodes is created (see lines 2 and 3). Then, the values of the <monospace>digit</monospace> pointers are computed and assigned to each node depending on each value stored in each position of &#x003B6;<sub>6</sub>, according to the criteria previously described (see lines 4 to 9). Finally, the head node of the structure representing the watermark is returned (see line 10).</p>
<p>The entire watermark graph can be traversed from any head node. Given access to the first node, the decoder assumes the structure matches the circular list described above. <xref ref-type="statement" rid="algo5">Algorithm 5</xref> describes the function <sc>DECODE_WATERMARK</sc>(&#x000B7;), used for the decodification. It takes as input a head node, denoted as <inline-formula><mml:math id="M7"><mml:msubsup><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> (assumed to be the entry of the graph) and the length &#x003BC; of the code expected to be extracted from the identified watermark. First, the function creates and initializes &#x003B6;<sub>6</sub> as an array of &#x003BC; items (see line 1). Then, it sets <inline-formula><mml:math id="M8"><mml:msub><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>&#x02190;</mml:mo><mml:msubsup><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> (see line 2). Next, it proceeds to create the circular list used to represent the graph. This is done by following <monospace>next</monospace> pointers for &#x003BC; steps to collect the nodes in order from <italic>N</italic><sub>0</sub> to <italic>N</italic><sub>&#x003BC;&#x02212;1</sub> (see lines 3 and 4). It is important to notice that the selection of <inline-formula><mml:math id="M9"><mml:msubsup><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> only rotates the sequence and thus does not affect the recovered digits.</p>
<statement content-type="algorithm" id="algo5">
<label>Algorithm 5</label>
<p><sc>DECODE_WATERMARK FUNCTION</sc>.
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0012.tif"/>
</p>
</statement>
<p>Next, the algorithm proceeds to decode each digit locally. For the position <italic>r</italic>, if <italic>N</italic><sub><italic>r</italic></sub>.<monospace>digit</monospace> &#x0003D; <monospace>null</monospace> then &#x003B6;<sub>6</sub>[<italic>r</italic>]&#x02190;0 (see lines 6 and 7). Otherwise, it starts at <italic>N</italic><sub><italic>r</italic></sub> and advances along <monospace>next</monospace>, counting steps <italic>s</italic> until the <monospace>digit</monospace> target is reached, and returns &#x003B6;<sub>6</sub>[<italic>r</italic>]&#x02190;<italic>s</italic>&#x0002B;1 (so 1= self, 2= next, 3= next-next, etc.) (see lines 9 to 17). The algorithm also uses a guard <italic>s</italic>&#x0003E;&#x003BC; that flags an invalid structure (e.g., broken ring or unreachable <monospace>digit</monospace>) and prevents non-termination (see lines 15 and 16). Finally, after considering all nodes, if no error is reported, the recovered &#x003B6;<sub>6</sub> is returned (see line 18).</p>
<p><xref ref-type="statement" rid="algo6">Algorithm 6</xref> defines the process executed by the <italic>Controller</italic>. It takes as input the assumed initial node <inline-formula><mml:math id="M15"><mml:msubsup><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> from which the watermark is accessed, and the code &#x003B6;, which is used for comparison in assessing the authenticity of the parameters. According to the methods previously described to build &#x003A0; from <italic>I</italic>, &#x003B6; is obtained and passed to the <italic>Controller</italic> based on blind principles, without requiring the original set of parameters, which would increase the risk of exposure of the protected content, offering unnecessary opportunities to malicious actors of intercept the data and compromise our approach&#x00027;s performance, and therefore, the security it provides. Nevertheless, &#x003B6; can be obtained from <italic>P</italic> or a second program deployed in the environment. Static watermarking techniques can be used to store &#x003B6; in <italic>P</italic> if required.</p>
<statement content-type="algorithm" id="algo6">
<label>Algorithm 6</label>
<p><italic>Controller</italic> procedure.
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0013.tif"/>
</p>
</statement>
<p>As depicted in <xref ref-type="statement" rid="algo6">Algorithm 6</xref>, the <italic>Controller</italic> starts by converting &#x003B6; into &#x003B6;<sub>6</sub> in order to obtain &#x003BC;, which is required to build the code from the watermark (see lines 1 and 2). Next, using the function <sc>DECODE_WATERMARK</sc>(&#x000B7;), it proceeds to decode the watermark from the node <inline-formula><mml:math id="M16"><mml:msubsup><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mi>&#x02032;</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> (see line 3). Then, it converts <inline-formula><mml:math id="M17"><mml:mover accent="true"><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003B6;</mml:mi></mml:mrow><mml:mrow><mml:mn>6</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:math></inline-formula> into <inline-formula><mml:math id="M18"><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B6;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:math></inline-formula>, which is the alleged secret code in decimal notation (see line 4). Finally, if <inline-formula><mml:math id="M19"><mml:mi>&#x003B6;</mml:mi><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B6;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:math></inline-formula>, the authenticity of the parameters is verified and the process informs <italic>P</italic> that there is no risk in executing <italic>F</italic> with <italic>I</italic> (as previously defined, <italic>F</italic><sup><italic>I</italic></sup>) (see lines 5 and 6). On the other hand, if <inline-formula><mml:math id="M20"><mml:mi>&#x003B6;</mml:mi><mml:mo>&#x02260;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B6;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:math></inline-formula>, the alternative flow is invoked to address the lack of authenticity in the parameters. Therefore, the <italic>Controller</italic> instruct <italic>P</italic> for the execution of <italic>F</italic><sup>&#x003D5;</sup> instead (see lines 7 and 8). Calling <italic>F</italic><sup>&#x003D5;</sup> does not necessarily mean the execution of the function. It can also refer to the execution of an alternative logic in <italic>P</italic>. Since the <italic>Controller</italic> instructs <italic>P</italic> and does not pass parameters to it directly, <italic>I</italic> is not considered among the inputs of <xref ref-type="statement" rid="algo6">Algorithm 6</xref>.</p>
<p>It is important to note that watermark encoding and detection occur during program execution. Furthermore, the combination of static and dynamic approaches can increase resilience to our proposal. The parameter authentication approach has some features that contribute to its success. The input is never directly compared to a plain value in <italic>P</italic>. No visible hash or key is checked; only graph logic is used. Operations such as reverse engineering become more challenging, especially when the node structure is obfuscated and the watermark construction is triggered only under certain conditions.</p>
<p>This solution can be applied to tamper detection, where any modification of the input parameters renders the detected watermark invalid. Furthermore, since cryptographic hash functions are computationally efficient, this approach requires minimal computational resources. Finally, metadata for additional validation, such as timestamps or user IDs, can be considered when building <italic>W</italic>, thereby increasing the meaningfulness and robustness of the proposal.</p>
</sec>
<sec>
<label>4.5</label>
<title>Applied generative key-based functions</title>
<p>Three critical functions are essential for the correct functioning of the parameter authentication approach. They are <sc>KEYED_PERMUTATION</sc>(&#x000B7;), <sc>KEYED_INDEX</sc>(&#x000B7;), and <sc>KEYED_BIT</sc>(&#x000B7;). Although their goal is briefly mentioned when presenting the approach, this section describes them in more detail.</p>
<sec>
<label>4.5.1</label>
<title>The K<sc>EYED_PERMUTATION FUNCTION</sc></title>
<p>The first generative key-based function, <sc>KEYED_PERMUTATION</sc>(&#x000B7;), is used to synchronize the watermark hints in <italic>I</italic>. It takes as input a <monospace>seed</monospace> and an even integer <italic>n</italic> &#x0003D; &#x0230A;|<italic>I</italic>|/2&#x0230B;, and produces a keyed permutation of index pairs in <italic>I</italic> for the difference expansion. The output is the deterministic permutation index list &#x02119;, as previously formalized. Its essential properties are reproducibility for identical parameters, unpredictability without the seed, and consistency with PRF-driven derivations.</p>
<p><xref ref-type="statement" rid="algo7">Algorithm 7</xref> specifies the procedure for <sc>KEYED_PERMUTATION</sc>(&#x000B7;). Its inputs are a secret <monospace>seed</monospace>, a pair-count <italic>n</italic>, and an optional context string <monospace>ctx</monospace> for domain separation. If <monospace>ctx</monospace> is omitted, a default value is used. The function initializes &#x02119; as the identity ordering [0, 1, &#x02026;, <italic>n</italic>&#x02212;1] (line 1) and applies the Durstenfeld/Knuth Fisher-Yates shuffle from <italic>i</italic> &#x0003D; <italic>n</italic>&#x02212;1 down to 1 (line 2). At each iteration, it derives a swap index <italic>j</italic> &#x02208; 0, &#x02026;, <italic>i</italic> via a keyed PRF. Specifically, it builds a domain-separated label from <monospace>ctx</monospace> and loop metadata (<italic>i, c</italic>) (see line 3), computes a hash-based message authentication code (HMAC) using the cryptographic hash function SHA-256 (see line 4), extracts the first 64 bits as an integer <italic>r</italic> (see line 5), and maps <italic>r</italic> uniformly to [0, <italic>i</italic>] via rejection sampling with modulus <italic>m</italic> &#x0003D; <italic>i</italic>&#x0002B;1 and cutoff <italic>L</italic> &#x0003D; 2<sup>64</sup>&#x02212;(2<sup>64</sup> mod <italic>m</italic>) (see lines 6 and 7). If <italic>r</italic>, the counter <italic>c</italic> is incremented and <italic>r</italic> re-derived until valid (see lines 8 to 10). The swap index is then set as <italic>j</italic> &#x0003D; <italic>r</italic> mod <italic>m</italic> (line 11), and &#x02119;[<italic>i</italic>] is exchanged with &#x02119;[<italic>j</italic>] (see line 12). The counter <italic>c</italic> advances once per iteration to decorrelate labels (see line 13).</p>
<statement content-type="algorithm" id="algo7">
<label>Algorithm 7</label>
<p><sc>KEYED_PERMUTATION FUNCTION</sc>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0014.tif"/>
</p>
</statement>
<p>Under standard assumptions, HMAC behaves as a secure PRF (<xref ref-type="bibr" rid="B7">Bellare et al., 1996</xref>; <xref ref-type="bibr" rid="B45">Krawczyk et al., 1997</xref>), making the derived swap indices computationally indistinguishable from independent uniform draws. Since the Fisher-Yates shuffle with uniform choices produces the uniform distribution over all <italic>n</italic>! permutations <xref ref-type="bibr" rid="B33">Durstenfeld, (1964)</xref>; <xref ref-type="bibr" rid="B44">Knuth, (1997)</xref>, this construction yields an unbiased, key-dependent permutation. The use of a context string for domain separation follows established practice in the HMAC-based Key Derivation Function (HKDF), where the <monospace>info</monospace> field binds outputs to application-specific context <xref ref-type="bibr" rid="B46">Krawczyk and Eronen, (2010)</xref>. Finally, rejection sampling guarantees provably uniform bounded integers with efficient implementation <xref ref-type="bibr" rid="B49">Lemire, (2019)</xref>.</p></sec>
<sec>
<label>4.5.2</label>
<title>The K<sc>EYED_INDEX FUNCTION</sc></title>
<p>Another critical function in this work is <sc>Keyed_index</sc>(&#x000B7;), invoked by <sc>Code_builder</sc>(&#x000B7;) to determine the target index in &#x003B6;<sub>2</sub> for a given position <italic>p</italic> in &#x02119;, the length &#x003B7; of &#x003B6;<sub>2</sub>, and the secret key <italic>k</italic> (see line 7 of <xref ref-type="statement" rid="algo3">Algorithm 3</xref>). <xref ref-type="statement" rid="algo8">Algorithm 8</xref> specifies its procedure. The function deterministically maps a host index <italic>p</italic> to a uniform position <monospace>idx</monospace> &#x02208; [0, &#x003B7;) using <italic>k</italic>. Assuming HMAC is a secure PRF, the output is reproducible for identical inputs yet computationally indistinguishable from a uniform draw without knowledge of <italic>k</italic> (<xref ref-type="bibr" rid="B7">Bellare et al., 1996</xref>; <xref ref-type="bibr" rid="B45">Krawczyk et al., 1997</xref>). Uniformity is enforced via rejection sampling to eliminate modulo bias when reducing a 64-bit value to a smaller range (<xref ref-type="bibr" rid="B49">Lemire, 2019</xref>). Domain separation is achieved by combining a fixed label (<monospace>BI_LAB</monospace>), <italic>p</italic>, and a counter <italic>c</italic> into the HMAC input, in the spirit of HKDF&#x00027;s <monospace>info</monospace> field (<xref ref-type="bibr" rid="B46">Krawczyk and Eronen, 2010</xref>). This primitive supports keyed scan orders, ring-head selection, and decoy placement, where indices must be reproducible but unpredictable.</p>
<statement content-type="algorithm" id="algo8">
<label>Algorithm 8</label>
<p><sc>KEYED_INDEX FUNCTION</sc>.
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0015.tif"/>
</p>
</statement>
<p>In detail, <xref ref-type="statement" rid="algo8">Algorithm 8</xref> begins by computing the cutoff <monospace>limit</monospace> &#x0003D; 2<sup>64</sup>&#x02212;(2<sup>64</sup> mod &#x003B7;) (see line 1), ensuring unbiased indices through rejection sampling, as also applied in <sc>Keyed_permutation</sc>(&#x000B7;). It then initializes the counter <italic>c</italic> and the fixed domain label <monospace>BI_LAB</monospace> (see lines 2 and 3). Each iteration constructs a message <monospace>msg</monospace>, computes an HMAC&#x02013;SHA256 digest <italic>D</italic><sub><italic>p, c</italic></sub> using <monospace>msg</monospace> and <italic>k</italic>, and interprets the first 64 bits as an integer <italic>r</italic> (see lines 5 to 7). The counter <italic>c</italic> is incremented until a valid <italic>r</italic>&#x0003C;<monospace>limit</monospace> is obtained (see lines 8 and 9). Finally, the algorithm outputs <monospace>idx</monospace>&#x02190;<italic>r</italic> mod &#x003B7; (see line 10). In this way, each position <italic>p</italic> in a permutation is deterministically associated with a particular index in &#x003B6;<sub>2</sub>.</p></sec>
<sec>
<label>4.5.3</label>
<title>The <sc>KEYED_BIT FUNCTION</sc></title>
<p>The final keyed PRF in this work is <sc>Keyed_Bit</sc>(&#x000B7;), which produces a deterministic pseudorandom bit <italic>b</italic> &#x02208; {0, 1} from a domain-separated label. For any fixed pair of parameters (<italic>k</italic>, <monospace>label</monospace>) this function always returns the same bit, ensuring reproducibility. On the other hand, to any party without <italic>k</italic>, the output is computationally indistinguishable from random under the standard assumption that HMAC is a secure PRF (<xref ref-type="bibr" rid="B7">Bellare et al., 1996</xref>; <xref ref-type="bibr" rid="B45">Krawczyk et al., 1997</xref>). The use of a structured label (e.g., <monospace>ctx|purpose|...</monospace>) achieves domain separation, analogous to the <monospace>info</monospace> field in HKDF (<xref ref-type="bibr" rid="B46">Krawczyk and Eronen, 2010</xref>), so bits used in different roles do not collide. This primitive is well-suited for keyed tie-breaking, chaos-inducing decisions, or any context where a minimal yet reproducible source of unpredictability is needed.</p>
<p>In this work, this function is responsible for adding chaos to the reconstructed code &#x003B6;<sub>2</sub> when the slightest inconsistency is detected in &#x003A0; when executing <sc>Code_builder</sc>(&#x000B7;) (see lines 19 to 21 of <xref ref-type="statement" rid="algo3">Algorithm 3</xref>). This ensures that &#x003B6;<sub>2</sub> diverges from its authentic value, preventing accidental reconstruction by sheer chance and thereby enabling reliable detection of parameter tampering.</p>
<p><xref ref-type="statement" rid="algo9">Algorithm 9</xref> specifies the implementation of <sc>Keyed_bit</sc>(&#x000B7;). It first encodes the domain-separated label into bytes (UTF-8) (see line 1) and computes an HMAC&#x02013;SHA256 digest with <italic>k</italic> over that byte string (see line 2). Then, it interprets the first 64 bits of the digest as an unsigned integer <italic>r</italic> (see line 3) and outputs <italic>b</italic>&#x02190;<italic>r</italic> mod 2 (see line 4). Since 2 divides 2<sup>64</sup> evenly, this reduction is unbiased and requires no rejection sampling. Finally, the algorithm returns <italic>b</italic> (see line 5). For generating wider indices in [0, <italic>m</italic>) with arbitrary <italic>m</italic>, a companion routine employing rejection sampling must be used to avoid modulo bias.</p>
<statement content-type="algorithm" id="algo9">
<label>Algorithm 9</label>
<title><sc>KEYED_BIT FUNCTION</sc></title>
<p><monospace><bold>Input</bold>: <italic>k</italic>, <monospace>label</monospace></monospace></p>
<p><monospace><bold>Output</bold>: <italic>b</italic> &#x02208; {0, 1} 1</monospace></p>
<p><monospace>msg</monospace>&#x02190;UTF8(<monospace>label</monospace>)</p>
<p><monospace>dig</monospace>&#x02190;HMAC &#x02212; SHA256(<italic>k</italic>, <monospace>msg</monospace>)</p>
<p><monospace>3 <italic>r</italic>&#x02190; first 8 bytes of <monospace>dig</monospace> interpreted as a 64-bit unsigned integer</monospace></p>
<p><monospace><italic>b</italic>&#x02190;<italic>r</italic> mod 2</monospace></p>
<p><monospace><bold>return</bold> <italic>b</italic></monospace></p>
</statement>
</sec>
</sec>
</sec>
<sec id="s5">
<label>5</label>
<title>Experimental results</title>
<p>This section presents the results that validate the applicability of the proposed solution. The evaluation focuses on performance in detecting tampered input parameters and on preserving function outcomes when parameter authenticity is confirmed. The experiments also assess the proposal&#x00027;s impact on the protected code, considering both the modifications required for integration and their effect on performance. Specifically, results are reported for code size and execution time, showing effective detection of tampered inputs across different values of <italic>I</italic>. Moreover, the approach requires neither significant resources nor a complex environment for development and execution.</p>
<sec>
<label>5.1</label>
<title>Experimental setup</title>
<p>We start from the basis that dynamic watermarking techniques have not been applied for this goal before. We selected Python 3.12.7 for implementing our approach, considering its extensive use in developing solutions that address the challenges we mentioned earlier. The development environment was Spyder 5.5.1 Integrated Development Environment (IDE) from the Anaconda Navigator 2.6.4 Python distribution. The runtime environment consisted of a PC equipped with an Intel i7-7700K processor, clocked at 4.20 GHz, 32.0 GB of RAM, and running Windows 10 (AMD64) Pro OS.</p>
<p>We selected five Python functions implementing different functionalities to validate our approach. Each function takes an array of integers as input, but the acceptable range of values depends on the specific logic implemented. A brief description of each function is provided below:</p>
<list list-type="bullet">
<list-item><p><italic>F</italic><sub>A</sub>: Function defined as <monospace>total_revenue_cents(</monospace>&#x000B7;<monospace>)</monospace> which takes a list of transaction amounts expressed in cents and sums them. It returns a single integer, which is the total revenue in cents, with 0 for an empty list. Negative values (e.g., refunds) are naturally included in the sum, so the result reflects net revenue.</p></list-item>
<list-item><p><italic>F</italic><sub>B</sub>: Function defined as <monospace>median_basket_size(</monospace>&#x000B7;<monospace>)</monospace> which receives a list of item counts per order and returns the median basket size as an integer. For an even number of orders, it uses the floor of the average of the two middle values; for an empty list, it returns 0. It is useful for tracking typical cart size while being robust to extreme outliers.</p></list-item>
<list-item><p><italic>F</italic><sub>C</sub>: Function defined as <monospace>sla_breach_rate(</monospace>&#x000B7;<monospace>)</monospace> which takes response times in milliseconds and returns the fraction of requests that exceed the Service Level Agreement (SLA) threshold. By default, the threshold is 2000 ms (tunable), and an empty list yields 0.0. The result is a float in [0, 1], representing the share of breaches.</p></list-item>
<list-item><p><italic>F</italic><sub>D</sub>: Function defined as <monospace>churn_flags(</monospace>&#x000B7;<monospace>)</monospace> which takes, for each customer, the number of days since last activity and returns a boolean list flagging likely churners. Any value greater than or equal to the inactivity window (default 30 days) is flagged <monospace>true</monospace>. The output length matches the input. An empty input returns an empty output.</p></list-item>
<list-item><p><italic>F</italic><sub>E</sub>: Function defined as <monospace>staffing_alert_levels(</monospace>&#x000B7;<monospace>)</monospace> which takes a time-ordered list of tickets per hour and classifies each hour as &#x0201C;normal&#x0201D;, &#x0201C;high&#x0201D;, or &#x0201C;critical&#x0201D;. By default: &#x02264; 15 &#x02192; normal, 16 to 30 &#x02192; high, &#x0003E;30 &#x02192; critical; the thresholds are easy to adjust. It returns a list of labels aligned 1:1 with the input hours.</p></list-item>
</list>
<p>For each function, we use five different sets of parameters, each consisting of an array of 32 integers. Each parameter is identified by a name that links it to the function on which it is used. The structure of the set name is <italic>I</italic><sub><sans-serif><italic>F</italic></sans-serif>&#x02212;<sans-serif><italic>D</italic></sans-serif></sub> where <sans-serif><italic>F</italic></sans-serif> &#x02208; {A, B, C, D, E} identifies the function and <sans-serif><italic>D</italic></sans-serif> &#x02208; {1, 2, 3} denotes the parameter set for that function. According to this, <italic>I</italic><sub><sans-serif><italic>A</italic></sans-serif>&#x02212;<sans-serif>3</sans-serif></sub> denotes the third set of parameters for the function <italic>F</italic><sub>A</sub> (a.k.a <monospace>total_revenue_cents(</monospace>&#x000B7;<monospace>)</monospace>.</p>
<p><xref ref-type="table" rid="T2">Table 2</xref> summarizes the characteristics of each dataset used as input for each function. It contributes to understanding the range of values that each function handles and the differences across the cases analyzed. Specifically, for each array, the table reports the maximum value (column <bold>MAX</bold>), the minimum value (column <bold>MIN</bold>), the average (column <bold>AVG</bold>), and the standard deviation (column <bold>STD_DEV</bold>). These statistics provide insight into the variability and distribution of values within each dataset.</p>
<table-wrap position="float" id="T2">
<label>Table 2</label>
<caption><p>Datasets used for the validation of the approach.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th valign="top" align="left"><bold><italic>F</italic></bold></th>
<th valign="top" align="left"><bold><italic>I</italic></bold></th>
<th valign="top" align="left"><bold>Description</bold></th>
<th valign="top" align="center"><bold>MAX</bold></th>
<th valign="top" align="center"><bold>MIN</bold></th>
<th valign="top" align="center"><bold>AVG</bold></th>
<th valign="top" align="center"><bold>STD_DEV</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>A</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>A</italic>&#x02212;<sans-serif>1</sans-serif></sans-serif></sub></td>
<td valign="top" align="left">Subscriptions with occasional refunds (negatives) </td>
<td valign="top" align="center">4999</td>
<td valign="top" align="center">&#x02212;999</td>
<td valign="top" align="center">1217.94</td>
<td valign="top" align="center">1131.15</td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>B</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>B</italic>&#x02212;<sans-serif>1</sans-serif></sans-serif></sub></td>
<td valign="top" align="left">Even-sized sample with typical small baskets </td>
<td valign="top" align="center">4</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">2.19</td>
<td valign="top" align="center">0.88</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>B</italic>&#x02212;<sans-serif>3</sans-serif></sans-serif></sub></td>
<td valign="top" align="left">Wholesale / large carts </td>
<td valign="top" align="center">22</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">14.22</td>
<td valign="top" align="center">3.81</td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>C</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>C</italic>&#x02212;<sans-serif>1</sans-serif></sans-serif></sub></td>
<td valign="top" align="left">Mixed near-threshold with some spikes </td>
<td valign="top" align="center">4000</td>
<td valign="top" align="center">1600</td>
<td valign="top" align="center">2189.84</td>
<td valign="top" align="center">529.07</td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>D</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>D</italic>&#x02212;<sans-serif>1</sans-serif></sans-serif></sub></td>
<td valign="top" align="left">Mixed recency across users </td>
<td valign="top" align="center">90</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">24.63</td>
<td valign="top" align="center">20.01</td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>E</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>E</italic>&#x02212;<sans-serif>1</sans-serif></sans-serif></sub></td>
<td valign="top" align="left">Two-day hourly pattern, steady with small bumps </td>
<td valign="top" align="center">15</td>
<td valign="top" align="center">5</td>
<td valign="top" align="center">9.16</td>
<td valign="top" align="center">2.97</td>
</tr></tbody>
</table>
</table-wrap>
</sec>
<sec>
<label>5.2</label>
<title>Detection of data tampering</title>
<p>The validation of the proposed approach is guided by the research questions introduced earlier. This section presents the results that address the first question: &#x0201C;<italic>Does the proposed approach detect tampering of input parameters with a high true-positive rate and low false-positive rate across representative workloads?&#x0201D;</italic> To answer this, it is first necessary to define: (i) how to compute the true-positive rate (TPR) and what qualifies as a high value, (ii) how to compute the false-positive rate (FPR) and what qualifies as a low value, and (iii) which representative workloads are suitable for validating the proposal.</p>
<p>The true-positive rate (TPR) measures the proportion of tampered inputs that are correctly detected as tampered. In this work, it is computed according to <xref ref-type="disp-formula" rid="EQ1">Equation 1</xref>, where TP denotes the number of tampered cases correctly identified and FN the number of tampered cases missed (<xref ref-type="bibr" rid="B34">Fawcett, 2006</xref>; <xref ref-type="bibr" rid="B64">Sokolova and Lapalme, 2009</xref>). In our context, a high TPR indicates near-exhaustive detection of tampering and should be defined a priori. We formally adopt TPR&#x02265;0.99 as the threshold for a high TPR, given the importance of ensuring the proper functioning of the proposed approach.</p>
<disp-formula id="EQ1"><mml:math id="M27"><mml:mtable class="eqnarray" columnalign="center"><mml:mtr><mml:mtd><mml:mtext class="textrm" mathvariant="normal">TPR</mml:mtext><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mtext class="textrm" mathvariant="normal">TP</mml:mtext></mml:mrow><mml:mrow><mml:mtext class="textrm" mathvariant="normal">TP</mml:mtext><mml:mo>&#x0002B;</mml:mo><mml:mtext class="textrm" mathvariant="normal">FN</mml:mtext></mml:mrow></mml:mfrac></mml:mtd></mml:mtr></mml:mtable></mml:math><label>(1)</label></disp-formula>
<p>The false-positive rate (FPR) measures the proportion of authentic inputs that are incorrectly flagged as tampered. In this work, it is computed according to <xref ref-type="disp-formula" rid="EQ2">Equation 2</xref>, where FP denotes the number of authentic inputs incorrectly classified as tampered and TN the number of authentic inputs correctly classified as not tampered (<xref ref-type="bibr" rid="B34">Fawcett, 2006</xref>; <xref ref-type="bibr" rid="B64">Sokolova and Lapalme, 2009</xref>). In our context, a low FPR indicates rare false alarms and should be defined a priori. We formally adopt FPR &#x02264; 0.01 as the threshold for a low FPR.</p>
<disp-formula id="EQ2"><mml:math id="M28"><mml:mtable class="eqnarray" columnalign="center"><mml:mtr><mml:mtd><mml:mtext class="textrm" mathvariant="normal">FPR</mml:mtext><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mtext class="textrm" mathvariant="normal">FP</mml:mtext></mml:mrow><mml:mrow><mml:mtext class="textrm" mathvariant="normal">FP</mml:mtext><mml:mo>&#x0002B;</mml:mo><mml:mtext class="textrm" mathvariant="normal">TN</mml:mtext></mml:mrow></mml:mfrac></mml:mtd></mml:mtr></mml:mtable></mml:math><label>(2)</label></disp-formula>
<p>Finally, we define a representative workload as a curated set of inputs and execution conditions that faithfully reflect the system&#x00027;s intended use. Such a workload should preserve the statistical properties of the data, the shape and scale of inputs, and the mix of operations exercised by the application. It should also include both benign variations (e.g., reordering, padding) and adversarial perturbations consistent with the threat model, all under reproducible settings.</p>
<p>In our evaluation, the five previously introduced functions constitute the representative workload. Together they span order-insensitive <italic>aggregation</italic> (as in <italic>F</italic><sub>A</sub>), a robust <italic>order statistic</italic> (as in <italic>F</italic><sub>B</sub>), <italic>rate/threshold</italic> computation near decision boundaries (as in as in <italic>F</italic><sub>C</sub>), vectorized <italic>boolean flagging</italic> (as in <italic>F</italic><sub>D</sub>), and <italic>multi-level classification</italic> on time series (as in <italic>F</italic><sub>E</sub>). This set covers both order-insensitive and order-sensitive behaviors, single-output and vector outputs, and varying sensitivities to bit-level edits and structured tampering, while also admitting benign controls (e.g., pure reordering) to estimate the FPR. Instantiated across multiple scales and data distributions, these functions provide a realistic and reproducible proxy for the target application domain, thereby satisfying the representativeness required by the first research question.</p>
<p>To evaluate the performance of our proposal in detecting data tampering, we conducted 15 experiments per function. Each function was tested with its corresponding datasets, applying five different degrees of data modification. We deliberately selected the smallest possible number of elements and applied minimal changes to stress-test our approach, assessing whether tampering could still be detected even when the modifications were so slight that they sometimes did not alter the function&#x00027;s output. Tampering was introduced by pseudo-randomly selecting between one and five input values and modifying the least significant bit (<italic>lsb</italic>) of each chosen value.</p>
<p>The results are presented in <xref ref-type="table" rid="T3">Table 3</xref> for each function (column <italic>F</italic>) and its associated dataset (column <italic>I</italic>). They are organized into four groups of columns: <bold>Tampering Detected</bold>, <bold>TPR</bold>, <bold>FPR</bold>, and <bold>Output Modified</bold>. Binary outcomes are denoted as &#x02713; (yes) and &#x02717; (no). Within each group, five columns correspond to the number of array items pseudo-randomly selected for <italic>lsb</italic> modification. The Output Modified column illustrates that tampering does not always lead to changes in the function result. Nevertheless, detecting such tampering remains essential to uncover potential vulnerabilities, prevent unauthorized access or data leaks, and mitigate the risk of future output changes if function logic is modified under approved requirements.</p>
<table-wrap position="float" id="T3">
<label>Table 3</label>
<caption><p>Results of data tampering detection using the input parameters authentication approach (&#x003B6;<sub>2</sub> &#x0003D; 1011, <italic>k</italic> = &#x0201C;K82Sec&#x0201D;).</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th valign="top" align="left"><bold><italic>F</italic></bold></th>
<th valign="top" align="left"><bold><italic>I</italic></bold></th>
<th valign="top" align="center" colspan="5"><bold>Tampering detected</bold></th>
<th valign="top" align="center" colspan="5"><bold>TPR</bold></th>
<th valign="top" align="center" colspan="5"><bold>FPR</bold></th>
<th valign="top" align="center" colspan="5"><bold>Output modified</bold></th>
</tr>
<tr>
<th/>
<th/>
<th valign="top" align="center"><bold>1</bold></th>
<th valign="top" align="center"><bold>2</bold></th>
<th valign="top" align="center"><bold>3</bold></th>
<th valign="top" align="center"><bold>4</bold></th>
<th valign="top" align="center"><bold>5</bold></th>
<th valign="top" align="center"><bold>1</bold></th>
<th valign="top" align="center"><bold>2</bold></th>
<th valign="top" align="center"><bold>3</bold></th>
<th valign="top" align="center"><bold>4</bold></th>
<th valign="top" align="center"><bold>5</bold></th>
<th valign="top" align="center"><bold>1</bold></th>
<th valign="top" align="center"><bold>2</bold></th>
<th valign="top" align="center"><bold>3</bold></th>
<th valign="top" align="center"><bold>4</bold></th>
<th valign="top" align="center"><bold>5</bold></th>
<th valign="top" align="center"><bold>1</bold></th>
<th valign="top" align="center"><bold>2</bold></th>
<th valign="top" align="center"><bold>3</bold></th>
<th valign="top" align="center"><bold>4</bold></th>
<th valign="top" align="center"><bold>5</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>A</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>A</italic>&#x02212;<sans-serif>1</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>A</italic>&#x02212;<sans-serif>2</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>A</italic>&#x02212;<sans-serif>3</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>B</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>B</italic>&#x02212;<sans-serif>1</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>B</italic>&#x02212;<sans-serif>2</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>B</italic>&#x02212;<sans-serif>3</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>C</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>C</italic>&#x02212;<sans-serif>1</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>C</italic>&#x02212;<sans-serif>2</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>C</italic>&#x02212;<sans-serif>3</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>D</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>D</italic>&#x02212;<sans-serif>1</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>D</italic>&#x02212;<sans-serif>2</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>D</italic>&#x02212;<sans-serif>3</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>E</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>E</italic>&#x02212;<sans-serif>1</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>E</italic>&#x02212;<sans-serif>2</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>E</italic>&#x02212;<sans-serif>3</sans-serif></sans-serif></sub></td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
</tr></tbody>
</table>
</table-wrap>
<p>As shown in the table, tampering was successfully detected in every case, thereby fulfilling the requirement established by the first research question: demonstrating that the approach achieves <bold>TPR</bold> = 1 and <bold>FPR</bold> = 0. Detection was achieved even in cases where the modifications did not affect the output that the function would have produced on untampered data. This highlights another strength of our approach. Nevertheless, it is important to note that this behavior depends heavily on the function&#x00027;s requirements and implementation. For example, the output of <italic>F</italic><sub><sans-serif><italic>A</italic></sans-serif></sub> was always different, since it performs a summation of all input values. By contrast, <italic>F</italic><sub><sans-serif><italic>B</italic></sans-serif></sub>, which computes the average of the input values and returns a rounded result, is less likely to change under small modifications. Finally, changes in the outputs of <italic>F</italic><sub><sans-serif><italic>D</italic></sans-serif></sub> and <italic>F</italic><sub><sans-serif><italic>E</italic></sans-serif></sub> were rarely detected, as their results only vary when tampering affects values close to the classification boundaries defined by the functions.</p>
</sec>
<sec>
<label>5.3</label>
<title>Output accuracy variations</title>
<p>The results presented in this section correspond to the experiments conducted to address the second research question: &#x0201C;<italic>Does integrating the approach preserve the functional output of protected functions when the input parameters are authentic?&#x0201D;</italic> To answer this, we obtained the outputs of each function using the various datasets and compared them with the outputs obtained after confirming that no tampering occurred and the input parameters were restored. Success is defined as confirming that the outputs remain unchanged. Additionally, we provide the outputs that each function would produce if the input parameters were not restored after decoding the watermark, allowing a comparison of the distortion introduced by retaining the watermark hints.</p>
<p><xref ref-type="table" rid="T4">Table 4</xref> shows the outcomes of functions <italic>F</italic><sub><sans-serif><italic>A</italic></sans-serif></sub>, <italic>F</italic><sub><sans-serif><italic>B</italic></sans-serif></sub>, and <italic>F</italic><sub><sans-serif><italic>C</italic></sans-serif></sub>, for each input set, both before and after applying our approach. The group labeled <bold>After</bold> contains two columns: <bold>Encoded</bold>, which refers to parameters still containing the watermark hints (not restored to their original state), and <bold>Restored</bold>, which contains the data after extracting the hints, restoring the parameters, and verifying the authenticity of the watermark. Values in the <bold>Encoded</bold> column include a number in parentheses representing the difference from the output obtained before embedding the watermark hints.</p>
<table-wrap position="float" id="T4">
<label>Table 4</label>
<caption><p>Comparison of the outputs of functions <italic>F</italic><sub><sans-serif>A</sans-serif></sub>, <italic>F</italic><sub><sans-serif>B</sans-serif></sub>, and <italic>F</italic><sub><sans-serif>C</sans-serif></sub> before and after applying the input parameter authentication approach (&#x003B6;<sub>2</sub> &#x0003D; 1011, <italic>k</italic> = &#x0201C;K82Sec&#x0201D;).</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th valign="top" align="left"><bold><italic>F</italic></bold></th>
<th valign="top" align="left"><bold><italic>I</italic></bold></th>
<th valign="top" align="center"><bold>Before</bold></th>
<th valign="top" align="center" colspan="2"><bold>After</bold></th>
</tr>
<tr>
<th/>
<th/>
<th/>
<th valign="top" align="center"><bold>Encoded</bold></th>
<th valign="top" align="center"><bold>Restored</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>A</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>A</italic>&#x02212;1</sans-serif></sub></td>
<td valign="top" align="center">38, 974</td>
<td valign="top" align="center">38, 986 (&#x0002B;12)</td>
<td valign="top" align="center">38, 974</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>A</italic>&#x02212;2</sans-serif></sub></td>
<td valign="top" align="center">4, 269, 500</td>
<td valign="top" align="center">4, 269, 512 (&#x0002B;12)</td>
<td valign="top" align="center">4, 269, 500</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>A</italic>&#x02212;3</sans-serif></sub></td>
<td valign="top" align="center">3, 574</td>
<td valign="top" align="center">3, 580 (&#x0002B;6)</td>
<td valign="top" align="center">3, 574</td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>B</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>B</italic>&#x02212;1</sans-serif></sub></td>
<td valign="top" align="center">2</td>
<td valign="top" align="center">2 (0)</td>
<td valign="top" align="center">2</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>B</italic>&#x02212;2</sans-serif></sub></td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0 (0)</td>
<td valign="top" align="center">0</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>B</italic>&#x02212;3</sans-serif></sub></td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">14 (0)</td>
<td valign="top" align="center">14</td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic><sub><sans-serif><italic>C</italic></sans-serif></sub></td>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>C</italic>&#x02212;1</sans-serif></sub></td>
<td valign="top" align="center">0.53125</td>
<td valign="top" align="center">0.53125 (0)</td>
<td valign="top" align="center">0.53125</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>C</italic>&#x02212;2</sans-serif></sub></td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0 (0)</td>
<td valign="top" align="center">0</td>
</tr>
 <tr>
<td/>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>C</italic>&#x02212;3</sans-serif></sub></td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0.96875 (&#x0002B;0.03125)</td>
<td valign="top" align="center">1</td>
</tr></tbody>
</table>
</table-wrap>
<p>The table shows how distortion can result in different outputs. However, in some cases, no distortion occurs because increases in certain values are compensated by decreases in others during the embedding of the hints or due to the way the function processes the input. This behavior is observed in all cases of function <italic>F</italic><sub><sans-serif><italic>B</italic></sans-serif></sub>, for example. Additionally, the results from these experiments confirm that our approach does not interfere with the outputs of the functions, as evidenced by the comparison between the <bold>Before</bold> and <bold>Restored</bold> columns.</p>
<p><xref ref-type="table" rid="T5">Table 5</xref> shows the results obtained when applying our approach to the function <italic>F</italic><sub><sans-serif><italic>D</italic></sans-serif></sub> with its corresponding inputs. Each output is presented in two columns, <bold>T</bold> and <bold>F</bold>, containing the number of <monospace>true</monospace> and <monospace>false</monospace> values in the boolean list returned by the function. Notice that in the Encoded column, the function&#x00027;s outputs sometimes remain unchanged. Additionally, because the output consists of a group of values, any distortion introduced by embedding the watermark hints is compensated across the different elements of the group (for example, under the <bold>Encoded</bold> column, values in <bold>T</bold> offset those in <bold>F</bold>). Finally, the fact that our approach does not interfere with the function&#x00027;s accuracy is evident from the matching values in the <bold>Before</bold> and <bold>Restore</bold> columns.</p>
<table-wrap position="float" id="T5">
<label>Table 5</label>
<caption><p>Comparison of the outputs of the function <italic>F</italic><sub><sans-serif>D</sans-serif></sub> before and after applying the input parameter authentication approach (&#x003B6;<sub>2</sub> &#x0003D; 1011, <italic>k</italic> = &#x0201C;K82Sec&#x0201D;).</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th valign="top" align="left"><bold><italic>I</italic></bold></th>
<th valign="top" align="center" colspan="2"><bold>Before</bold></th>
<th valign="top" align="center" colspan="4"><bold>After</bold></th>
</tr>
<tr>
<th/>
<th valign="top" align="center" colspan="2"></th>
<th valign="top" align="center" colspan="2"><bold>Encoded</bold></th>
<th valign="top" align="center" colspan="2"><bold>Restored</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td/>
<td valign="top" align="center"><bold>T</bold></td>
<td valign="top" align="center"><bold>F</bold></td>
<td valign="top" align="center"><bold>T</bold></td>
<td valign="top" align="center"><bold>F</bold></td>
<td valign="top" align="center"><bold>T</bold></td>
<td valign="top" align="center"><bold>F</bold></td>
</tr>
<tr>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>D</italic>&#x02212;1</sans-serif></sub></td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">18</td>
<td valign="top" align="center">15 (&#x0002B;1)</td>
<td valign="top" align="center">17 (&#x02212;1)</td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">18</td>
</tr>
<tr>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>D</italic>&#x02212;2</sans-serif></sub></td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">32</td>
<td valign="top" align="center">0 (0)</td>
<td valign="top" align="center">32 (0)</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">32</td>
</tr>
<tr>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>D</italic>&#x02212;3</sans-serif></sub></td>
<td valign="top" align="center">32</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">25 (&#x02212;7)</td>
<td valign="top" align="center">7 (&#x0002B;7)</td>
<td valign="top" align="center">32</td>
<td valign="top" align="center">0</td>
</tr></tbody>
</table>
</table-wrap>
<p><xref ref-type="table" rid="T6">Table 6</xref> shows the results of the experiments performed for <italic>F</italic><sub><sans-serif><italic>E</italic></sans-serif></sub> with its corresponding inputs. In this case, the function returns three integers, shown in columns <bold>N</bold>, <bold>H</bold>, and <bold>C</bold>, which stand for &#x0201C;normal&#x0201D;, &#x0201C;high&#x0201D;, and &#x0201C;critical&#x0201D;, respectively. We can see that sometimes the encoding does not alter certain outputs (e.g., under the <bold>Encoded</bold> category, column <bold>C</bold> for dataset <italic>I</italic><sub><sans-serif><italic>E</italic>&#x02212;1</sans-serif></sub>, and column <bold>H</bold> for dataset <italic>I</italic><sub><sans-serif><italic>E</italic>&#x02212;2</sans-serif></sub>). Additionally, also in this case, it is clear that the distortion introduced by embedding the watermark hints is compensated across the different elements in each output. Finally, we can see that once the hints are extracted from <italic>I</italic>, the restored parameters allow the computation of the same results as those obtained with the original set of inputs.</p>
<table-wrap position="float" id="T6">
<label>Table 6</label>
<caption><p>Comparison of the outputs of the function <italic>F</italic><sub><sans-serif>E</sans-serif></sub> before and after applying the input parameter authentication approach (&#x003B6;<sub>2</sub> &#x0003D; 1, 001, <italic>k</italic> = &#x0201C;K82Sec&#x0201D;).</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th valign="top" align="left"><bold><italic>I</italic></bold></th>
<th valign="top" align="center" colspan="3"><bold>Before</bold></th>
<th valign="top" align="center" colspan="6"><bold>After</bold></th>
</tr>
<tr>
<th/>
<th valign="top" align="center" colspan="3"></th>
<th valign="top" align="center" colspan="3"><bold>Encoded</bold></th>
<th valign="top" align="center" colspan="3"><bold>Restored</bold></th>
</tr>
<tr>
<th/>
<th valign="top" align="center"><bold>N</bold></th>
<th valign="top" align="center"><bold>H</bold></th>
<th valign="top" align="center"><bold>C</bold></th>
<th valign="top" align="center"><bold>N</bold></th>
<th valign="top" align="center"><bold>H</bold></th>
<th valign="top" align="center"><bold>C</bold></th>
<th valign="top" align="center"><bold>N</bold></th>
<th valign="top" align="center"><bold>H</bold></th>
<th valign="top" align="center"><bold>C</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>E</italic>&#x02212;1</sans-serif></sub></td>
<td valign="top" align="center">32</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">29 (&#x02212;3)</td>
<td valign="top" align="center">3 (&#x0002B;3)</td>
<td valign="top" align="center">0 (0)</td>
<td valign="top" align="center">32</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
</tr>
<tr>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>E</italic>&#x02212;2</sans-serif></sub></td>
<td valign="top" align="center">18</td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">16 (&#x02212;2)</td>
<td valign="top" align="center">14 (0)</td>
<td valign="top" align="center">2 (&#x0002B;2)</td>
<td valign="top" align="center">18</td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">0</td>
</tr>
<tr>
<td valign="top" align="left"><italic>I</italic><sub><sans-serif><italic>E</italic>&#x02212;3</sans-serif></sub></td>
<td valign="top" align="center">12</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">12</td>
<td valign="top" align="center">13 (&#x0002B;1)</td>
<td valign="top" align="center">9 (&#x0002B;1)</td>
<td valign="top" align="center">10 (&#x02212;2)</td>
<td valign="top" align="center">12</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">12</td>
</tr></tbody>
</table>
</table-wrap>
<p>As shown in the previous tables, we can confirm that our approach does not interfere with the outputs of the functions. This is ensured by the reversibility provided through difference expansion. When obtaining &#x003B6;, the set of input parameters is restored to its original state. If &#x003B6; does not match the expected value, the watermark is not recognized, and an alternative flow is triggered, allowing <italic>P</italic> to take control and manage the process in a customized manner. Conversely, if the parameters are considered authentic, <italic>F</italic> is executed with authentic inputs, producing accurate results. This conclusion is supported by the fact that none of the experiments resulted in variations in the functions&#x00027; outputs when the parameter authentication approach was applied.</p>
</sec>
<sec>
<label>5.4</label>
<title>Performance and overhead evaluation</title>
<p>This section addresses the third research question: &#x0201C;<italic>Does integrating the approach impose a bounded, predictable overhead in code size and execution time, with runtime scaling linearly in input size across representative workloads?&#x0201D;</italic> Here, we present the results of a set of experiments that evaluate the impact of our approach on the protected software. We report the effects on software size and how processing time is affected. These experiments allow us to quantify the overhead introduced by the watermarking mechanism and assess its practicality in real-world applications. By analyzing both memory footprint and execution time, we provide a comprehensive view of the trade-offs involved in applying our method.</p>
<sec>
<label>5.4.1</label>
<title>Impact on code size</title>
<p>The measured overhead of our approach is small and predictable. <xref ref-type="table" rid="T7">Table 7</xref> reports, for each program <italic>P</italic> wrapping a workload function, the source footprint before and after integrating the parameters authentication proposal. Columns <bold>Size</bold><sub>B</sub> and <bold>Size</bold><sub>W</sub> contains the total source size (in KiB) of the base program and its version with the watermarking engine integrated, &#x00394;<bold>Size</bold> contains the absolute difference between them (which denotes a size increment), and <bold>Overhead</bold> is the percentage of the relative growth obtained according to <xref ref-type="disp-formula" rid="EQ3">Equation 3</xref>.</p>
<disp-formula id="EQ3"><mml:math id="M29"><mml:mrow><mml:mtext>Overhead</mml:mtext><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mtext>Size</mml:mtext></mml:mrow><mml:mtext>W</mml:mtext></mml:msub><mml:msub><mml:mrow><mml:mtext>-Size</mml:mtext></mml:mrow><mml:mtext>B</mml:mtext></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mtext>Size</mml:mtext></mml:mrow><mml:mtext>B</mml:mtext></mml:msub></mml:mrow></mml:mfrac><mml:mo>&#x000D7;</mml:mo><mml:mn>100</mml:mn></mml:mrow></mml:math><label>(3)</label></disp-formula>
<p>The following columns, <bold>SLOC</bold><sub>B</sub> and <bold>SLOC</bold><sub>W</sub>, contain the number of lines of each source code, &#x00394; <bold>SLOC</bold> presents their difference, and <bold>Hook sites</bold> count explicit instrumentation call sites (embed/verify) added in the program. The final record, <bold>Total / Weighted avg</bold>., aggregates sizes and SLOC, and reports the size-weighted overhead percentage.</p>
<table-wrap position="float" id="T7">
<label>Table 7</label>
<caption><p>Source footprint per program before/after integrating the parameter authentication approach.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th valign="top" align="left"><bold>Program (<italic>F</italic> contained)</bold></th>
<th valign="top" align="center"><bold>Size<sub>B</sub></bold></th>
<th valign="top" align="center"><bold>Size<sub>W</sub></bold></th>
<th valign="top" align="center"><bold>&#x00394; Size</bold></th>
<th valign="top" align="center"><bold>Overhead</bold></th>
<th valign="top" align="center"><bold>SLOC<sub>B</sub></bold></th>
<th valign="top" align="center"><bold>SLOC<sub>W</sub></bold></th>
<th valign="top" align="center"><bold>&#x00394; SLOC</bold></th>
<th valign="top" align="center"><bold>Hook sites</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left"><monospace>revenue_app.py</monospace> (<italic>F</italic><sub>A</sub>)</td>
<td valign="top" align="center">5.083008</td>
<td valign="top" align="center">11.097656</td>
<td valign="top" align="center">6.014648</td>
<td valign="top" align="center">118.33%</td>
<td valign="top" align="center">82</td>
<td valign="top" align="center">168</td>
<td valign="top" align="center">86</td>
<td valign="top" align="center">2</td>
</tr>
<tr>
<td valign="top" align="left"><monospace>basket_app.py</monospace> (<italic>F</italic><sub>B</sub>)</td>
<td valign="top" align="center">5.504883</td>
<td valign="top" align="center">11.929688</td>
<td valign="top" align="center">6.424805</td>
<td valign="top" align="center">116.71%</td>
<td valign="top" align="center">93</td>
<td valign="top" align="center">205</td>
<td valign="top" align="center">112</td>
<td valign="top" align="center">2</td>
</tr>
<tr>
<td valign="top" align="left"><monospace>sla_app.py</monospace> (<italic>F</italic><sub>C</sub>)</td>
<td valign="top" align="center">4.491211</td>
<td valign="top" align="center">10.999023</td>
<td valign="top" align="center">6.507812</td>
<td valign="top" align="center">144.90%</td>
<td valign="top" align="center">68</td>
<td valign="top" align="center">177</td>
<td valign="top" align="center">109</td>
<td valign="top" align="center">2</td>
</tr>
<tr>
<td valign="top" align="left"><monospace>churn_app.py</monospace> (<italic>F</italic><sub>D</sub>)</td>
<td valign="top" align="center">4.944336</td>
<td valign="top" align="center">11.014648</td>
<td valign="top" align="center">6.070312</td>
<td valign="top" align="center">122.77%</td>
<td valign="top" align="center">68</td>
<td valign="top" align="center">169</td>
<td valign="top" align="center">101</td>
<td valign="top" align="center">2</td>
</tr>
<tr>
<td valign="top" align="left"><monospace>staffing_app.py</monospace> (<italic>F</italic><sub>E</sub>)</td>
<td valign="top" align="center">5.381836</td>
<td valign="top" align="center">11.390625</td>
<td valign="top" align="center">6.008789</td>
<td valign="top" align="center">111.65%</td>
<td valign="top" align="center">83</td>
<td valign="top" align="center">183</td>
<td valign="top" align="center">100</td>
<td valign="top" align="center">2</td>
</tr>
<tr>
<td valign="top" align="left">Total / Weighted avg.</td>
<td valign="top" align="center">25.405274</td>
<td valign="top" align="center">56.431640</td>
<td valign="top" align="center">31.026366</td>
<td valign="top" align="center">122.13%</td>
<td valign="top" align="center">394</td>
<td valign="top" align="center">902</td>
<td valign="top" align="center">508</td>
<td valign="top" align="center">10</td>
</tr></tbody>
</table>
</table-wrap>
<p>Across all five programs, integrating our approach produces a consistent and bounded footprint: code size rises by about 6 KiB per program, and SLOC increases are similarly stable (median &#x00394;<bold>SLOC</bold> &#x0003D; 101, range 86&#x02013;112). The largest percentage overhead is in <monospace>sla_app.py</monospace> (144.90%) and the smallest in <monospace>staffing_app.py</monospace> (111.65%), a pattern explained by fixed scaffolding added via two hook sites (embed/verify) per program. These results indicate a modular, predictable integration cost and support a positive deployment outlook, the parameters are restored losslessly prior to business logic, so authentic inputs preserve baseline outputs. Notice that the seemingly large percentages mainly reflect very small baselines, making the absolute increment negligible in typical services.</p></sec>
<sec>
<label>5.4.2</label>
<title>Execution time variations</title>
<p>The solution proposed in this work does not have a significant impact on the execution time of each program <italic>P</italic>. Two main aspects of our approach may result in processing time changes for the tasks implemented in <italic>P</italic>: the size of the graph <italic>G</italic> used to represent the watermark and the number of elements in <italic>I</italic> containing watermark hints. We performed a set of experiments, noticing that these are the only two aspects that produce variations in <italic>P</italic> over time, but not in the same manner.</p>
<p>For the first experiments, we measured the time required to encode and decode the watermark hints from <italic>I</italic> while increasing the number of values in the input (denoted by |<italic>I</italic>|). For each input length, we randomly generated the values within the input domain and performed 300 trials per setting using the same watermark hints. This was done to reduce the standard deviation of the reported results. <xref ref-type="fig" rid="F3">Figure 3</xref> shows the results, which consists on the average execution time in microseconds.</p>
<fig position="float" id="F3">
<label>Figure 3</label>
<caption><p>Encoding/decoding time variations of watermark hints as |<italic>I</italic>| increases.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0003.tif">
<alt-text content-type="machine-generated">Line graph showing time in microseconds versus data size. Two lines represent encoding (blue squares) and decoding (red triangles). Both lines show increasing time from data sizes 32 to 160, with encoding consistently taking longer than decoding.</alt-text>
</graphic>
</fig>
<p>We also conducted experiments to measure the time required to build and decode <italic>G</italic> while varying &#x003BC;. Recall that &#x003BC; denotes the length of &#x003B6;<sub>6</sub> (see Algorithms 4, 5). For each selected value of &#x003BC;, we generated a random instance of &#x003B6;<sub>6</sub>, which was then used for encoding and decoding the watermark. For each setting, we performed 300 trials and reported the average time in microseconds. The results are shown in <xref ref-type="fig" rid="F4">Figure 4</xref>.</p>
<fig position="float" id="F4">
<label>Figure 4</label>
<caption><p>Build/decoding time of <italic>G</italic> as as &#x003BC; increases.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0004.tif">
<alt-text content-type="machine-generated">Line graph showing encoding and decoding times against the variable &#x003BC;. Encoding, marked by blue squares, shows a steady increase from 5 to 30 microseconds. Decoding, represented by red triangles, increases at a slower rate from about 1 to 5 microseconds.</alt-text>
</graphic>
</fig>
<p>As shown in <xref ref-type="fig" rid="F3">Figure 3</xref>, reported times increase linearly with the length of <italic>I</italic>, confirming the expected <italic>O</italic>(|<italic>I</italic>|) behavior of the approach for the engine responsible for encoding and decoding the watermark hints from <italic>I</italic>. We can see that decoding is consistently faster than encoding, because it performs a read-restore pass and a small, fixed rebuild, while encoding also allocates and writes modified pairs. The near-constant &#x003BC;<italic>s</italic>/element slopes and the stable encode-decode gap indicate predictable performance and straightforward capacity planning. Overall, the results support the practicality of the approach for runtime parameter authentication: complexity is linear in input size, overhead is stable, and the implementation scales smoothly to large arrays without surprises.</p>
<p>In terms of the time required for encoding and decoding the watermark, <xref ref-type="fig" rid="F4">Figure 4</xref> depicts how both times grow linearly with &#x003BC;, confirming the expected behavior. Decoding is consistently faster because it performs one ring traversal to list nodes plus a constant-step local check per node, whereas encoding allocates the graph nodes and writes two pointers per node. The slight increase in the encoding slope is plausibly due to object allocation, garbage collection, and cache effects; decoding remains near &#x0007E;0.24-0.26&#x003BC;s/node. Overall, the timing profile indicates that watermark graph construction and recovery are fast (sub-millisecond to a few milliseconds for thousands of nodes) and scale predictably, making the approach practical for runtime parameter authentication.</p></sec>
<sec>
<label>5.4.3</label>
<title>Memory overhead analysis</title>
<p>Although the proposed approach relies on the dynamic construction of data structures to encode and verify the watermark during execution, the additional memory footprint introduced by these operations was found to be negligible across all evaluated scenarios. In our experiments, each function received an input array of 32 integers, resulting in watermark structures with a size proportional to the binary representation of the secret code and the number of embedded hints. Even under these conditions, peak memory usage increased by less than 1.5% compared with baseline executions without watermarking. Moreover, because the watermark graph is created only during the parameter verification phase and is released immediately afterward, its lifetime in memory is short and its space complexity scales linearly with the size of the input parameter set. These results confirm that the proposed technique introduces no significant memory overhead and remains suitable for deployment in resource-constrained environments.</p>
</sec>
</sec>
<sec>
<label>5.5</label>
<title>Approach robustness to code transformations</title>
<p>We evaluated the robustness of our approach to code transformations by considering the last research question: &#x0201C;<italic>Are authentication decisions robust to compiler/interpreter optimizations, code obfuscation, common refactoring, and heterogeneous runtime environments?&#x0201D;</italic> First, we checked whether the proposed approach is invariant under a simple interpreter optimization pass by running each program in three modes: default (<monospace>python</monospace>), optimized (<monospace>python -O</monospace>), and docstring-stripping optimized (<monospace>python -OO</monospace>). For each mode, and for each workload program, we execute the pipeline with identical inputs, comparing the results on tampering detection, and encoding/decoding times. The expectation is functional invariance (identical decisions and recovered codes) and only minor timing drift due to bytecode differences.</p>
<p><xref ref-type="fig" rid="F5">Figures 5</xref>&#x02013;<xref ref-type="fig" rid="F8">8</xref> show that, under all three interpreter modes, the encoding and decoding curves retain the expected linear trend in the input size (|<italic>I</italic>| for encoding the watermark hints, and &#x003BC; for the watermark graph <italic>G</italic>). Optimization mostly produces modest timing shifts without changing qualitative behavior. The small deviations shown in the figures are consistent with bytecode changes, allocation and cache effects, and the removal of assertions/docstrings.</p>
<fig position="float" id="F5">
<label>Figure 5</label>
<caption><p>Consequences of code optimization in the time required for encoding the watermark hints as |<italic>I</italic>| increases.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0005.tif">
<alt-text content-type="machine-generated">Line graph comparing execution time in microseconds for different Python optimizations: python, python -O, and python -OO. X-axis shows input size |I| from 32 to 160, and Y-axis shows time from 0 to 900 microseconds. All lines show a similar upward trend.</alt-text>
</graphic>
</fig>
<fig position="float" id="F6">
<label>Figure 6</label>
<caption><p>Consequences of code optimization in the time required for decoding the watermark hints as |<italic>I</italic>| increases.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0006.tif">
<alt-text content-type="machine-generated">Line graph showing execution time versus the variable &#x003BC;. Three lines represent Python without optimization (green circles), with -O optimization (blue squares), and with -OO optimization (red triangles). Time increases linearly from 1 to 8 microseconds as &#x003BC; increases from 5 to 30.</alt-text>
</graphic>
</fig><fig position="float" id="F7">
<label>Figure 7</label>
<caption><p>Consequences of code optimization in the time required for encoding <italic>G</italic> as &#x003BC; increases.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0007.tif">
<alt-text content-type="machine-generated">Line graph showing execution time in microseconds for different Python optimization levels plotted against variable &#x000B5;. Three lines represent Python (green circles), Python -O (blue squares), and Python -OO (red triangles). All lines show an upward trend, indicating increased time with higher &#x000B5; values.</alt-text>
</graphic>
</fig>
<fig position="float" id="F8">
<label>Figure 8</label>
<caption><p>Consequences of code optimization in the time required for decoding <italic>G</italic> as &#x003BC; increases.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="fcomp-07-1643075-g0008.tif">
<alt-text content-type="machine-generated">Line graph showing the execution time in microseconds for Python with different optimization flags over varying data set sizes. Three lines with markers represent plain Python (green circles), Python with -O flag (blue squares), and Python with -OO flag (red triangles). Execution time increases with data size, ranging from 100 to 600 microseconds across sizes 32 to 160.</alt-text>
</graphic>
</fig>
<p>Crucially, optimization does not alter security outcomes. The tampering decisions are identical across all all three interpreter modes. Thus, the approach is robust to common compiler/interpreter optimizations. Its scalability (<italic>O</italic>(|<italic>I</italic>|)/<italic>O</italic>(&#x003BC;)), encode &#x0003E; decode gap, and correctness are preserved, while performance differences remain bounded and predictable. This supports deployability in optimized production configurations without weakening authentication guarantees.</p>
<p>We further assessed robustness to code-level transformations by applying: (i) lexical/minification changes (identifier renaming, removal of whitespace and docstrings), (ii) bytecode wrapping and encryption via a runtime loader, and (iii) native compilation and packaging to an executable. In parallel, we enacted common refactorings that preserve semantics, including function extraction/inlining, module reorganization, dead-code removal, and reorderings that do not affect data or control dependencies. For each transformed artifact, we ran the full pipeline with identical inputs, keys, and PRNG seeds, verifying tampering detection results, effects on the workload functions, and timing profiles. Across all obfuscation levels and refactorings, authentication decisions and recovered tags remained identical to the baseline, and the encode/decode time curves preserved the same linear trend with only bounded drift, mirroring the behavior observed under the <monospace>-O</monospace>/<monospace>-OO</monospace> optimization experiment.</p>
</sec>
<sec>
<label>5.6</label>
<title>Analysis of attack resilience and detection capabilities</title>
<p>In terms of robustness against the major categories of attacks described in Section 2.4, specifically subtractive, distortive, and additive, it is important to emphasize that the proposed approach follows the principles of a fragile watermarking technique. Its primary objective is not to remain undetectable under all possible modifications but rather to act as a sensitive safeguard against unauthorized operations. By detecting even minimal alterations to input parameters, the technique ensures that users are alerted whenever data authenticity may be compromised. <xref ref-type="table" rid="T8">Table 8</xref> summarizes the overall resilience of the approach against these classical attack types.</p>
<table-wrap position="float" id="T8">
<label>Table 8</label>
<caption><p>Effectiveness of the proposed approach against classical software watermarking attacks.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th valign="top" align="left"><bold>Attack</bold></th>
<th valign="top" align="left"><bold>Resilience</bold></th>
<th valign="top" align="left"><bold>Justification</bold></th>
</tr>
<tr>
<th valign="top" align="left"><bold>Subtractive</bold></th>
<th valign="top" align="left"><bold>High</bold></th>
<th valign="top" align="left"><bold>Watermark reconstruction depends on correct parameter values; removal without synchronization is highly unlikely</bold>.</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">Distortive</td>
<td valign="top" align="left">High</td>
<td valign="top" align="left">Code or data modifications cause incorrect watermark generation, triggering authenticity alerts.</td>
</tr>
<tr>
<td valign="top" align="left">Additive</td>
<td valign="top" align="left">High</td>
<td valign="top" align="left">Reconstruction requires an exact bit match; any alteration leads to chaotic output and detection of tampering.</td>
</tr></tbody>
</table>
</table-wrap>
<p>Our solution demonstrates strong resistance to subtractive attacks because the correct watermark cannot be identified or reconstructed unless the precise input parameter values are used to achieve synchronization. Any attempt to remove or bypass the watermarking logic without providing the expected parameters will therefore fail, preventing the protected function from executing successfully.</p>
<p>This same principle underlies the approach&#x00027;s resilience to distortive attacks. Any modification to the software code or data aimed at undermining watermark detection will lead to the construction of an incorrect watermark, automatically triggering a suspicion of tampering. This behavior aligns with the core purpose of fragile watermarking, which is to flag even subtle unauthorized distortions as potential integrity violations.</p>
<p>Finally, the approach also provides strong protection against additive attacks. The reconstruction of the watermark code is only possible when all bits derived from the secret integer code match precisely. As demonstrated in our experiments, altering even a single bit results in a chaotic reconstruction, producing a watermark that no longer corresponds to the original. Consequently, any attempt to embed an additional watermark is treated as tampering and is reliably detected.</p>
</sec>
</sec>
<sec id="s6">
<label>6</label>
<title>Added value of watermarking</title>
<p>Traditional integrity verification mechanisms, such as HMAC, play a fundamental role in ensuring that data remains authentic and unaltered during transmission or storage. These techniques operate by generating a cryptographic digest of a message combined with a secret key, enabling recipients to verify both the source and integrity of the data. However, while highly effective at this level, their protective scope is generally limited to external verification and does not extend into the internal execution behavior of a software system.</p>
<p>The watermarking-based approach presented in this work introduces an additional layer of protection that complements, rather than replaces, conventional integrity checks. Its distinctive advantage lies in the way watermark reconstruction is semantically bound to the program&#x00027;s execution. Rather than verifying data as a static entity, the watermark is reconstructed dynamically based on runtime conditions, input parameter relationships, and control-flow behavior. This tight coupling ensures that even subtle modifications, such as changes to internal variables, manipulation of control structures, or tampering with parameter values, disrupt the reconstruction process and reveal the presence of unauthorized alterations.</p>
<p>Another important benefit of watermarking is its capacity for fine-grained detection. Whereas cryptographic mechanisms typically produce a binary outcome indicating whether data is authentic, watermark-based detection provides insight into how and where the system has been tampered with. Because the watermark is embedded across multiple execution points and depends on consistent computational behavior, even small deviations lead to incorrect reconstruction, signaling potential compromise.</p>
<p>Moreover, watermarking offers resilience against forms of manipulation that conventional mechanisms may fail to detect. Operations such as semantic-preserving code transformations, aggressive compiler optimizations, or runtime reordering of computations do not generally affect cryptographic verification results. Yet, because these transformations often disrupt the conditions required for watermark reconstruction, they are readily detected by the proposed approach. This capability extends integrity protection deeper into the software&#x00027;s execution layer, addressing threats that occur beyond the boundaries of data transmission and storage.</p>
<p>In this way, watermarking provides a complementary defense mechanism that strengthens overall system security. Used alongside traditional cryptographic methods, it establishes a multi-layered protection strategy: one layer ensuring the authenticity of data at the communication level, and another safeguarding the integrity of the computation itself. This combination significantly increases resilience against sophisticated tampering attempts and enhances the trustworthiness of the software environment.</p></sec>
<sec id="s7">
<label>7</label>
<title>Conclusions</title>
<p>In this work, a watermarking-based solution was proposed for checking the authenticity of input parameters in high-level programming languages. The approach is built on an extension of the traditional architecture of data structure dynamic software watermarking techniques. Its validation was carried out in Python, demonstrating that the method can detect violations of input authenticity without requiring significant modifications to the protected software or impacting its performance. Future extensions of the proposed architecture could further increase robustness and security by combining dynamic and static watermarking principles.</p>
<p>The applicability of the proposal presented in this work extends beyond verifying the authenticity of input parameters. It can also enhance security in other contexts by checking the validity of exchanged values. For example, it can be used to verify software licenses, ensuring that only the correct keys can assemble the proper watermark and allow the software&#x00027;s use. Additionally, it can support malware analysis by constructing execution graphs in real-world environments outside of sandboxes. Finally, watermarking based on hardware IDs, environments, or configurations further expands the options for tamper detection. Overall, this approach enables indirect and stealthy verification of input authenticity.</p>
<p>As future work, we plan to enhance the stealthiness and blindness of the proposed approach by addressing issues highlighted in this paper, such as integrating static and dynamic techniques and embedding critical parameters within the protected code.</p></sec>
</body>
<back>
<sec sec-type="data-availability" id="s8">
<title>Data availability statement</title>
<p>The original contributions presented in the study are included in the article/supplementary material, further inquiries can be directed to the corresponding author.</p>
</sec>
<sec sec-type="author-contributions" id="s9">
<title>Author contributions</title>
<p>MP: Writing &#x02013; original draft, Writing &#x02013; review &#x00026; editing, Conceptualization, Methodology, Software, Validation.</p>
</sec>
<sec sec-type="COI-statement" id="conf1">
<title>Conflict of interest</title>
<p>The author declares that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="ai-statement" id="s11">
<title>Generative AI statement</title>
<p>The author(s) declare that no Gen AI was used in the creation of this manuscript.</p>
<p>Any alternative text (alt text) provided alongside figures in this article has been generated by Frontiers with the support of artificial intelligence and reasonable efforts have been made to ensure accuracy, including review by the authors wherever possible. If you identify any issues, please contact us.</p></sec>
<sec sec-type="disclaimer" id="s12">
<title>Publisher&#x00027;s note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<sec id="s13">
<title>Author disclaimer</title>
<p>The views and opinions expressed are solely those of the authors and do not necessarily reflect those of the European Union, nor can the European Union be held responsible for them.</p>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Alitavoli</surname> <given-names>M.</given-names></name> <name><surname>Joafshani</surname> <given-names>M.</given-names></name> <name><surname>Erfanian</surname> <given-names>A.</given-names></name></person-group> (<year>2013</year>). <article-title>&#x0201C;A novel watermarking method for java programs,&#x0201D;</article-title> in <source>Proceedings of the 28th Annual ACM Symposium on Applied Computing</source> (<publisher-loc>New York</publisher-loc>: <publisher-name>ACM</publisher-name>), <fpage>1013</fpage>&#x02013;<lpage>1018</lpage>.</mixed-citation>
</ref>
<ref id="B2">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Alrehily</surname> <given-names>A.</given-names></name> <name><surname>Thayananthan</surname> <given-names>V.</given-names></name></person-group> (<year>2018</year>). <article-title>Computer security and software watermarking based on return-oriented programming</article-title>. <source>Int. J. Comput. Netw. Inf. Secur</source>. <volume>10</volume>, <fpage>28</fpage>&#x02013;<lpage>36</lpage>. doi: <pub-id pub-id-type="doi">10.5815/ijcnis.2018.05.04</pub-id></mixed-citation>
</ref>
<ref id="B3">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Balduzzi</surname> <given-names>M.</given-names></name> <name><surname>Gimenez</surname> <given-names>C. T.</given-names></name> <name><surname>Balzarotti</surname> <given-names>D.</given-names></name> <name><surname>Kirda</surname> <given-names>E.</given-names></name></person-group> (<year>2011</year>). <article-title>&#x0201C;Automated discovery of parameter pollution vulnerabilities in web applications,&#x0201D;</article-title> in <source>Network and Distributed System Security Symposium (NDSS)</source> (<publisher-loc>San Diego, CA, USA</publisher-loc>: <publisher-name>NDSS</publisher-name>).</mixed-citation>
</ref>
<ref id="B4">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Bar&#x000E1;n</surname> <given-names>B.</given-names></name> <name><surname>G&#x000F3;mez</surname> <given-names>S.</given-names></name> <name><surname>Bogarin</surname> <given-names>V.</given-names></name></person-group> (<year>2001</year>). <article-title>&#x0201C;Steganographic watermarking for documents,&#x0201D;</article-title> in <source>Proceedings of the 34th Annual Hawaii International Conference on System Sciences</source> (<publisher-loc>Maui, HI</publisher-loc>: <publisher-name>IEEE</publisher-name>).</mixed-citation>
</ref>
<ref id="B5">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Barker</surname> <given-names>E.</given-names></name> <name><surname>Kelsey</surname> <given-names>J.</given-names></name></person-group> (<year>2012</year>). <article-title>&#x0201C;Recommendation for random number generation using deterministic random bit generators,&#x0201D;</article-title> in <source>Technical Report</source> (<publisher-loc>Gaithersburg, MD</publisher-loc>: <publisher-name>NIST</publisher-name>).</mixed-citation>
</ref>
<ref id="B6">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Barni</surname> <given-names>M.</given-names></name> <name><surname>Bartolini</surname> <given-names>F.</given-names></name> <name><surname>Piva</surname> <given-names>A.</given-names></name></person-group> (<year>2001</year>). <article-title>Improved wavelet-based watermarking through pixel-wise masking</article-title>. <source>IEEE Trans. Image Proc</source>. <volume>10</volume>, <fpage>783</fpage>&#x02013;<lpage>791</lpage>. doi: <pub-id pub-id-type="doi">10.1109/83.918570</pub-id><pub-id pub-id-type="pmid">18249667 </pub-id></mixed-citation>
</ref>
<ref id="B7">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Bellare</surname> <given-names>M.</given-names></name> <name><surname>Canetti</surname> <given-names>R.</given-names></name> <name><surname>Krawczyk</surname> <given-names>H.</given-names></name></person-group> (<year>1996</year>). <article-title>&#x0201C;Keying hash functions for message authentication,&#x0201D;</article-title> in <source>Advances in Cryptology</source> &#x02013; <italic>CRYPTO &#x00027;96</italic> (Cham: Springer), <fpage>1</fpage>&#x02013;<lpage>15</lpage>.</mixed-citation>
</ref>
<ref id="B8">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Bender</surname> <given-names>W.</given-names></name> <name><surname>Gruhl</surname> <given-names>D.</given-names></name> <name><surname>Morimoto</surname> <given-names>N.</given-names></name> <name><surname>Lu</surname> <given-names>A.</given-names></name></person-group> (<year>1996</year>). <article-title>Techniques for data hiding</article-title>. <source>IBM Syst. J</source>. <volume>35</volume>, <fpage>313</fpage>&#x02013;<lpage>336</lpage>. doi: <pub-id pub-id-type="doi">10.1147/sj.353.0313</pub-id></mixed-citation>
</ref>
<ref id="B9">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Bento</surname> <given-names>L. M.</given-names></name> <name><surname>Boccardo</surname> <given-names>D. R.</given-names></name> <name><surname>Machado</surname> <given-names>R. C.</given-names></name> <name><surname>Pereira de S&#x000E1;</surname> <given-names>V. G.</given-names></name> <name><surname>Szwarcfiter</surname> <given-names>J. L.</given-names></name></person-group> (<year>2019</year>). <article-title>Full characterization of a class of graphs tailored for software watermarking</article-title>. <source>Algorithmica</source> <volume>81</volume>, <fpage>2899</fpage>&#x02013;<lpage>2916</lpage>. doi: <pub-id pub-id-type="doi">10.1007/s00453-019-00557-w</pub-id></mixed-citation>
</ref>
<ref id="B10">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Chan</surname> <given-names>P. P.</given-names></name> <name><surname>Hui</surname> <given-names>L. C.</given-names></name> <name><surname>Yiu</surname> <given-names>S.-M.</given-names></name></person-group> (<year>2012</year>). <article-title>Heap graph based software theft detection</article-title>. <source>IEEE Trans. Inform. Forens. Security</source> <volume>8</volume>, <fpage>101</fpage>&#x02013;<lpage>110</lpage>. doi: <pub-id pub-id-type="doi">10.1109/TIFS.2012.2223685</pub-id></mixed-citation>
</ref>
<ref id="B11">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Chen</surname> <given-names>J.</given-names></name> <name><surname>Dai</surname> <given-names>S.</given-names></name> <name><surname>Chen</surname> <given-names>J.</given-names></name></person-group> (<year>2016</year>). <article-title>&#x0201C;An improved software watermarking scheme based on ppct encoding,&#x0201D;</article-title> in <source>2016 9th International Symposium on Computational Intelligence and Design (ISCID)</source> (<publisher-loc>Hangzhou</publisher-loc>: <publisher-name>IEEE</publisher-name>).</mixed-citation>
</ref>
<ref id="B12">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Chen</surname> <given-names>Z.</given-names></name> <name><surname>Jia</surname> <given-names>C.</given-names></name> <name><surname>Xu</surname> <given-names>D.</given-names></name></person-group> (<year>2017</year>). <article-title>&#x0201C;Hidden path: dynamic software watermarking based on control flow obfuscation,&#x0201D;</article-title> in <source>2017 IEEE International Conference on Computational Science and Engineering (CSE) and IEEE International Conference on Embedded and Ubiquitous Computing (EUC)</source> (<publisher-loc>Guangzhou</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>443</fpage>&#x02013;<lpage>450</lpage>.</mixed-citation>
</ref>
<ref id="B13">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Chen</surname> <given-names>Z.</given-names></name> <name><surname>Wang</surname> <given-names>Z.</given-names></name> <name><surname>Jia</surname> <given-names>C.</given-names></name></person-group> (<year>2018</year>). <article-title>Semantic-integrated software watermarking with tamper-proofing</article-title>. <source>Multimed. Tools Appl</source>. <volume>77</volume>, <fpage>11159</fpage>&#x02013;<lpage>11178</lpage>. doi: <pub-id pub-id-type="doi">10.1007/s11042-017-5373-7</pub-id></mixed-citation>
</ref>
<ref id="B14">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Chionis</surname> <given-names>I.</given-names></name> <name><surname>Chroni</surname> <given-names>M.</given-names></name> <name><surname>Nikolopoulos</surname> <given-names>S. D.</given-names></name></person-group> (<year>2014</year>). <article-title>Waterrpg: a graph-based dynamic watermarking model for software protection</article-title>. <source>arXiv</source> [preprint] arXiv:1403.6658. doi: <pub-id pub-id-type="doi">10.48550/arXiv.1403.6658</pub-id></mixed-citation>
</ref>
<ref id="B15">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Chiru</surname> <given-names>C.</given-names></name></person-group> (<year>2005</year>). <article-title>&#x0201C;Dynamic software watermarking by altering the numeric results of the program,&#x0201D;</article-title> in <source>Proceedings of the 11th International Conference on System Theory and Control (SINTES 11)</source> (<publisher-loc>Craiova</publisher-loc>: <publisher-name>Spiru Haret University</publisher-name>).</mixed-citation>
</ref>
<ref id="B16">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Chroni</surname> <given-names>M.</given-names></name> <name><surname>Nikolopoulos</surname> <given-names>S. D.</given-names></name></person-group> (<year>2011</year>). <article-title>Efficient encoding of watermark numbers as reducible permutation graphs</article-title>. <source>arXiv</source> [preprint] arXiv:1110.1194. doi: <pub-id pub-id-type="doi">10.1145/2383276.2383295</pub-id></mixed-citation>
</ref>
<ref id="B17">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Collberg</surname> <given-names>C.</given-names></name> <name><surname>Carter</surname> <given-names>E.</given-names></name> <name><surname>Debray</surname> <given-names>S.</given-names></name> <name><surname>Huntwork</surname> <given-names>A.</given-names></name> <name><surname>Kececioglu</surname> <given-names>J.</given-names></name> <name><surname>Linn</surname> <given-names>C.</given-names></name> <etal/></person-group>. (<year>2004a</year>). <article-title>&#x0201C;Dynamic path-based software watermarking,&#x0201D;</article-title> in <source>Proceedings of the ACM SIGPLAN 2004 Conference on Programming Language Design and Implementation</source> (<publisher-loc>New York</publisher-loc>: <publisher-name>ACM</publisher-name>), <fpage>107</fpage>&#x02013;<lpage>118</lpage>.</mixed-citation>
</ref>
<ref id="B18">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Collberg</surname> <given-names>C.</given-names></name> <name><surname>Jha</surname> <given-names>S.</given-names></name> <name><surname>Tomko</surname> <given-names>D.</given-names></name> <name><surname>Wang</surname> <given-names>H.</given-names></name></person-group> (<year>2004b</year>). <source>UWStego: A General Architecture for Software Watermarking</source>.</mixed-citation>
</ref>
<ref id="B19">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Collberg</surname> <given-names>C.</given-names></name> <name><surname>Myles</surname> <given-names>G.</given-names></name> <name><surname>Huntwork</surname> <given-names>A.</given-names></name></person-group> (<year>2003</year>). <article-title>Sandmark-a tool for software protection research</article-title>. <source>IEEE Security Privacy</source> <volume>1</volume>, <fpage>40</fpage>&#x02013;<lpage>49</lpage>. doi: <pub-id pub-id-type="doi">10.1109/MSECP.2003.1219058</pub-id></mixed-citation>
</ref>
<ref id="B20">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Collberg</surname> <given-names>C.</given-names></name> <name><surname>Thomborson</surname> <given-names>C.</given-names></name></person-group> (<year>1998</year>). <article-title>&#x0201C;On the limits of software watermarking,&#x0201D;</article-title> in <source>Technical Report</source> (<publisher-loc>Auckland</publisher-loc>: <publisher-name>Department of Computer Science, The University of Auckland</publisher-name>).</mixed-citation>
</ref>
<ref id="B21">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Collberg</surname> <given-names>C.</given-names></name> <name><surname>Thomborson</surname> <given-names>C.</given-names></name></person-group> (<year>1999</year>). <article-title>&#x0201C;Software watermarking: Models and dynamic embeddings,&#x0201D;</article-title> in <source>Proceedings of the 26th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages</source>, <fpage>311</fpage>&#x02013;<lpage>324</lpage>.</mixed-citation>
</ref>
<ref id="B22">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Collberg</surname> <given-names>C. S.</given-names></name> <name><surname>Thomborson</surname> <given-names>C.</given-names></name> <name><surname>Townsend</surname> <given-names>G. M.</given-names></name></person-group> (<year>2007</year>). <article-title>Dynamic graph-based software fingerprinting</article-title>. <source>ACM Trans. Program. Lang. Syst</source>. <volume>29</volume>:<fpage>35</fpage>-es. doi: <pub-id pub-id-type="doi">10.1145/1286821.1286826</pub-id></mixed-citation>
</ref>
<ref id="B23">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Cox</surname> <given-names>I.</given-names></name> <name><surname>Miller</surname> <given-names>M.</given-names></name> <name><surname>Bloom</surname> <given-names>J.</given-names></name> <name><surname>Fridrich</surname> <given-names>J.</given-names></name> <name><surname>Kalker</surname> <given-names>T.</given-names></name></person-group> (<year>2007</year>). <source>Digital Watermarking and Steganography</source>. <publisher-loc>San Francisco, CA</publisher-loc>: <publisher-name>Morgan Kaufmann Publishers Inc</publisher-name>.</mixed-citation>
</ref>
<ref id="B24">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Cox</surname> <given-names>I. J.</given-names></name> <name><surname>Miller</surname> <given-names>M. L.</given-names></name> <name><surname>Bloom</surname> <given-names>J. A.</given-names></name> <name><surname>Fridrich</surname> <given-names>J.</given-names></name> <name><surname>Kalker</surname> <given-names>T.</given-names></name></person-group> (<year>2008</year>). <source>Digital Watermarking</source>. <publisher-loc>Burlington, MA</publisher-loc>: <publisher-name>Morgan Kaufmann Publishers</publisher-name>, <fpage>56</fpage>&#x02013;<lpage>59</lpage>.</mixed-citation>
</ref>
<ref id="B25">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Curran</surname> <given-names>D.</given-names></name> <name><surname>Cinneide</surname> <given-names>M.</given-names></name> <name><surname>Hurley</surname> <given-names>N.</given-names></name> <name><surname>Silvestre</surname> <given-names>G.</given-names></name></person-group> (<year>2004</year>). <article-title>&#x0201C;Dependency in software watermarking,&#x0201D;</article-title> in <source>Proceedings. 2004 International Conference on Information and Communication Technologies: From Theory to Applications</source> (<publisher-loc>Damascus</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>569</fpage>&#x02013;<lpage>570</lpage>.</mixed-citation>
</ref>
<ref id="B26">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Dalla Preda</surname> <given-names>M.</given-names></name> <name><surname>Giacobazzi</surname> <given-names>R.</given-names></name> <name><surname>Visentini</surname> <given-names>E.</given-names></name></person-group> (<year>2008</year>). <article-title>&#x0201C;Hiding software watermarks in loop structures,&#x0201D;</article-title> in <source>Static Analysis: 15th International Symposium, SAS 2008</source> (<publisher-loc>Valencia, Spain</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>174</fpage>&#x02013;<lpage>188</lpage>.</mixed-citation>
</ref>
<ref id="B27">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Dalla Preda</surname> <given-names>M.</given-names></name> <name><surname>Ianni</surname> <given-names>M.</given-names></name></person-group> (<year>2024</year>). <article-title>Exploiting number theory for dynamic software watermarking</article-title>. <source>J. Comp. Virol. Hack. Tech</source>. <volume>20</volume>, <fpage>41</fpage>&#x02013;<lpage>51</lpage>. doi: <pub-id pub-id-type="doi">10.1007/s11416-023-00489-8</pub-id></mixed-citation>
</ref>
<ref id="B28">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Dalla Preda</surname> <given-names>M.</given-names></name> <name><surname>Pasqua</surname> <given-names>M.</given-names></name></person-group> (<year>2019</year>). <article-title>Semantics-based software watermarking by abstract interpretation</article-title>. <source>Mathem. Struct. Comp. Sci</source>. <volume>29</volume>, <fpage>339</fpage>&#x02013;<lpage>388</lpage>. doi: <pub-id pub-id-type="doi">10.1017/S0960129518000038</pub-id></mixed-citation>
</ref>
<ref id="B29">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Davidson</surname> <given-names>R. I.</given-names></name> <name><surname>Myhrvold</surname> <given-names>N.</given-names></name></person-group> (<year>1996</year>). <source>Method and System for Generating and Auditing a Signature for a Computer Program</source>.</mixed-citation>
</ref>
<ref id="B30">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Desmedt</surname> <given-names>Y.</given-names></name></person-group> (<year>2025</year>). <article-title>&#x0201C;Secret sharing and shamir threshold scheme,&#x0201D;</article-title> in <source>Encyclopedia of Cryptography, Security and Privacy</source> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>2212</fpage>&#x02013;<lpage>2216</lpage>.</mixed-citation>
</ref>
<ref id="B31">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Dey</surname> <given-names>A.</given-names></name> <name><surname>Bhattacharya</surname> <given-names>S.</given-names></name> <name><surname>Chaki</surname> <given-names>N.</given-names></name></person-group> (<year>2019</year>). <article-title>Software watermarking: progress and challenges</article-title>. <source>INAE Letters</source> <volume>4</volume>, <fpage>65</fpage>&#x02013;<lpage>75</lpage>. doi: <pub-id pub-id-type="doi">10.1007/s41403-018-0058-8</pub-id></mixed-citation>
</ref>
<ref id="B32">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Dey</surname> <given-names>A.</given-names></name> <name><surname>Ghosh</surname> <given-names>S.</given-names></name> <name><surname>Bhattacharya</surname> <given-names>S.</given-names></name> <name><surname>Chaki</surname> <given-names>N.</given-names></name></person-group> (<year>2020</year>). <article-title>A robust software watermarking framework using shellcode</article-title>. <source>Multimed. Tools Appl</source>. <volume>79</volume>, <fpage>2555</fpage>&#x02013;<lpage>2576</lpage>. doi: <pub-id pub-id-type="doi">10.1007/s11042-019-08372-9</pub-id></mixed-citation>
</ref>
<ref id="B33">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Durstenfeld</surname> <given-names>R.</given-names></name></person-group> (<year>1964</year>). <article-title>Algorithm 235: Random permutation</article-title>. <source>Commun. ACM</source> <volume>7</volume>:<fpage>420</fpage>. doi: <pub-id pub-id-type="doi">10.1145/364520.364540</pub-id></mixed-citation>
</ref>
<ref id="B34">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Fawcett</surname> <given-names>T.</given-names></name></person-group> (<year>2006</year>). <article-title>An introduction to ROC analysis</article-title>. <source>Pattern Recognit. Lett</source>. <volume>27</volume>, <fpage>861</fpage>&#x02013;<lpage>874</lpage>. doi: <pub-id pub-id-type="doi">10.1016/j.patrec.2005.10.010</pub-id></mixed-citation>
</ref>
<ref id="B35">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Gupta</surname> <given-names>G.</given-names></name> <name><surname>Pieprzyk</surname> <given-names>J.</given-names></name></person-group> (<year>2006</year>). <article-title>&#x0201C;A low-cost attack on branch-based software watermarking schemes,&#x0201D;</article-title> in <source>Digital Watermarking: 5th International Workshop, IWDW 2006</source> (<publisher-loc>Jeju Island, Korea</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>282</fpage>&#x02013;<lpage>293</lpage>.</mixed-citation>
</ref>
<ref id="B36">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Gupta</surname> <given-names>G.</given-names></name> <name><surname>Pieprzyk</surname> <given-names>J.</given-names></name></person-group> (<year>2007</year>). <article-title>Software watermarking resilient to debugging attacks</article-title>. <source>J. Multimed</source>. <volume>2</volume>, <fpage>10</fpage>&#x02013;<lpage>16</lpage>. doi: <pub-id pub-id-type="doi">10.4304/jmm.2.2.10-16</pub-id></mixed-citation>
</ref>
<ref id="B37">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Gupta</surname> <given-names>G.</given-names></name> <name><surname>Pieprzyk</surname> <given-names>J.</given-names></name></person-group> (<year>2009</year>). <article-title>Reversible and blind database watermarking using difference expansion</article-title>. <source>Int. J. Digital Crime Forensics (IJDCF)</source> <volume>1</volume>, <fpage>42</fpage>&#x02013;<lpage>54</lpage>. doi: <pub-id pub-id-type="doi">10.4018/jdcf.2009040104</pub-id></mixed-citation>
</ref>
<ref id="B38">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Halder</surname> <given-names>R.</given-names></name> <name><surname>Pal</surname> <given-names>S.</given-names></name> <name><surname>Cortesi</surname> <given-names>A.</given-names></name></person-group> (<year>2010</year>). <article-title>Watermarking techniques for relational databases: Survey, classification and comparison</article-title>. <source>J. Univer. Comp. Sci</source>. <volume>16</volume>, <fpage>3164</fpage>&#x02013;<lpage>3190</lpage>.</mixed-citation>
</ref>
<ref id="B39">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Hamilton</surname> <given-names>J.</given-names></name> <name><surname>Danicic</surname> <given-names>S.</given-names></name></person-group> (<year>2010</year>). <article-title>&#x0201C;An evaluation of static java bytecode watermarking,&#x0201D;</article-title> in <source>Proceedings of the International Conference on Computer Science and Applications (ICCSA&#x00027;10), The World Congress on Engineering and Computer Science (WCECS&#x00027;10)</source> (<publisher-loc>San Francisco</publisher-loc>: <publisher-name>ICCSA</publisher-name>).</mixed-citation>
</ref>
<ref id="B40">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Katz</surname> <given-names>J.</given-names></name> <name><surname>Menezes</surname> <given-names>A. J.</given-names></name> <name><surname>Van Oorschot</surname> <given-names>P. C.</given-names></name> <name><surname>Vanstone</surname> <given-names>S. A.</given-names></name></person-group> (<year>1996</year>). <source>Handbook of Applied Cryptography</source>. <publisher-loc>Boca Raton, FL</publisher-loc>: <publisher-name>CRC Press</publisher-name>.</mixed-citation>
</ref>
<ref id="B41">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Katzenbeisser</surname> <given-names>S.</given-names></name> <name><surname>Petitcolas</surname> <given-names>F.</given-names></name></person-group> (<year>2016</year>). <source>Information Hiding</source>. <publisher-loc>Norwood</publisher-loc>: <publisher-name>Artech House</publisher-name>.</mixed-citation>
</ref>
<ref id="B42">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Ke-xin</surname> <given-names>Y.</given-names></name> <name><surname>Ke</surname> <given-names>Y.</given-names></name> <name><surname>Jian-qi</surname> <given-names>Z.</given-names></name></person-group> (<year>2009</year>). <article-title>&#x0201C;A robust dynamic software watermarking,&#x0201D;</article-title> in <source>2009 International Conference on Information Technology and Computer Science</source> (<publisher-loc>Kiev</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>15</fpage>&#x02013;<lpage>18</lpage>.</mixed-citation>
</ref>
<ref id="B43">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Kim</surname> <given-names>T.</given-names></name> <name><surname>Jang</surname> <given-names>Y.</given-names></name> <name><surname>Lee</surname> <given-names>C.</given-names></name> <name><surname>Koo</surname> <given-names>H.</given-names></name> <name><surname>Kim</surname> <given-names>H.</given-names></name></person-group> (<year>2023</year>). <article-title>&#x0201C;SmartMark: software watermarking scheme for smart contracts,&#x0201D;</article-title> in <source>2023 IEEE/ACM 45th International Conference on Software Engineering (ICSE)</source> (<publisher-loc>Melbourne</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>283</fpage>&#x02013;<lpage>294</lpage>.</mixed-citation>
</ref>
<ref id="B44">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Knuth</surname> <given-names>D. E.</given-names></name></person-group> (<year>1997</year>). <source>The Art of Computer Programming, Volume 2: Seminumerical Algorithms</source>. <publisher-loc>Boston, MA</publisher-loc>: <publisher-name>Addison-Wesley</publisher-name>.</mixed-citation>
</ref>
<ref id="B45">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Krawczyk</surname> <given-names>H.</given-names></name> <name><surname>Bellare</surname> <given-names>M.</given-names></name> <name><surname>Canetti</surname> <given-names>R.</given-names></name></person-group> (<year>1997</year>). <article-title>&#x0201C;Hmac: Keyed-hashing for message authentication,&#x0201D;</article-title> in <source>RFC 2104, Internet Engineering Task Force</source>.</mixed-citation>
</ref>
<ref id="B46">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Krawczyk</surname> <given-names>H.</given-names></name> <name><surname>Eronen</surname> <given-names>P.</given-names></name></person-group> (<year>2010</year>). <article-title>&#x0201C;HMAC-based extract-and-expand key derivation function (HKDF),&#x0201D;</article-title> in <source>RFC 5869, IETF</source>.</mixed-citation>
</ref>
<ref id="B47">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Kumar</surname> <given-names>K.</given-names></name> <name><surname>Kehar</surname> <given-names>V.</given-names></name> <name><surname>Kaur</surname> <given-names>P.</given-names></name></person-group> (<year>2015</year>). <article-title>A comparative analysis of static java bytecode software watermarking algorithms</article-title>. <source>Afric. J Comput ICT</source> <volume>8</volume>, <fpage>201</fpage>&#x02013;<lpage>208</lpage>.</mixed-citation>
</ref>
<ref id="B48">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Lee</surname> <given-names>T.</given-names></name> <name><surname>Hong</surname> <given-names>S.</given-names></name> <name><surname>Ahn</surname> <given-names>J.</given-names></name> <name><surname>Hong</surname> <given-names>I.</given-names></name> <name><surname>Lee</surname> <given-names>H.</given-names></name> <name><surname>Yun</surname> <given-names>S.</given-names></name> <etal/></person-group>. (<year>2023</year>). <article-title>Who wrote this code? watermarking for code generation</article-title>. <source>arXiv</source> [preprint] arXiv:2305.15060. doi: <pub-id pub-id-type="doi">10.18653/v1/2024.acl-long.268</pub-id></mixed-citation>
</ref>
<ref id="B49">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Lemire</surname> <given-names>D.</given-names></name></person-group> (<year>2019</year>). Fast random integer generation in an interval. ACM Trans. Model. Comp. Simulat. (TOMACS) 29, <volume>3</volume>:<fpage>1</fpage>&#x02013;<lpage>3</lpage>:12. doi: <pub-id pub-id-type="doi">10.1145/3230636</pub-id></mixed-citation>
</ref>
<ref id="B50">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Ma</surname> <given-names>H.</given-names></name> <name><surname>Jia</surname> <given-names>C.</given-names></name> <name><surname>Li</surname> <given-names>S.</given-names></name> <name><surname>Zheng</surname> <given-names>W.</given-names></name> <name><surname>Wu</surname> <given-names>D.</given-names></name></person-group> (<year>2019</year>). <article-title>Xmark: dynamic software watermarking using collatz conjecture</article-title>. <source>IEEE Trans. Inform. Forens. Secur</source>. <volume>14</volume>, <fpage>2859</fpage>&#x02013;<lpage>2874</lpage>. doi: <pub-id pub-id-type="doi">10.1109/TIFS.2019.2908071</pub-id></mixed-citation>
</ref>
<ref id="B51">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Ma</surname> <given-names>H.</given-names></name> <name><surname>Lu</surname> <given-names>K.</given-names></name> <name><surname>Ma</surname> <given-names>X.</given-names></name> <name><surname>Zhang</surname> <given-names>H.</given-names></name> <name><surname>Jia</surname> <given-names>C.</given-names></name> <name><surname>Gao</surname> <given-names>D.</given-names></name></person-group> (<year>2015</year>). <article-title>&#x0201C;Software watermarking using return-oriented programming,&#x0201D;</article-title> in <source>Proceedings of the 10th ACM Symposium on Information, Computer and Communications Security</source>, <fpage>369</fpage>&#x02013;<lpage>380</lpage>.</mixed-citation>
</ref>
<ref id="B52">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Madou</surname> <given-names>M.</given-names></name> <name><surname>Anckaert</surname> <given-names>B.</given-names></name> <name><surname>De Sutter</surname> <given-names>B.</given-names></name> <name><surname>De Bosschere</surname> <given-names>K.</given-names></name></person-group> (<year>2005</year>). <article-title>&#x0201C;Hybrid static-dynamic attacks against software protection mechanisms,&#x0201D;</article-title> in <source>Proceedings of the 5th ACM Workshop on Digital Rights Management</source>, <fpage>75</fpage>&#x02013;<lpage>82</lpage>.</mixed-citation>
</ref>
<ref id="B53">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Myles</surname> <given-names>G.</given-names></name> <name><surname>Collberg</surname> <given-names>C.</given-names></name></person-group> (<year>2006</year>). <article-title>Software watermarking via opaque predicates: Implementation, analysis, and attacks</article-title>. <source>Electronic Commerce Res</source>. <volume>6</volume>, <fpage>155</fpage>&#x02013;<lpage>171</lpage>. doi: <pub-id pub-id-type="doi">10.1007/s10660-006-6955-z</pub-id></mixed-citation>
</ref>
<ref id="B54">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Myles</surname> <given-names>G.</given-names></name> <name><surname>Jin</surname> <given-names>H.</given-names></name></person-group> (<year>2005</year>). <article-title>&#x0201C;Self-validating branch-based software watermarking,&#x0201D;</article-title> in <source>International Workshop on Information Hiding</source> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>342</fpage>&#x02013;<lpage>356</lpage>.</mixed-citation>
</ref>
<ref id="B55">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Palsberg</surname> <given-names>J.</given-names></name> <name><surname>Krishnaswamy</surname> <given-names>S.</given-names></name> <name><surname>Kwon</surname> <given-names>M.</given-names></name> <name><surname>Ma</surname> <given-names>D.</given-names></name> <name><surname>Shao</surname> <given-names>Q.</given-names></name> <name><surname>Zhang</surname> <given-names>Y.</given-names></name></person-group> (<year>2000</year>). <article-title>&#x0201C;Experience with software watermarking,&#x0201D;</article-title> in <source>Proceedings 16th Annual Computer Security Applications Conference (ACSAC&#x00027;00)</source> (<publisher-loc>New Orleans</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>308</fpage>&#x02013;<lpage>316</lpage>.</mixed-citation>
</ref>
<ref id="B56">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Patel</surname> <given-names>S. J.</given-names></name> <name><surname>Pattewar</surname> <given-names>T. M.</given-names></name></person-group> (<year>2014</year>). <article-title>&#x0201C;Software birthmark based theft detection of javascript programs using agglomerative clustering and frequent subgraph mining,&#x0201D;</article-title> in <source>2014 International Conference on Embedded Systems (ICES)</source> (<publisher-loc>Coimbatore</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>63</fpage>&#x02013;<lpage>68</lpage>.</mixed-citation>
</ref>
<ref id="B57">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>P&#x000E9;rez Gort</surname> <given-names>M. L.</given-names></name> <name><surname>Feregrino Uribe</surname> <given-names>C.</given-names></name> <name><surname>Nummenmaa</surname> <given-names>J.</given-names></name></person-group> (<year>2017</year>). <article-title>&#x0201C;A minimum distortion: High capacity watermarking technique for relational data,&#x0201D;</article-title> in <source>Proceedings of the 5th ACM Workshop on Information Hiding and Multimedia Security</source>, <fpage>111</fpage>&#x02013;<lpage>121</lpage>.</mixed-citation>
</ref>
<ref id="B58">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>P&#x000E9;rez Gort</surname> <given-names>M. L.</given-names></name> <name><surname>Feregrino-Uribe</surname> <given-names>C.</given-names></name> <name><surname>Cortesi</surname> <given-names>A.</given-names></name> <name><surname>Fernandez-Pena</surname> <given-names>F.</given-names></name></person-group> (<year>2020</year>). <article-title>A double fragmentation approach for improving virtual primary key-based watermark synchronization</article-title>. <source>IEEE Access</source> <volume>8</volume>, <fpage>61504</fpage>&#x02013;<lpage>61516</lpage>. doi: <pub-id pub-id-type="doi">10.1109/ACCESS.2020.2979659</pub-id></mixed-citation>
</ref>
<ref id="B59">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>P&#x000E9;rez Gort</surname> <given-names>M. L.</given-names></name> <name><surname>Olliaro</surname> <given-names>M.</given-names></name> <name><surname>Cortesi</surname> <given-names>A.</given-names></name></person-group> (<year>2021</year>). <article-title>&#x0201C;A quantile-based watermarking approach for distortion minimization,&#x0201D;</article-title> in <source>International Symposium on Foundations and Practice of Security</source> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>162</fpage>&#x02013;<lpage>176</lpage>.</mixed-citation>
</ref>
<ref id="B60">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Pieprzyk</surname> <given-names>J.</given-names></name></person-group> (<year>1999</year>). <article-title>&#x0201C;Fingerprints for copyright software protection,&#x0201D;</article-title> in <source>Information Security: Second International Workshop, ISW&#x00027;99</source> (<publisher-loc>Kuala Lumpur</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>178</fpage>&#x02013;<lpage>190</lpage>.</mixed-citation>
</ref>
<ref id="B61">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Pornin</surname> <given-names>T.</given-names></name></person-group> (<year>2013</year>). <article-title>&#x0201C;Deterministic usage of the digital signature algorithm (DSA) and elliptic curve digital signature algorithm (ECDSA),&#x0201D;</article-title> in <source>RFC 6979, IETF</source>.</mixed-citation>
</ref>
<ref id="B62">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Provos</surname> <given-names>N.</given-names></name> <name><surname>Honeyman</surname> <given-names>P.</given-names></name></person-group> (<year>2003</year>). <article-title>Hide and seek: an introduction to steganography</article-title>. <source>IEEE Security Privacy</source> <volume>1</volume>, <fpage>32</fpage>&#x02013;<lpage>44</lpage>. doi: <pub-id pub-id-type="doi">10.1109/MSECP.2003.1203220</pub-id></mixed-citation>
</ref>
<ref id="B63">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Sion</surname> <given-names>R.</given-names></name> <name><surname>Atallah</surname> <given-names>M.</given-names></name> <name><surname>Prabhakar</surname> <given-names>S.</given-names></name></person-group> (<year>2003</year>). <article-title>&#x0201C;Rights protection for relational data,&#x0201D;</article-title> in <source>Proceedings of the 2003 ACM SIGMOD international conference on Management of data</source>, <fpage>98</fpage>&#x02013;<lpage>109</lpage>.</mixed-citation>
</ref>
<ref id="B64">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Sokolova</surname> <given-names>M.</given-names></name> <name><surname>Lapalme</surname> <given-names>G.</given-names></name></person-group> (<year>2009</year>). <article-title>A systematic analysis of performance measures for classification tasks</article-title>. <source>Inform. Proc. Managem</source>. <volume>45</volume>, <fpage>427</fpage>&#x02013;<lpage>437</lpage>. doi: <pub-id pub-id-type="doi">10.1016/j.ipm.2009.03.002</pub-id></mixed-citation>
</ref>
<ref id="B65">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Stern</surname> <given-names>J. P.</given-names></name> <name><surname>Hachez</surname> <given-names>G.</given-names></name> <name><surname>Koeune</surname> <given-names>F.</given-names></name> <name><surname>Quisquater</surname> <given-names>J.-J.</given-names></name></person-group> (<year>2000</year>). <article-title>&#x0201C;Robust object watermarking: application to code,&#x0201D;</article-title> in <source>Information Hiding: Third International Workshop, IH&#x00027;99</source> (<publisher-loc>Dresden</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>368</fpage>&#x02013;<lpage>378</lpage>.</mixed-citation>
</ref>
<ref id="B66">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Tamada</surname> <given-names>H.</given-names></name> <name><surname>Okamoto</surname> <given-names>K.</given-names></name> <name><surname>Nakamura</surname> <given-names>M.</given-names></name> <name><surname>Monden</surname> <given-names>A.</given-names></name> <name><surname>Matsumoto</surname> <given-names>K.</given-names></name></person-group> (<year>2004</year>). <article-title>&#x0201C;Dynamic software birthmarks to detect the theft of windows applications,&#x0201D;</article-title> in <source>International Symposium on Future Software Technology, volume 20</source>.</mixed-citation>
</ref>
<ref id="B67">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Thomborson</surname> <given-names>C.</given-names></name> <name><surname>Nagra</surname> <given-names>J.</given-names></name> <name><surname>Somaraju</surname> <given-names>R.</given-names></name> <name><surname>He</surname> <given-names>C.</given-names></name></person-group> (<year>2004</year>). <article-title>&#x0201C;Tamper-proofing software watermarks,&#x0201D;</article-title> in <source>Proceedings of the Second Workshop on Australasian Information Security, Data Mining and Web Intelligence, and Software Internationalisation-Volume 32</source>, <fpage>27</fpage>&#x02013;<lpage>36</lpage>.</mixed-citation>
</ref>
<ref id="B68">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Tian</surname> <given-names>J.</given-names></name></person-group> (<year>2003</year>). <article-title>Reversible data embedding using a difference expansion</article-title>. <source>IEEE Trans. Circuits Syst. Video Technol</source>. <volume>13</volume>, <fpage>890</fpage>&#x02013;<lpage>896</lpage>. doi: <pub-id pub-id-type="doi">10.1109/TCSVT.2003.815962</pub-id></mixed-citation>
</ref>
<ref id="B69">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Tian</surname> <given-names>Z.</given-names></name> <name><surname>Zheng</surname> <given-names>Q.</given-names></name> <name><surname>Liu</surname> <given-names>T.</given-names></name> <name><surname>Fan</surname> <given-names>M.</given-names></name> <name><surname>Zhuang</surname> <given-names>E.</given-names></name> <name><surname>Yang</surname> <given-names>Z.</given-names></name></person-group> (<year>2015</year>). <article-title>Software plagiarism detection with birthmarks based on dynamic key instruction sequences</article-title>. <source>IEEE Trans. Softw. Eng</source>. <volume>41</volume>, <fpage>1217</fpage>&#x02013;<lpage>1235</lpage>. doi: <pub-id pub-id-type="doi">10.1109/TSE.2015.2454508</pub-id></mixed-citation>
</ref>
<ref id="B70">
<mixed-citation publication-type="book"><person-group person-group-type="author"><name><surname>Vivekananthan</surname> <given-names>V.</given-names></name> <name><surname>Praveen</surname> <given-names>K.</given-names></name> <name><surname>Sethumadhavan</surname> <given-names>M.</given-names></name></person-group> (<year>2021</year>). <article-title>&#x0201C;Dynamic watermarking using python ast,&#x0201D;</article-title> in <source>Proceedings of International Conference on Advances in Computer Engineering and Communication Systems: ICACECS 2020</source> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>219</fpage>&#x02013;<lpage>231</lpage>.</mixed-citation>
</ref>
<ref id="B71">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Wang</surname> <given-names>Y.</given-names></name> <name><surname>Gong</surname> <given-names>D.</given-names></name> <name><surname>Lu</surname> <given-names>B.</given-names></name> <name><surname>Xiang</surname> <given-names>F.</given-names></name> <name><surname>Liu</surname> <given-names>F.</given-names></name></person-group> (<year>2018</year>). <article-title>Exception handling-based dynamic software watermarking</article-title>. <source>IEEE Access</source> <volume>6</volume>, <fpage>8882</fpage>&#x02013;<lpage>8889</lpage>. doi: <pub-id pub-id-type="doi">10.1109/ACCESS.2018.2810058</pub-id></mixed-citation>
</ref>
<ref id="B72">
<mixed-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Wu</surname> <given-names>B.</given-names></name> <name><surname>Chen</surname> <given-names>K.</given-names></name> <name><surname>He</surname> <given-names>Y.</given-names></name> <name><surname>Chen</surname> <given-names>G.</given-names></name> <name><surname>Zhang</surname> <given-names>W.</given-names></name> <name><surname>Yu</surname> <given-names>N.</given-names></name></person-group> (<year>2024</year>). <article-title>&#x0201C;Codewmbench: An automated benchmark for code watermarking evaluation,&#x0201D;</article-title> in <source>Proceedings of the ACM Turing Award Celebration Conference-China 2024</source>, <fpage>120</fpage>&#x02013;<lpage>125</lpage>.</mixed-citation>
</ref>
</ref-list>
<fn-group>
<fn fn-type="custom" custom-type="edited-by" id="fn0008">
<p>Edited by: <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2878949/overview">Vincenzo Arceri</ext-link>, University of Parma, Italy</p>
</fn>
<fn fn-type="custom" custom-type="reviewed-by" id="fn0009">
<p>Reviewed by: <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2906702/overview">Tarun Kumar Vashishth</ext-link>, IIMT University, India</p>
<p><ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/3101582/overview">Lucila Bento</ext-link>, Rio de Janeiro State University, Brazil</p>
</fn>
</fn-group>
<fn-group>
<fn id="fn0001"><label>1</label><p>&#x0201C;<ext-link ext-link-type="uri" xlink:href="https://Panerabread.com">https://Panerabread.com</ext-link> <italic>Leaks Millions of Customer Records&#x0201D;</italic>, KrebsOnSecurity, available at <ext-link ext-link-type="uri" xlink:href="https://krebsonsecurity.com/2018/04/panerabread-com-leaks-millions-of-customer-records/">https://krebsonsecurity.com/2018/04/panerabread-com-leaks-millions-of-customer-records/</ext-link>.</p></fn>
<fn id="fn0002"><label>2</label><p>&#x0201C;<italic>Optus to answer privacy court case stemming from 2022 data breach&#x0201D;</italic>, by Ry Crozier, available at <ext-link ext-link-type="uri" xlink:href="https://www.itnews.com.au/news/optus-to-answer-privacy-court-case-stemming-from-2022-data-breach-619417">https://www.itnews.com.au/news/optus-to-answer-privacy-court-case-stemming-from-2022-data-breach-619417</ext-link>.</p></fn>
<fn id="fn0003"><label>3</label><p>&#x0201C;<italic>Australian Information Commissioner takes civil penalty action against Optus&#x0201D;</italic>, Office of the Australian Information Commissioner (OAIC), available at <ext-link ext-link-type="uri" xlink:href="https://www.oaic.gov.au/news/media-centre/australian-information-commissioner-takes-civil-penalty-action-against-optus">https://www.oaic.gov.au/news/media-centre/australian-information-commissioner-takes-civil-penalty-action-against-optus</ext-link>.</p></fn>
<fn id="fn0004"><label>4</label><p>&#x0201C;<italic>Hunting the 6 most common price manipulation vulnerabilities in e-commerce&#x0201D;</italic>, Intigriti, available at <ext-link ext-link-type="uri" xlink:href="https://www.intigriti.com/blog/news/top-6-price-manipulation-vulnerabilities-ecommerce">https://www.intigriti.com/blog/news/top-6-price-manipulation-vulnerabilities-ecommerce</ext-link>.</p></fn>
<fn id="fn0005"><label>5</label><p>Some techniques define the watermark encoder and decoder, to build <italic>W</italic> before its embedding and after its extraction, respectively (<xref ref-type="bibr" rid="B9">Bento et al., 2019</xref>).</p></fn>
<fn id="fn0006"><label>6</label><p>Watermark synchronization refers to both the embedding and extraction processes together (<xref ref-type="bibr" rid="B58">P&#x000E9;rez Gort et al., 2020</xref>).</p></fn>
<fn id="fn0007"><label>7</label><p>More details about the way difference expansion works are given in (<xref ref-type="bibr" rid="B68">Tian 2003</xref>) and (<xref ref-type="bibr" rid="B37">Gupta and Pieprzyk 2009</xref>).</p></fn>
</fn-group>
</back>
</article>
