Close
0%
0%

Memtype: Open Source Password Keeper

Memtype, an elegant solution to have your credentials stored everywhere.

Similar projects worth following
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).

The project can be found at: https://github.com/jim17/memtype

Memtype evolution, from first prototype to current version

Memtype hardware revision 2

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.

FEATURES:

  • Encrypted storage using NOEKEON implemented in ASM! https://en.wikipedia.org/wiki/NOEKEON
  • PIN Lock, unlock it when connected! no one can use it if lost!
  • 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.
  • RED and GREEN leds two know device status LOCKED / UNLOCKED.
  • Open Source Hardware and Software.
  • Mac, Linux and Windows support for the GUI.

Demo video:

  • 1 × 100nF Capacitor 0805
  • 1 × 3V6 Dual Zener SOT-23
  • 1 × ATTINY85 Microprocessors, Microcontrollers, DSPs / ARM, RISC-Based Microcontrollers
  • 1 × JOYSTICK 4 way
  • 1 × 1k5 Resistor 0805

View all 9 components

  • Memtype Lite and PCBWay Prototype PCB review

    Miguel01/21/2019 at 21:53 0 comments

    We are working on a new version of the Memtype, this time we will call it Memtype Lite. It wil have the same features as Memtype with the following improvements:

    • Increased Credentials Size
    • Better OS compatibility, Windows, Linux, Mac.
    • Add / Delete / Modify credentials and device configuration using a command line interface through serial port.
    • One side PCB with USB form factor to be embedded into a plastic case.
    • Firmware Update.

    In order to have a prototype to play with, we ordered 5 boards from PCBWay. The boards arrived in a week by selecting DHL shipping method. If you need quick turnaround at very low price PCBWay is your choice.

    PCBWay package

    This is how the package looked, PCBWay kindly added a Merry Christmas message on the box. After opening the package we checked the dimensions of the boards within the USB case.

    Memtype PCB with USB case

    The PCB boards manufactured from PCBWay looked very nice, the silkscreen was very good, they made a castellated hole on the USB connector and everything was according the gerber files provided. 

  • NEW MemTypeTool available!

    Noel Carriqui05/27/2017 at 14:11 0 comments

    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.

    We've released today the v1.0 version of that new GUI :)

    https://github.com/oyzzo/MemTypeTool/releases

    Documentation for the #Memtype: Open Source Password Keeper:

    http://www.area0x33.com/documentation/memtype.html

    It's compatible with all the MemTypes and it will receive updates with new cool features.

    Hope you like it!

    Regards

  • MemType youtube review by N_O_D_E!

    Noel Carriqui11/07/2016 at 20:59 0 comments

    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

    Miguel & Noel

  • MemType Tool v0.5 Released!!

    Noel Carriqui09/27/2016 at 16:06 0 comments

    The new v0.5 release of the #MemType Tool is available on github:

    https://github.com/oyzzo/MemTypeTool

    It adds a very important feature! AES encrypted files! So now everybody can have encrypted backups of the credentials in the PC!

    This feature was requested by many users and was obviously a must have for the MemType Tool!

    If you still don't have a #MemType get one before it runs out of stock in tindie!:

    https://www.tindie.com/products/area0x33/memtype-open-source-password-keeper/

    Also let us know what new features you'd like for the new Release ;)


    Miguel & Noel

  • MemType on Tindie back in stock!

    Noel Carriqui07/25/2016 at 12:02 0 comments

    We've soldered and prepared more MemType units for the Tindie store!

    https://www.tindie.com/products/area0x33/memtype-open-source-password-keeper/

    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 weather was great so we decided to doit outdoors! PCB bbq :)

    Miguel & Noel

  • MemTypeTool GUI v0.3 released!

    Noel Carriqui06/22/2016 at 09:53 0 comments

    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.

    https://github.com/oyzzo/MemTypeTool

    Hope you like it! :)

    Miguel & Noel

  • MemType Tool v0.2 Released!!

    Noel Carriqui06/07/2016 at 20:25 1 comment

    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!

    Hope you find it useful! :)

    https://github.com/oyzzo/MemTypeTool

    Miguel & Noel

  • Flashing Memtype - Final Solution

    Miguel04/28/2016 at 18:04 0 comments

    [Introduction]

    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).

    [Bootloader]

    Our decision for attiny85 bootloader is Micronucleus, you can find more information in their github repository: Micronucleus Attiny85 Bootloader

    [Memtype First programming method]

    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:

    Regards,

    Noel & Miguel.


  • New GUI and Python Library!

    Noel Carriqui04/04/2016 at 10:44 1 comment

    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 ;)

  • Memtype Hw rev2

    Miguel02/01/2016 at 23:00 4 comments

    Noel and me are still doing some improvements on the project, so we redesigned the PCB board with the following changes:

    1. Replaced wrong ATtiny85 footprint for the proper one.
    2. Replaced PCB USB for a proper USB connector.
    3. Replaced through hole joystick for a SMD one.
    4. Changed PCB shape to fit in a USB plastic enclosure.
    5. Added two LED to know device status. (suggestions on the notifications and the use of two LED are welcome)

    We want to thank al1 for giving us great ideas at https://hackaday.io/page/1468-memtype-testing

    The PCB will look like:

    Memtype rev2 top side

    Memtype rev2 components side

    Any idea / improvement that won't increment the PCB size or BOM cost too much is welcome !!

    Regards,

    Noel & Miguel.


