Apparel & Merch Anti-Counterfeiting#
The problem#
Counterfeit streetwear and merch is indistinguishable by eye. Hangtags, holograms and QR codes are photocopyable — anything printed can be reprinted, and anything static can be screenshotted. Your buyer has no way to check, your resale market gets polluted, and every fake sale is a sale you didn't make.
How EdgeNFC solves it#
A tag sewn into the garment holds a per-tag key that never leaves the chip. Every tap builds a fresh cryptographic code over the tag's UID and a monotonic counter, and EdgeNFC verifies that code at the edge before anything else happens.
That gives you two properties a printed mark can never have:
- A copy is not enough. Producing a valid tap needs the tag's own key. The key is diversified per tag from your System Master Key (NXP AN10922), so tearing down one garment's tag yields one tag's key — not the master, and not any other tag. See Key management & security.
- A screenshot is not enough. The counter only ever moves forward. A photographed or forwarded tap URL replays as
non_monotonicand comes back not authentic.
For the buyer it is one gesture: tap the garment, a page opens. No app install for a plain URL tag on a phone with NFC turned on.
How it works here#
The same lifecycle runs whether the tag is in a hem or on a hangtag — provision once, then every tap is verified at the edge.
One tag. A new code every tap — and a fresh proof behind it.
-
1
Provision, once
The app derives a per-tag AES key with AN10922 diversification (your System Master Key + the tag UID), installs it via AuthenticateEV2First + ChangeKey, then writes the SUN URL template mirroring
uid,ctrandmac. - 2 Tap — a new code, every time The chip's SDM engine mints the URL at read time: the SDMReadCtr counter advances and the MAC changes on every single tap. Nothing is reusable.
- 3 Verify at the edge Cloudflare re-derives the tag's key and checks the 8-byte AES-CMAC in microseconds, in the same Rust/WASM core hosted and DIY deployments share.
- 4 Replays rejected A monotonic counter that fails to advance means a captured link is being re-used — it is refused, not redirected. Genuine taps get a 302.
What you need#
| Piece | What to pick |
|---|---|
| Hardware | NTAG 424 DNA tags — no other chip works. 25 mm PVC tokens to pilot; adhesive wet inlays for production runs into care-label pockets or heat-sealed patches. Where to buy |
| Plan | Sandbox (free) to prove the flow; Creator for custom routing to your own "Genuine" page; Brand for a custom verification domain and geo/scan analytics |
| Software | The Android provisioning app to encode tags, plus the hosted gateway — no code required for a basic genuine-check page |
Note
Placement and lamination determine read reliability and wash survival. Test your exact construction (hem pocket vs. heat-sealed patch, wash cycle count) on sample garments before a production run — durability is a hardware/manufacturing question, not a cryptographic one.
Step by step#
- Create a system and generate its System Master Key. One system per brand or per drop.
- Encode a pilot batch with the provisioning app. Each tag gets its own diversified key and is written into your registry with its UID and key version.
- Point the system at your page — a drop page, a rewards portal, or a branded "Genuine" landing page — with custom routing (Creator+). The destination is owner-stored config; it is never read from the tag or the URL, so a forged tap can never be steered anywhere.
- Sew or seal the tags in and ship. Nothing on the garment needs to change again — routing is updated server-side, without re-writing hardware.
- Watch the taps. Scan counts, the authentic/failed split, and a country breakdown are available on Brand+ as aggregates only (counts, ISO-2 country codes, dates — never a UID or IP).
Verify it worked#
- Tap a genuine garment: the page opens and the tap verifies authentic, with the counter one higher than the last time.
- Copy that tap URL out of the address bar and open it again in a new tab: it comes back not authentic with
reason: non_monotonic. That is the anti-screenshot property, demonstrated. - Hand-edit one character of the
macparameter: not authentic,reason: mac_mismatch, and no redirect to your page.
Known limits#
Warning
Some Android phones need the EdgeNFC app to open the tag. Android 16+ can't NDEF-dispatch NTAG 424 DNA tags — a Google regression — so on those devices a tap may do nothing on its own. The workaround is to scan the tag from inside the EdgeNFC app, which reads and verifies the tag itself. iOS and pre-16 Android read these tags natively. We would rather say this plainly than claim "works on every phone."
Start free#
Create a Sandbox system and provision your first tags today — no card, and the free plan covers a pilot batch.
Related#
- Key management & security — how per-tag keys are derived and why a forgery needs one.
- E-commerce / Shopify — route an authentic tap to a product, drop or claim page.
- Hosted Gateway — the fastest path from a blank tag to a verified tap.
EdgeNFC