EdgeNFC
Start free

NFC vs QR codes

A QR code is a picture. A tap is a signature.

This page is not an argument that QR codes are bad. They are the most successful piece of consumer scanning technology ever deployed, they cost nothing, and for most jobs they are the right answer. They just cannot do one specific thing — and that thing is the entire reason EdgeNFC exists.

The distinction, stated precisely. A QR code is a fixed encoding of a string: every scan returns the same bytes, and a photograph of it reproduces it perfectly. An NTAG 424 DNA tag holds an AES key it never discloses and uses it to sign a message that is different on every tap. One tells you what was printed. The other tells you a particular chip was here, just now.

Credit where it is due

Where QR codes are genuinely better

Not "considerations". These are real, structural advantages, and if any of them is decisive for you, you should print a QR code and skip the rest of this page.

They are free

A QR code costs nothing to generate and nothing to reproduce. There is no bill of materials, no minimum order, no lead time, and no per-unit cost that scales with your production run. An NFC tag is a physical chip and will never be free.

Every phone already reads them

The camera app reads a QR code on essentially any modern phone with no app, no settings change, and no hardware requirement beyond a lens. NFC reading is widespread but not universal, and it behaves differently across devices and OS versions.

They print on anything

Paper, cardboard, a receipt, a poster, a screen, a billboard, an email. Anywhere ink or pixels can go, a QR code can go. An NFC tag needs a chip and an antenna physically attached to the object, which rules out a lot of surfaces and a lot of budgets.

They work at a distance and through glass

A QR code can be scanned across a room, through a shop window, or off someone else's screen. NFC is a near-field technology by design: the phone has to touch the tag. That is a security property, but it is also a usability limit.

They survive being damaged and being reprinted

QR encoding includes error correction, and a damaged code can be replaced by printing another one for free. A tag with a crushed antenna is dead, and replacing it means provisioning a new tag and retiring the old one.

There is nothing to manage

No keys, no provisioning pass, no verification service, no supplier. You generate the image and you are finished. Everything EdgeNFC adds is also something you now have to operate — see when not to use us below.

The architectural limit

What a QR code cannot do, and exactly why

This is not a criticism of QR quality or of any particular vendor's QR product. It follows from what the format is.

The code is the whole secret, and it is printed in the open

A QR code is a visual encoding of a string. There is no key inside it, no computation happening, and no state that changes between scans. Everything a reader will ever learn from it is visible in the picture, which means everything it will ever prove is visible in the picture too.

Copying is lossless and free

Photograph a QR code and reprint it and you have not made an imitation — you have made a second original. The copy scans to the identical string, so no reader, anywhere, can tell the two apart. This is true no matter how long or how random the string is.

Serialising does not fix it

Giving every item its own unique code is genuinely useful for tracking, and it means a copied code is at least tied to one specific item. But copying that one code still produces a code that verifies, because verifying means "is this string in my database", and the copy contains the same string.

Scan analytics are detection, not proof

Flagging a code scanned in two countries an hour apart is a good heuristic and worth doing. It is also statistical, after the fact, and silent when the counterfeit is scanned before the original. It tells you something probably went wrong; it cannot tell a shopper, at the moment they tap, that this item is the real one.

A QR code proves nothing about the object

It proves that something displayed that string. It cannot demonstrate physical presence, because a photo on a screen scans exactly like the label on the box. Whether that matters depends entirely on what you are using it for.

Signed QR payloads still replay

You can put a digital signature inside a QR code, and for some jobs that is exactly right — it proves the payload was issued by you. It still does not prove freshness or presence, because the signed image can be photographed and reused unchanged.

What changes with a chip

Where the proof actually comes from

The tag is not storing a better secret. It is doing arithmetic that requires a secret, and emitting only the result.

1

The tag has a key of its own

At provisioning, each tag gets an AES-128 key derived from your system master key and the chip's own 7-byte UID using NXP's AN10922 diversification. Two tags never share a key, and the derivation does not run backwards.

2

Every read increments a counter

The chip keeps an internal read counter, SDMReadCtr, that only moves forward. It is part of the data the tag mirrors into the URL, so no two taps of the same tag ever produce the same URL.

3

The chip signs, on the chip

The tag derives a per-read session key from its file-read key, the UID and the counter, computes an AES-CMAC over the mirrored data, and puts a truncated 8-byte MAC in the link. The key itself is never part of the payload.

4

The edge re-derives and checks

We re-derive that tag's key from the master key, recompute the MAC, compare it in constant time, and reject any counter we have already seen. A forgery fails the first check; a replay fails the second.

What the URL actually looks like. In the recommended encrypted-PICC mode a tap arrives as ?picc_data=&cmac=… — 32 hex characters of AES-encrypted UID and counter, plus 16 hex characters of MAC. The plaintext-mirror alternative sends ?uid=&ctr=&mac= instead, which is easier to inspect and gives up the UID to anyone who reads the link. Both change on every tap; only one keeps the tag's identity private.

You can paste a real one into the free SUN/SDM decoder and watch it come apart field by field, or try to forge one in the live demo.

Side by side

The honest scorecard

Five of these rows go to QR. They are not padding — they are the reasons most things in the world should still carry a printed code.

