Passwortschutz im Microcontroller Debug Console

Gast #5125802
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
#5125855
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.
#5125874
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?
#5125880
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.
#5125916
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.
#5125921
>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ß
Gast #5125922
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.
#5125946
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.
Gast #5126008
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.
Gast #5132152
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
#5132162
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.