arXiv is now an independent nonprofit! Learn more
License: arXiv.org perpetual non-exclusive license
arXiv:2609.06791v1 [cs.CR] 06 Sep 2026

Efficient Hardware Information-Flow Tracking for
Pre-Silicon Security Testing

Yu-Wei Fan1 ††thanks: 1 Both authors contributed equally to this research. Affiliation: Princeton University
yf9172@princeton.edu
   Yuheng Yang1 Affiliation: MIT CSAIL
yuhengy@mit.edu
   Christine Guo Affiliation: Princeton University
cg4302@princeton.edu
Affiliation: 
   SooHyuk Cho Affiliation: Princeton University
soohyuk.cho@princeton.edu
   Thomas Bourgeat Affiliation: EPFL
Thomas.bourgeat@epfl.ch
   Mengjia Yan Affiliation: MIT CSAIL
mengjiay@mit.edu
   Sharad Malik Affiliation: Princeton University
sharad@princeton.edu
Abstract

Register-Transfer Level (RTL) simulation is widely used to test hardware before it is fabricated. To allow testing for security related information flow properties, such as confidentiality and integrity, taint logic can be automatically added to the design to track how information flows through it. However, taint logic instrumented by the state-of-the-art, such as CellIFT, makes simulation-based testing prohibitively expensive: On our evaluation of Mega-BOOM (136K cells), it increases the instrumented design to 5.81×\times the original cell count and causes a 143.72×\times simulation slowdown. The taint logic could be simplified to improve simulation speed, but it will inevitably trade off its precision. This lightweight, imprecise taint logic will introduce false positives and may eventually result in even more overhead to check these false positives.

This paper explores the research question of where precision is actually needed in the design to overcome the overhead of false positives. It presents CEGAR-T, a framework that automatically synthesizes taint logic that minimizes the taint-logic instrumentation overhead while guaranteeing no false positives (relative to the precise CellIFT baseline). We have implemented CEGAR-T and evaluated it on the safe instruction set problem for timing side-channel security across open-source RISC-V cores. Over all evaluated cores, CEGAR-T reduces both instrumentation and simulation overhead, in geometric-mean, from 5.64×\times to 1.42×\times and from 34.65×\times to 1.79×\times, respectively, without compromising the precision benefit of the CellIFT baseline.

I Introduction

Modern hardware enforces security boundaries for privilege separation, trusted execution, confidentiality, and integrity, yet deployed attacks continue to show that subtle microarchitectural behavior can violate these boundaries [1, 2, 3, 4, 5]. Once such flaws reach silicon, they are difficult or too costly to eliminate completely with post-silicon patches, because mitigations are constrained by already-fabricated and deployed hardware [6, 7, 8]. This makes pre-silicon hardware security testing a critical task, where at the RTL stage, internal design state is visible, security-relevant executions can be simulated, and vulnerable logic can still be fixed before fabrication [9, 10].

Hardware information-flow tracking (IFT) via taint analysis [11] is a practical workhorse for simulation-based pre-silicon security testing, widely used in both academic work [12, 13, 6, 14] and industrial security-validation settings [15, 16, 17]. It represents the target hardware security requirement as a source-to-sink information flow property. The source represents secret data, untrusted input, or control state whose influence should be restricted, while a sink represents protected design states or behavior that should not be affected by that source under the target security property. Given an information flow property, taint analysis instruments the RTL with taint bits and taint logic, tracks how taint from the source propagates through the design, and flags a potential violation when taint reaches the sink. We remark that taint analysis-based IFT is complementary to hardware fuzzing, which excels at exploring a large number of diverse executions [10, 18], by providing a mechanism to determine whether those executions contain forbidden source-to-sink flows.

Taint logic is sound: it over-approximates true information flow, whose semantics is given by the well-established non-interference (NI) semantics [19]. Its precision is determined by how tightly this approximation matches the NI semantics. Prior work has shown that imprecise taint logic tends to over-taint and generate false positives, whereas more precise taint logic is often more complex, incurring prohibitively high simulation overhead [11]. In the largest design in evaluation, Mega-BOOM [20] (136K cells), the state-of-the-art taint analysis tool CellIFT [6] increases the instrumented design to 5.81×\times the original design size and leads to a 143.72×\times simulation slowdown.

Existing work does not fully solve the central challenge of deriving taint logic that is both lightweight enough for efficient simulation and precise enough to avoid excessive false positives. For example, GLIFT [12], CellIFT [6], and RTLIFT [13] tackle this challenge by constructing precise taint logic at different abstraction levels. These approaches expose precision–cost tradeoffs by fixing the taint logic globally, i.e., across the entire circuit, at a chosen abstraction level. Another line of work explicitly searches the precision–cost space of taint logic, but is either limited in terms of scalability [21, 22] or restricted to structural optimization that does not exploit the value-dependent semantics of taint propagation [14].

A recent work, Compass [23], takes an important step forward by showing that taint-logic optimization can be cast as a counterexample-guided abstraction refinement (CEGAR) [24] process. By refining taint logic from imprecise to more precise in response to spurious counterexamples (false positives), it demonstrates that taint-logic optimization can be property-driven and practical on processor-scale designs. However, the refinement step in this approach remains heuristic-driven and manually guided: deciding where to refine relies on heuristic search, while deciding how to refine requires design knowledge and manual inspection. As a result, the approach is less systematic and harder to transfer across new designs and security properties.

We address these limitations with CEGAR-T, a fully automated CEGAR-based framework for property-driven taint logic optimization. The key insight is that taint-logic precision can be formalized semantically, rather than treated as a fixed choice between an imprecise logic and a fully precise one. By defining precision with respect to NI semantics, CEGAR-T obtains fine-grained control over the space of candidate taint logics for each hardware primitive block, enabling automated and incremental refinement. Building on this structure, CEGAR-T introduces a novel Max-SAT [25] formulation for design-level refinement, allowing the tool to select an optimal set of local refinements to the primitive blocks sufficient to eliminate the current spurious counterexample. This can be used iteratively in a CEGAR-T loop to eliminate successive spurious counterexamples. Further, this can be combined with a SAT-based spuriouseness-check in our proposed two-stage CEGAR-T-based workflow to guarantee no false positives.

We instantiate and implement CEGAR-T on a word-level adaptation of CellIFT [6]. We evaluate CEGAR-T in the setting of simulation-based IFT for the safe instruction set problem (SISP) [26, 27], a recently proposed processor-security problem for microarchitectural timing side-channel, using open-source RISC-V cores Ibex [28], Rocket [29], and all four variants of BOOM [20], which are widely used benchmarks for processor security evaluation. Our results show that fully automated taint-logic refinement is scalable and yields significant simulation-based IFT speedup.

Our main contributions are:

  • •

    We formalize taint-logic precision using the well-established non-interference semantics and derive a lattice-like refinement structure that characterizes how taint logic of a hardware primitive block can be refined to a more precise one.

  • •

    We formulate where to refine as a Max-SAT optimization problem that selects a min-cost refinement set for a counterexample.

  • •

    We develop two complementary refinement algorithms for sequential logic designs with different optimality–scalability tradeoffs: an unrolled algorithm that achieves per-counterexample min-cost refinements when tractable, and a more scalable single-frame alternative without sacrificing much optimality in practice.

  • •

    We implement CEGAR-T and evaluate it on simulation-based IFT of SISP. Across the evaluated cores, CEGAR-T reduces both instrumentation size and simulation time overhead, in geometric-mean, from 5.64×\times to 1.42×\times and from 34.65×\times to 1.79×\times, respectively, without compromising the precision benefit of the CellIFT baseline.

II Overview

II-A Challenges in CEGAR-Based Optimization

Counterexample-guided abstraction refinement (CEGAR) [24] was originally proposed as a formal verification paradigm for scaling model checking. It reasons about an abstraction of the concrete system and refines it when the abstraction admits spurious counterexamples (cex). In CEGAR-based optimization for taint logic [23], the abstraction is the current taint logic. It starts with imprecise taint logic, checks if a reported cex to the target information-flow property is spurious, and refines the logic to eliminate the spurious one. The main challenge is refinement: eliminating a spurious cex while keeping taint logic lightweight requires deciding where and how to refine.

The where question is intrinsically an optimization problem. The objective is to eliminate the spurious cex with as few refinement sites, i.e., which hardware blocks to refine, as possible. However, refinement decisions are globally coupled: changing the taint logic of one block can alter which taints propagate to downstream blocks and, in sequential designs, across time-frames (i.e., clock-cycles) through state elements. As a result, identifying a minimal set of refinement sites requires reasoning globally about taint propagation and its interaction with candidate refinements.

The how question is equally nontrivial. Even after a refinement site is selected, one must decide how much precision to add to remove the spurious cex without unnecessarily resorting to the most precise and expensive taint logic.

In recent work that has used a CEGAR-based taint-logic optimization [23], these two challenges are handled through heuristic search for where to refine and manual inspection for how to refine. While practical when guided by sufficient design knowledge and understanding of the target property, such refinement relies heavily on human effort, is less systematic, and harder to transfer across new designs and target properties.

II-B CEGAR-T: A Fully Automated Framework for Taint-Logic Optimization

The proposed framework, CEGAR-T, tackles the how challenge by first formalizing the well-established notion of precision using NI semantics. This serves as the foundation for defining a partial order over the space of taint logic with different precisions. Such semantic characterization enables systematic strengthening of imprecise taint logic toward a more precise one. Based on this notion, CEGAR-T derives a refinement lattice structure for each block, capturing the space of taint logics between the initial imprecise logic and the fully precise one. As a result, how to refine becomes a problem of navigating this refinement lattice, enabling sound, incremental, and minimal changes to local taint logic over manually chosen updates or full replacement by the most precise and expensive one.

For the where challenge, CEGAR-T formulates the refinement-site selection as a constraint optimization problem using Max-SAT [25]. It encodes how candidate refinements alter taint propagation, capturing the removal of the spurious counterexample (cex) as constraints while minimizing the number of selected refinement sites. This enables global reasoning about interactions among refinement choices, including cases where refining one block can suppress false taints reaching downstream blocks and reduce the need for further updates.

The introduced Max-SAT formulation captures how refinement choices affect taint propagation of the combinational logic within a clock cycle. However, realistic RTL designs are sequential. A cex can be a multi-cycle execution trace, where false taint may propagate across clock cycles through state elements. To handle this temporal behaviour in practice, CEGAR-T provides two refinement algorithms that offer different optimality–scalability tradeoffs. The first Unroll Approach constructs the Max-SAT instance over the whole cex trace by unrolling, which duplicates the combinational logic of the design for the number of cycles in the cex, allowing the solver to reason about the propagation across all cycles. As a result, it computes a minimum-cost refinement for a given cex, but may incur high refinement time overhead due to unrolling as the cex gets longer. The second Single-Frame Approach, in contrast, avoids full unrolling by solving a sequence of simpler refinement problems within a single cycle. This sacrifices exact optimality for a given cex (with little empirical loss in terms of solution quality), but yields a significantly more scalable refinement procedure.

Paper Roadmap

After reviewing the required background in Section III, Section IV presents a sound and complete procedure for checking whether a cex is spurious. Section V formalizes the notion of taint-logic precision and defines the corresponding refinement lattice. Building on this foundation, Section VI develops the Max-SAT formulation for refinement site selection. Next, Section VII elaborates how the general CEGAR-T framework is instantiated on word-level CellIFT, Section VIII describes a practical two-phase CEGAR-T-based simulation workflow, and Section IX evaluates CEGAR-T in this setting.

III Background

III-A Notation

We use x¯\bar{x} for the negation of a variable xx, ¬ϕ\neg\phi for negation of an expression ϕ\phi, symbols “⋅\cdot”, “++”, “⇒\Rightarrow”, and “∀\forall”, for logical AND, logical OR, implication, and universal quantification (forall), respectively.

III-B Information Flow Property

An information flow property specifies that sources (secret inputs) must not affect the sink (attacker-observable output) in a design. Intuitively, the sink should never change if we vary sources while holding other non-source inputs (public inputs) unchanged. This is formalized by the non-interference (NI) property [19]. Consider a combinational logic design y=f⁡(Xp,Xs)y=f(X_{p},X_{s}) where yy is the sink, XsX_{s} the secret inputs, and XpX_{p} the public ones. The absence of information flow from XsX_{s} to yy is captured by the NI condition below:

∀Xp,∀Xs,∀Xs′.f⁡(Xp,Xs)=f⁡(Xp,Xs′),\forall X_{p},\forall X_{s},\forall X_{s}^{\prime}\;.\;f(X_{p},X_{s})=f(X_{p},X_{s}^{\prime}), (1)

