Hardware passwordmanager mit Display, Knopf und Endlosimpulsgeberpoti

Ich hoffe ich bin hier an der richtigen Anlaufstelle für mein Projekt, aber fangen wir vorne an.
Ich habe nicht gerade das beste Gedächtniss was Passworter angeht und dachte ein kleies Tool auf dem all meine Passwörter gespeichert sind währe keine schlechte Idee.
Der Plan ist das Gerät selbst mit einem PIN abzusichern. wenn es Strom bekommt (vom USB Port) soll es eine PINabfrage geben.
Sämtliche Eingaben wollte ich mit einem Knopf (eventuell in den Poti intigriert) realisieren.
nach Pineingabe will ich sämtliche erstellte Passwörter mit dem poti auswählen können (auf dem Display soll mir der name angezeigt werden, den ich auch mit dem Poti setzen will.
Ich will auch neue Passwörte generieren lassen können (wahlweise mit Zahlen Sonderzeichen o.ä.
Die Menüführung habe ich schon relativ klar vor Augen und sollte sich (mal abgesehen von der Erstellung neuer Passwörter relativ gut bedienen lassen.

Ich fange also mal bei der Hardware an:
Ich habe mir da den Stealthduino und den Arduino Micro without Headers rausgesucht.
http://cal-eng.com/?wpsc-product=stealthduino-basic-atmega-32u4-arduino-leonardo-compatible
http://store.arduino.cc/product/A000093
Ist denn der Stealthduino mit der Keyboard/mouseemulationlibrary kompatibel?
http://arduino.cc/en/pmwiki.php?n=Reference/MouseKeyboard

Darauf soll dann ein ein Display. Eigentlich würde mir eine Zeile mit 5 Buchstaben reichen o.ä. Wenn es da was gibt. Die Parole ist vorallem klein und mit 5V betriebsfähig. Natürlich muss es auch eine library für den Arduno haben und keine großartigen Schaltungen brauchen zum Anschluss. Ein Wiederstand währe wohl noch ok, aber bei allem darüber wirds dann Platzkritisch.

Im Bezug auf das Gehäuse habe noch keine großartigen Ideen. Ich habe vor wenn alles erstmal lauffähig ist im Örtlichen Fablab vorbeizuschauen.
Meine Idee ist bisher den Poti an der dem USB Port gegenüberliegenden Seite anzubrigen und nur ein kleines Stück herausragen zu lasen.
Dieser Poti (eigentlich sollte es eiin Impulsgeber sein) soll entweder drückbar sein, oder ich benötige noch einen Knopf für mein Bedienknzept.

Habt ihr da noch Ideen zu? Hat schon jemand Erfahrung mit einem Impulsgeber an einem Arduino?
Kann ich problemlos völlig zufällige Passwörter auf einem Arduino generieren lassen, oder übersteigt das seine Power? Wie speichere ich die Passwörter am besten auf dem Arduino? Gibt es Displays, die meinen Anforderungen gerecht werden? Ich finde nur deutlisch zu große Displays.

MfG Joscha

Es gibt schöne kleine OLED Displays:

Die findest du bei eBay für ein paar Euro aus Hongkong wenn du nach "OLED Display" suchst

Die gibt es auch noch kleiner in 128x32:

Aber da finde ich auf die schnelle keine billigen Lieferanten

Joscha:
Ich hoffe ich bin hier an der richtigen Anlaufstelle für mein Projekt, aber fangen wir vorne an.
Ich habe nicht gerade das beste Gedächtniss was Passworter angeht und dachte ein kleies Tool auf dem all meine Passwörter gespeichert sind währe keine schlechte Idee.

Gibt es bereits fertig und portable -> KeePass

Joscha:
Der Plan ist das Gerät selbst mit einem PIN abzusichern. wenn es Strom bekommt (vom USB Port) soll es eine PINabfrage geben.
Sämtliche Eingaben wollte ich mit einem Knopf (eventuell in den Poti intigriert) realisieren.
nach Pineingabe will ich sämtliche erstellte Passwörter mit dem poti auswählen können (auf dem Display soll mir der name angezeigt werden, den ich auch mit dem Poti setzen will.

Mit einem Poti wäre das keine gute Idee! Was ist, wenn der Poti bereits auf Anschlag ist, und deine Liste länger ist? Drehencoder sind hier besser. Jurs hatte mal hier im Forum einen guten Code gepostet, der über Greycode auswertet. Ansonsten hier mal lesen
http://www.mikrocontroller.net/articles/Drehgeber

Joscha:
Ich will auch neue Passwörte generieren lassen können (wahlweise mit Zahlen Sonderzeichen o.ä.
Die Menüführung habe ich schon relativ klar vor Augen und sollte sich (mal abgesehen von der Erstellung neuer Passwörter relativ gut bedienen lassen.

Wäre relativ einfach möglich. -> Random. Wobei Sonderzeichen sind nicht im ASCII Satz vorhanden. Wäre da nur mit etwas umbau möglich.

Joscha:
Ich fange also mal bei der Hardware an:
Ich habe mir da den Stealthduino und den Arduino Micro without Headers rausgesucht.
http://cal-eng.com/?wpsc-product=stealthduino-basic-atmega-32u4-arduino-leonardo-compatible
http://store.arduino.cc/product/A000093
Ist denn der Stealthduino mit der Keyboard/mouseemulationlibrary kompatibel?
http://arduino.cc/en/pmwiki.php?n=Reference/MouseKeyboard

Das sitzt ein 16u4 drauf. Der dürfte kompatibel sien.

Joscha:
Darauf soll dann ein ein Display. Eigentlich würde mir eine Zeile mit 5 Buchstaben reichen o.ä. Wenn es da was gibt. Die Parole ist vorallem klein und mit 5V betriebsfähig. Natürlich muss es auch eine library für den Arduno haben und keine großartigen Schaltungen brauchen zum Anschluss. Ein Wiederstand währe wohl noch ok, aber bei allem darüber wirds dann Platzkritisch.

Das wird bei dem Steahltteil schwierig. Ich kann nicht genau erkennen, welche Anschlüsse ausser VCC, GND, MISO herausgeführt sind.
Entweder sowas
http://www.ebay.de/itm/I2C-0-96-128-64-V1-2-OLED-displayer-For-MWC-MultiWii-board-compatible-Arduino-/281279305823?pt=RC_Modellbau&hash=item417d8d985f
oder ein LCD16x2 mit I2C Interface. Wobei ich glaube nicht, das I2C rausgeführt ist.

Joscha:
Im Bezug auf das Gehäuse habe noch keine großartigen Ideen. Ich habe vor wenn alles erstmal lauffähig ist im Örtlichen Fablab vorbeizuschauen.
Meine Idee ist bisher den Poti an der dem USB Port gegenüberliegenden Seite anzubrigen und nur ein kleines Stück herausragen zu lasen.
Dieser Poti (eigentlich sollte es eiin Impulsgeber sein) soll entweder drückbar sein, oder ich benötige noch einen Knopf für mein Bedienknzept.

Wie oben, ein Drehencoder. Hersteller zB ALPS. Müssen aber ordentlich entprellt werden.

Joscha:
Habt ihr da noch Ideen zu? Hat schon jemand Erfahrung mit einem Impulsgeber an einem Arduino?

Ja. Mit Drehencoder bereits gearbeitet und das Forum dürfte voll damit sein.

Joscha:
Kann ich problemlos völlig zufällige Passwörter auf einem Arduino generieren lassen, oder übersteigt das seine Power?

Oben bereits erwähnt -> Random

Joscha:
Wie speichere ich die Passwörter am besten auf dem Arduino?

Im integrierten EEPROM.

Joscha:
Gibt es Displays, die meinen Anforderungen gerecht werden? Ich finde nur deutlisch zu große Displays.

Problem wie oben, keine genauen Daten über herausgeführte Pins.

So und zum Schluss, das Projekt ist technisch möglich, jedoch kann sowas jedes Handy oder jeder Rechner besser (-> Keepass). Des weiteren ist es eine Leichtigkeit, die Passwörter vom EEPROM auszulesen. Verschlüsselung kommt da nicht zum Einsatz.

Scheinbar wurde noch nicht viel oder garnichts mit Mikrokontrollern gemacht. Da empfiehlt es sich erst einmal mit den Basics zu beschäftigen. Dann wären wir aber auch schnell ein Jahr weiter.

Gruß Stefan

Hallo,
schönes (dummes?) Projekt. Wir bauen uns einen eigenen PassWortTresor.
Wenn es nur darum geht, das Du Passwörter an einer ungeschützten Stelle
als "Merkhilfe" speichern möchtest, dann ist das mit dem Arduino ohne weiteres
möglich.
Wenn Du im entferntesten dabei an Sicherheit denkst, vergesse es.
Zum einen, weil der gemeine Arduino nicht die Rechleistung hat, zum anderen,
weil Du keine Ahnung von Kryptographie hast.
Aber sonst, nette Sache- mach mal…

"selbst mit einem PIN abzusichern"
ist kein Problem, ist nur eine Abfrage

"einem Knopf (eventuell in den Poti"
ist auch nur eine Abfrage und Darstellung

"neue Passwörte generieren lassen können"
"völlig zufällige Passwörter"
ist auch kein Problem, bei näherem Hinsehen "auch einfach"

Dir steht theoretisch ein Zeichensatz von 255 Zeichen zur Verfügung. Mit dem
Arduino läßt Du Dir jetzt eine ganze ZufallsZahl zwischen 0 und 255 rausgeben.
Dieser Zufallszahl ordnest Du ein Zeichen zu.
Passwort mit 4 Zeichen- gleich viermal ZufallsZahl erzeugen- gleich vier
verschieden Zeichen- gleich vierstelliges Passwort.
Auf die Sicherheit bin ich oben schon eingegangen.

Display´s gibt es fast in jeder kleinen Größe, wenn es einzeilig sein soll,
dann könntest Du nach Dot-Matrix Anzeigen schauen, oder es gibt auch
alphanumerische LCD-Module. Die suchst Du Dir aber bitte selber.
Gruß und Spaß
Andreas

UiUiUi, viele viele Antworten :smiley: Das ging ja schnell.

Also erstmal habe ich in der Tat wenig Ahnung von Microcontrollern, aber ich dachte mir das währe doch mal ein schöner Einstieg. Ich habe hier sonst nur noch nen RasPI liegen, aber das ist ja eine andere Geschichte. Von Elektrotechnik habe ich ein bisschen von Programierung sehr sehr wenig, eigentlich gar keine Ahnung.

Mit der Sicherheit dachte ich, das ich das Gerät immer in der Hosentasche mit mir rumtrage. Das käme mir dann wenigstens sicherer vor, als auf vielen Platformen das selbe Passwort zu nutzen, das auch noch aus Wörtern besteht, oder ist es möglich über den angeschlossenen Rechner "ganz einfach" das Eprom auszulesen? Das würde natürlich ein großes Problem mit sich bringen.

was die Anschlüsse für das Display angeht kann ich auch nicht mehr über diesen USB Stick großen Arduino sagen, dann eventuell doch der Arduino Micro ohne Header?

Hmm, die Displays habe ich irgendwie radikal übersehen... Naja, gut, dass es sie gibt.
Die Passwörter mit dem PIN zu verschlüsseln ist warscheinlich sehr schwierig? hmm, gut.
Ja, genau so einen Rotary Encoder meinte ist, habe mich nur immer wieder falsch ausgedrückt.

@SkobyMobil Wo könnte es denn Engpässe mit der Performance des Chips geben?

Ansonsten klingt das ja alles ganz gut für mein Projekt (mal von der Nützlichkeit abgesehen).

MfG joscha

Joscha:
UiUiUi, viele viele Antworten :smiley: Das ging ja schnell.

Also erstmal habe ich in der Tat wenig Ahnung von Microcontrollern, aber ich dachte mir das währe doch mal ein schöner Einstieg. Ich habe hier sonst nur noch nen RasPI liegen, aber das ist ja eine andere Geschichte. Von Elektrotechnik habe ich ein bisschen von Programierung sehr sehr wenig, eigentlich gar keine Ahnung.

Das ist kein schöner Einstieg. Ohne Basics macht es keinen Sinn. RaspPi ist ja was ganz anderes. Wobei ich darauf setzte, dass auch hier wieder viele den besitzen, weil sie dachten viel Power bringt auch viel, und Gui huiii ^^

Joscha:
Mit der Sicherheit dachte ich, das ich das Gerät immer in der Hosentasche mit mir rumtrage. Das käme mir dann wenigstens sicherer vor, als auf vielen Platformen das selbe Passwort zu nutzen, das auch noch aus Wörtern besteht, oder ist es möglich über den angeschlossenen Rechner "ganz einfach" das Eprom auszulesen? Das würde natürlich ein großes Problem mit sich bringen.

Direkt auslesen geht nicht, wenn dann muss das Programm mitspielen. Jedoch mit einem ISP Progger ist das Dinge ruckzuck auf fremden Rechnern.

Joscha:
was die Anschlüsse für das Display angeht kann ich auch nicht mehr über diesen USB Stick großen Arduino sagen, dann eventuell doch der Arduino Micro ohne Header?

Besorg dir den Micro oder einen Uno zum über der Basics. Mit deinem Projekt solltest du dich erst auseinandersetzen wenn du die Materie verstanden hast.

Joscha:
Hmm, die Displays habe ich irgendwie radikal übersehen... Naja, gut, dass es sie gibt.
Die Passwörter mit dem PIN zu verschlüsseln ist warscheinlich sehr schwierig?
hmm, gut.

Sicher wirst du es auf dem Arduino nicht bekommen. Der ist nicht für Verschlüsselungen und vorallem den daraus resultierenden zu verarbeitenden Daten geeignet. Wie bereits gesagt, normalen USB Stick kaufen und KeePass drauf. Hat dann aber nix mit Arduino zu tun.

Joscha:
@SkobyMobil Wo könnte es denn Engpässe mit der Performance des Chips geben?

Ansonsten klingt das ja alles ganz gut für mein Projekt (mal von der Nützlichkeit abgesehen).

MfG joscha

http://www.codeplanet.eu/tutorials/cpp/3-cpp/51-advanced-encryption-standard.html
Kannst dir gerne mal durchlesen. Ohne C /Programmierkenntisse nicht sinnvoll und vermutlich auch nicht machbar und der andere Knackpunkt ist die Leistung von Mikrocontroller. Nen Rasp selbst hat schon Probleme einen 1kB/2kB easy-RSA Schlüssel für OpenVPN zu generieren. Das nimmt schon Leistung in Anspruch

Selber was Sicheres hinzubekommen ist wirklich sehr schwierig. An der Rechenleistung würde es aber nicht scheitern. Sowas würde man mit symetrischen Algorithmen absichern und dafür braucht man nicht annähernd die Rechenleistung wie für Public Key Algorithmen.

Das schon genannte Keepass ist für die meissten Leute mehr als genug.
Wer Google Mail nutzt braucht sich um Passwortsicherheit eh keinen besonderen Gedanken zu machen.
Wer Rechner am Internet hängen hat und darauf Keepass am Start hat, der hat auch weniger Sicherheit als er sich vorstellt.

Umfassende Standardliteratur gibt es sogar kostenlos zum Download: http://www.cl.cam.ac.uk/~rja14/book.html ist ein exzellenter Startpunkt für Einsteiger.

EIn wirklich zufälliger Zufallsgenerator ist nicht so einfach wie bereits gesagt. Random generiert eine Folge von Werten aus einem Startwert heraus. Ist der Stardwert gleich istauch die Zahlenfolge gleich.
Als Arduino Leonardo Nachbau mit USB Einsteckmöglichkeit gibt es auch den LeoStick.

Grüße Uwe

Hallo,
ja, ein Profi aus dem Forum könnte es ja mal mit "LOKI91 oder "Enigma"
probieren. Vielleicht geht da etwas "einfaches" mit dem Arduino.

Enigma:
http://www.ussrback.com/crypto/libraries/enigma/enigma.c

LOKI91:

C-File kommt gleich hoch.
Gruß und Spaß
Andreas

Es gibt auch bessere PRNGs für den Arduino. z.B.:

https://code.google.com/p/tinkerit/wiki/TrueRandom

Kryptographischen Standards genügen die aber sehr wahrscheinlich immer noch nicht, aber besser als random() sind sie. Vor allem wird der Seed automatisch generiert und ist jedesmal anders.

Einfach analogRead() als Seed zu nehmen ist dagegen nicht so gut:

Wieso sollte das Projekt denn so schlecht sein?
Nein, den RasPI habe ich ohne GUI laufen und arbeite auch ansonsten viel mit Linux.
Die Random Generatoren klingen ganz interessant. ich denke ich werde mir den micro einfach mal bestellen und schauen, ob ich da irgendwie was zusammenkleistern kann (erstmal kann ich ja ein altes HD HD44780 Display zum Testen nehmen.
Wie soll ich mich den sonst einarbeiten.
ich brauche einfach ein Projekt, auf das ich Lust habe und schwups habe ich mehr zeit investiert, als mir eigentlich lieb ist.
Ein Buch hat bei mir zumindest in Sachen Programiersprachen noch nie großes Interesse Geweckt.

Zur Sicherheit denke ich, das die generieten Passwörter volkommen ausreichen. Zu erraten sind die jedenfalls nicht und bei genug Stellen auch nicht so einfach zu "erbruteforcen".

Die größte Hürde stellt das Programieren dar und ich denke das gestaltet sich bei diesem Projekt nicht ganz so schwer, oder liege ich da falsch?
Am schwersten stelle ich mir noch die integration des Rotary encoders und die effiziente / performante Programierung der durchscrollbaren Menüs/Listen vor.

MfG Joscha

Hey-ne Enigma.
Hast die selber geschrieben?

Passt nicht so ganz hierher, aber das Teil fasziniert mich schon lange (hatte schon mal überlegt, mir eine nachzubauen), aber als Software-wieso nicht. Da könnte man die bekannten Schwächen ja leicht eliminieren, und dann knackt das Ding keiner.
Eigentlich keine schlechte Idee, sowas mal mit nem Dino zu basteln....die Rechenanforderungen sind ja minimal.

Ich brauche einfach ein Projekt, auf das ich Lust habe und schwups habe ich mehr zeit investiert, als mir eigentlich lieb ist.
Ein Buch hat bei mir zumindest in Sachen Programiersprachen noch nie großes Interesse Geweckt.

Falscher Weg! Davon gibt es genügend. Die Foren sind davon überall voll, mal mehr oder mal weniger.

Darf man fragen, was du bereits in Sachen Programmierung geschafft hast, ohne reinen Copy&Paste zu nutzen? Sicherlich ist der ein oder andere Code sinnvoll, wenn man sich den bei wem anders abschauen kann. Aber stumpf abtippen oder noch schlimm copy und paste und dann irgendwo fragen, warum der nicht tut, bringt weder dir nochh den anderen etwas.

Gibt hier das ein oder andere Projekt, worauf ich nicht näher eingehen will, da haben sich teilweise Leute einfach zu sehr selbstüberschäzt.

Ganz gute Einstiegsmöglichkeiten sind hier arbeiten mit Displays (zu Beginn aber wenn dann 16x2 oder 20x4 (Chardisplays)). Dazu einen Sack LEDs Widerstände taster und bisschen sonstiges Hühnerfutter.

Bei den Leds lernst du shcnell und gut, mit Arrays umzugehen oder Kontrollstrukturen zu verwenden. Bei Chardisplays fällt dir dann spätestens auf, dass man Zustände oder ähnliches nicht durchgehend beschreiben soll, sondern nur wenn sich auch wirklich was geändert hat.

Des weiteren würde ich behaupten, das jeder der bei den Sketchen hilft, mehrere Bücher nicht zwingend Arduino bezogen zu Hause hat. Udo hat zum Beispiel mindestens eines selber geschrieben :wink:

Hallo,
"Hast die selber geschrieben?"
Nein, ich bin froh wenn mir der Arduino mal die Umgebungstemperatur auf´s
Display zaubert.

Ich habe mich mal ziemlich mit Kryptographie beschäftigt. Und bei dem Projekt
ist mir eingefallen, "da war doch etwas".
In einem meiner Bücher (Angewandte Kryptographie, Addison-Wesley) fand ich
das Beispiel.
Gruß und Spaß
Andreas

Wenn man eine einfache Verschlüsselung möchte ist DES eine Option. Das ist relativ simpel und braucht nur ein paar überschaubare Tabellen für die Permutationen und die S-Boxen.

DES für sich ist heute natürlich nicht mehr sicher und kann in recht kurzer Zeit geknackt werden. Die Schlüssellänge beträgt halt nur 56 Bit (und wenn man den Schlüssel aus ASCII Zeichen generiert verliert man nochmal Entropie).

Aber hier geht es auch nicht so sehr um absolute Sicherheit, sondern dass man nicht sofort den Klartext sieht. Da reicht auch minimaler Aufwand um jemanden abzuschrecken.

Und wenn man doch einen längeren Schlüssel möchte ist TripleDES eine Option. Das wird in einigen Bereichen verwendet (vor allem elektronisches Bezahlen).

Da es grad raufgeholt wurde: wenn nen Rotationsencoder vorhanden ist, könnte man den wie ein Tresorschloss benutzen: mittels rechts-und linksdrehen den Zugriffscode einstellen.
Mit dem wiederum liessen ich die abgelegten Passwörter verschlüsseln, so dass sie gegen auslesen schonmal leidlich geschützt sind.

Ich habe mal spaßhalber DES implementiert. Ist ziemlich kompakt. Ein fast leerer Sketch damit hat 4kB. Davon sind 840 Bytes Tabellen wenn ich das richtig gezählt habe. RAM Verbrauch hält sich auch in Grenzen und alles wird nur auf dem Stack angelegt.

Einen 8 Byte Block zu verschlüsseln dauert etwa 15ms. Das ist langsam für große Datenmengen, aber für Passwörter völlig ausreichend. Das kann man sicher auch verbessern, aber so kann man wenigstens leicht sehen was gemacht wird, da nicht groß getrickst wird und alles 1:1 der Beschreibung entspricht.

War eine nette Übung. Die größte Scheiße sind die doofen Längen von Teil-Blöcken wie 8 * 6 Bit und 2 * 28 Bit. :stuck_out_tongue_closed_eyes: Da merkt man dass DES ursprünglich für Hardware entwickelt wurde und nicht für Software.

Wie gesagt, mir ist klar dass das inzwischen völlig veraltet und nicht mehr sicher ist. Aber wirkliche Geheimnisse sollte man sowieso nicht mit Selbtbaulösungen absichern. Wenn man meint, dass da jemand hergeht und das ROM ausliest und dann Kryptanalyse betreibt ist das generell der falsche Weg. Egal welchen Algorithmus man verwendet. :slight_smile:

Es gibt wahrscheinlich auch inzwischen moderne Crypto-Algorithmen die auf so schwachbrüstigen Mikrocontrollern laufen. Aber damit kenne ich mich nicht im Detail aus. Die basieren zwar teilweise auch auf der Feistel-Struktur aber da müsste ich mich erst längere Zeit einlesen.
Man könnte aber einfach Triple-DES draus machen, mit zwei oder drei Schlüsseln.

Bezüglich PRNGs:
TrueRandom das ich anfangs erwähnt hatte ist nicht wirklich zufällig. Es ist besser als random(), aber nicht gleichmäßig verteilt:

mit analogRead() als Seed bekommst man wohl selbst mit zusätzlichen Berechnungen nichts hin

Der bevorzugte Weg scheint zu sein was prettyPRNG macht:
den Jitter zwischen dem Watchdog Timer (der mit einem ungenauen RC-Oszillator) läuft und einem normalen Timer (der vom Quarz getaktet wird) auszuwerten. Das macht auch die Entropy Library:

Nachteil: durch die minimale WTD Zeit dauert es etwa 1s um 64 Bit zu erzeugen

Hier ist auch ein kurzer und schlanker Code (ohne die Lib!) um einen zufälligen Seed für die Arduino random() Funktion zu erzeugen: