=Paper=
{{Paper
|id=Vol-3002/paper24
|storemode=property
|title=Verification of Contact Tracing Protocols via SMT-based Model Checking and Counting Abstraction
|pdfUrl=https://ceur-ws.org/Vol-3002/paper24.pdf
|volume=Vol-3002
|authors=Sylvain Conchon,Giorgio Delzanno,Arnaud Sangnier
|dblpUrl=https://dblp.org/rec/conf/cilc/ConchonDS21
}}
==Verification of Contact Tracing Protocols via SMT-based Model Checking and Counting Abstraction==
Verification of Contact Tracing Protocols via SMT-based Model Checking and Counting Abstraction? Sylvain Conchon1 , Giorgio Delzanno2 , and Arnaud Sangnier3 1 LRI, Universitè Paris, France sylvain.conchon@lri.fr 2 DIBRIS, University of Genova, Italy giorgio.delzanno@unige.it 3 IRIF, Universitè Paris Denis Diderot, France sangnier@irif.fr Abstract. We present an automata-based model specifically devised to formalise abstractions of distributed protocols used by contact-tracing applications that combine Bluetooth and TCP/IP communication with a centralised server. The model provides pure names, store and read op- erations on both value and set variables, synchronous and asynchronous communication primitives for both kind of variables. A protocol configu- ration consists of the current state of a finite set of local states containing the states of individual devices. The transition system models the inter- action between devices in the same physical location and between a single device and possible distributed servers. We will use the resulting model to specify the logic underlying contact tracing protocols. To automati- cally validate our formal models, we employ an extension of the Cubicle infinite-state model checker based on the Alt-Ergo SMT solver. To over- come spurious results due to the application of monotone abstraction, we propose to refine the predecessor computation adopted in Cubicle by combining predicates on the Theory of Arrays (as provided by Cubicle) with Presburger predicates inferred via a counting abstraction applied on a subset of control states of individual processes. Keywords: Formal Verification, SMT, Infinite-state Model Checking, Contact Tracing Protocols 1 Introduction The goal of contact tracing is to make people aware of possible contacts with positively diagnosed people so that they should possibly have an infection test [16]. For pandemic diseases, reporting a positive diagnosis is mandatory. Con- tact tracing methods, e.g., smartphone apps, are aimed at investigating who could have been contaminated by a positively diagnosed person and alert them. After the COVID-19 pandemic, several protocols have been proposed as an au- tomated support for this task. The Pan-European Privacy-Preserving Proximity ? Copyright c 2021 for this paper by its authors. Use permitted under Creative Com- mons License Attribution 4.0 International (CC BY 4.0). Tracing (PEPP-PT) proposed both centralized and decentralized solutions. As a decentralized solution, they propose the Decentralized Privacy-Preserving Prox- imity Tracing (DP3T), and the specifications of ROBERT4 and NTK5. Both centralized and non-centralized systems require a central server for alerts and typically differ in the way ephemeral identifiers are generated. In general the system architecture is based on a smart app, a notification server as in Pub- lish/Subscribe architectures, and a possibly trusted server. An important notion here is that of ephemeral identifiers, i.e., identifiers that are frequently changed either by a trusted authority/server or by the app itself in order to reduce the risk of a malicious use of private user data from third parties such as the attacks presented in [5, 16]. Ephemeral identifiers are kept locally in the smart app. In centralized versions of the protocol, ephemeral identifiers are downloaded from a trusted server. In decentralized versions, ephemeral identifiers are created by the app. The smart app installed on the user device, e.g. the Immuni app in Italy, makes use of the Bluetooth interface to broadcast the currently valid ephemeral identifier. The communication range of the Bluetooth interface is tuned so as to reach the distance for a possible contagious contact. The app collects all identi- fiers received by other apps located in the same physical place and stores them locally. Identifiers whose temporal marks fall out of the incubation period are deleted from memory. When users are diagnosed to be infected, they can re- lease a report to the shared server. The server is used to make the report (a log containing ephemeral identifiers) available to each user interested in checking potential contacts with infected users. This step can be implemented in several different ways depending on the system architecture and on the role of the au- thority in the whole process. One possibility is to send the report to a central log database. Users can then consult the database to check if they crossed their way with infected users, i.e., they share some ephemeral identifier with one of them. Building up on the formalization of decentralized protocols in [1], in this pa- per we present an automata-based formal model of distributed systems specifi- cally devised to formalise abstractions of Contact Tracing Protocols that com- bine Bluetooth and network communication. The model combines pure names, read/write operations on first-order and higher-order variables and synchronous communication primitives. The transition system models the interaction between devices in the same physical location and between a single device and a notifi- cation server. To automatically validate protocols in our formalism, we resort to an exten- sion of the Cubicle SMT-based infinite-state model checker. Cubicle is a model checker that can be applied to verify safety properties of array-based systems, a syntactically restricted class of parameterized transition systems with states represented as arrays indexed by an arbitrary number of processes [7, 15]. Cu- bicle integrates the SMT solver Alt-Ergo [4]. Cubicle input language is a typed version of Murφ [12]. A system is describe in Cubicle by: (1) a set of type, vari- able, and array declarations; (2) a formula for the initial states; and (3) a set of transitions. A system execution is defined by an infinite loop that at each 2 iteration: (1) non-deterministically chooses a transition instance whose guard is true in the current state; and (2) updates state variables according to the action of the fired transition instance. Properties of contact tracing protocols are strongly related to the consistency of global and local state information, e.g., ensure that the local user state reflects data stored in the server. Violation of this kind of property are specified via universally quantified assertions, the more difficult type of assertions for infinite- state model checking. This kind of assertions or transitions is a potential cause of undecidability already in simpler infinite-state models such as Petri Nets. To deal with universally quantified conditions, Cubicle applies monotone ab- straction in order to over-approximate the symbolic computation of predecessors states turning universally quantified preconditions into postconditions. Unfor- tunately, this approximation does not work well for the class of properties of interest for contact tracing protocols. Our proposed solution is based on the strengthening of the symbolic computation performed in Cubicle by combin- ing array-based assertions with Presburger formulas generated via a Counting Abstraction. Plan of the paper In Section 2 we introduce Data Automata as a formal model for protocols such as those used in contact tracing In Section 3 we discuss an example of contact tracing protocol specification via Data Automata. In Section 4 we present an encoding of Data Automata in the Cubicle input language with the help of our case study. In Section 5 we discuss the problems encountered with the current search strategy implemented in Cubicle and propose our solution based on a combination of array and counting assertions. In Section 6 we address conclusions and related works. 2 Contact Tracing Systems In this section we introduce a possible formalization of a decentralized contact tracing protocol. To specify the protocol rules and behaviour (computation), we will use a transition system defined on configurations consisting of a set of states of individual users. User configurations contain a local memory needed to store the list of broadcasted and collected identifiers. System configurations contain a global memory that gathers user logs and a set of user states that corresponds to the current number of registered individuals. To simplify the model, we fix the number of agents and simulate dynamic injection by randomly selecting the initial value of local clocks used to define validity of ephemeral identifiers (i.e. local clocks may have different values). Syntax We will use the following general definitions: – I is a denumerable set of pure names (identifiers) containing the undefined label ⊥; – M is a finite set of message labels (a, b, c, . . . ); 3 – V is a finite set of first order variables (identifiers) that are part of the local state of users (x, y, . . . ); – S is a finite set of second order variables (a set of identifiers) that are part of the local state of users (s, t, . . . ). We then define Act(M, V, S) the set containing the following elements: 1. Conditions: – eq(x, y) and noteq(x, y), where x, y ∈ V ; – in(x, m) and notin(x, m), where x ∈ V and m ∈ M ; 2. Operations: – local; – new(x), where x ∈ V ; – bcast(m, x) and rec(m, x), where m ∈ M, x ∈ V ; – add(x, s), where x ∈ V, s ∈ S; – reset(s), where s ∈ S; – reg(m, s), where m ∈ M, s ∈ S. A protocol is defined as an automaton P = hQ, M, V, S, R, q0 i, where q0 ∈ Q and R ⊆ Q × Act(M, S, V ) × Q. We assume here that bcast and reg actions are always defined on distinct labels in M . Semantics Consider a protocol P = hQ, M, V, S, R, q0 i. A process configuration of P is a triple pc = hq, δ, γi where: – q ∈ Q is the current user state; – δ : V → I is the current evaluation of first order variables; – γ : S → P(I) is the current evaluation of second order variables. We denote by PC the set of process configurations. A global configuration of P is then a pair (K, Θ), where K ∈ NPC is a finite multiset of process config- urations and Θ : M 7→ P(I) corresponds to a centralized memory. GC denotes the set of global configurations. For σ ∈ GC, we will use ids(σ) to denote the set of pure names occurring in σ. The operational semantics is then defined as the minimal relation →⊆ G × G that satisfies the following property definitions in which will use ] to denote multiset union: – h{hq, δ, γi} ] K, Θi → h{hq 0 , δ, γi} ] K, Θi if one of the following conditions is satisfied • hq, local, q 0 i ∈ R, • hq, eq(x, y), q 0 i ∈ R and δ(x) = δ(y) [for noteq(x, y) δ(x) 6= δ(y)], • hq, in(x, m), q 0 i ∈ R and δ(x) ∈ Θ(m) [for notin(x, y) δ(x) 6∈ Θ(m)]. – σ = h{hq, δ, γi} ] K, Θi → h{hq 0 , δ 0 , γi} ] K, Θi if hq, new(x), q 0 i ∈ R and δ 0 (x) = id 6∈ ids(σ), id 6= ⊥, and δ 0 (y) = δ(y) for x 6= y. – h{hq, δ, γi}]K, Θi → h{hq 0 , δ, γ 0 i}]K, Θi if hq, add(x, s), q 0 i ∈ R and γ 0 (s) = γ(s) ∪ {δ(x)} and γ 0 (t) = γ(t) for t 6= s. 4 – h{hq, δ, γi}]K, Θi → h{hq 0 , δ, γ 0 i}]K, Θi if hq, reset(s), q 0 i ∈ R and γ 0 (s) = ∅ and γ 0 (t) = γ(t) for t 6= s. – h{hq, δ, γi} ] K, Θi → h{hq 0 , δ, γi} ] K, Θ0 i if hq, reg(m, s), q 0 i ∈ R and Θ0 (m) = Θ(m) ∪ γ(s) and Θ0 (n) = Θ(n) for n 6= m. – h{hq, δ, γi, hq1 , δ1 , γ1 i, . . . , hqk , δk , γik } ] K, Θi → h{hq 0 , δ, γi, hq10 , δ10 , γ1 i, . . . , hqk0 , δk0 , γk i} ] K, Θi if k ≥ 0 holds, the transition hq, bcast(m, x), q 0 i ∈ R, and, for all i ∈ [1, k], we have that hqi , rec(m, xi ), qi0 i ∈ R and δi0 (xi ) = δ(x) and δi0 (y) = δi (y) for y 6= xi . 2.1 Computations Given a protocol P and an initial global configuration σ0 , a computation is a possibly infinite sequence of configurations σ0 σ1 . . . s.t. σi → σi+1 for i ≥ 0. In this paper we are particularly interested in verification problems for protocol instances with a finite but arbitrary number of processes. In other words we will consider the infinite set of initial configurations I consisting of initial con- figurations containing any (finite) number of processes and study reachability problems that might expose anomalies during protocol execution. 2.2 Verification Problems For the resulting model, we are interested in safety properties for parameterized version of a protocol instance. More specifically, given a protocol definition P and a given process state qe ∈ Q that denotes an error state, we would like to verify that global configurations that contain occurrences of qe are unreachable starting from any possibile initial configuration (i.e. independently from the number of process instances). A similar property can be formulated by adding an error flags to the server state instead of selecting a special error state in Q. We are also interested in properties expressed by violations in which global configurations contain a process in state qe while all other processes are in states contained in a given set of control locations. We will refer to these properties as control state reachability and constrained control state reachabiliy, respectively. Violations of control state reachability can be defined using quantified assertions, such as there exists a process i in control state qe , without further constraints on global memory of local states. Similarly, violations of constrained properties can be expressed by adding universally quantified conditions on the control states of other processes. In the rest of the paper we will illustrate, with the help of a case study, how to encode our formalism in the Cubicle input language and how to verify control state reachability problems by a refinement of the symbolic exploration procedure provided by the tool. 3 Case Study: Contact Tracing Protocols We present below a formal specifications of the protocol scheme of Contact Trac- ing applications abstracting away identifier creation, i.e., assuming that user app 5 Fig. 1. Basic behavior of the different phases. generate fresh identifiers, and reasoning within the validity epoch of identifiers, i.e., those maintained in local memory. The system is composed of a finite but arbitrary number of user apps and of a server modeled via a centralized memory. Each user apps has local variables V = {x, y, z} and S = {in, out}. Furthermore, M = {b, m} where b denotes beacon messages broadcasted by user apps, and m denotes report messages sent to the centralized memory. The user app starts their part of protocol in state q0 and operate in three different modes. In emitter mode the app generates and emits fresh beacons: – hq0 , new(x), q1 i, the user app generates a fresh identifier and stores it in the local variable x. – hq1 , add(x, out), q2 i, in q1 the fresh identifier stored in x is added to the local memory out. – hq2 , bcast(b, x), q2 i, hq2 , local, q0 i, in q2 the user app either emits the message (b, x) or returns to the initial state in order to apply a rotation scheme for the beacon identifiers or perform other steps. In reception mode the app, while in any state l0 ∈ Q \ {r1 , s2 }, receives a beacon and stores in the local memory in and returns the current state: – hl0 , rec(b, y), l1 i in state l0 the user is always ready to receive beacons. 6 – hl1 , add(y, in), l0 i, in state l1 the beacon is stored in the local memory in. In report mode, enabled only in state r0 = q0 , the app sends its local memory out to the server and moves to the halt state r1 : hq0 , send(m, out), r1 i. In query mode, enabled only in state s0 = q0 , the user app selects a beacon z from the local memory in, i.e., hs0 , sel(in, z), s1 i, sends it to the server to check if it has been reported by another app or not. In the former case it moves to the halting state s2 , i.e, hs1 , in(m, x), s2 i. In the latter case it returns to the initial state s0 . 4 From Data Automata to Cubicle Let us now discuss how to model a protocol definition P = hQ, M, V, S, R, q0 i in Cubicle. A global configuration is a pair (K, Θ), where K is a finite multiset of process configurations and Θ corresponds to a centralized memory. The encoding if Θ is quite immediate since we can represent the global memory as a finite set of unbounded arrays Am1 , . . . , Amn with cells of Boolean type one for each mi ∈ M . The array Am is such that Am [x] = T rue if and only if x ∈ Θ(m) for each pair x, m. For the encoding of K we can proceed in several different ways. Remember that a process configuration is a triple pc = hq, δ, γi, in which q ∈ Q but is the current user state, δ is the current evaluation of first order variables; and γ is the current evaluation of second order variables. One possible encoding is defined as follows: – To represent control states, we introduce an unbounded array state that associates an enumerative type associated to Q to represent the current state of each process, i.e., state[i] = q if process i is in state q. – To represent the current state of a first order variable v we can introduce an unbounded array valv such that valv [i] = d if δ(v) = d holds in pci (in process i). – To represent the current state of a second order variable s we can introduce an unbounded array vals such that vals [i, d] = T rue if and only if d ∈ γ(s) holds in pci (in process i). Transition rules can then be expressed via Cubicle transition rules. In particular, to model send operation involving second order variables, we can use global operations on arrays, in which all cells of an arrays are copied into another one (whole-place operations in Petri net languages). For the sake of brevity, we illustrate the idea with the help of an example inspired to the contact tracing protocols described in the previous sections. 4.1 Encoding of Contact Tracing Protocol To encode our protocol specification, we introduce the following array declara- tions for modelling individual users: 7 array Pos[proc] : bool array Contact[proc] : bool array In[proc,proc] : bool array Out[proc,proc] : bool Pos[i] defines the current value of positive status of user i. Contact[i] defines the current value of the variable that defines whether or not user i has detected a contact with a positive user. In[i] defines the current value of the In set variable. Namely, In[i,b] is true if and only if b is in the In local memory of process i. Out[i] defines the current value of the Out set variable. Namely, Out[i,b] is true if and only if b is in the Out local memory of process i. The server can be modelled using a single array array Server[proc] : bool in such a way that Server[b] is True only when b is in the global memory Θ. Finally, we can model freshness of pure names (identifiers) but using an additional array in which we mark used names: array Used[proc] : bool We remark here that all above introduce declarations define potentially un- bounded mono- or bi-dimensional data structures. In other words the array-based formalism allows us to symbolically represent and reason on an infinite family of transition systems, each one with finitely many process instances. The emission of a beacon requires a broadcast operation that involves a set of non-deterministically selected nodes. To model this step, we introduce a special global variable Lockstep that is initially set to False and used to split transitions in locksteps (e.g. to perform broadcast operations within a single lockstep). array Lockstep[proc] : bool Let us now illustrate the way we can encode the Protocol transitions using Cubicle parametric rules. The set of initial global configurations is defined as follows: init (x y) { Pos[x] = False && Contact[x] = False && In[x,y] = False && Out[x,y] = False && Used[x] = False && Server[x] = False && Lockstep[x] = False } Here x, y are universally quantified variables that define constraints on the array cells in every possible instance of an initial configuration, i.e., with one formula 8 we state a constraint over infinitely many initial configurations. Initially, all cells are set to F alse (no used names, empty memory, no reported positive user, no reported contact). Emission To model the emission of a beacon via a broadcast message sent to a set of nodes, non deterministically selected from those in the current global states, we introduce a special Lockstep array indexed on beacon identifiers that will be used to split a single broadcast operations in a sequence of steps that do not interfere with other operations. In other words the cell Lockstep[b] is set to True only during the emission of beacon b. Reception rules will use this cell as a guard for firing the rule. All other operations will use the Lockstep flags to avoid to interfere with the broadcast operation. More specifically, we introduce the following ignition rule: transition out(u b) requires { Pos[u] = False && Used[b] = False && Lockstep[b] = False && forall_other x. (Lockstep[x] = False) } { Used[b] := True; Out[u,b] := True; Lockstep[b] :=True } Here u, b are existentially quantified variables ranging on pairs of distinct values. Notice that the guard requires the process u to be non positive, freshness of beacon b, and b to be not present in the local Out memory. We avoid interferences with other (broadcast or non broadcast) operations via a guard that ensures that no lockstep have been activated in the current state. This guard is expressed using the universally quantified formula of the Cubicle language: Lockstep[u] = False && forall_other x. (Lockstep[x] = False) The effect of the rule is to emit the beacon, i.e., set it to U sed, and store it in the Out memory. We also set Lockstep to True to start a lockstep in which to include all subsequent reception steps with other nodes in the current global state. We can also add the following rule in order to cover the range of all identifiers as a potentially emitted beacon. transition out(u) requires { Pos[u] = False && Used[u] = False && 9 Out[u,u] = False && Lockstep[u] = False && forall_other x. (Lockstep[x] = False) } { Out[u,u] := True; Lockstep[u] :=True; Used[u] := True } The reception of a beacon, within a given lockstep, is modeled via the following rules: transition in(u b) requires { Lockstep[b] = True && Pos[u] = False && In[u,b] = False } { In[u,b] := True } transition in(b) requires { Lockstep[b] = True && Pos[b] = False && In[b,b] = False } { In[b,b] := True } Each lockstep is non deterministically terminated via the following rule: transition in(b) requires { Lockstep[b] = True } { Lockstep[b] := False } This rule terminates the selection of the finite set of receivers of a certain beacon emitted at the beginning of the lockstep. Report The report rule involves a global operation in which the local memory of a process is copied to the global memory of the server. The copy operation can be expressed using the following operation 10 Server[b] := case | Out[u,b] = True : True | _ : Server[b]; This action set to True every cell of the array Server associated to a beacon b that is included in the Out local memory of the sender that sends the report. transition report(u) requires { Pos[u] = False && Contact[u] = False && Lockstep[u] = False && forall_other x. (Lockstep[x] = False) } { Pos[u] := True; Server[b] := case | Out[u,b] = True : True | _ : Server[b]; } This action set to True every cell of the array Server associated to a beacon b that is included in the Out local memory of the sender that sends the report. Query In the query rule a process and the server are supposed to synchronize on a given beacon request. We can simplify the encoding of the selection and rendez- vous step by simply checking if there exists a beacon b in the local memory that also occurs in the global memory. transition query(u b) requires { Pos[u] = False && Contact[u] = False && In[u,b] = True && Server[b] = True && Lockstep[b] = False && forall_other x. (Lockstep[x] = False) } { Contact[u] := True; } This action set to True every cell of the array Server associated to a beacon b that is included in the Out local memory of the sender that sends the report. Although this rule does not mimic all steps specified in the protocol (selection of a beacon from In, request to the server, ack or nack to the user) it captures the essence of these operations in a more concise form. 11 5 Validation in Cubicle The Cubicle verification engine is based on symbolic backward exploration. Cubi- cle operates over sets of existentially quantified formulas called cubes. Formulas containing universally quantified formulas (generated during the computation of predecessors) are over-approximated by existentially quantified formulas. In other words Cubicle applies monotone abstraction [2] and over-approximates predecessors via upward-closed sets of configurations. Cubicle applies different strategies and heuristics during backward search such as mixing breadth and depth-first search or injecting over-approximations of backward reachable states that are checked to be unreachable in a finite instance of the system. Infinite sets of unsafe states (bad configurations) are symbolically defined by using unsaf e constraints in which all variables are implicitly existentially quantified. In our case studies we are interested in checking the consistency between local and global information. More specifically, when user U queries the server, she/he supposed to receive a notification only in presence of at least one positive user who emitted a beacon that has been received by U . The server does not maintain any association between identities and beacons collected in the log. Consistency of global and local states combined with the privacy preservation property of the protocol can be tested by adding an Error state and a special rule in which we only compare local states of different users. Namely, the rule generates an error whenever there exist a user U in the Contact state without any positive user in the global system. If this happens the protocol does not trace physical contacts in correct way. The property is expressed by adding a global Error flag Error: bool together with the following rule: transition bad(v) requires { Contact[v] = True && forall_other u. (Pos[u] = False) } { Error := True; } To validate the considered properties, we define the following assertion that specifies bad configurations in the sense of control state reachability, unsafe () { Error = True } i.e., configurations of any size in which Error is True.Due to the presence of uni- versally quantified conditions both in the protocol rule and in the precondition of the error rule, there is no termination guarantee on the execution of the ver- ification task in Cubicle. In our case-study Cubicle, after visiting 41 nodes and computing 364 fixpoint tests with 864 solvers calls, returns a spurious trace. The 12 problem is due to the over-approximation introduced via monotone abstraction. Preconditions with universally quantified guards are transformed in postcondi- tions and thus they are not propagated through different steps of predecessor computations. Since in the correctness property of the protocol local states are put in relation via hidden data (not explicitly mentioned in control states) stored in the server memory, it seems necessary to strengthen the symbolic reasoning procedure with some form of propagation of universally quantified conditions. One solutions comes from the combination of the existentially quantified formulas used to represent sets of states in Cubicle (cubes) with other forms of constraints on the global configuration e.g. constraints inspired to counting abstraction used in Petri nets. More in detail, we enrich our assertions by adding counters that keep track of the number of users in a given state. For our purposes, we will focus only on a counter associated to the Pos flag. We now add a global variable Count whose initial state is defined as Count=0. The counter is updated in the report rule and used as precondition in the error rule as specified below. transition report(u) requires { Lockstep[u] = False && forall_other x. (Lockstep[x] = False) && Pos[u] = False && Contact[u] = False && 0 <= Count } { Count := Count + 1; Pos[u] := True; Server[b] := case | Out[u,b] = True : True | _ : Server[b]; } transition bad(v) requires { Pos[v] = False && Contact[v] = True && Count = 0 } { Error := True; } The enriched assertional language combining array formulas (for expressing pre- cise properties of individual processes and of global variables) and Presburger constraints (for expressing global constraints via the counting abstraction) is the key point in order to enforce termination and prove correctness for the desired 13 property. Cubicle indeed proves the protocol correct for any number of users and beacons after visiting 10 nodes, computing 138 fixpoint tests and 41 solver calls. 6 Conclusions In this paper we have presented a formal model of distributed systems that can be used to specify protocols that combine bluetooth and network communication and make use of notification systems based on a central server. Our formalism is an extension of automata-based formalisms in which individual process have a local memory with first-order and second-order variables. Broadcast commu- nication is inspired to Broadcast Protocols [13, 8], related formalisms as those discussed in [6, 11], and versions with data [10, 14, 3]. The use of a global memory is somehow related to automata based model used for software specification. Differently from more foundational works, see again [6], in this paper we focus on a possible encoding of the formalism in existing infinite-state model checkers that can deal with both first-order and second-order variables in the local mem- ory of individual processes. More specifically, we focus on the SMT-based tool Cubicle that provides a logic over nested unbounded arrays as input specifica- tion language. To handle verification problems such as constrained control state reachability, needed to specify consistency protocols in contact tracing protocols, we proposed an extension of the symbolic backward procedure that can deal with complex assertions with universally quantified formulas. The proposed approach can be viewed as fully declarative, since it uses predicates in a combination of log- ical formalisms, counterpart of ad hoc approaches such as those proposed in [9] in which constraints on global configurations are embedded into the verification algorithm instead of being expressed via assertions combining different types of predicates. Although not yet implemented, the above mentioned strategy could be incorporated into the Cubicle algorithm for instance by associating counters to specific control states and by generating counter manipulation operations in each transition rule via a preliminary static analysis of the Cubicle specification as done in our example via human ingenuity. References 1. P. A. Abdulla, M. F. Atig, G. Delzanno, M. Montali, and A. Sangnier. On the Formalization of Decentralized Contact Tracing Protocols. In Proceedings of the 2nd Workshop on Artificial Intelligence and Formal Verification, Logic, Automata, and Synthesis hosted by the Bolzano Summer of Knowledge 2020 (BOSK 2020), September 25, 2020, volume 2785 of CEUR Workshop Proceedings, pages 65–70. CEUR-WS.org, 2020. 2. P. A. Abdulla, G. Delzanno, N. Ben Henda, and A. Rezine. Monotonic Abstraction: on Efficient Verification of Parameterized Systems. Int. J. Found. Comput. Sci., 20(5):779–801, 2009. 3. P. A. Abdulla, G. Delzanno, and A. Rezine. Approximated parameterized verifica- tion of infinite-state processes with global conditions. Formal Methods in System Design, 34(2):126–156, 2009. 14 4. http://alt-ergo.lri.fr Alt-Ergo. 5. G. Avitabile, V. Botta, V. Iovino, and I. Visconti. Towards Defeating Mass Surveil- lance and SARS-CoV-2: The Pronto-C2 Fully Decentralized Automatic Contact Tracing System. IACR Cryptol. ePrint Arch., 2020:493, 2020. 6. R. Bloem, S. Jacobs, A. Khalimov, I. Konnov, S. Rubin, H. Veith, and J. Wid- der. Decidability of Parameterized Verification. Synthesis Lectures on Distributed Computing Theory. Morgan & Claypool Publishers, 2015. 7. S. Conchon, A. Goel, S. Krstic, A. Mebsout, and F. Zaı̈di. Cubicle: A Parallel SMT- Based Model Checker for Parameterized Systems - Tool Paper. In Computer Aided Verification - 24th International Conference, CAV 2012, Berkeley, CA, USA, July 7-13, 2012 Proceedings, pages 718–724, 2012. 8. G. Delzanno, J. Esparza, and A. Podelski. Constraint-Based Analysis of Broadcast Protocols. In CSL’99, volume 1683 of LNCS, pages 50–66. Springer, 1999. 9. G. Delzanno and A. Rezine. A Lightweight Regular Model Checking Approach for Parameterized Systems. STTT, 14(2):207–222, 2012. 10. G. Delzanno, A. Sangnier, and R. Traverso. Parameterized Verification of Broad- cast Networks of Register Automata. In RP, pages 109–121, 2013. 11. G. Delzanno, A. Sangnier, and G. Zavattaro. Parameterized Verification of Ad Hoc Networks. In CONCUR 2010 - Concurrency Theory, 21th International Confer- ence, CONCUR 2010, Paris, France, August 31-September 3, 2010. Proceedings, pages 313–327, 2010. 12. David L. Dill. The Murphi Verification System. In Computer Aided Verifica- tion, 8th International Conference, CAV ’96, New Brunswick, NJ, USA, July 31 - August 3, 1996, Proceedings, volume 1102 of Lecture Notes in Computer Science, pages 390–393, 1996. 13. J. Esparza, A. Finkel, and R. Mayr. On the Verification of Broadcast Protocols. In 14th Annual IEEE Symposium on Logic in Computer Science, Trento, Italy, July 2-5, 1999, pages 352–359, 1999. 14. R. Lazic, T. Newcomb, J. Ouaknine, A. W. Roscoe, and J. Worrell. Nets with Tokens which Carry Data. Fundam. Inform., 88(3):251–274, 2008. 15. A. Mebsout. Inférence d’invariants pour le model checking de systèmes paramétrés. (Invariants inference for model checking of parameterized systems). PhD thesis, University of Paris-Sud, Orsay, France, 2014. 16. Serge Vaudenay. Centralized or Decentralized? The Contact Tracing Dilemma. IACR Cryptol. ePrint Arch., 2020:531, 2020. 15