where Xs′X_{s}^{\prime} corresponds to a change to the secret inputs. For a sequential design, we reason in terms of input traces and corresponding simulated executions. An input trace τK\tau_{K} is a time-indexed sequence of input valuations over k∈[0..K]k\in[0..K]. We write Xp​(k)X_{p}(k) and Xs​(k)X_{s}(k) for the public and secret parts of the input valuation at time kk in τ\tau. Evaluating the design on τK\tau_{K} induces a unique execution, which determines the valuations of all signals over time. We refer to this induced sequence of valuations as the full trace of the design under τK\tau_{K}. We denote the valuation of the sink in the full trace at time kk by ysink​(k)y_{\text{sink}}(k). NI requires that for all KK and for any two input traces (τK,τK′)(\tau_{K},\tau^{\prime}_{K}) whose public inputs agree at every time step, the sinks are identical at the last time step:

∀K.∀τK,τ′K.(∀k.Xp(k)=Xp′(k))⇒(ysink(K)=ysink′(K)),\begin{array}[]{rl}\forall K.\;\forall\tau_{K},\tau^{\prime}_{K}.\;\Big(\forall k.\;X_{p}(k)=X_{p}^{\prime}(k)\Big)\Rightarrow(y_{\text{sink}}(K)=y_{\text{sink}}^{\prime}(K)),\end{array} (2)

where ysink​(k)y_{\text{sink}}(k) (resp., ysink′​(k)y_{\text{sink}}^{\prime}(k)) is obtained by evaluating the design on τK\tau_{K} (resp., τK′\tau^{\prime}_{K}). If Eq. (2) is violated, then there is a KK and two input traces τK,τK′\tau_{K},\tau^{\prime}_{K} such that Xp​(k)=Xp′​(k)X_{p}(k)=X_{p}^{\prime}(k) for all k≤Kk\leq K, but ysink​(K)≠ysink′​(K)y_{\text{sink}}(K)\neq y_{\text{sink}}^{\prime}(K). The input traces serve as the cex to the property.

A standard way to check NI is via self-composition [30] following Eq. (1) and Eq. (2). This approach builds a self-composed design consisting of two copies of the original design, constrain their public inputs to be equal while leaving their secret inputs unconstrained, and assert equality of sinks across the two copies. For combinational logic, self-composition corresponds to Eq. (1), whose violation can be checked via a SAT query over (Xp,Xs,Xs′)(X_{p},X_{s},X_{s}^{\prime}). For sequential logic, self-composition yields a safety property [30] in Eq. (2), whose violation can be checked by a model checker.

III-C Hardware IFT with Taint Analysis

Taint analysis is an alternative way to check the NI property that avoids the two-copy self-composition. Instead, it instruments a single copy of the design with additional taint bits and taint logic, and then checks whether taint from the sources can reach the taint at the sink along an execution.

Taint analysis associates each signal xx with a taint bit xtx^{t} indicating if there may be a flow from sources to xx. For a combinational block y=f⁡(X)y=f(X), a taint logic ftf^{t} computes the output taint yty^{t} from the input values and input taints:

yt=ft​(X,Xt).y^{t}=f^{t}(X,X^{t}). (3)

For a sequential design, sequential state elements such as D-flip flops (DFFs) propagate taint across cycles (e.g., qt​(k+1)=dt​(k)q^{t}(k{+}1)=d^{t}(k), where qq and dd are the DFF output and input, respectively), and taint is propagated through combinational logic in each cycle with Eq. (3). NI of both combinational and sequential cases is soundly approximated by checking if the sink could ever be tainted assuming sources are tainted (Xst=𝟏X_{s}^{t}=\mathbf{1}) and non-source inputs are untainted (Xpt=𝟎X_{p}^{t}=\mathbf{0}).

Design-level taint logic is constructed compositionally: each primitive block ff is assigned a taint logic ftf^{t} (e.g., gates [12], RTL operators [13], or cells [6]), and composed according to the design connectivity. As a result, the sink taint is determined by the interaction of many local taint logics along the fanin cone of the sink and across cycles.

Taint analysis is designed to be a sound overapproximation with respect to the NI semantics in Eq. (1) and Eq. (2). In particular, if there exists an information-flow witness in the sense of NI, i.e., two executions that agree on all public inputs but differ at the sink—then, when we label only the sources as tainted, executing the design under any one of the two input traces must taint the sink in the taint logic. However, the converse need not hold: the sink can become tainted even when no such paired execution exists, leading to spurious information flows.

Scope of Refinement

Imprecision arises primarily from two sources. First, local imprecision comes from using an imprecise taint logic for a primitive block ff that over-taints. For example, the taint logic at+bta^{t}+b^{t} for a 2-input AND is imprecise since it ignores value-dependent blocking when a public input is 00 (e.g., (at,bt)=(1,0)(a^{t},b^{t})=(1,0) and b=0b=0 implies y=a⋅by=a\cdot b is independent of aa, but at+bta^{t}+b^{t} still yields yt=1y^{t}=1). The precise taint logic considering the value-dependent effect is at⋅bt+at⋅b+a⋅bta^{t}\cdot b^{t}+a^{t}\cdot b+a\cdot b^{t}. Second, correlation-based imprecision arises even if each primitive is equipped with a precise taint logic in isolation. For instance, let y=a⋅by=a\cdot b with a=c⋅da=c\cdot d and b=c¯⋅db=\bar{c}\cdot d, and label only cc as a source (ct=1,dt=0c^{t}=1,d^{t}=0), assuming precise taint logic for all the AND gates. For the concrete valuation (c,d)=(0,1)(c,d)=(0,1), we have (a,b)=(0,1)(a,b)=(0,1) and (at,bt)=(1,1)(a^{t},b^{t})=(1,1), therefore yielding yt=1y^{t}=1. However, yy is constant zero for all (c,d)(c,d), so there is no actual flow from cc to yy. The spurious taint occurs since local taint logic ignores the correlation between aa and bb induced by shared inputs (b=1b=1 implies a=0a=0). These two sources of imprecision are discussed in the literature [12, 31, 23]. In this work, we focus on eliminating local imprecision by refining per-block taint logic, and leave handling correlation-based imprecision as future work. Based on our experience, the majority of the imprecision comes from local imprecision.

III-D Maximum Satisfiability (Max-SAT)

(Weighted) maximum satisfiability [32] (Max-SAT) extends SAT with an optimization objective. We use the following Max-SAT formulation (one of several equivalent ones [32]) as it aligns with our subsequent discussion and is supported by the solvers [33, 34, 35, 36, 37, 38]. Given a set of Boolean constraints Φ\Phi over variables VV, Max-SAT searches for an assignment that satisfies Φ\Phi while minimizing (or maximizing) a user-specified cost. The cost is expressed as an objective over a subset of variables as a weighted sum. We use the following notation for a Max-SAT query with constraint set Φ\Phi and objective min∑iwi⋅vi\min\sum_{i}w_{i}\cdot v_{i} with vi∈Vv_{i}\in V a Boolean variable and wi≥0w_{i}\geq 0 its weight (the unweighted case sets wi=1w_{i}=1):

𝑚𝑜𝑑𝑒𝑙←MaxSAT(Φ,min∑iwi⋅vi)\mathit{model}\;\leftarrow\;\textsc{MaxSAT}(\Phi,\ \min\sum_{i}w_{i}\cdot v_{i}) (4)

There exists efficient Max-SAT solvers that scale to large instances [33, 34, 35, 36, 37]. More generally, optimization modulo theories (OMT) solvers such as Z3’s optimizing engine also support Max-SAT-style objectives with logical constraints over non-Boolean variables [38].

IV Spuriousness Check

Given a cex trace τK\tau_{K} on the taint logic, i.e., an input trace under which the composed and possibly imprecise taint logic marks the sink as tainted, we can check whether it corresponds to an actual violation of NI in two ways. First, we can re-evaluate the same input trace τK\tau_{K} under a precise (or more precise) reference taint logic (e.g., using precise taint logic for each primitive). If the sink is untainted with this reference taint logic, then the cex must be spurious due to the overapproximation of taint logic. We called this first approach precise taint simulation. Second, we can use the two-trace definition in Eq. (2). Concretely, we fix one side of the self-composed construction to the concrete execution induced by τK\tau_{K}, leave the other side symbolic but constrain public inputs to be equal at each time step, and ask whether there exists another input trace τK′\tau^{\prime}_{K} such that the sink differs at time KK. This reduces to a SAT query on the unrolled self-composed design; if unsatisfiable, the cex is spurious.

The SAT approach is complete for checking spuriousness but more expensive than precise taint simulation in general. Precise taint simulation is sound and more efficient, but incomplete since, unlike the SAT approach, it does not account for correlation-based imprecision. In this work, we combine both approaches: given a cex, we perform precise taint simulation first, and only use the SAT approach if the precise taint simulation produces a tainted sink.

A complete spuriousness check distinguishes real from spurious cex. Note that when a spurious cex is detected, we can either let it trigger a refinement or just report it as a spurious cex. This is explored further in Section VIII.

V Precision and Refinement of Taint Logic

We start by characterizing fine-grained precision for a single primary block of the design. For this block, we propose a refinement lattice to enable minimum refinement that eliminates a given spurious cex. This is in contrast to prior precise taint construction [12, 13, 6], which may lead to excessive refinement by forcing precision under all possible input values.

V-A Formalizing Per-assignment Precision

We assume DFFs are the only sequential blocks in designs. Since they simply propagate taint across clock cycles and cannot be refined, we focus on combinational blocks.

Let X=(x1,…,xn)X=(x_{1},\ldots,x_{n}) be the inputs, y=f⁡(X)y=f(X) the output, and yt=ft​(X,Xt)y^{t}=f^{t}(X,X^{t}) the taint logic of a block ff.

A taint assignment τt∈{0,1}n\tau^{t}\in\{0,1\}^{n} to XtX^{t} partitions the inputs into the public inputs XpX_{p} and the secret inputs XsX_{s}:

Xp​(τt)≜{xi∣xi∈X∧xit=0​ in τt},Xs​(τt)≜{xi∣xi∈X∧xit=1​ in τt}.\begin{array}[]{rcl}X_{p}(\tau^{t})&\triangleq&\{x_{i}\mid x_{i}\in X\land x^{t}_{i}=0\text{ in $\tau^{t}$}\},\\ X_{s}(\tau^{t})&\triangleq&\{x_{i}\mid x_{i}\in X\land x^{t}_{i}=1\text{ in $\tau^{t}$}\}.\end{array}

As a reminder, this partition may change because it depends on how the hardware block is embedded within the larger design. For the same block, we may see different partitions in different cex or time frames. We write the taint logic ftf^{t} under the taint assignment τt\tau^{t} as

fτtt​(Xp,Xs)≜ft​(X,τt).f^{t}_{\tau^{t}}(X_{p},X_{s})\triangleq f^{t}(X,\tau^{t}).

When fixing a taint assignment τt\tau^{t}, following the NI semantics in Section III, a taint logic yt=fτtt​(Xp,Xs)y^{t}=f^{t}_{\tau^{t}}(X_{p},X_{s}) is precise iff yt=1y^{t}=1 exactly when there is a flow from XsX_{s} to yy. That is, there exists Xs′X_{s}^{\prime} such that f⁡(Xp,Xs)≠f⁡(Xp,Xs′)f(X_{p},X_{s})\neq f(X_{p},X_{s}^{\prime}) with XpX_{p} fixed, as captured by the predicate f^τtt\hat{f}^{t}_{\tau^{t}}:

f^τtt​(Xp,Xs)≜∃Xs′.f⁡(Xp,Xs)≠f⁡(Xp,Xs′).\hat{f}^{t}_{\tau^{t}}(X_{p},X_{s})\triangleq\exists X_{s}^{\prime}\;.\;f(X_{p},X_{s})\neq f(X_{p},X_{s}^{\prime}). (5)

Given a taint logic ftf^{t}, we can now reason about its precision for a specific taint-assignment τt\tau^{t}. We say ftf^{t} is precise under τt\tau^{t} if fτttf^{t}_{\tau^{t}} is equivalent to f^τtt\hat{f}^{t}_{\tau^{t}}.

The above concept of per-assignment precision guides us to make assignment-specific refinement in Section V-B and to further derive our refinement lattice in Section V-C. Additionally, we give the definition of precise taint logic that is agnostic to taint assignments.

Definition V.1 (Precise taint logic).

A taint logic ftf^{t} is precise if it is precise under all taint assignments:

