ich hab mir aus einem Arduino Beetle und einem RDM6300 RFID Kartenleser einen kleine "Passworthelfer" gebastelt. Da wir hier ständig alle 90 Tage ein neues Passwort am PC benötigen und ich keine Lust habe mir alle 90 Tage ein neues Passwort zu merken, wollte ich das meinen Zugangschip den ich eh immer bei mir trage, überlassen.
Tool ist recht einfach. Wird ein bestimmter RFID Chip per Serial gefunden gibt er mir über
keyboard.print mein Passwort als emulierte Tastatureingabe am PC aus...
Das funktioniert auch recht gut.
Jetzt würde ich aber gern (da ich ja alle 90 Tage mein PW ändern muss) das neue Passwort irgendwie
in den Code übertragen ohne ständig den Code neu hochladen zu müssen. Also irgendwie in dem EEPROM
speichern ? .. Dieser sollte dann mit einem kleine Tool änderbar bzw. ein/auslesbar sein ...
Gibt es irgendwie eine Möglichkeit ohne die Arduino IDE mit dem Arduino zu kommunizieren ?
Sorry für die vielleicht dumme Frage, aber ich bin da absoluter Anfänger...
Gibt es irgendwie eine Möglichkeit ohne die Arduino IDE mit dem Arduino zu kommunizieren ?
Das einfachste ist die Serielle Schnittstelle. Die funktioniert nicht nur mit dem Arduino SerialMonitor, sondern auch mit anderen Programmen (hterm) oder, ganz altmodisch, einem cmd - Window oder einer .bat Datei.
Kannst auch selbst ein kleines Programm auf dem PC schreiben, das sowas macht.
Ob ein DFRobot Beetle ein Arduino ist, sollten sich DFRobot.com und Arduino.cc einig werden.
jup.. ein kleiner Leonardo.. sensationell witzige Teil... 16Mhz.. und etwas größer als ein Daumennagel...
aber zurück...
heißt das Passwort im EEprom speichern und dann zb. über die CMD ändern ?
Hab mir das mit dem EEProm aber schon angeschaut.. so ganz verstanden hab ich das nicht.. und es scheint auch nicht so trivial zu sein, da einen bzw. zwei Strings zu speichern...
oder wie meint ihr das mit der seriellen Schnittstelle ?
Brick01:
.....
heißt das Passwort im EEprom speichern und dann zb. über die CMD ändern ?
Hab mir das mit dem EEProm aber schon angeschaut.. so ganz verstanden hab ich das nicht.. und es scheint auch nicht so trivial zu sein, da einen bzw. zwei Strings zu speichern...
oder wie meint ihr das mit der seriellen Schnittstelle ?
Ja, du musst das Passwort über die Serielle (auch USB) eingeben und im EEProm speichern.
Und bei der Anmeldung aus dem EEProm abfragen.
Oder die entsprechende Variable beim Start des beetle aus dem EEPROM initialisieren.
Brick01:
Tool ist recht einfach. Wird ein bestimmter RFID Chip per Serial gefunden gibt er mir über keyboard.print mein Passwort als emulierte Tastatureingabe am PC aus...
Da müsste vermutlich zwischen RFID-Leser und anderer Eingabe (Passwort-Änderung via Serial) unterschieden werden.
Auch wäre Es wohl sinnig, daß das neue Passwort nur übernommen wird, wenn mit dem erlaubtem RFID-Chip bestätigt wird - Knöpfchen bei blinkenden LEDs drücken bekommen Andere nämlich auch hin und dann ist das Passwort ruck zuck Essig.
Auch wäre Es wohl sinnig, daß das neue Passwort nur übernommen wird, wenn mit dem erlaubtem RFID-Chip bestätigt wird - Knöpfchen bei blinkenden LEDs drücken bekommen Andere nämlich auch hin und dann ist das Passwort ruck zuck Essig.
Eine interessante Anwendung!
MfG
Was macht man dann, wenn der gültige RFID defekt ist?
Es muss einen zweiten Weg geben.
noiasca:
was hältst von einem ESP8266/NodeMCU? Auch klein und mit schöner Weboberfläche einfach ein neues Passwort eingeben und speichern. z.B. direkt übers Smartphone. Dann bist komplett unabhängig von der Seriellen Schnittstelle / Hilfsprogrämmchen oder dergleichen...
Da sollte aber auch noch eine Menge Sicherheitsschranken eingebaut werden.
Bisher hat noch keiner einen HTTPS-Server auf ESP8266 gesehen, nur Clients.
@Tommy
Wenn der RFID-Chip defekt ist, kann der Beetle immer noch mit der neuen RFID-ID neu gebrannt werden - aktuell wird der Beetle ja wohl auch alle 90 Tage mit dem neuen Passwort neu gebrannt.
WLAN kann unter Umständen gesnifft werden (MidM). Der TO hat nichts zu den Sicherheitsanforderungen gesagt. So ist das halt bei unzureichenden Infos - man trägt erst mal alles zusammen.
Das muss sich ja im Endeffekt nicht widersprechen, aber man weiss ja nichts genaueres.
Wow.. grad mal ein paar Stunden nicht reingeschaut.. da tut sich was hier
also.. ESP hab ich mir auch schon angeschaut.. hier hab ich das Problem, das der nur 3,3V
liefert, der RFID Leser aber 5V braucht.. zweites Problem (und das massivere).. der ESP kann
keine Tastatur emulieren !!
Das ganze mit WLAN hatte ich mir nämlich auch schon überlegt... wobei ich das, gerade wenn
doch mal größere Bestände hier nachgebaut werden (ca. 150 User), das auch nervig sein könnte,
wenn hier 150 WLAN's aktiv wären...
Also das würde ich gern vermeiden.
Der Sicherheitsaspekt ist ... nicht unwichtig.. aber eher zweitrangig... hier sniffert keiner rum.
Kurz zum Hintergrund.. ich bau das für mich selbst, aber einige Kollegen fanden die Idee toll
und wollen sich da jetzt auch mit reinhängen... deswegen sprech ich hier von "wir/Kollegen/usw"
Das wird kein kommerzielles Produkt oder ähnliches... alles rein privat.
Also ich glaub, der einzige Weg wird wohl sein, das Passwort und die Chipid in den EEPROM zu schreiben.
Beim Start dort auszulesen und dann evlt. später wieder per Serial vom PC aus den EEPROM neu zu beschreiben. Jetzt muss ich nur noch rausfinden wie ich den EEPROM beschreiben bzw. auslesen kann, alle Beschreibungen die ich bis jetzt gesehen hab, waren recht umfangreich... scheint für "Strings" nicht so trivial zu sein....
Hier komm ich dann wieder zum Sicherheitsaspket...
Wenn ich das mal so gebacken bekomme, könnte ich das Passwort ja verschlüsseln und im Code wieder entschlüsseln lassen. Dann würde ein reines Auslesen des Passwortes ja erst mal nichts bringen!
Aber hierzu würd ich mir erst gedanken machen, wenn es soweit ist (auch wenn ich glaube das keiner meiner Kollegen den EEPROM auslesen könnte... 99% hier wissen nicht mal was ein EEPROM ist )
Jetzt muss ich nur noch rausfinden wie ich den EEPROM beschreiben bzw. auslesen kann, alle Beschreibungen die ich bis jetzt gesehen hab, waren recht umfangreich... scheint für "Strings" nicht so trivial zu sein....
Na ja, sooo kompliziert es es auch nicht:
Das Problem bei String ist, dass der Text selbst nicht Teil des Objekts ist.
Auf dem EEPROM musst du also nicht das String-Objekt, sondern die Länge und den Text selber speichern.
Wenn sonst nichts im EEPROM zu speichern ist: Offset 0 = Länge ( uint16_t ), danach Platz für max. tausend Zeichen.
String newPassword = Serial.readStringUntil('\n'); // nur PseudoCode, eventuell auch '\r' entfernen
uint16_t len = newPassword.length();
EEPROM.put(0,len);
for (int i = 0; i < len; i++) EEPROM.update(2+i,newPassword.charAt(i));
Eventuell kann man sich das String - Gedöns auch sparen, wenn man die Passwortlänge "vernünftig" beschränkt und diesen Platz im RAM fest reserviert.
Zum Thema Passwort verschlüsseln:
Wer den EEPROM auslesen kann, kann auch den Flash mit dem Passwort-Entschlüssler-Code und dessen Schlüssel auslesen. Das ist also eher eine "obscurity" als eine "security" - Verbesserung.
Passt also ins Konzept und könnte man beliebig machen, ohne sich um moderne Krypto-Algorithmen zu scheren.
Eigentlich könnte ich auch ChipID und PW in einen String packen mit einem Delimeter trennen (der dann halt nicht im PW vorkommen darf... dann hätte ich immer nur einen String zum aus/einlesen.
ChipID ist leider nicht immer gleich lang und das PW sowieso nicht..
Wie gesagt, Sicherheit ist hier nicht oberste Prio... Das auslesen, dazu sind meine Kollegen glaub ich nicht im Stande..
kurze Frage... ich versuch gerade deinen Code zu verstehen...
String newPassword = Serial.readStringUntil('\n'); // nur PseudoCode, eventuell auch '\r' entfernen
hier scheibst du die Variable "newPassword" mit dem String aus einer Seriellen Verbindung, bzw. dem was man dort empfängt, oder?
uint16_t len = newPassword.length();
Passwortlänge...
EEPROM.put(0,len);
schreiben in den Eeprom, von Pos 0 bis "len"
for (int i = 0; i < len; i++) EEPROM.update(2+i,newPassword.charAt(i));
hier wird das neue Passwort von Pos2 bis Ende Passwort in den EEPROM geschrieben, oder ?
was soll dann die Zeile drüber ?
EEPROM.put(0,len); // schreiben der Variablen len in den EEPROM ab Anfang (0)
put kriegt raus, wie groß die übergebene Variable ist. Sehr praktisch.
Hier istlenein 16-bit Wert, also werden 2 Byte geschrieben.
Da die Größe der Variablen newPassword nichts mit dem Passwort selbst zu tun hat, kann man leider das praktische put nicht verwenden. Daher die for - Schleife, mit der alle Zeichen des Passworts in den EEPROM geschrieben werden. Ab Position 2, also hinter die gespeicherte Länge.