View all 16 project logs

Enjoy this project?

Share

Discussions

tyler wrote 05/12/2021 at 01:18 point

Wow, cool!

  Are you sure? yes | no

Brendan wrote 10/17/2020 at 08:29 point

Excellent project and great work so far. I would like to get one in my hands and try it out. Which may mean I need to build one. Is the detail up to date on GitHub can you tell me; before I dive down a dead end. Is the project still active..?...I do hope so.

  Are you sure? yes | no

Luis Henrique wrote 04/21/2020 at 17:49 point

First of all, congratulations on the project. 

Anyway, is it still active? How can I acquire it?

  Are you sure? yes | no

dukeofcool199 wrote 10/05/2019 at 03:37 point

the link to the documentation seems to be broken.  Also does anyone know how to flash the firmware? i bought all the hardware to build one myself, and need some help.

also does anyone have an updated BOM for odering parts? the one found in the github repo seems to be out of date.

  Are you sure? yes | no

fabian wrote 07/23/2018 at 15:48 point

0. is possible change firmware?

1. is protected change firmaware from other?

2. please change mechanic button to touch (usb broken)

3. many OTP needed clock

  Are you sure? yes | no

mixailaggelos wrote 05/25/2018 at 17:39 point

The project is still running?

  Are you sure? yes | no

Noel Carriqui wrote 03/11/2019 at 17:48 point

Hi @mixailaggelos ! yes, the project is still running.

we're creating a newer version called MemTypeLite based on a more powerefull cortexM0 uC with zephyrOS.

  Are you sure? yes | no

konstadinoskit wrote 08/27/2017 at 23:04 point

Is it possible to include a simple brief summarize/guide for how to build a memtype based on a digispark? I don't seem to understand how to put the code in there. (kind of noob here...)

  Are you sure? yes | no

the_alpha_tree wrote 06/30/2017 at 09:43 point

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!

  Are you sure? yes | no

Noel Carriqui wrote 08/09/2017 at 20:37 point

Hi! 

you're right, there was a bug causing this crash.

It has been solved and a new release V1.0.1 is available at:

https://github.com/oyzzo/MemTypeTool/releases

Thanks for your feedback!

  Are you sure? yes | no

hotmeeler wrote 05/13/2017 at 11:12 point

Hi, I ordered 2 of these and hope they arrive soon. In regard to the PIN code, is there a fail save in place that erase the memory after a few attempts ? thanks.

  Are you sure? yes | no

Noel Carriqui wrote 05/27/2017 at 14:02 point

Hi @hotmeeler!

Thanks for ordering!

If you enter a bad PIN four times, the PIN is reset to the default "0000". This serves 2 purposes:

1) Brute force protection:

If someone tries to find the right PIN, after four attemps it'll be reset, so the credentials on the device will be lost as they were encrypted using the old PIN.

2) Forgetting the PIN:

If you forget the PIN, you can reset it to the default. The credentials stored in the device will be lost as they were encrypted with the old pin.

Having a backup credentials file on the PC is always recommended.

Today we've released the new GUI, much easier to install and use:

https://github.com/oyzzo/MemTypeTool/releases

We'll keep adding cool features to the new GUI.

:)

  Are you sure? yes | no

samuelcaetanolima wrote 05/11/2017 at 14:54 point

I have another problem. After I got the GUI detecting the MemType I changed the pin. I entered a pin with 6 numbers and now I can't unlock my device because It only accepts 4 numbers. xD

EDIT: It reseted itself after puting the wrong pin a couple of times.

  Are you sure? yes | no

samuelcaetanolima wrote 05/11/2017 at 14:19 point

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. ^^

EDIT: I solved it. I runed the script with sudo. But the window looks like it is running on Windows 95 xD https://drive.google.com/open?id=0B32b4SDBli1UMmExYW56TXJ0M2c

  Are you sure? yes | no

Noel Carriqui wrote 05/27/2017 at 13:56 point

Hi @samuelcaetanolima ! glad to see you solved it!

There's a new GUI now:

https://github.com/oyzzo/MemTypeTool/releases

The python GUI had some inconvenients that are solved in this new GUI written from scratch in C++11 and Qt5.8.

  Are you sure? yes | no

Bartosz wrote 01/27/2017 at 17:45 point

please add:

* OTPassword

* some back information. 4 diode or screen (alphanumeric or graphics)

* switching to PREVENT change firmware (for security)

* usb host for bigger memory (or sd card reader)

(for encrypting a usb/sd or for OTP with xor for paranoic ;) )

http://code.google.com/p/opencryptotoken/

http://code.google.com/p/openkubus/

etc.

  Are you sure? yes | no

Noel Carriqui wrote 05/03/2017 at 19:12 point

Hi @Bartosz!

Thank you very much for your feature requests! 

Please keep in mind this project is focused on being a very low-cost and simple device that solves the basic use cases affecting the majority of people. 

If you take a look at the part list you'll see that the poor ATTinny85 is pushed hard to give all its juice! :)

There are some other high end hardware password keepers that are more featured (and expensive) targeted to solve any professional or specific use case, like the ones you point.

Best regards,

Miguel & Noel

  Are you sure? yes | no

vishwa wrote 09/14/2016 at 07:45 point

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 

  Are you sure? yes | no

dwHacks wrote 07/19/2016 at 05:31 point

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?

  Are you sure? yes | no

dwHacks wrote 07/19/2016 at 05:56 point

Well it seems to work now after using the inf-wizard, then uninstalling that driver and using install-filter-win.... WEIRD! but awesome little device.

  Are you sure? yes | no

Miguel wrote 07/19/2016 at 14:00 point

Congratulations!! we like a lot you have decided to build one by yourself, we would like to see some pictures about it, could you send us some pictures about the memtype you have build ?

Regards,

Miguel

  Are you sure? yes | no

dwHacks wrote 07/19/2016 at 15:45 point

It seems there is no en-us keyboard file either. When I use it with the default my @ does not work. I had to change it to CANADIAN_MULTILINGUAL, but that makes the ^ wrong.

  Are you sure? yes | no

Noel Carriqui wrote 07/21/2016 at 10:07 point

I think the default layout on the MemType firmware is spanish. You can change it using the MemTypeTool GUI https://github.com/oyzzo/MemTypeTool

If you download the zip or git clone the repo, you'll find the keyboard layouts under the "keyboards" directory.

  Are you sure? yes | no

Noel Carriqui wrote 07/22/2016 at 23:44 point

hi @dwHacks ! we've created the en_US keyboard layout, you can find it here:

https://github.com/oyzzo/MemTypeTool/blob/master/keyboards/keyboard_EN_US.txt

Test it and let us know how it works :)

  Are you sure? yes | no

Noel Carriqui wrote 07/21/2016 at 10:04 point

Hi @dwHacks have you followed the steps on the MemTypeTool GUI readme found here https://github.com/oyzzo/MemTypeTool ? 

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 :)

  Are you sure? yes | no

