This project is submitted for

Description

Memtype project is a low-cost and open source solution to store your passwords for having them available everywhere in a tiny and portable USB form factor device.

The device is based on the Atmel attiny85 device and uses V-USB software solution to have USB communications and enumerate as a keyboard.

The project started with the idea... what's the cheapest way of having a USB stick with all your passwords ?

About security... the device can't be accessed without entering a 4 digit PIN and all credential info is encrypted using NOEKEON cipher (we use this cipher as AES implementation is too much for the little attiny85).

Details

Memtype evolution, from first prototype to current version

On the top image you can see the first Memtype prototype next to the first version. The prototype was done using a Digispark board and was modified to insert a 4 way switch. On the bottom, the latest (OSHPark made) version with SMD joystick and two LED is shown.

Store not only the password but also the user! it types it all for you jumping from one field to another!

Why stop there? store also the command and it'll type it for you! let it type the long "ssh user@someserver -p port" command for you or anything else! You can add waits so it types everything at the right time with ASCII SYN chars.

Enumerates as a HID, no need for drivers, it'll work on any device with USB.

Dynamic storage, so you're not limited to a fixed password length, just fill the 2K flash reserved for credential storage with anything you want :)

Assign names to your stored user/password/commands so you can find them fast and easy.

Easy graphical user interface (GUI) tool to manage all your keys, make backups and copy it to another device for some other user.

Easy to generate keymaps, edit the example file and generate the one for your keyboard map and language.

Project Logs

We've received comments from users regarding to the difficulty of installing python2.7 and the dependencies on some operating systems for using the old MemTypeTool GUI. Also there were some bugs in it and some missing features, so we decided to rewrite a new GUI from scratch using C++ and Qt5.8.

This also allows us to make a binary release that anybody could download and use directly.

Check out this cool #MemType review made by N_O_D_E no his youtube channel! It shows the #MemType basic usage and it's a great introduction if you prefer an awesome video rather than reading our ugly documentation! :D

The soldering procedure this time has been the hot plate reflow technique, using the great chipquick solder paste and has been a pleasure!

To apply the solder paste we've used the great syringe provided by chipquick, after some tests and being done the first couple of units it's been super easy to apply the right amount of solder paste to each pad, much easier than expected.

We asked for stencils but they're still on the way, next units will be made using the stencil so we'll compare and share the results.

The MemTypeTool GUI v0.3 has translation support added, for the moment only Spanish translation appart from default English, but if you feel like translating it to another language just copy the es_ES.ts file inside translate directory, use the right name for your language and country so it can be loaded automatically.

Then use lrelease command (from qt) and the .qm file will be generated and used automatically based on your locale settings on the computer.

A windows install instructions has been added to the readme with some screenshots.

After some work the MemType management GUI is fully functional! Now it's easier to add new credentials to the device or edit them! also changing the PIN or the keyboard layout as well as exporting to files and importing from them!

In a normal design the most extended method to flash an AVR microcontroller is by routing MCU ICSP pins to a dedicated ICSP connector. An alternative way when you're still developing the product is to use a bootloader.

Bootloader is the option we choosed with Memtype during development phase but, the space occupied by the bootloader is valuable space we can use for credential storage, so we decided to remove the bootloader for end user units (about 2KB space freed).

The first method that came to our minds were those mini grabbers test clips you can see on the image below, as they are used in a lot of projects. But we realized that grabbing six clips in such a narrow space was not only time consumming, but also a source of problems as connections to attiny pins were too lose.

[Memtype Final solution adopted]

We improved our programming method by using a special test clip for SOIC ICs that fits perfectly on the attiny, this saved us time and headaches as now with one movement we had all the pins attached with a perfect connection.

This kind of test clips can be bought for less than 5$ on ebay: SOIC8 test clip

For those wanting to know the ICSP pin description for the attiny85 you can check the image below:

Having a CLI tool is fine, everyone can manage the credentials on the device and layouts, but having to find what flags to use or how the files have to be constructed can be a problem to some people.

An important feature of MemType is that it has to be easy to use. Connect, use joystick and you're done signing into everywhere! no password typing nor remembering your super secure passwords ;)

Managing the credentials on the device is a less common task but it should be as simple as possible, so we're finishing the MemType GUI!

A couple of clicks and your credentials are on the device!