∀τt.ft is precise under τt\forall\tau^{t}\;.\;\text{$f^{t}$ is precise under $\tau^{t}$} (6)
Example V.1.

Let X=(a,b)X=(a,b) and y=f⁡(a,b)=a⋅by=f(a,b)=a\cdot b. We consider two candidate taint logics fitf_{i}^{t} with index i∈{0,1}i\in\{0,1\} denoting different taint logics for the same function ff:

f0t​(a,b,at,bt)=at+bt,f1t​(a,b,at,bt)=at+(a⋅bt).\begin{array}[]{rclcrcl}f^{t}_{0}(a,b,a^{t},b^{t})&=&a^{t}+b^{t},&&\\ f^{t}_{1}(a,b,a^{t},b^{t})&=&a^{t}+(a\cdot b^{t}).\end{array}

Case (1): aa public, bb secret. Let τt=(0,1)\tau^{t}=(0,1), so Xp={a}X_{p}=\{a\} and Xs={b}X_{s}=\{b\}. We compute f^(0,1)t\hat{f}^{t}_{(0,1)} by instantiating Eq. (5):

f^(0,1)t=∃b′.(a⋅b)≠(a⋅b′)=a.\hat{f}^{t}_{(0,1)}=\exists b^{\prime}\;.\;(a\cdot b)\neq(a\cdot b^{\prime})=a.

Under τt=(0,1)\tau^{t}=(0,1), the two taint logics simplify to:

f0t​(a,b,0,1)=1,f1t​(a,b,0,1)=a.\begin{array}[]{rclcrcl}f^{t}_{0}(a,b,0,1)&=&1,&&f^{t}_{1}(a,b,0,1)&=&a.\end{array}

Therefore f1tf^{t}_{1} is precise under τt=(0,1)\tau^{t}=(0,1) (it matches f^(0,1)t=a\hat{f}^{t}_{(0,1)}=a), whereas f0tf^{t}_{0} is imprecise.

Case (2): aa secret, bb public. Let τt=(1,0)\tau^{t}=(1,0), so Xp={b}X_{p}=\{b\} and Xs={a}X_{s}=\{a\}. Here, both taint logics reduce to 11 under τt\tau^{t}:

f1t​(a,b,1,0)=1,f2t​(a,b,1,0)=1,\begin{array}[]{rclcrcl}f^{t}_{1}(a,b,1,0)&=&1,&&f^{t}_{2}(a,b,1,0)&=&1,\end{array}

, which are in-equivalent to f^(1,0)t=b\hat{f}^{t}_{(1,0)}=b, and thus imprecise under τt=(1,0)\tau^{t}=(1,0).

Constructing Precise Taint Logic.

In fact, with Definition V.1, we are able to construct the precise taint logic. Let the minterms over (at,bt)(a^{t},b^{t}) be:

m00≜a¯t⋅b¯t,m01≜a¯t⋅bt,m10≜at⋅b¯t,m11≜at⋅bt.\begin{array}[]{rclcrcl}m_{00}&\triangleq&\bar{a}^{t}\cdot\bar{b}^{t},&&m_{01}&\triangleq&\bar{a}^{t}\cdot b^{t},\\[2.0pt] m_{10}&\triangleq&a^{t}\cdot\bar{b}^{t},&&m_{11}&\triangleq&a^{t}\cdot b^{t}.\end{array}

A precise taint logic can be constructed by a minterm expansion over τt=(at,bt)\tau^{t}=(a^{t},b^{t}). For each taint assignment, we gate the corresponding per-assignment precision predicate f^(i,j)t\hat{f}^{t}_{(i,j)} with the matching minterm mi​jm_{ij} of (at,bt)(a^{t},b^{t}) and take the disjunction of the results, as prescribed by Definition V.1. For the 2-input AND cell, we have f^(0,0)t=0\hat{f}^{t}_{(0,0)}=0, f^(0,1)t=a\hat{f}^{t}_{(0,1)}=a, f^(1,0)t=b\hat{f}^{t}_{(1,0)}=b, and f^(1,1)t=1\hat{f}^{t}_{(1,1)}=1. This yields:

f~t=(m00⋅f^(0,0)t)+(m01⋅f^(0,1)t)+(m10⋅f^(1,0)t)+(m11⋅f^(1,1)t)=(a¯t⋅bt⋅a)+(at⋅b¯t⋅b)+(at⋅bt),\begin{array}[]{rcl}\tilde{f}^{t}&=&(m_{00}\cdot\hat{f}^{t}_{(0,0)})+(m_{01}\cdot\hat{f}^{t}_{(0,1)})\ +\\[2.0pt] &&(m_{10}\cdot\hat{f}^{t}_{(1,0)})+(m_{11}\cdot\hat{f}^{t}_{(1,1)})\\[2.0pt] &=&(\bar{a}^{t}\cdot b^{t}\cdot a)+(a^{t}\cdot\bar{b}^{t}\cdot b)+(a^{t}\cdot b^{t}),\end{array} (7)

which is equivalent to the precise taint logic in the literature [12] for 2-input AND (at⋅b)+(a⋅bt)+(at⋅bt)(a^{t}\cdot b)+(a\cdot b^{t})+(a^{t}\cdot b^{t}).

We remark that such a precise taint logic construction is different from the canonical mm-replica architecture in CellIFT [6] but yields the functionally equivalent precise taint logic. In subsequent discussion, given a function ff, we assume having access to the precise taint logic f~t\tilde{f}^{t}.

V-B Counterexample-Guided Precision Refinement

We next explain how to refine a taint logic ftf^{t} to remove a spurious cex in which ftf^{t} over-taints.

Let’s consider a motivating example of a 3-input AND cell y=a⋅b⋅cy=a\cdot b\cdot c with the most imprecise taint logic

f0t=at+bt+ct.f^{t}_{0}=a^{t}+b^{t}+c^{t}.

Suppose we observe a cex assignment with τt=(1,0,0)\tau^{t}=(1,0,0) and τ=(1,0,1)\tau=(1,0,1), under which taint should not propagate to the output, but the current taint logic nevertheless sets yt=1y^{t}=1. We describe three versions of refinement to demonstrate the benefit of making assignment-specific refinements.

First, a naive refinement would block exactly this single valuation by conjoining a constraint that excludes it:

fnaivet=(at+bt+ct)⋅¬(at⋅b¯t⋅c¯t⋅a⋅b¯⋅c).f^{t}_{\text{naive}}=(a^{t}+b^{t}+c^{t})\cdot\neg(a^{t}\cdot\bar{b}^{t}\cdot\bar{c}^{t}\cdot a\cdot\bar{b}\cdot c).

However, this refinement is overly specific: it eliminates only the particular cex and may still admit many other assignments that share the same taint assignment τt=(1,0,0)\tau^{t}=(1,0,0) and are equally spurious. For example, under the same τt=(1,0,0)\tau^{t}=(1,0,0), (a,b,c)=(0,0,1)(a,b,c)=(0,0,1) and (1,0,0)(1,0,0) should also yield yt=0y^{t}=0 because b=0b=0 or c=0c=0 blocks the secret aa, yet f0tf^{t}_{0} over-taints these cases as well.

Second, at the other extreme, we could replace f0tf^{t}_{0} with f~t\tilde{f}^{t}, thereby eliminating all spurious over-tainting for this cell. While effective, this can be unnecessarily expensive when f~t\tilde{f}^{t} contains terms that are irrelevant under the design’s reachable behaviors, e.g., the don’t-care values in the design.

Lastly, we seek a refinement that generalizes from the cex to capture the blocking condition over the public inputs, which characterizes the public input values that block the taints for ftf^{t} and the given τt\tau^{t}.

Under τt=(1,0,0)\tau^{t}=(1,0,0), the secret is Xs={a}X_{s}=\{a\} and the public inputs are Xp={b,c}X_{p}=\{b,c\}. For y=a⋅b⋅cy=a\cdot b\cdot c, the secret can influence yy iff b⋅c=1b\cdot c=1; equivalently, (b¯+c¯)(\bar{b}+\bar{c}) blocks taint propagation. Thus, a just-enough refinement, that lies in between the two ends above, strengthens f0tf^{t}_{0} by ruling out taint propagation whenever (b¯t⋅c¯t⋅(b¯+c¯))(\bar{b}^{t}\cdot\bar{c}^{t}\cdot(\bar{b}+\bar{c})) holds:

freft=(at+bt+ct)⋅¬(b¯t⋅c¯t⋅(b¯+c¯)).\begin{array}[]{rcl}f^{t}_{\text{ref}}&=&(a^{t}+b^{t}+c^{t})\cdot\neg(\bar{b}^{t}\cdot\bar{c}^{t}\cdot(\bar{b}+\bar{c})).\end{array}

As a result, this refinement eliminates a set of generalized cex, the original cex and a family of cex that share the same taint assignment τt=(1,0,0)\tau^{t}=(1,0,0), using a simpler taint logic compared with f~t\tilde{f}^{t}. This potentially avoids generating cex from the same family, thus reducing the number of iterations in the CEGAR-T loop.

Refine for Arbitrary Blocks

We now formalize the above intuition for an arbitrary combinational logic ff and its taint logic ftf^{t}. Let a cex provide a taint assignment τt\tau^{t} and concrete valuations (τp,τs)(\tau_{p},\tau_{s}) for (Xp,Xs)(X_{p},X_{s}). We compute a blocking condition RτtR_{\tau^{t}} over public inputs under τt\tau^{t}:

Rτt​(Xp)≜∀Xs,Xs′.f⁡(Xp,Xs)=f⁡(Xp,Xs′).\begin{array}[]{rcl}R_{\tau^{t}}(X_{p})&\triangleq&\forall X_{s},X^{\prime}_{s}\;.\;f(X_{p},X_{s})=f(X_{p},X^{\prime}_{s}).\end{array} (8)

Intuitively, Rτt​(Xp)=1R_{\tau^{t}}(X_{p})=1 means that for the given XpX_{p}, varying secret inputs cannot change the output, so the secret does not propagate. Using RτtR_{\tau^{t}}, we refine ftf^{t} by ruling out taint propagation whenever all public inputs are untainted and the blocking condition holds. Writing (Xpt=𝟎)≜∏xi∈Xpx¯it(X_{p}^{t}=\mathbf{0})\triangleq\prod_{x_{i}\in X_{p}}\bar{x}^{t}_{i}, the refined taint logic is:

freft=ft⋅¬((Xpt=𝟎)⋅Rτt​(Xp)).\begin{array}[]{rcl}f^{t}_{\text{ref}}&=&f^{t}\cdot\neg\big((X_{p}^{t}=\mathbf{0})\cdot R_{\tau^{t}}(X_{p})\big).\end{array} (9)

Note that the blocking condition RτtR_{\tau^{t}} depends on τt\tau^{t}, not on the concrete assignment for the public/secret inputs τp/τs\tau_{p}/\tau_{s}, i.e., we refine the taint logic w.r.t. the taint assignment τt\tau^{t}, which captures a family of cex of the same τt\tau^{t}.

V-C Refinement Lattice

We now formalize the space of candidate taint logics by viewing each application of Eq (9) as a refinement step to a more precise taint logic.

Root node (most imprecise taint logic).

In theory, the constant taint logic yt=1y_{t}=1 is the most imprecise one but it is not practically useful. Following prior work [12, 21, 22], we use the disjunction of input taints as the root node.

f0t​(X,Xt)≜∑i=1nxit.f^{t}_{0}(X,X^{t})\triangleq\sum_{i=1}^{n}x_{i}^{t}. (10)
Refinement operator.

Let τt∈{0,1}n\tau^{t}\in\{0,1\}^{n} be a taint assignment inducing the partition (Xp,Xs)(X_{p},X_{s}). We define the refinement operator by directly rewriting Eq. (9) for an arbitrary current taint logic ftf^{t}:

𝖱𝖾𝖿𝗂𝗇𝖾⁡(ft,τt)≜ft⋅¬((Xpt=𝟎)⋅Rτt​(Xp)).\begin{array}[]{rcl}\mathsf{Refine}(f^{t},\tau^{t})&\triangleq&f^{t}\cdot\neg\big((X_{p}^{t}=\mathbf{0})\cdot R_{\tau^{t}}(X_{p})\big).\end{array} (11)

We only apply 𝖱𝖾𝖿𝗂𝗇𝖾⁡(⋅,τt)\mathsf{Refine}(\cdot,\tau^{t}) when ftf^{t} is imprecise under τt\tau^{t}.

Definition V.2 (Refinement lattice).

Given a function ff, let 𝒯≜{0,1}n\mathcal{T}\triangleq\{0,1\}^{n} be the set of all possible taint assignments. The refinement lattice for ff is the directed graph ℒ=(V,E)\mathcal{L}=(V,E):

  • •

    Nodes. VV is the smallest set of taint logics such that: (i) f0t∈Vf^{t}_{0}\in V, and (ii) for any ft∈Vf^{t}\in V and any τt∈𝒯\tau^{t}\in\mathcal{T}, if ftf^{t} is imprecise under τt\tau^{t}, then 𝖱𝖾𝖿𝗂𝗇𝖾⁡(ft,τt)∈V\mathsf{Refine}(f^{t},\tau^{t})\in V.

  • •

    Edges. For any ft∈Vf^{t}\in V and τt∈𝒯\tau^{t}\in\mathcal{T} such that ftf^{t} is imprecise under τt\tau^{t}, we add a labeled edge:

    ft→τt𝖱𝖾𝖿𝗂𝗇𝖾⁡(ft,τt).f^{t}\xrightarrow{\;\tau^{t}\;}\mathsf{Refine}(f^{t},\tau^{t}).

Each node in ℒ\mathcal{L} is a candidate taint logic reachable from f0tf^{t}_{0} by repeatedly applying 𝖱𝖾𝖿𝗂𝗇𝖾⁡(⋅,τt)\mathsf{Refine}(\cdot,\tau^{t}), and thus represents a different precision point in our search space. Moreover, the precise taint logic f~t\tilde{f}^{t} is the sink node in ℒ\mathcal{L}, since no refinement is applicable once a taint logic is precise under every taint assignment.

Prior work [21] constructs a family of imprecise taint logics by introducing don’t-care conditions over XX, starting from a precise taint logic and simplifying it via offline precomputation. In contrast, our refinement lattice is built around taint assignments over XtX^{t}: each edge corresponds to strengthening ftf^{t} by the blocking condition, enabling implicit, on-demand traversal starting from a cheap root logic. This yields a finer-grained space, e.g., for a 3-input AND gate, their construction yields 8 variants, whereas our lattice contains 64 nodes and subsumes their variants.

Key properties.

From Eq. (11), each refinement step strengthens the current taint logic by conjoining a constraint. As a result, refinement steps commute: for any ftf^{t} and τ1t,τ2t∈𝒯\tau_{1}^{t},\tau_{2}^{t}\in\mathcal{T},

𝖱𝖾𝖿𝗂𝗇𝖾⁡(𝖱𝖾𝖿𝗂𝗇𝖾⁡(ft,τ1t),τ2t)≡𝖱𝖾𝖿𝗂𝗇𝖾⁡(𝖱𝖾𝖿𝗂𝗇𝖾⁡(ft,τ2t),τ1t),\mathsf{Refine}(\mathsf{Refine}(f^{t},\tau_{1}^{t}),\tau_{2}^{t})\;\equiv\;\mathsf{Refine}(\mathsf{Refine}(f^{t},\tau_{2}^{t}),\tau_{1}^{t}),

This property ensures that when a block requires multiple refinements, which is needed later in Section VI for multi-cycle cex, the applications of refinements are order-independent.

For a set of taint assignments T⊆𝒯T\subseteq\mathcal{T} from multiple cex, we define the batch-refined taint logic as:

𝖱𝖾𝖿𝗂𝗇𝖾⁡(ft,T)≜ft⋅∏τt∈TGτt,\begin{array}[]{rcl}\mathsf{Refine}(f^{t},T)&\triangleq&f^{t}\cdot\prod_{\tau^{t}\in T}G_{\tau^{t}},\end{array} (12)

where GτtG_{\tau^{t}} abbreviates the guard conjoined in Eq. (11). By commutativity of conjunction, Eq. (12) is equivalent to applying 𝖱𝖾𝖿𝗂𝗇𝖾⁡(⋅,τt)\mathsf{Refine}(\cdot,\tau^{t}) sequentially for all τt∈T\tau^{t}\in T in any order. In sequential designs, multiple cex for the same ftf_{t} may arise at different cycles of one execution trace. Batch refinement allows us to refine multiple cex at once.

Example V.2.
Fig. 1: The refinement lattice for y=a⋅by=a\cdot b.

Consider again the 2-input AND with root taint logic f0t=at+btf^{t}_{0}=a^{t}+b^{t}. There are four taint assignments 𝒯={(0,0),(0,1),(1,0),(1,1)}\mathcal{T}=\{(0,0),(0,1),(1,0),(1,1)\}. We have that f0tf^{t}_{0} is precise under (0,0)(0,0) and (1,1)(1,1), but imprecise under (0,1)(0,1) and (1,0)(1,0). By Definition V.2, there are two outgoing edges from f0tf^{t}_{0} in the lattice for the two imprecise taint assignments:

𝖱𝖾𝖿𝗂𝗇𝖾⁡(f0t,(0,1))≡f1t≜at+(a⋅bt),𝖱𝖾𝖿𝗂𝗇𝖾⁡(f0t,(1,0))≡f2t≜bt+(at⋅b).\begin{array}[]{rcl}\mathsf{Refine}(f^{t}_{0},(0,1))&\equiv&f^{t}_{1}\triangleq a^{t}+(a\cdot b^{t}),\\[2.0pt] \mathsf{Refine}(f^{t}_{0},(1,0))&\equiv&f^{t}_{2}\triangleq b^{t}+(a^{t}\cdot b).\end{array}

Thus, the lattice contains edges f0t→(0,1)f1tf^{t}_{0}\xrightarrow{(0,1)}f^{t}_{1} and f0t→(1,0)f2tf^{t}_{0}\xrightarrow{(1,0)}f^{t}_{2}. Refining once more from either intermediate node yields the precise taint logic:

𝖱𝖾𝖿𝗂𝗇𝖾⁡(f1t,(1,0))≡𝖱𝖾𝖿𝗂𝗇𝖾⁡(f2t,(0,1))≡f~t=(at⋅b)+(a⋅bt)+(at⋅bt).\begin{array}[]{rcl}\mathsf{Refine}(f^{t}_{1},(1,0))&\equiv&\mathsf{Refine}(f^{t}_{2},(0,1))\\ &\;\equiv&\tilde{f}^{t}\;=\;(a^{t}\cdot b)+(a\cdot b^{t})+(a^{t}\cdot b^{t}).\end{array}

The visualization of the lattice is shown in Figure 1.

VI Max-SAT for Optimum Refinement

In a design, sink taint is determined by the interaction of many local taint logics. Section V defined the search space of candidate taint logic as a refinement lattice spanned by the 𝖱𝖾𝖿𝗂𝗇𝖾\mathsf{Refine} operator. This allows us to perform cex-guided refinement for a single block. This section addresses the remaining refinement selection problem: given a spurious cex with a falsely tainted sink, which blocks in the design must be refined to eliminate the sink taint while minimizing the added instrumentation cost?

We consider a cex in the current taint logic to the sink taint, i.e., a concrete execution trace under which the composed taint logic marks the sink as tainted (ysinkt=1y^{t}_{\text{sink}}=1). Constructing a precise reference model (e.g. CellIFT [6]) obtained by using the precise taint logic f~t\tilde{f}^{t} for each block, our goal is to refine a selected set of combinational blocks so that re-evaluating the same trace leaves the sink untainted.

Among all refinements that eliminate the cex, we aim to minimally change the taint logic of the design. Concretely, we seek a refinement that minimizes the number of blocks whose taint logic is refined. While this metric does not exactly translate to the final complexity of the taint logic, it is a reasonable proxy in practice. At a high level, this optimization can be formulated as a Max-SAT problem. We associate a variable rfr_{f} with each combinational block ff, where rf=1r_{f}=1 iff we refine the taint logic ftf^{t} to a more precise one. Intuitively, we want to search for a set of blocks to refine (i.e., set some rfr_{f} to 11) such that the resulting composed taint logic makes the sink untainted on the cex (ysinkt=0y^{t}_{\text{sink}}=0), while setting as few rfr_{f} to 11 as possible. This corresponds exactly to the Max-SAT problem for finding a satisfiable solution over rfr_{f} variables, while minimizing the number of 11’s in the solution.

VI-A Identifying Refinement Candidate Set

Not every taint observed in the current taint logic can (or should) be eliminated by refinement. In fact, any taint seen by the precise reference model must be preserved. Refinement should only address blocks whose output is tainted in the current model but untainted in the reference model, i.e., the output is falsely tainted. Therefore, before formulating the Max-SAT instance, we identify combinational blocks with false taints under the current taint logic. We refer to this set of blocks as a refinement candidate set.

Given the cex trace, we perform two taint simulations on the unrolled design: (i) the current taint simulation using the current block taint logic ftf^{t}, and (ii) the reference taint simulation using the precise reference model. For each combinational block ff and timeframe kk, let Yt​(f,k)Y^{t}(f,k) and Y~t​(f,k)\tilde{Y}^{t}(f,k) denote the taint value of ff’s output under the two simulations, respectively. We add ff to the refinement candidate set 𝒞\mathcal{C} if it is falsely tainted in at least one timeframe:

𝒞≜{f∣∃k.Yt(f,k)=1 and Y~t(f,k)=0}.\mathcal{C}\triangleq\{\,f\mid\exists k\;.\;Y^{t}(f,k)=1\text{ and }\tilde{Y}^{t}(f,k)=0\,\}. (13)

Only blocks in 𝒞\mathcal{C} are eligible to be refined for this cex. Conceptually, 𝒞\mathcal{C} excludes blocks whose taint outputs already agree with the reference model, so refining them would not help eliminate any over-tainting observed on this cex.

Fig. 2: The simulation results of the cex (a,b,c,d)=(1,0,1,1)(a,b,c,d)=(1,0,1,1) and (at,bt,ct,dt)=(1,0,0,1)(a^{t},b^{t},c^{t},d^{t})=(1,0,0,1) on (a) original design, (b) current taint logic, and (c) precise taint logic.
Example VI.1.

Consider a design with inputs (a,b,c,d)(a,b,c,d) and an output yy. Assume that the current taint logic uses the most imprecise one for all blocks, and that we encounter a cex with τ=(1,0,1,1)\tau=(1,0,1,1) and τt=(1,0,0,1)\tau^{t}=(1,0,0,1), as shown in Figure 2 (a) and Figure 2 (b). By simulating the precise taint logic with τt\tau^{t} and τ\tau, we acquire the reference taint values (x~1t,x~2t,y~t)=(0,1,0)(\tilde{x}_{1}^{t},\tilde{x}_{2}^{t},\tilde{y}^{t})=(0,1,0) as shown in Figure 2 (c). Since the output taints in the current taint logic are inconsistent with the ones in the precise taint logic for all blocks, the refinement candidate set is 𝒞={f,h}\mathcal{C}=\{f,h\}.

VI-B Circuit Construction for Refinement Candidates

For each refinement candidate block f∈𝒞f\in\mathcal{C}, we use the variable rfr_{f} indicating whether we apply refinement to ftf^{t} for the current cex. A first attempt is to gate away the false taint by a mux: if rf=1r_{f}=1 we force the block’s output taint to 00, otherwise we keep the original output taint computed by the current taint logic ftf^{t}. However, this construction is not sound: it may suppress output taint even when the current taint logic already matches the precise reference model.

The key subtlety is that the input-taint assignment seen by ftf^{t} depends on the taints of its upstream fanin logic. Since some fanin taints may be falsely tainted and eliminated by refining upstream blocks, the input taints XtX^{t} arriving at ftf^{t} can change depending on upstream refinements. Thus, whether the false taint at ftf^{t} can be eliminated by refinement must be based on the input-taint τt\tau^{t} assignment reaching ftf^{t}, referred to as the incoming input-taint assignment, together with the input assignment τ\tau from the cex.

To capture this dependency, we construct an enabling condition Sf​(Xt)S_{f}(X^{t}) over the input taint bits XtX^{t}. Let τ\tau be the assignment to XX given by the cex. We define SfS_{f} to describe when ftf^{t} is falsely tainted on the cex under the incoming input-taint assignment:

Sf​(Xt)≜(ft​(τ,Xt)≠f~t​(τ,Xt)).S_{f}(X^{t})\triangleq\big(f^{t}(\tau,X^{t})\neq\tilde{f}^{t}(\tau,X^{t})\big). (14)

Intuitively, Sf​(Xt)=1S_{f}(X^{t})=1 means that, under τ\tau and the seen XtX^{t}, the output taint produced by ftf^{t} disagrees with the precise reference model, and hence is imprecise and eligible to be fixed by refinement. When Sf​(Xt)=0S_{f}(X^{t})=0, the current taint logic already matches the reference model, and we should not allow refinement to change the output taint.

