I made a two factor authentication token and have made it available on Amazon. In this post Ill talk about the design, how I produced it affordably, and some metrics about selling on Amazon. If youre interested in doing something similar, you can copy everything as its all open source.
It uses the U2F protocol, which is a standard developed by the FIDO Alliance and Google. U2F uses challenge response for authentication and is based on the P-256 NIST Elliptic Curve. FIDO additionally provides U2F standards for transports like USB, Bluetooth, and NFC which makes a project like this ideal.
I decided that a U2F token would need to meet 3 core requirements:
I chose to use the following components to implement the design (in order of importance):
The ATECC508A chip fulfills all security requirements because it has a hardware RNG, write only keys, and hardware acceleration for elliptic curve operations **.
You can see the full source of the design here.
It would be much better with a tamper resistant case or coating, but the initial capital to get that going is currently out of my reach.
This is the fun part. I was originally hopeful when starting this project that I would be able to solder everything in one night. But that proved to be too time consuming, messy, and unreliable. So I got it fabd and assembled at PCBCart. But the real challenge was programming the tokens.
Programming was a challenge because its dependent on my scripts to handle the initial configuration of the ATECC508A chip and creation of a unique attestation cert for each U2F token. In other words, one binary firmware blob did not cut it. Each token needed to be programmed once to be customized and then programmed again with a signed build ***. It took me about 1-2 minutes to program a U2F token while prototyping.
Manufacturers like PCBCart typically offer mass programming services but my process was too complicated and would have ended being untrustworthy and expensive.
I decided to program everything on my own while promising to my future self that I would make a pipelined process to get everything done affordably and in a reasonable amount of time.
Fast forward a couple months, I have a lot of U2F tokens from PCBCart:
I automated and optimized my programming setup. I acquired 3 programmers, 3 USB extension cables, and made 3 connectors using protoboard and machine pins.
How it would work:
This process takes about 10 seconds per token. Because I had three setups, I could get up to three working at the same time. It would have been quicker with 4 or 5, but eventually I wouldnt be able to plug them in fast enough to get more than 5 programming at the same time.
It took me about 4 hours total to get through everything. I watched two movies (props if you can figure out which ones). Occasionally my pipeline would stall on some edge cases and I would have to restart but it was mostly smooth. I only had 1 token from PCBCart that didnt work (which is okay since PCBCart made a couple extras).
My goal was to have U2F Zero listed in stock for at least a year. I dont know how many I can expect to sell so its a bit of a shot in the dark. I know I dont want to be bothered handling payments and shipping so going with a distributer is needed. I decided to go with Amazon because they make it so easy for most people to order things online (and free shipping).
Typically to list a product on Amazon, its very easy if its already listed. You just pick the already listed product and reuse all of the information already there.
But if youre adding a new product, you have to consider a couple options:
New Brand Owner: If you own the brand of a product not currently on Amazon, you must apply for Amazon to approve your brand and then list the product.
New product but not brand owner: If you want to list a product but you do not own the brand for it, you need to get permission from the brand owner to sell it and then Amazon will allow you to list the product.
Because I was the owner of the brand (I called it U2F Zero), I attempted option (1). However, unmentioned in their documentation, Amazon requires that the brand be printed directly on the packaging to protect the brand. Stickers or labels do not count. All I had and had planned to use was polybags and labels.
I didnt want to back up and get everything repackaged with my brand printed on it. I decided that the owner of the U2F Zero business would be my LLC ConorCo.
I wrote a letter to ConorCo LLC and asked for permission to sell their product, U2F Zero, on Amazon. The majority shareholder of ConorCo LLC, Conor Patrick, promptly signed off to give me permission to do that. I then submitted this to Amazon, in compliance with option (2). Amazon promptly accepted the application and listed U2F Zero.
After a polybag and labeler packaging party with help from my roommates, U2F Zero is available on Amazon.
Fortunately I had U2F Zero printed on the PCB before I even knew that I needed to. Amazon may not have accepted it otherwise. The domain u2fzero.com points to a launch page required for the Amazon application.
My roommates make fun of me for how much I order things online particularly from Amazon. One of them made this static site for me during this project (be sure to click something).
Including all parts, PCBs, and assembling, each token costs about $3.40 to make. This is cheaper then just making 1 token because costs go down when purchasing large volumes.
Theres also the cost of prototyping, buying new tools, and frictional costs. For example, I got hit with a $126 tariff when importing the assembled boards from China. I also have some extra tokens not being sold to use for replacements. I estimate the real cost was actually about $4.18 per token.
Amazon takes about $2 out of each sale. How much Amazon takes depends on the product. U2F Zero qualifies for Amazons Small and Light fulfillment program which has the smallest fees.
If I sell out at $8 per token, I would make a 43% ROI. Thats optimistic though. I may have to drop the price later on if needed. The break even price would be around $6.20. I dont know what to expect. Ill make a post about this later on.
Im by no means an entrepreneur but Id like to keep trying to be one. This project has been a long term experiment and the experience has been great for me. I am not actually concerned with financial success or growth. The nice thing about this project is I can just let it sit and I dont need to maintain anything leaving me time to move on to the next project.better analysis. ** Finding a chip that has secure public key crypto (P-256) implementations is non-trivial. I got lucky when I found Atmels chip which was easy to purchase and get documentation for. Other manufacturers that offer potential secure chips are NXP, ST Electronics, and Infineon. But none of them sell their secure chipsets on normal distributors and seem to require customers to go through NDAs, licensing, and large minimum order requirements. I hope the market for public key hardware becomes more transparent. *** The public key in the build is signed for device attestation.