Frage von emih37, 22

Hallo liebe Community, ich arbeite mit C++ und würde gerne eine Passwortabfrage für ein Programm haben. ?

Also liebe Community. Wie bereits beschrieben, möchte ich eine Konsolenapplikation schreiben, bei der nach der Abfrage eines Passworts etwas in eine Datei (per fstream) geschrieben wird. Nun besteht meine Frage darin, ob es erforderlich ist, das Passwort zu sichern. Ich weiß nicht, ob es etwas bringen würde, die Variable für das Passwort privat in einer Klasse zu definieren und anschließend an die Passwortabfrage zu übergeben. Dazu sei gesagt, dass ich noch C++ lerne, und Klassen und Objekte grob theoretisch behandelte, aber nie praktisch übte.

Vielen Dank im Voraus!

Antwort
von karajan9, 10

Was genau meinst du damit, das Passwort zu sicher? Irgendwo musst du das Passwort ja schon haben, um es vergleichen zu können.

Es kommt ein bisschen drauf an, wie ernst dir die Sicherheit ist. Wenn das Programm nur für den Hausgebrauch gedacht ist, kannst du wohl das Passwort einfach irgendwo im Programm ablegen. Dann kannst dus aber nicht mehr ändern. Alternativ könntest dus aus einer Datei auslesen.

In beiden Fällen ist es -- wenn du mehr Sicherheit brauchst -- ungeschickt, dass Passwort irgendwo für jeden lesbar zu haben. Selbst wenn dus in den Code schreibst und den kompilierst kann man da noch drankommen.

Eine Lösung dafür sind Hash-Funktionen. Falls dir das nicht sagt: Wenn du einen String hasht, kommt da ein anderer String mit einem Chaos an Zahlen und Buchstaben raus. Der Witz daran ist, dass du aus dem kreierten Hash nicht mehr das originale Passwort rausbekommst.

Du kannst also den Hash deinen Passworts irgendwo speichern; den darf auch jeder sehen, weil man dadurch nicht an das Passwort kommen kann. Um das Passwort zu überprüfen, hasht du die Passworteingabe und guckst, ob der gleiche Hash rauskommt -- das ist nämlich nur der Fall, wenn das eingegebene Passwort das richtige ist.

Falls du irgendwann mal richtige sichere Programme schreibst, ist diese Vorangehensweise vielleicht nicht mehr perfekt, aber für den Hausgebrauch auf jeden Fall ausreichend.

Ich hoffe, ich konnte etwas helfen, sonst stehe ich gerne noch bereit :-)

Kommentar von emih37 ,

Erstmal danke für die lange Erklärung :)
Momentan ist es noch recht provisorisch etwa so geregelt:

cin >> string;

if(string == " /* das Passwort */ "){

...}

Ich benutze das Programm als Grundgerüst und baue es immer weiter mit meinem Gelernten aus; das vielleicht als kleine Erklärung am Rande.

Ein Gedanke der aufkam war, den String in der if-Funktion nicht gleich mit dem Passwort als solches abzugleichen, sondern mit dem Passwort als String, der zuvor in einer privaten Klasse definiert wurde. Jedoch wüsste ich nicht, ob dies etwas zur erhöhten Sicherheit beitragen würde...

Kannst du mir vielleicht ein paar Quellen geben, aus denen ich etwas zum Umgang mit Hashes (in C++) lernen kann? Ich weiß, was ein Hash ist, ich hab auch mal etwas über salted Hashes gelesen, aber das war eher im Kontext von Hacks auf Userdatenbanken von Großkonzernen.

Danke im Voraus! LG

Kommentar von karajan9 ,

"Privat" heißt die Variable nur, weil man keinen Zugriff auf sie hat, wenn davon geerbt wird.

Sprich einen Unterschied macht das nur wenn du jemandem deinen Code gibst, um davon zu erben, aber deine Klasse mit der privaten Variable nur kompiliert (sonst kann ers ja sofort lesen). Dann hat er keinen Zugriff auf dein Passwort.

Aber... ja. Das Programm würdest du dann ja gar nicht mehr nutzen, sprich dir wäre das egal. Von einem Sicherheitsstandpunkt ist das hier nicht relevant.

Ich persönlich habe bei C++ noch keine Hashes benutzt, daher kann ich dir leider keine konkreten Tipps geben. Da müsstest du wohl hoffen, bei Google was Gutes zu finden :-(

Im Prinzip musst du aber nur wissen, wie man einen Hash kreiert (wenn du C++11 hast z.B. http://en.cppreference.com/w/cpp/utility/hash).

Jaaa... das mit den Hashes bei Großkonzernen ist genau das: Die Passwörter werden als Hashes gespeichert und man die geklaut hat, kann versuchen, aus diesen wieder die originalen Passwörter zu gewinnen. Ziemlich kompliziert und definitiv sehr zeitaufwändig, aber nicht absolut unmöglich. 

Keine passende Antwort gefunden?

Fragen Sie die Community