We then guard refinement by SfS_{f} so that the refinement is enabled only when (i) the solver chooses rf=1r_{f}=1 and (ii) the incoming input-taint assignment makes ftf^{t} falsely tainted. Concretely, letting yty^{t} be the output taint of ff, we enforce

yt=(rf⋅Sf​(Xt))? 0:ft​(X,Xt).y^{t}\;=\;(r_{f}\cdot S_{f}(X^{t}))\;\mathbin{?}\;0\;\mathbin{:}\;f^{t}(X,X^{t}). (15)

This ensures that a block’s output taint can be suppressed only in cases where it is falsely tainted on the cex under the incoming input-taint assignment reaching the block.

Fig. 3: The circuit construction of Example VI.2 for the cex used in Example VI.1. The ShS_{h} block implements x¯1t⋅x2t+x1t⋅x¯2t\bar{x}_{1}^{t}\cdot x_{2}^{t}+x_{1}^{t}\cdot\bar{x}_{2}^{t}.
Example VI.2.

Following Example VI.1, the cex is τ=(1,0,1,1)\tau=(1,0,1,1), τt=(1,0,0,1)\tau^{t}=(1,0,0,1) (Figure 2), and the refinement candidate set is 𝒞={f,h}\mathcal{C}=\{f,h\}. The Max-SAT circuit construction is shown in Figure 3. For ff, since there is no other upstream logic that could affect its input taints, its guard is effectively constant one and simplified away. For hh, following Eq. (15), we derive Sh​(x1t,x2t)=x¯1t⋅x2t+x1t⋅x¯2tS_{h}(x_{1}^{t},x_{2}^{t})=\bar{x}_{1}^{t}\cdot x_{2}^{t}+x_{1}^{t}\cdot\bar{x}_{2}^{t} and use ShS_{h} to guard the fix variable rhr_{h}. The Max-SAT problem of this circuit would be finding an assignment to (rf,rh)(r_{f},r_{h}) such that yty^{t} becomes 00, while minimizing the number of ones in the solution. There is one optimum solution (rf,rh)=(1,1)(r_{f},r_{h})=(1,1).

A Max-SAT solution not only selects which blocks to fix, but also implicitly identifies the refinement step in the lattice, by determining the input-taint assignments under which the refinement is applied for each refined block. For example, consider the solution (rf,rh)=(1,1)(r_{f},r_{h})=(1,1). For ftf^{t}, since it sees the taint assignment (ct,dt)=(1,0)(c^{t},d^{t})=(1,0), the refined taint logic would be 𝖱𝖾𝖿𝗂𝗇𝖾⁡(ft,(1,0))=(ct⋅d)+dt\mathsf{Refine}(f^{t},(1,0))=(c^{t}\cdot d)+d^{t}. For hth^{t}, since its upstream taint x2tx_{2}^{t} from gtg^{t} is fixed, it sees the input-taint assignment (x1t,x2t)=(0,1)(x_{1}^{t},x_{2}^{t})=(0,1). The refined taint logic is 𝖱𝖾𝖿𝗂𝗇𝖾⁡(ht,(0,1))=x1t+(x¯1⋅x2t)\mathsf{Refine}(h^{t},(0,1))=x_{1}^{t}+(\bar{x}_{1}\cdot x_{2}^{t}).

VI-C Overall Algorithm

With (i) the refinement candidate set, (ii) the guarded mux construction for candidates, and (iii) the refinement operator, we now present the end-to-end procedures for eliminating a spurious cex on a general sequential design.

VI-C1 Unroll Approach

The pseudocode of the unroll approach is shown in Algorithm 2. Given a cex trace τ\tau of length KK, we run two simulations on the unrolled design: one using the current taint logic ft{f^{t}} and one using the precise reference logic f~t{\tilde{f}^{t}} (lines 1–2). From the mismatch between the two runs, we identify a refinement candidate set 𝒞\mathcal{C} consisting of combinational blocks that are falsely tainted in at least one timeframe (line 3). For each candidate block f∈𝒞f\in\mathcal{C}, we introduce the variable rfr_{f} (line 4) to indicate if ff requires refinement to eliminate spurious taint on this trace. We then construct an unrolled Max-SAT instance D′D^{\prime} over frames k∈[0..K]k\in[0..K] (lines 5–-11). For each combinational block instance in frame kk, we add the corresponding taint constraint in topological order. Non-candidates are encoded using their current taint logic. For candidates, we use the guarded mux construction (Eq. (15)) via the helper function AddTaintConstraint shown in Algorithm 1 for the circuit construction. Sequential elements are handled with the identity constraint for each DFF (lines 9–-10). Finally, we solve one Max-SAT problem (line 12) that enforces the sink to be untainted at the last frame (line 11), while minimizing ∑rf∈ℛrf\sum_{r_{f}\in\mathcal{R}}r_{f}. The resulting model determines which blocks to refine, and implicitly the frames those refinements were actually enabled. For each selected block ff with 𝑚𝑜𝑑𝑒𝑙⁡(rf)=1\mathit{model}(r_{f})=1 in the MAX-SAT solution, we collect the set Γf\Gamma_{f} of input-taint assignments Xt​(f,k)X^{t}(f,k) for frames where the guard was active (lines 15–17), and then update the taint logic by applying batch refinement (line 18).

Algorithm 1 A helper function used by Algorithm 2 assuming we have access to the fix variable rfr_{f} for f∈𝒞f\in\mathcal{C}.
1: procedure AddTaintConstraint(D′,f,k,τ,𝒞D^{\prime},f,k,\tau,\mathcal{C})
2:   if f∉𝒞f\notin\mathcal{C} then
3:    
Add constraint to D′D^{\prime}:
yt​(f,k)=ft​(τ⁡(f,k),Xt​(f,k))y^{t}(f,k)=f^{t}(\tau(f,k),X^{t}(f,k))
4:   else
5:    sf,k←Sf,k​(Xt​(f,k))s_{f,k}\leftarrow S_{f,k}(X^{t}(f,k)) ⊳\triangleright instantiate Eq. (14)
6:    
Add constraint to D′D^{\prime}:
yt​(f,k)=(rf⋅sf,k)? 0:ft​(τ⁡(f,k),Xt​(f,k))y^{t}(f,k)\;=\;(r_{f}\cdot s_{f,k})\;\mathbin{?}\;0\;\mathbin{:}\;f^{t}(\tau(f,k),X^{t}(f,k))
  
Algorithm 2 Unroll-based Max-SAT refinement.
1: Design D=(Dcomb,Ddff)D=(D_{\text{comb}},D_{\text{dff}}) and its current taint logic {ft}\{f^{t}\}; precise taint logic {f~t}\{\tilde{f}^{t}\}; spurious cex τ\tau of length KK; sink ysinky_{\text{sink}}
2: Yt←Sim​(D,{ft},τ,K)Y^{t}\leftarrow\textsc{Sim}(D,\{f^{t}\},\tau,K) ⊳\triangleright full trace of (D,{ft})(D,\{f^{t}\}) on τ\tau
3: Y~t←Sim​(D,{f~t},τ,K)\tilde{Y}^{t}\leftarrow\textsc{Sim}(D,\{\tilde{f}^{t}\},\tau,K) ⊳\triangleright full trace of (D,{f~t})(D,\{\tilde{f}^{t}\}) on τ\tau
4: 𝒞←{f∈Dcomb∣∃k.Yt(f,k)=1 and Y~t(f,k)=0}\mathcal{C}\leftarrow\{\,f\in D_{\text{comb}}\mid\exists k.\ Y^{t}(f,k)=1\text{ and }\tilde{Y}^{t}(f,k)=0\,\}
5: ℛ←{rf∣f∈𝒞}\mathcal{R}\leftarrow\{\,r_{f}\mid f\in\mathcal{C}\,\}
6: D′←∅D^{\prime}\leftarrow\emptyset
7: for k←0k\leftarrow 0 to KK do
8:   for all f∈Dcombf\in D_{\text{comb}} in topological order do
9:    AddTaintConstraint(D′D^{\prime}, ff, kk, τ\tau, 𝒞\mathcal{C})   
10:   for all q∈Ddffq\in D_{\text{dff}} with input dd do
11:    Add constraint to D′D^{\prime}: qt​(k+1)=dt​(k)q^{t}(k{+}1)=d^{t}(k)   
12: Add constraint to D′D^{\prime}: ysinkt​(K)=0y^{t}_{\text{sink}}(K)=0
13: 𝑚𝑜𝑑𝑒𝑙←MaxSAT(D′,min∑rf∈ℛrf)\mathit{model}\leftarrow\textsc{MaxSAT}(D^{\prime},\ \min\sum_{r_{f}\in\mathcal{R}}r_{f})
14: for all f∈𝒞f\in\mathcal{C} with 𝑚𝑜𝑑𝑒𝑙⁡(rf)=1\mathit{model}(r_{f})=1 do
15:   Γf←∅\Gamma_{f}\leftarrow\emptyset
16:   for k←0k\leftarrow 0 to KK do
17:    if 𝑚𝑜𝑑𝑒𝑙⁡(Sf,k​(Xt​(f,k)))=1\mathit{model}(S_{f,k}(X^{t}(f,k)))=1 then
18:      Γf←Γf∪{𝑚𝑜𝑑𝑒𝑙⁡(Xt​(f,k))}\Gamma_{f}\leftarrow\Gamma_{f}\cup\{\mathit{model}(X^{t}(f,k))\}      
19:   ft←𝖱𝖾𝖿𝗂𝗇𝖾⁡(ft,Γf)f^{t}\leftarrow\mathsf{Refine}(f^{t},\Gamma_{f}) ⊳\triangleright batch refinement, Eq. (12)
Algorithm 3 Single-frame Max-SAT refinement.
1: Design D=(Dcomb,Ddff)D=(D_{\text{comb}},D_{\text{dff}}) and its current taint logic {ft}\{f^{t}\}; precise taint logic {f~t}\{\tilde{f}^{t}\}; spurious cex trace τ\tau of length KK; sink signal ysinky_{\text{sink}}
2: Yt←Sim​(D,{ft},τ,K)Y^{t}\leftarrow\textsc{Sim}(D,\{f^{t}\},\tau,K) ⊳\triangleright full trace of (D,{ft})(D,\{f^{t}\}) on τ\tau
3: Y~t←Sim​(D,{f~t},τ,K)\tilde{Y}^{t}\leftarrow\textsc{Sim}(D,\{\tilde{f}^{t}\},\tau,K) ⊳\triangleright full trace of (D,{f~t})(D,\{\tilde{f}^{t}\}) on τ\tau
4: for k←0k\leftarrow 0 to KK do
5:   if ysinkt=0y^{t}_{\text{sink}}=0 in Yt​(K)Y^{t}(K) then
6:    break   
7:   𝒞k←{f∈Dcomb∣Yt​(f,k)=1​ and ​Y~t​(f,k)=0}\mathcal{C}_{k}\leftarrow\{\,f\in D_{\text{comb}}\mid Y^{t}(f,k)=1\text{ and }\tilde{Y}^{t}(f,k)=0\,\}
8:   ℛk←{rf∣f∈𝒞k}\mathcal{R}_{k}\leftarrow\{\,r_{f}\mid f\in\mathcal{C}_{k}\,\}
9:   if k<Kk<K then
10:    ℱ←{q∈Ddff∣Yt​(q,k+1)=1​ and ​Y~t​(q,k+1)=0}\mathcal{F}\leftarrow\{\,q\in D_{\text{dff}}\mid Y^{t}(q,k{+}1)=1\text{ and }\tilde{Y}^{t}(q,k{+}1)=0\,\}
11:    Φk←(ℱ=𝟎)\Phi_{k}\leftarrow(\mathcal{F}=\mathbf{0})
12:   else
13:    Φk←(ysinkt​(K)=0)\Phi_{k}\leftarrow(y^{t}_{\text{sink}}(K)=0)   
14:   Dk′←∅D^{\prime}_{k}\leftarrow\emptyset
15:   for all f∈Dcombf\in D_{\text{comb}} in topological order do
16:    AddTaintConstraint(Dk′D^{\prime}_{k}, ff, kk, τ\tau, 𝒞k\mathcal{C}_{k})   
17:   for all q∈Ddffq\in D_{\text{dff}} with data input dd do
18:    Add constraint to Dk′D^{\prime}_{k}: qt​(k+1)=dt​(k)q^{t}(k{+}1)=d^{t}(k)   
19:   Add constraint to Dk′D^{\prime}_{k}: Φk\Phi_{k}
20:   𝑚𝑜𝑑𝑒𝑙←MaxSAT(Dk′,min∑rf∈ℛkrf)\mathit{model}\leftarrow\textsc{MaxSAT}(D^{\prime}_{k},\ \min\sum_{r_{f}\in\mathcal{R}_{k}}r_{f})
21:   for all f∈𝒞kf\in\mathcal{C}_{k} with 𝑚𝑜𝑑𝑒𝑙⁡(rf)=1\mathit{model}(r_{f})=1 do
22:    if 𝑚𝑜𝑑𝑒𝑙⁡(Sf,k​(Xt​(f,k)))=1\mathit{model}(S_{f,k}(X^{t}(f,k)))=1 then
23:      ft←𝖱𝖾𝖿𝗂𝗇𝖾⁡(ft,𝑚𝑜𝑑𝑒𝑙⁡(Xt​(f,k)))f^{t}\leftarrow\mathsf{Refine}(f^{t},\mathit{model}(X^{t}(f,k)))      
24:   Yt←Sim​(D,{ft},τ,K)Y^{t}\leftarrow\textsc{Sim}(D,\{f^{t}\},\tau,K)