Specially useful if you have to manage several accounts in your work! Web access, Wiki, Issue Tracker, SSH, GIT, SFTP, SKYPE, Emails, Various devices, Virtual Servers, Wifi networks or any other where someone has to sign in.

There's also a python library (almost finished too) to access the MemType programmatically for any special needs anyone may ever have ;)

As you can see on the image below, memtype beta units are already ready to be shipped and have been shipped today !! At the end we don't shipped with tracking number so, we hope people who sent us the address to receive the units.

I recently bought one, but every time I try to read the credentials off of it using the GUI, it crashes. I'm running it on Linux, btw. I decided to ask her because you appear to be most active here. Thank you!

Hey, a couple of days ago I bought a MemType (thank you very much). It arrived today. The device itself seems to work, but the GUI doesn't recognize the device. I'm using Ubuntu 16.04 and downloaded the latest version of the GUI. Any tips or thoughts are welcome. ^^

hi friends i need to build this kind of project can you help me i already download the source codes from Git Hub and i have all hardware devices with me but i don't know how to configure hardware devices with your given codes. If you can send me a readme file with installation guide please... Thank you

I just built one based on the latest files sent away to oshpark. I was wondering if the 1k resistors could be a different value? (Im running low). Also I can't get the MemtypeTool to work on windows. I got it installed and working, and libusb-32 but now the memtype is unable to type so I am unable to unlock it. Any ideas?

The drivers shown on the "device manager" for the device should be the default windowsHID driver, not the libusb one. If you changed it, remove the driver from the memtype on the device manager, plug again the memtype and let windows recognise it as HID, then just add a device filter following the steps 5,6,7 and 8 of the MemTypeTool GUI readme on the link above.

If you have some trouble let me know and I'll make a video of the process.

EDIT: I can see a windows installer doing all the driver stuff could be handy :)

@Noel Carriqui I had followed the instructions and windows would not recognize the device even though TestLibUsb showed it correct. But after using the inf-wizard, uninstalling that driver, then using the filter worked. Now it works fine.

As for the Keyboard Layouts, I have changed it but there is no US_Eng keyboard. the UK_Eng one is different and so is Canadian_Multi. How can I add a US_Eng keyboard?

the memtype handles keycodes, it emulates "keyboard press" so it can type any key in any language, but the translation from character to key codes is done based on the ascii charset 1 to 1 like so: 1 ascii char -> 1 key code.

We could upgrade it very easily to work with utf-8 characters and translate them to more than one key code sequence per character, for example in spanish there is the 'á' letter that's typed by pressing the ´ keyboard key followed by the a key.

I made something like this some years ago (see https://www.gearloose.net/electronics/avr usb/) that didnt use a joystick but rather the keyboardkeys that are attached to LED's to enter a code. The status LED's information is sent to each keyboard attached. So you can type combinations of CAPSLOCK, SCROLLLOCK and NUMLOCK to get different passwords. And aditionally you can simply delete all the passwords if the LED combination is wrong while inseting the device or when entering a wrong code. Maybe it would be an option to the joystick.

the passwords were just protected by the fuses. I did not get as far as to encrypt them as the project was just a personal prototype and it still has a lot of potential. It was more just a proof of concept.

The authentication was a sequence of any length of keyhits of the three keys. The initial state is just an addition.

The passwords were hardcoded in the source at this point. The length was variable.

The keystrokes could simply be programmed to hit the tab key inbetween to change the inputfield. Thus it would be possible to enter username and password.

I did not test the stick on any other OS than windows, just used the VUSB as it was.

The project source should be available on the Elektor site. Although that is a very early work. Your version will be much safer and easy to use. Just thought the input via the three LED keys was quite handy.

Hi I like your idea!! I just had an idea myself. Could you change the pin entry with the joystick to use the four directions as pin numbers (e.g.: up = 1, left = 2, down = 3, right = 4) then you could use a "longer" pin number and still be faster ?

When designing the PIN entry we contemplated all the options including the one you suggest and we didn't ended up using it because despite it's faster, the key would be exponentially weaker as it'd be base 4. Then we'd need to make the PIN exponentially longer to make it stronger, and that would be way longer than simply "longer" so then it'd be impossible to remember.

What could be a great idea is to be able to import from keepass to MemTypeTool easily and at some point we'll implement that feature as there are some users that already have their credentials on keepass :)