Forum: Mikrocontroller und Digitale Elektronik Passwortschutz im Microcontroller Debug Console


von Freddy (Gast)


Lesenswert?

Hallo,

ich habe in meinem µC Code eine Debug Schnittstelle übers 
Terminal/Console. Mit einem Parser kann ich verschiedene Debug Ebenen 
öffnen. Diese sind Rollenbezogen, d.h. "User", "Wartungspersonal", 
"Superuser", "Entwickler".
Die Ebenen sollen mittels Passwort geschützt werden. Insbesondere der 
Bereich "Entwickler" hat keinen zu interessieren, da ich hier auch den 
kompletten Flash löschen kann.

Gibt es einen guten Codeabschnitt für die Passwortabfrage oder macht Ihr 
das klassisch über strncmp?

Ich hatte schon das Projekt:
https://github.com/cocagne/csrp als Ideengeber, aber die Jungs arbeiten 
mit OpenSSL. Ist vielleicht doch ein wenig übertrieben.

Bin für Ideen offen.

Gruß,
Freddy

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

Wenn du FW als bin verändert wüde ich das Passwort bitweise über die 
Wortlänge vor dem Strcmp rotieren das sollte gegen unlegitimiertes 
hacken genügen
namaste

von Markus M. (adrock)


Lesenswert?

Ich würde einen Hash des Passwortes speichern und gegen diesen testen. 
CRC-16 sollte ja schon ausreichen. MD5 o.ä. wäre wohl etwas übertrieben.

von J. F. (Firma: Père Lachaise) (rect)


Lesenswert?

Was spricht denn gegen die Verwendung von strncmp? Ist einfach zu 
implementieren und tut doch was es soll?

von Peter II (Gast)


Lesenswert?

J. F. schrieb:
> Was spricht denn gegen die Verwendung von strncmp?

das man im bin-file das Passwort im Klartext hat.

von Cyblord -. (cyblord)


Lesenswert?

Markus M. schrieb:
> Ich würde einen Hash des Passwortes speichern und gegen diesen testen.
> CRC-16 sollte ja schon ausreichen. MD5 o.ä. wäre wohl etwas übertrieben.

Hashen ist gut, aber Passworte mit CRC "hashen" ist Unsinn. MD5 ist auch 
auf kleinen Controllern gut machbar.
Und mindestens den Usernamen als salt sollte auch sein.

von Adam P. (adamap)


Lesenswert?

Peter II schrieb:
> das man im bin-file das Passwort im Klartext hat.

Ja das stimmt schon, aber dann müsste man erstmal darauf kommen, dass 
"dieser" Klartext dem Passwort entspricht (OK, Sicherheit ist was 
anderes)

Aber, wenn man das PW im Flash oder anderem Speicher (SD) ablegt, weil 
es vllt. für jeden USER angepasst werden kann, dann würde strncmp doch 
auch gehen, oder nicht?

von Peter II (Gast)


Lesenswert?

Adam P. schrieb:
> Aber, wenn man das PW im Flash oder anderem Speicher (SD) ablegt, weil
> es vllt. für jeden USER angepasst werden kann, dann würde strncmp doch
> auch gehen, oder nicht?

klar würde es gehen.

von Cyblord -. (cyblord)


Lesenswert?

Adam P. schrieb:
> Aber, wenn man das PW im Flash oder anderem Speicher (SD) ablegt, weil
> es vllt. für jeden USER angepasst werden kann, dann würde strncmp doch
> auch gehen, oder nicht?

Natürlich geht es. Warum auch nicht. Nur sollte man einfach Passwörter 
nicht im Klartext irgendwohin legen. Du musst auch so sehen dass diese 
Passwörter vielleicht noch woanders genutzt werden. Es ist nicht ok, 
einen Nutzer ein Passwort eingeben zu lassen und es dann auslesbar zu 
speichern.
Speicher einen HA1 = MD5(realm:username:passwort) ab. Als Realm nimmst 
du einen festen String der deine Anwendung oder dein Gerät beschreibt.

von Adam P. (adamap)


Lesenswert?

Alles klar, super!

edit:
Also könnte man beim Atmel SAM4 auch die interne AES nutzen?
Würde dann wohl schneller laufen als eine Software-MD5, wahrscheinlich.

von Jonas B. (jibi)


Lesenswert?

>Würde dann wohl schneller laufen als eine Software-MD5

Ist doch vollkommen egal, ob das 10ms oder 100ms dauert 
(MEnsch<->Maschine).

Gruß J

von Peter II (Gast)


Lesenswert?

Adam P. schrieb:
> Also könnte man beim Atmel SAM4 auch die interne AES nutzen?
> Würde dann wohl schneller laufen als eine Software-MD5, wahrscheinlich.

das ist aber sehr schlecht wenn es schneller läuft. Dann kann man das 
System besser hacken. Für Passwörter will man verfahren die langsam 
sind.