VI-C2 Single-Frame Approach

The unroll approach solves a single Max-SAT instance over the entire unrolled trace, which can be expensive for large KK. The single-frame approach instead solves a sequence of much smaller Max-SAT instances, one timeframe at a time in a forward manner, while re-simulating the full trace after each refinement update. The core idea of the single-frame approach lies in the observation of how false taints are propagated across timeframes in the design. False taints persist across time because DFF taints simply forward from one frame to the next. As a result, a false taint at frame kk can be propagated to later frames through tainted state. The single-frame approach exploits this structure: going forward, at an intermediate frame, instead of directly forcing the sink to be untainted, we force the next-state DFF outputs that are falsely tainted to be untainted. Untainting these falsely tainted DFFs prevents their taints from being propagated into future frames and maintains the invariant that at the current frame, there is no incoming false taint from the DFFs, allowing a single-frame Max-SAT reasoning. For a cex, this approach does guarantee an optimum refinement in the single frame w.r.t. the falsely tainted DFFs but not the optimum refinement to the sink taint, which might be in several timeframes later. As will be demonstrated in Section IX, with slight optimality loss on the refinement, the single-frame approach achieves significant refinement-step speed-up and scalability improvement compared to the unroll approach.

The main algorithm of the single-frame approach is shown in Algorithm 3. At each frame kk, we form a per-frame candidate set 𝒞k\mathcal{C}_{k} and the corresponding fix variables ℛk\mathcal{R}_{k} (lines 6–7). We then construct a per-frame Max-SAT instance Dk′D^{\prime}_{k} using the same guarded mux encoding as in the unroll approach (via AddTaintConstraint in Algorithm 1), but instantiated only for frame kk (lines 14–17). The key difference from unrolling is the constraint Φk\Phi_{k}: for intermediate frames (k<Kk<K), we constrain the set of falsely tainted DFF outputs at the next frame to be cleared, i.e., Φk≡(ℱk+1=𝟎)\Phi_{k}\equiv(\mathcal{F}_{k+1}=\mathbf{0}) (lines 8–10). For the last frame (k=Kk=K), we follow the same constraint for the sink taint ΦK≡(ysinkt​(K)=0)\Phi_{K}\equiv(y^{t}_{\text{sink}}(K)=0) (line 12) as in the unroll approach. After solving MaxSAT on Dk′D^{\prime}_{k} (line 19), we refine the taint logic of the selected blocks using the input-taint assignment realized in the model at frame kk (lines 20–22), then re-simulate the full trace under the updated taint logic (line 23). The loop terminates as soon as the sink becomes untainted; otherwise it advances to the next frame. Compared to Algorithm 2, this approach avoids a large KK-frame Max-SAT instance and is typically more scalable, at the expense of potentially selecting a non-minimal refinement set.

VII Implementation

We instantiate the general CEGAR-T framework on CellIFT-style [6] instrumentation of RTL designs, where the taint logic is instrumented for cells (adder, multiplexer, etc.). The original CellIFT constructs precise taint logic at the bit-level, where each signal bit is associated with a taint bit. In contrast, our prototype adopts a word-level variant, where each multi-bit RTL word is associated with one taint bit. We chose CellIFT as the basis of our prototype because it is a state-of-the-art hardware IFT framework and provides an open-source reference implementation. The choice of word-level taint granularity is motivated by Compass [23], which identifies taint-bit granularity as a key design dimension in RTL taint analysis. Specifically, RTL designs often declare multi-bit words, which may correspond, for example, to architectural registers or datapath input/output words. Instead of tracking information flow for each individual bit, we track the information flow of the whole word. We interpret a word as tainted when at least one of its bits is tainted. This granularity reduces the number of taint variables and the size of the instrumented taint logic. We use the following example to explain the difference between the existing bit-level CellIFT and our word-level CellIFT.

Example VII.1.

Consider a WW-bit 2:1 mux

𝗒=s?𝖻:𝖺,\mathsf{y}\;=\;s\;\mathbin{?}\;\mathsf{b}\;\mathbin{:}\;\mathsf{a},

where s∈{0,1}s\in\{0,1\} and 𝖺,𝖻,𝗒∈{0,1}W\mathsf{a},\mathsf{b},\mathsf{y}\in\{0,1\}^{W}.

Precise Bit-level CellIFT

CellIFT-style bit-level tracking uses one taint bit per data bit. Let 𝖺t,𝖻t,𝗒t∈{0,1}W,st∈{0,1}\mathsf{a}^{t},\mathsf{b}^{t},\mathsf{y}^{t}\in\{0,1\}^{W},s^{t}\in\{0,1\} denote the per-bit taint vectors for 𝖺,𝖻,𝗒,s\mathsf{a},\mathsf{b},\mathsf{y},s, respectively. Then the precise taint logic is

𝗒t=(s?𝖻t:𝖺t)+st⋅(𝖺t+𝖻t+(𝖺⊕𝖻)),\mathsf{y}^{t}\;=\;\bigl(s\;\mathbin{?}\;\mathsf{b}^{t}\;\mathbin{:}\;\mathsf{a}^{t}\bigr)\;+\;s^{t}\cdot\Bigl(\mathsf{a}^{t}+\mathsf{b}^{t}+(\mathsf{a}\oplus\mathsf{b})\Bigr),

where ++, ⋅\cdot, and ⊕\oplus on vectors are interpreted bit-wise.

Precise Word-level CellIFT

We use one taint bit per word (at,bt,yta^{t},b^{t},y^{t}). The precise word-level taint logic is

yt=(s?bt:at)+st⋅(at+bt+(𝖺≠𝖻)).y^{t}\;=\;(s\;\mathbin{?}\;b^{t}\;\mathbin{:}\;a^{t})\;+\;s^{t}\cdot\bigl(a^{t}+b^{t}+(\mathsf{a}\neq\mathsf{b})\bigr).

For CEGAR-T, word-level granularity is also a practical sweet spot that enables scalable automated refinement and optimization. In the general framework, refinement is expressed via an operator 𝖱𝖾𝖿𝗂𝗇𝖾\mathsf{Refine} that involves existential quantification. Implementing 𝖱𝖾𝖿𝗂𝗇𝖾\mathsf{Refine} efficiently for bit-level formulas is nontrivial and often requires additional computation or dedicated data structures  [39, 40] to perform existential quantification. With a fixed macro-cell library, one alternative is to explicitly construct the refinement lattice for each supported cell type offline and store simplified taint logic at each lattice node, so that online refinement becomes a lightweight hot-swap between precomputed nodes. The challenge is that the lattice size grows exponentially in the number of input taint bits of the cell. Word-level taint bounds this growth by the number of input words of a cell. In our supported library, the maximum number of input words is three (e.g., a mux with two data inputs and one select word). In fact, the largest refinement lattice for the supported cell types has only eight nodes. This makes explicit lattice construction practical and keeps refinement computation lightweight.

We implemented the CEGAR-T prototype in C++. We use Yosys [41] for its Verilog front-end and RTLIL IR. For each refinement step, we solve the encoded Max-SAT instances using Z3’s optimization engine [42, 38].

VIII CEGAR-T-based Simulation Worflow

Fig. 4: Two-phase simulation-based IFT. It terminates upon detecting true leakage or after exhausting the tests.

We now explain how CEGAR-T can be used in simulation-based IFT.

Given that we have an automated spuriousness check, each spurious cex does not have to result in a refinement; we could choose to just report it as being spurious and move on to the next simulation test. However, if we start with the simplest, most imprecise taint logic, almost all the initial tests will result in spurious cex and the simulation run time will be dominated by the spuriousness check time. This motivates our two-phase workflow shown in Figure 4. In the Refinement Phase, spurious cex are expected to be frequent so each detected spurious cex is used to refine the taint logic and eliminate a class of similar false positives. Once the spurious cex are relatively rare and their checking overhead is negligible, we transition to the second Fast-Simulation Phase. In this Phase, the refined taint logic is fixed and used for large-scale validation. Any remaining spurious cex are checked and reported, but they no longer trigger refinement that could slow the simulation throughput. We use two different simulators in these phases: Icarus Verilog with lower compilation time for the Refinement Phase11 1 Since a refinement changes the taint logic and requires recompilation, we choose Icarus to minimize the compilation overhead. and Verilator, which has higher throughput but incurs higher compilation overhead, for the Fast-Simulation Phase.

IX Evaluation

We consider the safe instruction set problem (SISP) [26, 27], which is proposed for specifying the constant-time execution property of a processor on a given safe instruction set that consists of constant-time instructions. Our benchmarks include two open-source RISC-V in-order cores (1) Ibex [28], and (2) Rocket [29], as well as the out-of-order one (3) BOOM [20] across its Small, Medium, Large, and Mega configurations. Following the setup in [26, 27], without modeling memory, we target ibex_top, Rocket, and BoomCore modules for Ibex, Rocket, and BOOM variants, respectively. We model SISP as an information-flow property with the register-file data as the source and the instruction-commit signal (a proxy for timing) as the sink, assuming only safe instructions are executed.

We evaluate CEGAR-T for checking SISP following the workflow in Section VIII. Our evaluation asks whether CEGAR-T can derive a lightweight taint logic that preserves SISP-relevant precision while reducing the cost of downstream simulation-based IFT. We remark that, for the RTL modules considered, there is no standard benchmark suite, fuzzer, or off-the-shelf testbench tailored to safe-instruction-only validation. We therefore construct a simulation testbench that generates safe-instruction-only random tests for each evaluated core. Specifically, the testbench runs BB tests, each consisting of NN randomly generated safe instructions.

We also applied the workflow to tests that include unsafe instructions. In those cases, the spuriousness check detects true information leakage already in the Refinement Phase, causing the workflow to terminate without proceeding to the Fast-Simulation Phase. Since our evaluation is intended to measure the simulation-speed benefits of the Fast-Simulation Phase with the optimized taint logic, we focus the reported experiments on safe-instruction only.

All experiments are conducted on a MacOS machine with a 4.5 GHz Apple M4 Max CPU and 36 GB memory.

IX-A Runtime and Taint Logic Reduction Analysis

Fig. 5: Runtime breakdown of CEGAR-T on different cores. The vertical axis uses log-scale for total runtime, while the breakdown within each bar is drawn linearly to bar length for better visualization.
Fig. 6: Cell count overhead comparison. The geo-mean cell-count ratios for CellIFT-B, CellIFT-W, Frame, and Unroll are 5.64, 4.99, 1.42, and 1.31, respectively.
Fig. 7: Gate count overhead comparison. The geo-mean of the gate-count ratios for CellIFT-B, CellIFT-W, Frame, and Unroll are 3.77, 1.80, 1.04, and 1.03, respectively.

We evaluate CEGAR-T using the random safe-instruction testbench with (N,B)=(20,60​K)(N,B)=(20,60K). The parameters are chosen empirically to provide sufficient opportunities to expose spurious cex and drive refinement. We set a 12-hour timeout for each run.

