We develop NFC solutions that provide cryptographic binding of a physical object to an NFT. Real binding means that no duplicate of the physical object can be created without cryptographic forgery. This is only achievable if the chip can sign messages with a private key that is physically embedded and unextractable. Our expertise in phygital development ensures seamless NFC chip NFT binding for product verification, leveraging standards like EIP-5791. Our experience: over 5 years in blockchain development and more than 50 phygital projects. We guarantee cryptographic security with independent audit reports.
How Cryptographic Binding of NFC Chip to NFT Works
Binding is based on asymmetric cryptography. The chip stores a private key that cannot be read externally. When scanned, the chip signs a unique message (e.g., wallet address and blockhash). A smart contract on Ethereum verifies the signature and links the physical object to the token. Without the chip, the signature cannot be forged.
Chip Selection: Cryptography Requirements
Not every NFC chip is suitable. NTAG213/215/216 are standard tags for simple URL reading. No cryptography, cloneable in 10 seconds with any Android.
You need a chip with an asymmetric key pair and signing capability:
- NTAG 424 DNA — the most common choice. AES-128 on board, SUN (Secure Unique NFC) message authentication. Each scan generates a unique CMAC-signed message with a rolling counter. The private key is written during production and is unreadable from outside.
- Kong Halo — ECC (secp256k1 — same curve as Ethereum), each scan generates an ECDSA signature over keccak256(chipAddress || blockHash || counter). Compatible with EIP-191 personal_sign, on-chain verification via ecrecover. Kong Halo chips provide 5x faster verification due to native secp256k1 support compared to NTAG 424 DNA which requires server-side decryption.
- Arx Research HaLo — chip's public key is a deterministic Ethereum address. Used in RTFKT, Adidas Physical NFT projects.
| Characteristic | NTAG 424 DNA | Kong Halo | HaLo |
|---|---|---|---|
| Cryptography | AES-128 CMAC | ECDSA secp256k1 | ECDSA secp256k1 |
| Ethereum compatibility | Via server | Native (ecrecover) | Native |
| Anti-cloning protection | High (AES key on server) | Maximum (private key unknown) | Maximum |
For a serious phygital project, the choice between NTAG 424 DNA and HaLo depends on the task: NTAG 424 is cheaper and more standard, HaLo is natively compatible with Ethereum signatures and does not require custom verification.
Cryptographic Binding Scheme
HaLo / Kong Halo Scheme
Each chip has a built-in secp256k1 key pair. The public key is chipAddress. When scanned by a phone (via Web NFC API or native app), the chip signs a challenge:
signature = ECDSA.sign( privateKey, keccak256(abi.encodePacked(chipAddress, cmdBlock, counter)) ) The counter increments at every scan — replay attack is impossible. cmdBlock contains data about the specific command.
The smart contract stores a mapping chipAddress => tokenId. Ownership verification:
function verifyChipSignature( uint256 tokenId, bytes calldata signatureFromChip, bytes32 blockHash, uint256 blockNumber ) external view returns (bool) { require(block.number - blockNumber <= MAX_BLOCK_AGE, "Stale"); address chipAddress = chipAddressOf[tokenId]; bytes32 digest = keccak256(abi.encodePacked( chipAddress, blockHash )); address recovered = ECDSA.recover(digest, signatureFromChip); return recovered == chipAddress; } Blockhash is included in the signature to bind the scan to a specific moment in time — protection against saved and replayed signatures.
NTAG 424 DNA Scheme
Chip uses AES-128 CMAC. Each scan generates a URL like https://verify.project.xyz/?e=<encrypted_uid>&c=<cmac>. encrypted_uid is the AES-128 encrypted UID of the chip (unique), cmac is Message Authentication Code, includes rolling counter. The verification server decrypts UID and checks CMAC with known secret key. Counter is checked for monotonic increase.
Weakness compared to HaLo: AES key must be known to the verification server. Compromising the server allows cloning signatures. For HaLo, no one knows the private key.
What is Physical Backed Token (EIP-5791)?
EIP-5791 — the standard exactly for this. Extends ERC-721 with two functions:
function tokenIdMappedFor(address chipAddress) external view returns (uint256); function isChipSignatureForToken(uint256 tokenId, bytes calldata payload, bytes calldata signature) external view returns (bool); Reference implementation: Chiru Labs PBT. We inherit from PBT and override verification logic for the specific chip.
Token transfer via chip scan:
function transferTokenWithChip( bytes calldata signatureFromChip, uint256 blockNumberUsedInSig ) external { require(block.number - blockNumberUsedInSig <= getMaxBlockhashValidWindow(), "Expired"); bytes32 blockHash = blockhash(blockNumberUsedInSig); require(blockHash != bytes32(0), "Block too old"); bytes32 digest = keccak256(abi.encodePacked(msg.sender, blockHash)); address chipAddress = digest.recover(signatureFromChip); uint256 tokenId = _chipAddressToTokenId[chipAddress]; _transfer(ownerOf(tokenId), msg.sender, tokenId); } This means: to transfer the NFT to a new wallet, you must physically tap the item to the phone and sign the transaction simultaneously. Without the physical item, transfer is impossible. This is a key property for luxury goods and collectibles.
Process Overview
- Requirements analysis: chip type selection, binding parameters (number of chips, network, token standard).
- Cryptographic scheme design: signature and verification protocol.
- Smart contract development: PBT contract with chip scan and transfer support.
- Mobile app development (if needed): Web NFC or native app.
- Production integration: chip flashing, key generation, chipAddress → tokenId mapping.
- Testing and audit: manual testing, fuzzing (Echidna), formal verification.
- Deployment and support: contract publishing, verification infrastructure setup, documentation for the client's team.
| Stage | Duration | Result |
|---|---|---|
| Analysis | 1-2 days | Technical specification |
| Design | 3-5 days | Crypto scheme, chip selection |
| Contract development | 5-10 days | Smart contract, tests |
| App development | 10-20 days | Mobile client |
| Production integration | 5-7 days | Flashed chips, mapping DB |
| Testing & audit | 5-10 days | Audit report |
| Deployment | 1-2 days | Working solution |
Development costs for a full NFC-NFT solution typically range from $20,000 to $50,000, depending on chip selection and app complexity.
What's Included
- Chip selection and procurement (NTAG 424 DNA / HaLo / Kong Halo) with supplier verification.
- Smart contract development per EIP-5791 with chip signature verification.
- Mobile app creation for iOS and Android (Web NFC or native).
- Production line integration: flashing scripts, key generation, mapping.
- Operational documentation and technical support at launch.
Technical Production Requirements
- Chips must arrive from the factory with pre‑loaded keys (custom keys ordered separately). - For HaLo, a supply agreement with the manufacturer (Arx Research) is required. - Recommended embedding: overmolding into the product body or lamination between material layers.Contact us for a consultation on your project. Order NFC-NFT solution development and we will prepare a custom proposal.







