Inspiration
Although our world is shifting to digital technologies, physical cash has barely evolved. Banknotes still rely almost entirely on physical security features such as watermarks, microprinting, holograms, and color-shifting inks. While effective, most businesses use simple techniques for convenience, such as marking the note with an anti-counterfeit pen.
However, this technique can give completely false results, because it uses an iodine-based solution that reacts when the paper material is wood-based. Thus, many counterfeiters avoid detection by using specific paper materials, or by "bleaching" other foreign currencies.
What it does
Our project Counterfeit Mind proposes a new way of dealing with counterfeiters, which is by embedding an NFC technology inside the banknote during manufacturing, and writing data such as Serial number, Denomination, Currency, then signing it using a trusted Department of Treasury private key.
For this demo, I used an NFC tag sticker to substitute the role of an NTAG 424 DNA NFC chip (which can not be cloned) that would be embedded inside the bill, and then verified by a hardware component in an instant, which ensures the authenticity of the banknote and that it was never tampered.
It also uses Blockchain technology (Ethereum Sepolia) to create a trusted decentralized data to help registering each banknote digitally during the manufacturing process. Which also prevents the passage of any revoked or duplicated bill and keeps the privacy of the users.
We used for the demo an ESP32 along with a PN532 NFC Reader on a breadboard, and also a small display to show results.
The steps of the demo are:
- Department of Treasury:
- Embeds an NFC Chip (sticking the NFC tag) in the banknote
- "Registering" the banknote to the blockchain, and writing data to the NFC tag.
- Signing the written data using a trusted private key (Ed25519 Algorithm)
- User:
- Uses the iOS mobile app to capture the banknote with the camera
- Using AI, the app sends data such as Serial number, currency, denomination to the hardware component (ESP32) through Bluetooth
- The user scans the banknote (on the NFC reader)
- The ESP32 compares the previous visual values it received with the data inside the NFC tag.
- If it matches, it verifies the authenticity of the signature
- Retrieves the timestamp and hash of the banknote from the Blockchain using the serial number (Only if the user selected the option to)
How we built it
We mainly used an ESP32 Dev Module that holds an NFC Receiver (PN532) and a TNF Screen Display. The iOS application is the first step of the demo, and it is entirely built with Swift. Gemini's API plays the role of retrieving visual data from the banknote when it is captured via the app. The purpose of this data is to verify if it matches to the NFC data that is "embedded" with the banknote. Gemini's API sends a JSON format of the currency, denomination, and serial number of the note, which would then be transferred to the ESP32 via Bluetooth.
When the ESP32 receives the data, it displays it through its TNF Screen Display, and instructs the user to scan the banknote using the NFC Receiver (PN532). We assume that data is already written to the NFC chip of the banknote during production, and for demo purposes we manually wrote it using the "Treasury Section" where you're able to register a banknote's serial number and details into the blockchain, and also sign it using a strong cryptography algorithm like Ed25519.
So when the user hovers the banknote above the NFC Receiver (in this case an NTAG sticker on a dollar bill was used for demo) the ESP32 will verify if the visual data and the NFC data matches. If it does, then it verifies if the signature is authentic and belongs to the data that we had. If not, the banknote is likely counterfeit.
Built With
- blockchain
- cpp
- cryptography
- esp32
- gemini
- python


Log in or sign up for Devpost to join the conversation.