Figure 5 shows the runtime breakdown of the refinement process into cex generation (Cex-Gen), Max-SAT solving (Max-SAT), and other tasks (Others). The Unroll results of Medium, Large, and Mega BOOM time out and are omitted. Bar labels (# iters, # fixes) denote the number of iterations and refined cells; e.g., (19, 751) for Mega-BOOM Frame.

Frame scales across all evaluated cores, whereas Unroll handles the in-order cores and Small-BOOM but fails to scale to the larger BOOM variants. This gap is due to the higher Max-SAT cost for the fully unrolled design. For Unroll, Max-SAT grows substantially with core complexity and becomes a major runtime bottleneck. For Frame, runtime is dominated by Cex-Gen and Max-SAT remains a small fraction of the total, showing its effectiveness. The (# iters, # fixes) labels further illustrate the tradeoff between the two refinement algorithms. Unroll consistently requires fewer refined cells than Frame, consistent with its global optimization over the full unrolled trace. In contrast, Frame often needs fewer refinement iterations, likely because refining falsely tainted DFFs early in the trace can suppress false taint propagation in later cycles and eliminate additional spurious counterexamples at once. Together, these results suggest that Frame is the practical scalable choice for refinement, while Unroll can provide stronger per-cex optimization for cases where it does not time out.

We compare the optimized taint logic against both the original bit-level (CellIFT-B) and word-level (CellIFT-W) precise CellIFT baseline. We implemented CellIFT-W as the corresponding precise word-level taint logic without CEGAR-T optimization to enable a fair-comparison with CEGAR-T which introduces taint logic at the word level. To quantify the taint logic reduction achieved, we measure both cell count and gate count after lowering the taint-instrumented design to gate level. Cell count reflects design complexity and correlates with RTL simulation overhead, whereas gate count approximates the cost of physical implementation of the taint logic (e.g., in hardware emulation). Figure 6 reports the cell-count overhead normalized to the original design without taint logic. The gate-count results are similar and are shown in Figure 7. Across both metrics, Unroll and Frame yield substantially smaller taint-logic overhead than both CellIFT-B and CellIFT-W.

IX-B Downstream Simulation-based IFT

We next evaluate the end-to-end simulation runtime of the taint logic produced by the Refinement Phase. In the Fast-Simulation Phase, we use the same workload with (N,B)=(50,200​K)(N,B)=(50,200K) to stress the taint logic under substantially larger validation runs. In addition to CellIFT-B and CellIFT-W, we include a baseline (No-Refine) that directly uses the initial imprecise taint logic without refinement. The CellIFT-W baseline isolates the effect of optimized taint logic on raw simulation runtime, whereas No-Refine isolates the cost of low precision in end-to-end validation, where tainted traces incur spuriousness-check overhead.

Figure 8 shows the simulation slowdown normalized to the original design. As the state-of-the-art precise baseline, CellIFT-B incurs huge slowdown across the evaluated cores, especially on the larger BOOM configurations. The precise word-level baseline CellIFT-W reduces this cost, but still remains substantially slower than the original design. At the other extreme, No-Refine directly uses the initial imprecise taint logic and is slower than CellIFT-W on every evaluated core, suggesting that the low raw simulation cost of No-Refine can be outweighed by frequent spuriousness checks, which account for over 70% of the total runtime. This shows that improving precision is also necessary for efficient simulation-based IFT. In contrast, Frame achieves much lower slowdown by improving both sides of the tradeoff. It uses a more lightweight taint logic than the precise CellIFT baselines and avoids the large spuriousness-check overhead of No-Refine. Unroll shows results on the cores for which the Refinement Phase completes.

We also measure empirical precision by counting the number of spurious cex. Both CellIFT-B and CellIFT-W report zero spurious cex on all evaluated cores. Frame remains very close to these baselines, reporting at most two tainted cex, while Unroll reports at most three on the cores. Detailed per-core counts are given in Appendix A. Across all the tests, there is no true cex, and therefore all the evaluated cores satisfy the SISP for these tests.

Although our evaluation focuses on SISP for processors, the same two-phase workflow applies to other information-flow properties and hardware designs. Most security properties have a small attacker-observable sink relative to the full design. Even when the source can influence many internal signals, validation only requires sufficient taint precision along the logic relevant to the sink to avoid false positives. CEGAR-T exploits this structure by refining only the relavant local taint logic to the propagation of taint reaching sink, rather than committing to fully precise ones upfront. Although the specific refinements may differ across designs and properties, we expect similar reductions in instrumentation size and simulation time overhead.

Fig. 8: Simulation slowdown with different taint logics. The geo-mean slowdown ratio for No-Refine, CellIFT-B, CellIFT-W, Frame, and Unroll are 67.17, 34.65, 6.16, 1.79, and 1.60, respectively.

IX-C Refinement Analysis: A Case Study

We analyze the refinements performed by CEGAR-T on Small-BOOM as a case study. Across the run, refinements primarily tighten how taint propagates through selection logic: the vast majority of refinements target MUX (multiplexer), with only a small number applied to other cells. This indicates that, in Small-BOOM, the main source of imprecision is the overly imprecise taint logic of MUXes, which can propagate taint from values on paths not selected by the selecting signal in the MUXes.

Primary refined targets

In Small-BOOM, the dominant refined blocks fall into three categories: (i) register-read and bypass logic, where operands are selected among regfile read ports, bypass paths, and the constant-zero behavior of rf[0], (ii) control/datapath selection cascades, where downstream control decisions are formed by selecting among multiple candidate conditions and outcomes, and (iii) selection logic around data arrays, where an address-based read is realized as a MUX tree. In each case, refinements make the taint logic path-sensitive, i.e., a tainted value that is not chosen by a MUX should not taint the output. This prevents false taints from propagating through tainted state into unrelated control signals and ultimately the sink.

In our run, refinements for categories (i) and (ii) are typically local: each cex triggers a small amount of MUX fixes near the corresponding select logic. In contrast, refinements for category (iii) can trigger a substantially larger refinement. In Small-BOOM, this appears in later iterations with hundreds of MUX fixes. With an imprecise taint logic in a MUX tree, taint from any leaf can taint internal MUX signals even when that leaf is not selected. Repeating this across levels can make the tree output tainted whenever any leaf is tainted, regardless of it being selected or not. Consequently, correcting this behavior requires refining many MUXes in the tree, since spurious taint can be introduced locally at many internal MUX outputs.

Limitations of the Frame approach.

A limitation of the Frame approach is that refinements are driven by removing falsely tainted DFFs in the next frame, which can induce extra refinements that are unneeded to remove sink taint. E.g., Small-BOOM includes debug-related states and memories whose outputs do not functionally affect the instruction commit signal. Nevertheless, those DFFs can still become falsely tainted due to imprecise taint logic and thus be targeted by refinement. This can be mitigated by making Frame refinements more property-directed, e.g., by applying cone-of-influence reduction on the unrolled design so that refinements target DFFs that structurally influence the sink.

X Discussion

Optimality of CEGAR-T Refinements

The CEGAR-T Unroll and Frame approaches compute optimal refinements only within their respective scopes. The Unroll approach minimizes the number of blocks refined for a given cex trace, while the Frame approach minimizes refinements for each time frame within the counterexample. As discussed in Section IX-A, Unrolled typically achieves fewer total refinements than Frame, though at greater computational cost for large bounds KK. Neither approach guarantees a global, minimal refinement across all counterexamples. Determining such a global optimum would require solving a single Max-SAT instance encoding all observed counterexamples. However, this may be computationally prohibitive as it compounds the existing scalability challenges already present in individual unrolled traces for large KK.

Limitations from word-level taint tracking

Our instantiation optimizes word-level taint logic, which is a deliberate design point for managing both taint-logic size and optimization-time. However, word-level analysis introduces irreducible imprecision. If any bit within a word is influenced by secrets, the entire word is treated as tainted for word-level taint method. This can yield spurious propagation in common patterns such as packed fields, masking, bit-slicing, etc. As a result, while not encountered in our evaluation, some spurious cex exist only due to word-level coarse granularity. Also, the learned refinements may compensate for word-level over-approximation rather than capturing the bit-precise flow. Despite this, our word-level approach remains valuable as it systematically removes spurious taint for a given security property while preserving scalability.

XI Related Work

Hardware Information Flow Tracking

Prior work on hardware IFT has explored self-composition, taint analysis, as well as hybrid approaches that combine both methods. The self-composition [30] and, taint analysis approaches at different abstraction levels [12, 13, 6], and their optimization [21, 22, 14, 23] are discussed in Section I.

Secure Processor Verification Frameworks

Prior work on secure processor verification has largely been developed in self-composition-based formal verification settings. One line of work studies secure speculation through hardware–software contracts [43] using frameworks such as [44, 45, 46]. These contract-based properties are outside the scope of our evaluation because they cannot be expressed directly as a single source-to-sink information-flow property. Another line of work studies constant-time processor verification through the safe instruction set problem (SISP) [26, 27] with self-composition and invariant synthesis. In contrast, our work also targets processor verification under SISP, but focuses on simulation-based IFT rather than self-composition-based formal verification.

Max-SAT for Design Debugging and Diagnosis.

Max-SAT has been used extensively in VLSI debugging/diagnosis to explain failing traces by selecting a minimum set of suspect fault sites [47, 48, 49]. We use Max-SAT inside a CEGAR loop to select a minimum-cost taint-logic refinements that eliminate spurious information-flow counterexamples, rather than to localize functional bugs.

XII Conclusion

We presented CEGAR-T, a fully automated framework for property-driven taint-logic optimization. The core contribution of CEGAR-T is a principled and automated refinement step that turns taint-logic optimization from a heuristic, human-driven process into a systematic optimization framework. To this end, we formalized taint-logic precision using non-interference semantics, characterized the refinement space through a lattice-like structure, and developed an automated refinement procedure that optimizes both how to refine, via the refinement lattice, and where to refine, via Max-SAT. We further introduced two complementary refinement algorithms, the Unroll and the Single-Frame approaches, that offer different optimality–scalability tradeoffs. Our evaluation demonstrates that CEGAR-T reduces taint logic overhead by 91.32%/89.88% compared to bit-level CellIFT and its word-level variant, and achieves up to 19.35×\times/3.44×\times corresponding speedups in simulation-based IFT. By significantly reducing the simulation overhead, CEGAR-T advances the scalability of taint-based security verification, opening the door for full industrial adoption.

References

  • [1] P. Kocher, J. Horn, A. Fogh, D. Genkin, D. Gruss, W. Haas, M. Hamburg, M. Lipp, S. Mangard, T. Prescher, M. Schwarz, and Y. Yarom (2019) Spectre attacks: exploiting speculative execution. In Proceedings of the IEEE Symposium on Security and Privacy (SP), External Links: Document Cited by: §I.
  • [2] M. Lipp, M. Schwarz, D. Gruss, T. Prescher, W. Haas, A. Fogh, J. Horn, S. Mangard, P. Kocher, D. Genkin, Y. Yarom, and M. Hamburg (2018) Meltdown: reading kernel memory from user space. In Proceedings of the ACM USENIX Security Symposium, Cited by: §I.
  • [3] J. V. Bulck, M. Minkin, O. Weisse, D. Genkin, B. Kasikci, F. Piessens, M. Silberstein, T. F. Wenisch, Y. Yarom, and R. Strackx (2018) Foreshadow: Extracting the Keys to the Intel SGX Kingdom with Transient Out-of-Order Execution. In Proceedings of the USENIX Security Symposium (USENIX Security), pp. 991–1008. Cited by: §I.
  • [4] M. Schwarz, M. Lipp, D. Moghimi, J. V. Bulck, J. Stecklina, T. Prescher, and D. Gruss (2019) ZombieLoad: Cross-Privilege-Boundary Data Sampling. In Proceedings of the ACM SIGSAC Conference on Computer and Communications Security (CCS), pp. 753–768. Cited by: §I.
  • [5] H. Ragab, A. Milburn, K. Razavi, H. Bos, and C. Giuffrida (2021) CrossTalk: Speculative Data Leaks Across Cores Are Real. In Proceedings of the IEEE Symposium on Security and Privacy (SP), pp. 1852–1867. Cited by: §I.
  • [6] F. Solt, B. Gras, and K. Razavi (2022) CellIFT: leveraging cells for scalable and precise dynamic information flow tracking in RTL. In Proceedings of the ACM USENIX Security Symposium (USENIX Security), pp. 2549–2566. Cited by: §I, §I, §I, §I, §I, §XI, §III-C, §V-A, §V, §VI, §VII.
  • [7] R. Kibria, F. Farahmandi, and M. Tehranipoor (2024) A Survey on SoC Security Verification Methods at the Pre-silicon Stage. Note: Cryptology ePrint Archive, Paper 2024/1280 External Links: Link Cited by: §I.
  • [8] T. Rahman, S. Saha, A. Y. Alhurubi, S. K. Saha, F. Farahmandi, and M. Tehranipoor (2026) Emulation-based System-on-Chip Security Verification: Challenges and Opportunities. External Links: 2604.15073, Link Cited by: §I.
  • [9] M. Ghaniyoun, K. Barber, Y. Zhang, and R. Teodorescu (2021) INTROSPECTRE: A Pre-Silicon Framework for Discovery and Analysis of Transient Execution Vulnerabilities. In Proceedings of the ACM/IEEE International Symposium on Computer Architecture (ISCA), pp. 874–887. Cited by: §I.
  • [10] J. Hur, S. Song, S. Kim, and B. Lee (2022) SpecDoctor: Differential Fuzz Testing to Find Transient Execution Vulnerabilities. In Proceedings of the ACM SIGSAC Conference on Computer and Communications Security (CCS), pp. 1473–1487. Cited by: §I, §I.
  • [11] W. Hu, A. Ardeshiricham, and R. Kastner (2021) Hardware information flow tracking. ACM Computing Surveys (CSUR). Cited by: §I, §I.
  • [12] M. Tiwari, H. M.G. Wassel, B. Mazloom, S. Mysore, F. T. Chong, and T. Sherwood (2009) Complete information flow tracking from the gates up. In Proceedings of the ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), pp. 109–120. Cited by: §I, §I, §XI, §III-C, §III-C, §V-A, §V-C, §V.
  • [13] A. Ardeshiricham, W. Hu, J. Marxen, and R. Kastner (2017) Register transfer level information flow tracking for provably secure hardware design. In Design, Automation & Test in Europe Conference & Exhibition (DATE), Vol. , pp. 1691–1696. Cited by: §I, §I, §XI, §III-C, §V.
  • [14] W. Hu, A. Ardeshiricham, M. S. Gobulukoglu, X. Wang, and R. Kastner (2018) Property specific information flow analysis for hardware security verification. In Proceedings of the International Conference on Computer-Aided Design (ICCAD), pp. 1–8. Cited by: §I, §I, §XI.
  • [15] A. Meza, F. Restuccia, J. Oberg, D. Rizzo, and R. Kastner (2023) Security Verification of the OpenTitan Hardware Root of Trust. IEEE Security & Privacy 21 (4), pp. 27–35. Cited by: §I.
  • [16] Cycuity Team (2021) Information flow analysis: tracking information through hardware designs. Note: Cycuity BlogAccessed: 2026-01-04 External Links: Link Cited by: §I.
  • [17] Cycuity, Inc. (2022) RADIX automated security verification: overview. Note: Data sheetCopyright 2022. Accessed: 2026-01-04 External Links: Link Cited by: §I.
  • [18] J. Xu, Y. Zhou, X. Zhang, Y. Li, Q. Tan, Y. Zhang, Y. Zhou, R. Chang, and W. Shen (2025) DejaVuzz: Disclosing Transient Execution Bugs with Dynamic Swappable Memory and Differential Information Flow Tracking Assisted Processor Fuzzing. In Proceedings of the 30th ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), pp. 64–80. Cited by: §I.
  • [19] M. R. Clarkson and F. B. Schneider (2010) Hyperproperties. Journal of Computer Security. Cited by: §I, §III-B.
  • [20] J. Zhao, B. Korpan, A. Gonzalez, and K. Asanovic (2020) SonicBOOM: the 3rd generation berkeley out-of-order machine. In Fourth Workshop on Computer Architecture Research with RISC-V, Cited by: §I, §I, §IX.
  • [21] W. Hu, A. Becker, A. Ardeshiricham, Y. Tai, P. Ienne, D. Mu, and R. Kastner (2016) Imprecise security: quality and complexity tradeoffs for hardware information flow tracking. In Proceedings of the International Conference on Computer-Aided Design (ICCAD), pp. 1–8. Cited by: §I, §XI, §V-C, §V-C.
  • [22] A. Becker, W. Hu, Y. Tai, P. Brisk, R. Kastner, and P. Ienne (2017) Arbitrary precision and complexity tradeoffs for gate-level information flow tracking. In Proceedings of the Design Automation Conference (DAC), pp. 1–6. Cited by: §I, §XI, §V-C.
  • [23] Y. Yang, Q. Tan, T. Bourgeat, S. Malik, and M. Yan (2026) Compass: navigating the design space of taint schemes for rtl security verification. In Proceedings of the ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), pp. 442–458. Cited by: §I, §XI, §II-A, §II-A, §III-C, §VII.
  • [24] E. Clarke, O. Grumberg, S. Jha, Y. Lu, and H. Veith (2000) Counterexample-guided abstraction refinement. In Proceedings of the International Conference on Computer Aided Verification (CAV), Cited by: §I, §II-A.
  • [25] C. M. Li and F. Manyà (2021) MaxSAT, Hard and Soft Constraints. In Handbook of Satisfiability, A. Biere, M. Heule, H. van Maaren, and T. Walsh (Eds.), Note: Chapter preprint of the 2nd edition Cited by: §I, §II-B.
  • [26] S. Dinesh, M. Parthasarathy, and C. W. Fletcher (2024) ConjunCT: learning inductive invariants to prove unbounded instruction safety against microarchitectural timing attacks. In Proceedings of the IEEE Symposium on Security and Privacy (SP), pp. 3735–3753. Cited by: §I, §XI, §IX.
  • [27] S. Dinesh, Y. Zhu, and C. W. Fletcher (2025) H-houdini: scalable invariant learning. In Proceedings of the ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), pp. 603–618. Cited by: §I, §XI, §IX.
  • [28] Ibex: an embedded 32 bit risc-v cpu core.. Note: https://github.com/lowRISC/ibex Cited by: §I, §IX.
  • [29] K. Asanović, R. Avizienis, J. Bachrach, S. Beamer, D. Biancolin, C. Celio, H. Cook, D. Dabbelt, J. Hauser, A. Izraelevitz, S. Karandikar, B. Keller, D. Kim, J. Koenig, Y. Lee, E. Love, M. Maas, A. Magyar, H. Mao, M. Moreto, A. Ou, D. A. Patterson, B. Richards, C. Schmidt, S. Twigg, H. Vo, and A. Waterman (2016) The rocket chip generator. Technical report Technical Report UCB/EECS-2016-17, EECS Department, University of California, Berkeley. External Links: Link Cited by: §I, §IX.
  • [30] G. Barthe, P. R. D’argenio, and T. Rezk (2011) Secure information flow by self-composition. Mathematical Structures in Computer Science 21 (6), pp. 1207–1252. Cited by: §XI, §III-B.
  • [31] W. Hu, J. Oberg, A. Irturk, M. Tiwari, T. Sherwood, D. Mu, and R. Kastner (2011) Theoretical fundamentals of gate level information flow tracking. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems. Cited by: §III-C.
  • [32] F. Bacchus, M. Järvisalo, and R. Martins (2021) Maximum satisfiability. In Handbook of satisfiability, pp. 929–991. Cited by: §III-D.
  • [33] C. Ansótegui, M. L. Bonet, and J. Levy (2013) SAT-based maxsat algorithms. Artificial Intelligence 196, pp. 77–105. External Links: Document Cited by: §III-D, §III-D.
  • [34] R. Martins, V. Manquinho, and I. Lynce (2014) Open-wbo: a modular MaxSAT solver. In Proceedings of the International Conference on Theory and Applications of Satisfiability Testing (SAT), pp. 438–445. Cited by: §III-D, §III-D.
  • [35] A. Ignatiev, A. Morgado, and J. Marques-Silva (2019) RC2: an efficient MaxSAT solver. Journal on Satisfiability, Boolean Modeling and Computation 11 (1), pp. 53–64. External Links: Document Cited by: §III-D, §III-D.
  • [36] J. Davies and F. Bacchus (2011) Solving MAXSAT by solving a sequence of simpler SAT instances. In Proceedings of the International Conference on Principles and Practice of Constraint Programming (CP), pp. 225–239. Cited by: §III-D, §III-D.
  • [37] Z. Fu and S. Malik (2006) On solving the partial max-sat problem. In Proceedings of the International Conference on Theory and Applications of Satisfiability Testing (SAT), A. Biere and C. P. Gomes (Eds.), pp. 252–265. Cited by: §III-D, §III-D.
  • [38] N. Bjørner, A. Phan, and L. Fleckenstein (2015) ν\nuz-An optimizing smt solver. In Proceedings of the International conference on Tools and Algorithms for the Construction and Analysis of Systems (TACAS), pp. 194–199. Cited by: §III-D, §III-D, §VII.
  • [39] R. E. Bryant (1992) Symbolic boolean manipulation with ordered binary-decision diagrams. ACM Computing Surveys (CSUR) 24 (3), pp. 293–318. Cited by: §VII.
  • [40] J. R. Jiang (2009) Quantifier elimination via functional composition. In Proceedings of the International Conference on Computer Aided Verification (CAV), pp. 383–397. Cited by: §VII.
  • [41] C. Wolf, J. Glaser, and J. Kepler (2013) Yosys-a free verilog synthesis suite. In Proceedings of the Austrian Workshop on Microelectronics (Austrochip), Cited by: §VII.
  • [42] L. De Moura and N. Bjørner (2008) Z3: an efficient smt solver. In Proceedings of the International conference on Tools and Algorithms for the Construction and Analysis of Systems (TACAS), pp. 337–340. Cited by: §VII.
  • [43] M. Guarnieri, B. Köpf, J. Reineke, and P. Vila (2021) Hardware-software contracts for secure speculation. In Proceedings of the IEEE Symposium on Security and Privacy (SP), Cited by: §XI.
  • [44] M. R. Fadiheh, A. Wezel, J. Muller, J. Bormann, S. Ray, J. M. Fung, S. Mitra, D. Stoffel, and W. Kunz (2023) An exhaustive approach to detecting transient execution side channels in rtl designs of processors. IEEE Transactions on Computers 72 (1), pp. 222–235. Cited by: §XI.
  • [45] Z. Wang, G. Mohr, K. von Gleissenthall, J. Reineke, and M. Guarnieri (2023) Specification and verification of side-channel security for open-source processors via leakage contracts. In Proceedings of the ACM SIGSAC Conference on Computer and Communications Security (CCS), pp. 2128–2142. Cited by: §XI.
  • [46] Q. Tan, Y. Yang, T. Bourgeat, S. Malik, and M. Yan (2025) RTL verification for secure speculation using contract shadow logic. In Proceedings of the ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), pp. 970–986. Cited by: §XI.
  • [47] S. Safarpour, H. Mangassarian, A. G. Veneris, M. H. Liffiton, and K. A. Sakallah (2007) Improved design debugging using maximum satisfiability. In Proceedings of the Formal Methods in Computer-Aided Design (FMCAD), pp. 13–19. Cited by: §XI.
  • [48] Y. Chen, S. Safarpour, A. Veneris, and J. Marques-Silva (2009) Spatial and temporal design debug using partial maxsat. In Proceedings of the ACM Great Lakes Symposium on VLSI (GLSVLSI), pp. 345–350. Cited by: §XI.
  • [49] Y. Chen, S. Safarpour, J. Marques-Silva, and A. G. Veneris (2010) Automated design debugging with maximum satisfiability. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems 29 (11), pp. 1804–1817. Cited by: §XI.