dwHacks wrote 07/21/2016 at 15:27 point

@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?

  Are you sure? yes | no

dwHacks wrote 07/23/2016 at 01:31 point

@Noel Carriqui

New En_US keyboard works perfect! thanks for the update!

  Are you sure? yes | no

Warior wrote 07/06/2016 at 17:46 point

really cool

  Are you sure? yes | no

dwHacks wrote 06/21/2016 at 15:27 point

Is there any chance you will share the project on OSHPark? I would love to build one or two!

  Are you sure? yes | no

Noel Carriqui wrote 06/27/2016 at 09:43 point

hi @dwHacks

If you want to get some PCBs we've got some available of the red version that doesn't need usb connector, as shown in the renders and photos. 

We'll send you the units you want at the same price, but with a slightly better finish quality :)

If you still prefer to have them built from OSPark or other PCB manufacturer, you can get all the files from the github :)

https://github.com/jim17/memtype/tree/master/schematic_pcb/electronic_design_kicad

  Are you sure? yes | no

dwHacks wrote 06/27/2016 at 15:37 point

Sure! that would be very cool! let me know where I can go to purchase some!

  Are you sure? yes | no

Miguel wrote 06/29/2016 at 22:08 point

Hello dwHacks, contact me through MP in order to send you the PCBs.

  Are you sure? yes | no

gir wrote 06/20/2016 at 08:07 point

very nice project!

as i am working on a raspberry-based solution, i wondered if your memtype handles unicode characters (e.g. german umlauts)

  Are you sure? yes | no

Noel Carriqui wrote 06/20/2016 at 16:53 point

Hi @gir, thanks!

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. 

Is that the same case in your language?

That'd be very useful in a lot of countries! 

  Are you sure? yes | no

Gearloose wrote 05/10/2016 at 09:14 point

Hi,

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.

  Are you sure? yes | no

Noel Carriqui wrote 05/10/2016 at 09:43 point

Hi @tech!

we didn't know your project! I like the prototype on the USB stick.

vusb on the attiny is a lot of fun, there are ton of projects but yours must be one of the fisrt! :)

I've read the article and it's a pitty it's not more extense! let me ask you some questions to share them with whoever may need it for future use :)

Reading back an attiny memory is so trivial, did you encrypt the passwords on the device? did you use any other read protection system like fuses?

The autentication was the position (on/off) of the 3 leds, right?

Did you support different keyboard layouts?

How many passwords could you store? were they fixed length or dynamic?

Did you support any other information like usernames or the keystrokes to jump automatically from one field to another?

Did you have to remember the position of each of the passwords on the device memory? or did they have any mean of recognising them with "names" or some kind of description?

Did it work on different Operating Systems? because despite using vusb we've found some issues with USB timming on different OSes, if so, how did you fixed them?

Is it open source? if so, where can we find the schematics, documentation and sourcecode?

  Are you sure? yes | no

Gearloose wrote 05/10/2016 at 17:05 point

Hi Noel,

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.

  Are you sure? yes | no

Richard Deininger wrote 05/10/2016 at 07:16 point

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 ?

  Are you sure? yes | no

Noel Carriqui wrote 05/10/2016 at 09:13 point

Hi @Richard Deininger

Thanks for the comment!

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. 

  Are you sure? yes | no

Rien wrote 05/09/2016 at 20:50 point

This idea is awesome!! 

Quick thought: could the joystick (fragile) be replaced by Atmels Q touch? 

  Are you sure? yes | no

Miguel wrote 05/09/2016 at 21:14 point

Hello Rien ! 

Joystick operating life is more than 200,000 cycles for each direction. 

Anyway you're giving us a good idea, for future versions we were thinking about using the Atmel SAM D11 which has a reduced cost, USB 2.0 and support for capacitive buttons. 

What do you think about using this microcontroller ?

  Are you sure? yes | no

Rien wrote 05/12/2016 at 05:08 point

Im not so much afraid of the usage cycles, I personally would keep the memtype on my keychain, and im afraid the joystick will get damaged by the keys in my pocket. 

But I guess that such usage would be out of the bounds of this awesome project.
Ill take a look at the datasheet. 😊

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates