<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Visa on Corebaseit — Design System Engineering · POS · Payments · Security</title><link>https://corebaseit.com/tags/visa/</link><description>Recent content in Visa on Corebaseit — Design System Engineering · POS · Payments · Security</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>contact@corebaseit.com (Vincent Bevia)</managingEditor><webMaster>contact@corebaseit.com (Vincent Bevia)</webMaster><lastBuildDate>Thu, 06 Aug 2026 13:00:00 +0200</lastBuildDate><atom:link href="https://corebaseit.com/tags/visa/index.xml" rel="self" type="application/rss+xml"/><item><title>EMV is four protocols chained together — and formal verification still finds gaps</title><link>https://corebaseit.com/corebaseit_posts/emv-four-protocols-formal-verification/</link><pubDate>Thu, 06 Aug 2026 13:00:00 +0200</pubDate><author>contact@corebaseit.com (Vincent Bevia)</author><guid>https://corebaseit.com/corebaseit_posts/emv-four-protocols-formal-verification/</guid><description>&lt;img src="https://corebaseit.com/diagrams/Three-Phase_Payment_Security_Handshake_CGPT_color.png" alt="Featured image of post EMV is four protocols chained together — and formal verification still finds gaps" />&lt;p>EMV is often treated as a solved security problem. Billions of cards, decades of deployment, and strong cryptography create the impression that the protocol is fundamentally sound once the crypto primitives are correct.&lt;/p>
&lt;p>A 2021 IEEE Symposium on Security and Privacy paper from ETH Zurich pushes against that assumption. Basin, Sasse, and Toro-Pozo formally modeled the EMV specification — more than 2,000 pages across contact and contactless books — in the Tamarin prover and asked a different question from the usual penetration-test framing: does the &lt;em>protocol&lt;/em> guarantee the authentication properties it is assumed to provide?&lt;/p>
&lt;p>Their answer is nuanced. Cryptography was not the weak link. Several configurations leave security-critical decisions unauthenticated. Some of those gaps are old; some were newly exposed by exhaustive symbolic analysis; one Visa contactless gap was demonstrated on live terminals.&lt;/p>
&lt;p>This post walks through that result for POS architects: the four-phase structure of an EMV exchange, what the model actually proved, where Visa and Mastercard diverge, and what “bind the business decision to the cryptogram” means in practice. The EMV mechanics below follow &lt;a class="link" href="https://corebaseit.com/my-books/" target="_blank" rel="noopener"
>&lt;em>POINT OF SALE ARCHITECTURE&lt;/em>&lt;/a> (&lt;em>the book&lt;/em>), Chapter 3; the attack and proof claims are from the paper unless marked as interpretation.&lt;/p>
&lt;h2 id="claims-to-keep-separate">Claims to keep separate
&lt;/h2>&lt;p>&lt;strong>Confirmed by the paper (and, where noted, by lab tests):&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>EMV transactions can be partitioned into four phases: initialization, Offline Data Authentication (ODA), cardholder verification (CVM), and transaction authorization.&lt;/li>
&lt;li>Tamarin analysis of 40 contact and contactless configurations rediscovered known flaws and found new logical ones.&lt;/li>
&lt;li>Visa contactless Card Transaction Qualifiers (CTQ, tag &lt;code>9F6C&lt;/code>) are not authenticated to the terminal or the issuer. A man-in-the-middle can clear the online-PIN-required bit and assert CDCVM, allowing high-value contactless payments without the cardholder PIN. Demonstrated with a proof-of-concept Android app on real terminals (authors’ own cards; goods paid for).&lt;/li>
&lt;li>Under SDA or DDA, the Application Cryptogram (AC) is not authenticated to the terminal. An offline-approved transaction can present a modified cryptogram that the terminal accepts; the issuer rejects it later in clearing. The authors did &lt;strong>not&lt;/strong> test this on live terminals for ethical reasons.&lt;/li>
&lt;li>For contact EMV, Combined Data Authentication (CDA) with online PIN (and some CDA/no-PIN online paths) satisfied all three evaluated authentication properties. Mastercard contactless CDA configurations satisfied them; several common Visa contactless configurations did not.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Interpretation (mine, not the paper’s conclusion):&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>The architectural takeaway for modern stacks — API gateways, tokenization, attestation, fraud AI — is the same binding problem: a decision that changes liability or CVM must be integrity-protected with the transaction it steers.&lt;/li>
&lt;/ul>
&lt;h2 id="security-is-not-only-encryption">Security is not only encryption
&lt;/h2>&lt;p>Payment engineering often measures security by cryptographic inventory: AES, RSA or ECC, Secure Elements, HSMs. EMV already has those. Chapter 3 of &lt;em>the book&lt;/em> treats EMV as a mutual-authentication framework over the ICC, the terminal kernel, and the EMVCo specification — not as a single algorithm.&lt;/p>
&lt;p>The harder question is whether every field that changes transaction behavior is covered by a signature or MAC that the relying party can check. A single unprotected qualifier can undo an otherwise sound cryptogram design.&lt;/p>
&lt;h2 id="emv-as-four-protocols">EMV as four protocols
&lt;/h2>&lt;p>Basin et al. divide an EMV transaction into four phases. &lt;em>The book&lt;/em> expands the same handshake into five operational stages (application selection, initialization, data acquisition, CVM, authorization). The paper’s “initialization” collapses selection, GPO, and record reading; ODA is then treated as its own protocol. Both views are useful.&lt;/p>
&lt;p>The combined flow below maps those phases onto the terminal and card decision path: session setup, offline processing (ODA through terminal action analysis), the first &lt;code>GENERATE AC&lt;/code>, then online completion when ARQC is returned.&lt;/p>
&lt;script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
mermaid.initialize({
startOnLoad: false,
theme: 'neutral',
securityLevel: 'loose',
flowchart: { htmlLabels: true, curve: 'basis' }
});
await mermaid.run({ querySelector: '.mermaid-wrap .mermaid' });
function fixMermaidLabelContrast(root = document) {
root.querySelectorAll('.mermaid-wrap svg, .mermaid-lightbox__stage svg').forEach((svg) => {
svg.querySelectorAll('foreignObject, foreignObject *').forEach((el) => {
el.style.setProperty('color', '#1e1b4b', 'important');
});
svg.querySelectorAll('text, tspan').forEach((el) => {
el.style.setProperty('fill', '#1e1b4b', 'important');
});
});
}
fixMermaidLabelContrast();
function ensureLightbox() {
let box = document.getElementById('mermaid-lightbox');
if (box) return box;
box = document.createElement('div');
box.id = 'mermaid-lightbox';
box.className = 'mermaid-lightbox';
box.hidden = true;
box.innerHTML = `
&lt;div class="mermaid-lightbox__backdrop" data-mermaid-close>&lt;/div>
&lt;div class="mermaid-lightbox__panel" role="dialog" aria-modal="true" aria-label="Diagram fullscreen">
&lt;button type="button" class="mermaid-lightbox__close" data-mermaid-close aria-label="Close">&amp;times;&lt;/button>
&lt;div class="mermaid-lightbox__stage">&lt;/div>
&lt;/div>
`;
document.body.appendChild(box);
box.addEventListener('click', (e) => {
if (e.target.closest('[data-mermaid-close]')) closeLightbox();
});
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' &amp;&amp; !box.hidden) closeLightbox();
});
return box;
}
function openLightbox(wrap) {
const svg = wrap.querySelector('svg');
if (!svg) return;
const box = ensureLightbox();
const stage = box.querySelector('.mermaid-lightbox__stage');
stage.replaceChildren(svg.cloneNode(true));
const clone = stage.querySelector('svg');
clone.removeAttribute('width');
clone.removeAttribute('height');
clone.setAttribute('preserveAspectRatio', 'xMidYMid meet');
clone.classList.add('mermaid-lightbox__svg');
fixMermaidLabelContrast(box);
box.hidden = false;
document.body.classList.add('mermaid-lightbox-open');
box.querySelector('.mermaid-lightbox__close')?.focus();
}
function closeLightbox() {
const box = document.getElementById('mermaid-lightbox');
if (!box) return;
box.hidden = true;
box.querySelector('.mermaid-lightbox__stage')?.replaceChildren();
document.body.classList.remove('mermaid-lightbox-open');
}
document.querySelectorAll('.mermaid-wrap').forEach((wrap) => {
wrap.setAttribute('role', 'button');
wrap.setAttribute('tabindex', '0');
wrap.setAttribute('aria-label', 'Expand diagram to fullscreen');
wrap.addEventListener('click', () => openLightbox(wrap));
wrap.addEventListener('keydown', (e) => {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
openLightbox(wrap);
}
});
});
&lt;/script>&lt;figure class="mermaid-wrap" title="Click to view fullscreen">
&lt;pre class="mermaid">
flowchart TD
subgraph SETUP["Session setup"]
direction TB
ACT["Card activation&lt;br/>ATR and PPS, or field detect"]
SEL["Application selection&lt;br/>PPSE / PSE, candidate list, AID"]
GPO["Get processing options&lt;br/>PDOL in; AIP and AFL out"]
RR["Read record loop&lt;br/>CDOL1, CDOL2, CVM list, certificates"]
ACT --> SEL --> GPO --> RR
end
subgraph OFF["Offline processing"]
direction TB
ODA["Offline data authentication&lt;br/>CDA or DDA; sets TVR bits"]
PR["Processing restrictions&lt;br/>AUC, version, dates → TVR"]
CVM["Cardholder verification&lt;br/>CVM list loop → CVM results"]
TRM["Terminal risk management&lt;br/>Floor limit, velocity → TVR"]
TAA["Terminal action analysis&lt;br/>TVR against TAC and IAC"]
ODA --> PR --> CVM --> TRM --> TAA
end
subgraph CARD["Card decision"]
direction TB
GEN1["First generate AC&lt;br/>CDOL1 data"]
CRM["Card risk management&lt;br/>Card may only downgrade"]
GEN1 --> CRM
end
subgraph ONL["Online and completion"]
direction TB
ONLINE["Online authorisation&lt;br/>ARQC and IAD in field 55"]
ISSUER["Issuer processing&lt;br/>Checks ARQC, returns ARPC"]
NOGO["Unable to go online&lt;br/>Default action codes apply"]
S71["Issuer scripts, template 71"]
GEN2["Second generate AC&lt;br/>CDOL2 plus issuer auth data"]
ONLINE --> ISSUER --> S71 --> GEN2
ONLINE --> NOGO --> GEN2
end
APPROVE["Approved&lt;br/>Final TC"]
DECLINE["Declined&lt;br/>Final AAC"]
RR --> ODA
TAA -->|"Request TC, ARQC or AAC"| GEN1
CRM -->|TC| APPROVE
CRM -->|AAC| DECLINE
CRM -->|ARQC| ONLINE
GEN2 -->|TC| APPROVE
GEN2 -->|AAC| DECLINE
classDef purple fill:#EEEDFE,stroke:#534AB7,color:#3C3489
classDef amber fill:#FAEEDA,stroke:#BA7517,color:#633806
classDef blue fill:#E6F1FB,stroke:#185FA5,color:#0C447C
classDef green fill:#EAF3DE,stroke:#639922,color:#27500A
classDef red fill:#FCEBEB,stroke:#A32D2D,color:#791F1F
classDef gray fill:#F1EFE8,stroke:#5F5E5A,color:#444441
class ACT,SEL,GPO,RR,ODA,PR,CVM,TRM,S71 purple
class TAA,ONLINE amber
class GEN1,GEN2,ISSUER blue
class CRM purple
class NOGO gray
class APPROVE green
class DECLINE red
&lt;/pre>
&lt;figcaption class="mermaid-wrap__hint">Click diagram to expand&lt;/figcaption>
&lt;/figure>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Initialization&lt;/strong> — The terminal and card agree on an application (AID). The card returns capabilities and locator data, including the Application Interchange Profile (AIP, tag &lt;code>82&lt;/code>) and Application File Locator (AFL, tag &lt;code>94&lt;/code>). Contactless kernels also exchange scheme-specific qualifiers such as Terminal Transaction Qualifiers (TTQ, tag &lt;code>9F66&lt;/code>) and, for Visa, CTQ.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Offline Data Authentication (ODA)&lt;/strong> — The terminal validates card authenticity via the CAPK → issuer certificate → ICC certificate chain, then verifies SDA, DDA, or CDA depending on AIP and terminal capabilities. Chapter 3 ranks them SDA (static signature; weakest), DDA (challenge-response), CDA (dynamic signature bound to the Application Cryptogram). ODA establishes card authenticity; it does not by itself approve the transaction.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Cardholder verification (CVM)&lt;/strong> — Online PIN, offline PIN, signature, CDCVM, or no CVM, selected from the intersection of card rules, terminal capabilities, and amount limits.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Transaction authorization&lt;/strong> — Offline decline (AAC), offline approval (TC), or online authorization (ARQC → issuer ARPC → final TC/AAC). See &lt;a class="link" href="https://corebaseit.com/corebaseit_posts/online-vs-offline-emv-transactions/" >Online vs Offline EMV Transactions&lt;/a> and &lt;a class="link" href="https://corebaseit.com/corebaseit_posts/arqc-and-company/" >ARQC, TC, and AAC: A Field Guide to EMV Application Cryptograms&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>Each phase feeds the next. A field that steers CVM or authorization without cryptographic binding becomes a protocol gap, not an implementation bug.&lt;/p>
&lt;p>Offline processing is where several of those binding failures sit. ODA, processing restrictions, CVM, and terminal risk management only write TVR bits; terminal action analysis is the single place that turns those bits into a &lt;em>request&lt;/em> for TC, ARQC, or AAC:&lt;/p>
&lt;figure class="mermaid-wrap" title="Click to view fullscreen">
&lt;pre class="mermaid">
flowchart TD
ODA["Offline data authentication&lt;br/>CDA or DDA; sets TVR bits"]
PR["Processing restrictions&lt;br/>AUC, version, dates → TVR"]
CVM["Cardholder verification&lt;br/>CVM list loop → CVM results"]
TRM["Terminal risk management&lt;br/>Floor limit, velocity → TVR"]
TAA["Terminal action analysis&lt;br/>TVR against TAC and IAC"]
RTC["Request TC&lt;br/>No action code match"]
RARQC["Request ARQC&lt;br/>Online match"]
RAAC["Request AAC&lt;br/>Denial match"]
ODA --> PR --> CVM --> TRM --> TAA
TAA --> RTC
TAA --> RARQC
TAA --> RAAC
classDef purple fill:#EEEDFE,stroke:#534AB7,color:#3C3489
classDef amber fill:#FAEEDA,stroke:#BA7517,color:#633806
classDef gray fill:#F1EFE8,stroke:#5F5E5A,color:#444441
class ODA,PR,CVM,TRM purple
class TAA amber
class RTC,RARQC,RAAC gray
&lt;/pre>
&lt;figcaption class="mermaid-wrap__hint">Click diagram to expand&lt;/figcaption>
&lt;/figure>
&lt;h2 id="what-they-verified">What they verified
&lt;/h2>&lt;p>The authors modeled contact EMV and Visa/Mastercard contactless EMV in Tamarin, including concurrent sessions and an active Dolev-Yao adversary on the card–terminal channel. The bank–terminal channel was treated as secure.&lt;/p>
&lt;p>Rather than asking whether a particular kernel implementation can be broken, they asked whether the protocol configurations guarantee:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Bank accepts&lt;/strong> — A transaction the terminal accepts should not be declined by the issuer solely because the Application Cryptogram is wrong.&lt;/li>
&lt;li>&lt;strong>Authentication to the terminal&lt;/strong> — When the terminal commits to a transaction, the card (and, where applicable, the bank) agree on that transaction (injective agreement).&lt;/li>
&lt;li>&lt;strong>Authentication to the bank&lt;/strong> — When the bank accepts, card and terminal agree on the authenticated transaction data.&lt;/li>
&lt;/ol>
&lt;p>That is a stronger evaluation bar than penetration testing alone. It also rediscovers older results (for example Murdoch et al.’s offline PIN bypass) as special cases of the same missing authentication pattern.&lt;/p>
&lt;h2 id="the-visa-contactless-ctq-gap">The Visa contactless CTQ gap
&lt;/h2>&lt;p>The finding that drew the most attention was Visa contactless CVM steering.&lt;/p>
&lt;p>In a Visa contactless exchange, the card’s response to &lt;code>GET PROCESSING OPTIONS&lt;/code> carries CTQ. CTQ tells the terminal which CVM path to take. The model showed that CTQ is authenticated neither to the terminal nor to the bank.&lt;/p>
&lt;p>An attacker in the middle can therefore rewrite CTQ so that:&lt;/p>
&lt;ul>
&lt;li>online PIN appears unnecessary, and&lt;/li>
&lt;li>CDCVM appears to have already succeeded on the consumer device.&lt;/li>
&lt;/ul>
&lt;p>The practical result, demonstrated on real POS terminals with the authors’ Android relay/MITM app: a stolen Visa contactless card can complete purchases above the CVM-required limit without the victim’s PIN. The paper notes the same pattern may apply to Discover (Kernel 6) and UnionPay (Kernel 7); those were not tested.&lt;/p>
&lt;p>This is the binding failure in concrete form. The cryptogram machinery can still run. The CVM &lt;em>decision&lt;/em> that should have gated high-value acceptance was never integrity-protected.&lt;/p>
&lt;p>Mastercard contactless configurations that use CDA verified cleanly under the same properties. That is a scheme-configuration result from the model, not a claim that Mastercard deployments are immune to every class of attack.&lt;/p>
&lt;h2 id="offline-approval-and-an-unauthenticated-cryptogram">Offline approval and an unauthenticated cryptogram
&lt;/h2>&lt;p>A second class of gap appears in offline authorization under SDA or DDA.&lt;/p>
&lt;p>After terminal action analysis, the first &lt;code>GENERATE AC&lt;/code> carries CDOL1 data (amount, TVR, unpredictable number, and related fields). Card risk management may only &lt;em>downgrade&lt;/em> the requested cryptogram — never raise it — so a TC request can become ARQC or AAC, but an AAC request cannot become a TC:&lt;/p>
&lt;figure class="mermaid-wrap" title="Click to view fullscreen">
&lt;pre class="mermaid">
flowchart TD
GEN1["First generate AC&lt;br/>CDOL1: amount, TVR, unpredictable number"]
CRM["Card risk management&lt;br/>Card may only downgrade, never raise"]
TC["TC returned&lt;br/>Approve offline"]
ARQC["ARQC returned&lt;br/>Go online"]
AAC["AAC returned&lt;br/>Decline"]
GEN1 --> CRM
CRM --> TC
CRM --> ARQC
CRM --> AAC
classDef blue fill:#E6F1FB,stroke:#185FA5,color:#0C447C
classDef purple fill:#EEEDFE,stroke:#534AB7,color:#3C3489
classDef green fill:#EAF3DE,stroke:#639922,color:#27500A
classDef amber fill:#FAEEDA,stroke:#BA7517,color:#633806
classDef red fill:#FCEBEB,stroke:#A32D2D,color:#791F1F
class GEN1 blue
class CRM purple
class TC green
class ARQC amber
class AAC red
&lt;/pre>
&lt;figcaption class="mermaid-wrap__hint">Click diagram to expand&lt;/figcaption>
&lt;/figure>
&lt;p>The Application Cryptogram is a MAC under a key shared by card and issuer. The terminal does not hold that key, so it cannot independently verify the AC. With CDA, the Signed Dynamic Application Data (SDAD) binds CID, the cryptogram, transaction data, and the terminal’s unpredictable number, giving the terminal a public-key check. With SDA or DDA alone, that binding is absent.&lt;/p>
&lt;p>The model therefore allows an adversary to modify the cryptogram on an offline-approved path. The terminal can still accept; the issuer later detects the bad AC in clearing, after goods or services may already have been delivered. The paper treats this as a protocol-design issue for those ODA modes. It was not demonstrated on live terminals.&lt;/p>
&lt;p>Only the ARQC branch continues to online authorisation and a second &lt;code>GENERATE AC&lt;/code>. Issuer scripts (template 71 before, template 72 after) and the unable-to-go-online path still settle through that second cryptogram:&lt;/p>
&lt;figure class="mermaid-wrap" title="Click to view fullscreen">
&lt;pre class="mermaid">
flowchart TD
ONLINE["Online authorisation&lt;br/>ARQC and IAD sent in field 55"]
ISSUER["Issuer processing&lt;br/>Checks ARQC, returns ARPC"]
OFFLINE["Unable to go online&lt;br/>Default action codes apply"]
S71["Issuer scripts, template 71&lt;br/>Run before the second generate AC"]
GEN2["Second generate AC&lt;br/>CDOL2 plus issuer authentication data"]
S72["Issuer scripts, template 72&lt;br/>Run after the second generate AC"]
TC2["TC returned&lt;br/>Approved"]
AAC2["AAC returned&lt;br/>Declined"]
ONLINE --> ISSUER
ONLINE --> OFFLINE
ISSUER --> S71 --> GEN2
OFFLINE --> GEN2
GEN2 --> TC2
GEN2 --> AAC2
TC2 --> S72
AAC2 --> S72
classDef amber fill:#FAEEDA,stroke:#BA7517,color:#633806
classDef blue fill:#E6F1FB,stroke:#185FA5,color:#0C447C
classDef purple fill:#EEEDFE,stroke:#534AB7,color:#3C3489
classDef green fill:#EAF3DE,stroke:#639922,color:#27500A
classDef red fill:#FCEBEB,stroke:#A32D2D,color:#791F1F
classDef gray fill:#F1EFE8,stroke:#5F5E5A,color:#444441
class ONLINE amber
class ISSUER,GEN2 blue
class OFFLINE gray
class S71,S72 purple
class TC2 green
class AAC2 red
&lt;/pre>
&lt;figcaption class="mermaid-wrap__hint">Click diagram to expand&lt;/figcaption>
&lt;/figure>
&lt;p>For architects, the operational point matches Chapter 3 and &lt;a class="link" href="https://corebaseit.com/corebaseit_posts/online-vs-offline-emv-transactions/" >Online vs Offline EMV&lt;/a>: offline approval transfers risk to local rules and deferred issuer verification. If the terminal cannot authenticate the AC, “offline approved” is not the same as “issuer will honor.”&lt;/p>
&lt;h2 id="which-configurations-held">Which configurations held
&lt;/h2>&lt;p>The useful output of the paper is not only the attacks. It is the configuration table of what &lt;em>does&lt;/em> satisfy the three properties.&lt;/p>
&lt;p>&lt;strong>Contact EMV.&lt;/strong> CDA is the ODA mode that consistently closed the gaps the model cared about. Configurations combining CDA with online PIN (and some CDA paths without PIN for online-capable runs) verified. SDA and DDA paths left AC authentication to the terminal broken, and offline-PIN paths reproduced the known CVM disagreement / PIN-bypass pattern.&lt;/p>
&lt;p>&lt;strong>Contactless.&lt;/strong> Mastercard CDA configurations (including common online-PIN and no-PIN low-value cases in the paper’s table) satisfied all evaluated properties. Visa’s only fully verified contactless line in their table was a less common DDA-for-online (high-value) setup with SDAD verification. The authors’ live-terminal sampling did not observe that Visa configuration in the field.&lt;/p>
&lt;p>Their proposed Visa mitigations are mostly terminal-side (TTQ bits and mandatory SDAD checks) so cards in circulation need not be reissued. Whether networks and acquirers deployed those mitigations after 2021 is outside the paper’s scope and should be checked against current scheme contactless rules for each market.&lt;/p>
&lt;h2 id="what-this-means-for-payment-system-design">What this means for payment system design
&lt;/h2>&lt;p>The paper is less about scoring Visa against Mastercard than about a design rule that survives outside EMV kernels.&lt;/p>
&lt;p>Modern platforms add API gateways, tokenization, device attestation, Secure Elements, fraud models, and PCI controls. Those layers can be implemented carefully and still fail the same way EMV failed in the CTQ case: a business or risk decision influences acceptance, but that decision is not cryptographically bound to the transaction evidence the issuer or merchant later relies on.&lt;/p>
&lt;p>Formal verification does not replace Level 2/3 testing, scheme certification, or red-team work on kernels and SoftPOS stacks. It answers a prior question: whether the protocol, under a given configuration, actually implies the authentication properties operators assume when they set floor limits, CVM limits, and offline TAC/IAC bits.&lt;/p>
&lt;p>For POS and acquiring architects, that is the durable lesson. Prefer configurations that authenticate the fields that steer CVM and authorization — in EMV terms, prefer CDA (or scheme-equivalent dynamic binding) where offline or contactless CVM steering matters — and treat any unprotected qualifier that can rewrite “PIN required” or “already verified” as a first-class design defect.&lt;/p>
&lt;h2 id="references">References
&lt;/h2>&lt;ol>
&lt;li>
&lt;p>Basin, D., Sasse, R., &amp;amp; Toro-Pozo, J. (2021). &lt;em>The EMV Standard: Break, Fix, Verify&lt;/em>. 42nd IEEE Symposium on Security and Privacy (SP 2021). &lt;a class="link" href="https://doi.org/10.1109/SP40001.2021.00037" target="_blank" rel="noopener"
>DOI: 10.1109/SP40001.2021.00037&lt;/a>. Project site: &lt;a class="link" href="https://emvrace.github.io/" target="_blank" rel="noopener"
>emvrace.github.io&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Bevia, V. &lt;em>POINT OF SALE ARCHITECTURE&lt;/em>, Chapter 3: EMV Principles — ODA (SDA/DDA/CDA), AIP/AFL, CVM, and cryptogram generation. &lt;a class="link" href="https://corebaseit.com/my-books/" target="_blank" rel="noopener"
>corebaseit.com/my-books&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Murdoch, S. J., Drimer, S., Anderson, R., &amp;amp; Bond, M. (2010). &lt;em>Chip and PIN is Broken&lt;/em>. IEEE Symposium on Security and Privacy — offline PIN response not authenticated (rediscovered in the 2021 model).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>EMVCo. &lt;em>EMV Integrated Circuit Card Specifications for Payment Systems&lt;/em> and &lt;em>EMV Contactless Specifications for Payment Systems&lt;/em> — authoritative definitions of ODA methods, CVM, and cryptogram types.&lt;/p>
&lt;/li>
&lt;/ol></description></item></channel></rss>