Andrey Ovcharov

Professional Software Engineer and hobbyist Hardware enthusiast

Andrey Ovcharov

URU Card - Arduino FIDO2 Authenticator

After publishing the URU Key project people keep asking me to make it open source. I have tried to organize sources in a more readable way but I still think that plain C and ESP IDF are too difficult for the broad audience. And, unfortunately, the biometrics part is covered by NDA and can not be published.

Therefore I am starting a new project to address these and other issues.

Size and form factor

A few months ago I have finalized the URU Key hardware design and started working on housing for it. Yes, it is very small and lightweight but carrying it around is a kind of a problem. The device is too fragile to be worn on the keyring and a bit thick to put in the pocket. The necklace is not my style.

URU Key with the battery
URU Key with the battery

However, my wallet is always with me. The PCB sized as a standard credit card should perfectly fit there. The power source becomes a problem, that’s true. But, wait, is it difficult to find a charger or power bank with Micro USB nowadays?

URU Card in the wallet
URU Card in the wallet

The name URU Card makes a lot of sense for this project, isn’t it?

User interface

As on one hand, I can not use biometrics for open source project and on other hand, I do not want to omit the authentication completely leaving the device insecure there is a need for some form of user verification. Simple touch keyboard and OLED screen should allow people to enter pin code or password.

URU Card - touch keyboard and OLED screen
URU Card - touch keyboard and OLED screen

The keyboard should be implemented with the MPR121 I2C touch-sensor controller, and the screen is a widely available OLED screen with the SSD1306 controller. The screen is placed in the special cut in the PCB keeping the device thickness below 2 millimetres.

Framework for the development

Fortunately, the Arduino framework is ported to the ESP32 platform. There are hundreds of libraries for almost every use case and this factor should significantly simplify the project. There are libraries for ATECC508A, MPR121 and SSD1306 already. All that is needed is to wire everything together.

However, the Arduino IDE will be hardly usable for a project complex like this one. I am going to use Visual Studio Code + PlatformIO for the development and recommend others to do the same.

The current state of the project

At the moment the working BLE server with FIDO2 endpoints is implemented. The device is “visible” and the computer connects to it in order to perform an authentication procedure. However, the commands are not implemented yet - it’s going to be the next step.

URU Card - the components
URU Card - the components
URU Card - connected to debugger
URU Card - connected to debugger

There is a PCB design as well and you can try to build the device, but do it on your own risk - it’s in a very early stage now.

Joining the project

Sweetest part. The project is free to join for everyone. The minimal requirement is just an ESP32 development board like the one below.

ESP32 development board
ESP32 development board

The security element, screen and keyboard can be purchased separately and attached as external modules.

The links to the GitHub repository and other useful resources are given below.

I will be really thankful if consider sharing the project and leave comments with your thoughts and suggestions.

References