Appendix A Additional Figures and Tables for Evaluation

Table I shows the number of spurious cex out of 200K. Frame reports at most two tainted cex, while Unroll reports at most three on the evaluated cores. This suggests high empirical precision of the synthesized lightweight taint logic.

TABLE I: Number of spurious cex out of 200K validation tests.
Core Frame Unroll
Ibex 0 0
Rocket 2 2
Small-BOOM 0 3
Medium-BOOM 1 –
Large-BOOM 2 –
Mega-BOOM 2 –

Figure 9 reports the number of refinements in each 3000-test bucket for three representative large BOOM configurations: Medium, Large, and Mega. Across all three designs, refinements are strongly front-loaded, with the first bucket containing the majority of refinements. After this initial burst, the number of refinements drops sharply, but a sparse long tail remains, with occasional later buckets still triggering additional updates. This pattern indicates that the Refinement Phase quickly removes many easy-to-expose sources of imprecision, while some spurious counterexamples continue to arise later in the test sequence. We observe similar behavior on the other evaluated cores. Overall, this front-loaded refinement pattern matches the intended two-phase workflow. Early traces primarily drive refinement, while later traces trigger far fewer updates and motivate freezing the resulting taint logic for the Fast-Simulation.

Fig. 9: Number of refinements per 3000-test bucket during Phase I for three representative BOOM variants. The ID is indexed in the sequence of when the test is sequentially simulated.