PropertyQR codeEdgeNFC tap (NTAG 424 DNA)
Cost per itemFree — it is inkA physical chip with a real per-unit cost, plus one provisioning pass
Reader requiredAny camera, at a distance, through glassA phone with NFC, held against the tag
SurfacesAnything printable, including screens and receiptsNeeds a chip and antenna attached to the object
Damage and replacementError-corrected; reprint for freeA crushed antenna is a dead tag; the replacement must be provisioned
Operational overheadNone — generate and printKey custody, provisioning, and a verification service
What each scan returnsThe same string, foreverA different signed message every tap
Secret material involvedNone — it is all in the pictureA per-tag AES key held in the chip and never emitted
Effect of copying itThe copy is indistinguishable from the originalCopying the URL does not copy the key; the copy fails the MAC
Replay of a captured scanAccepted — it is the same stringRejected: that counter value has already been seen
Identifier privacyThe identifier is printed in the openEncrypted-PICC mode keeps the UID out of the URL
Proves physical presenceNoYes — of the tag, at the moment of the tap

Both technologies open an ordinary web page on the phone. Neither requires your customer to install anything.

Not actually a fight

Most good deployments use both

They fail in opposite directions, which is exactly why they pair well.

Let the QR code do reach

Care instructions, registration, a manual, a campaign landing page, the thing someone scans from across the store before they have picked the item up. Any camera, any distance, zero cost. This is a genuinely better tool for that job.

Let the tap do proof

The moment where the answer has to be "yes, this specific object is the real one" — at unboxing, at the door, at resale, at warranty registration. That moment needs presence and freshness, and only the chip can supply them.

One design rule if you ship both. Do not let the QR code render the authenticity verdict. A counterfeiter will photograph whichever code produces the green tick, so the verdict must come from the surface that cannot be copied. Print the QR for information; reserve the word "verified" for the tap.

Straight answer

When you should not use EdgeNFC

If you recognise yourself in any of these, a QR code is fine for you, and we would rather say so here than sell you a chip you do not need.

You just need a link

A menu, a Wi-Fi password, a review request, a landing page, an event programme. If nobody has any incentive to forge it, cryptographic proof of presence is solving a problem you do not have. Print a QR code.

Unit cost dominates

Millions of low-value items where fractions of a cent decide the programme. A chip per item will not survive that maths, and pretending otherwise wastes your time. If the tag costs a meaningful share of the item, the answer is no.

There is nothing to attach a tag to

Printed advertising, a screen, a receipt, an email, a projected slide, a page in a magazine. A chip needs a physical host. If your surface is an image, the only thing that can live on it is an image.

People scan from a distance

Across a counter, through a window, from a shelf label, off someone else's phone. NFC requires contact by design. If your interaction never involves the customer touching the object, the tap will not happen.

You cannot run key management

A master key you have to protect, a provisioning pass over NFC, and a decision about custody. It is not enormous, and the key management playbook walks through it — but it is real operational work that a printed code does not require.

The attacker is not copying anything

If your actual problem is grey-market diversion, warranty fraud by the customer, or supply-chain visibility, then serialisation and good analytics may address it completely, and a QR code carries a serial as well as a chip does.

Straight answers

What we do not claim

Does a valid tap prove the product is genuine?

It proves the tag is genuine, present, and not replayed. Whether that transfers to the item depends on how the tag is attached — a tag that can be peeled off a real item and stuck on a fake one proves only that the tag is real. Design the attachment as carefully as the crypto.

Does every phone open the link reliably?

Not always. Some Android phones and versions have a known platform quirk where tapping an NTAG 424 DNA tag doesn't reliably hand the link off to a browser from the home screen or lock screen. It's outside our control, and it varies by device. The reliable workaround is to open the EdgeNFC app and scan the tag from there — same read, same verdict. A QR code has no equivalent failure mode, and that is a fair point against us.

Do you sell the tags?

No. We don't sell hardware. You buy blank NTAG 424 DNA tags from a specialist supplier and provision them yourself — see where to buy tags. That means the per-unit cost in the table above is somebody else's price list, not ours, and we are not the right people to quote it.

Has EdgeNFC had an independent security audit?

Not yet. We have not commissioned a third-party audit or obtained any security certification, and we will say so here until that changes. What we can point at today is the design, standard primitives, and conformance against published NXP vectors.

FAQ

Questions buyers actually ask

Can a QR code be made unclonable?

No. A QR code is a fixed pattern that encodes a string, so photographing it reproduces it exactly. You can make each code unique per item, and you can watch for a code that suddenly appears in two countries at once, but that is detection after the fact — the code itself holds no secret and cannot prove anything about the object it is printed on.

Do I need an app to read an EdgeNFC tag?

No. A tap opens an ordinary web page and the verification happens server-side. An app is only needed to provision tags, and on the Android phones affected by the tap-dispatch quirk, where scanning from inside the app is the reliable workaround.

Is NFC more expensive than a QR code?

Yes, and it always will be. A QR code costs nothing to print; an NFC tag is a physical chip with a per-unit cost and a one-time provisioning step. The question is not which is cheaper, it is whether the thing you are protecting is worth more than the tag.

Can I put a QR code and an NFC tag on the same item?

Yes, and it is often the right design. Let the QR code do reach — any camera, any distance — and let the tap do proof. Just do not let the QR code display the verification result, because a copied QR code would display it too.

What does a valid tap actually prove?

That the specific chip was physically present, held the right key, and produced a counter value never seen before. That is a much stronger statement than a scan can make, and it is still a statement about the tag rather than about the item it is attached to.

Next

Try to forge a tap before you believe any of this.

The demo runs the real verification core in your browser. Change a byte of the MAC, or reuse a counter, and watch it refuse.