z.b. https://de.wikipedia.org/wiki/PBKDF2

von Cyblord -. (cyblord)


Lesenswert?

Adam P. schrieb:
> Alles klar, super!
>
> edit:
> Also könnte man beim Atmel SAM4 auch die interne AES nutzen?
> Würde dann wohl schneller laufen als eine Software-MD5, wahrscheinlich.

Man kann. Hat aber nicht die gleiche Wirkung. AES benötigt einen 
Schlüssel und ist der Schlüssel bekannt kann man das Passwort wieder 
entschlüsseln.
Und wo und wie willst du den Schlüssel ablegen? Merkst du was? Du drehst 
dich dann im Kreis.

Man nimmt Hashes weil man genau diese Umkehrung unmöglich machen will.

von Jonas B. (jibi)


Lesenswert?

>das ist aber sehr schlecht wenn es schneller läuft. Dann kann man das
>System besser hacken.

Man kann natürlich auch einfach die Ausgabe verzögern, so entlastet man 
die CPU. Also die AES-Einheit nutzen aber die Ausgabe um ne halbe 
Sekunde vezögern...

Gruß

von Der_Blister (Gast)


Lesenswert?

Peter II schrieb:
> Adam P. schrieb:
>> Also könnte man beim Atmel SAM4 auch die interne AES nutzen?
>> Würde dann wohl schneller laufen als eine Software-MD5, wahrscheinlich.
>
> das ist aber sehr schlecht wenn es schneller läuft. Dann kann man das
> System besser hacken. Für Passwörter will man verfahren die langsam
> sind.
>
> z.b. https://de.wikipedia.org/wiki/PBKDF2

Genau so würde ich es auch machen. Die Anzahl der Iterationen natürlich 
nur so hoch wählen, dass die Wartezeit noch erträglich ist.

Beitrag #5125924 wurde von einem Moderator gelöscht.
von Adam P. (adamap)


Lesenswert?

Ja OK, klingt logisch! Danke.

Also Software MD5 und wenn nötig noch eine Wartezeit nach 3 
Fehlversuchen :-D

von Cyblord -. (cyblord)


Lesenswert?

Adam P. schrieb:
> Ja OK, klingt logisch! Danke.
>
> Also Software MD5 und wenn nötig noch eine Wartezeit nach 3
> Fehlversuchen :-D

Ja, aber du musst unterscheiden.

Will jemand das Passwort über die Console erraten, kannst du das mit 
einer Wartezeit im Programm usw. sehr gut abfangen.

Die vorgeschlagenen langsamen Algos kommen dann zum tragen wenn deine 
ganze Datenbank abhanden gekommen ist, und die Hashes dem Angreifer 
vorliegen und er eine Brute-Force Attacke darauf machen will.
Ich würde aber auch sagen, dass ich dem zeitlichen Aspekt hier nicht 
viel Beachtung schenken würde. Gesalzene MD5 Hashes wie HA1, bieten hier 
mehr als genug Widerstand.

von Peter II (Gast)


Lesenswert?

Nachtrag:

J. F. schrieb:
> Was spricht denn gegen die Verwendung von strncmp?

damit hätte man sogar ein Sicherheitsproblem. Bei strncmp wird beim 
ersten unterschied abgebrochen. Die Funktion ist also langsamer je mehr 
Zeichen vom Passwort stimmen. Das könnte man ausnutzen im das Passwort 
zu knacken. Selbst ein einfachen sleep dahinter würde nicht reiche, man 
müsste ein sleep mit Random Zeit einabauen.

von Freddy (Gast)


Lesenswert?

Danke für die vielen Ideen und Anregungen
Ich habe jetzt mein Passwort SHA1 kodiert und die Passwortabfrage 
dementsprechend angepasst.
Sicherlich gilt SHA1 momentan als knackbar, aber bei der von mir 
angedachten Anwendung ist dies erstmal ausreichend. Bei Gelegenheit 
werde ich mich nochmal damit auseinandersetzen wieviel Aufwand ein 
SHA256 wäre.

Viele Grüße

von Cyblord -. (cyblord)


Lesenswert?

Freddy schrieb:

> Sicherlich gilt SHA1 momentan als knackbar

Absolut ausreichend würde ich auch sagen. "Knackbar" ist bei Hash 
Algorithmen auch differenziert zu sehen.
In deinem Fall willst du nur verhindern dass jemand das Klartextpasswort 
bekommt, dafür bleibt immer nur Brute-Force und das ist immer Mist für 
den Angreifer.

MD5 gilt z.B. schon länger als "broken", aber nur was die 
Kollisionsresistenz angeht. D.h. signieren sollte man damit nicht mehr 
(tut man auch schon lange nicht mehr), aber für deinen Zweck immer noch 
sicher (abgesehen von den NUR 128 Bit Länge).
Ähnliches gilt auch für SHA1.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.