älteres .NET Programm mit Visual Studio 2022 bearbeiten

Wir verlassen dabei aber eindeutig das Thema "Programmieren" und fangen mit "Philosophie" oder "Religion" an.
Wenn du kein Vertrauen in die Arbeit vieler Mathematiker und Kryptographen hast, ist diese Diskussion aber zuende, denn du kann es immer auf die Spitze treiben.

Grundlegender Punkt beim Zufall, insbesondere beim Computergenerierten Zufall, ist, ob du ihn einfach vorhersehen kannst oder nicht. Ersteres trifft auf die normalen Pseudozufallsgeneratoren in Programmiersprachen zu, und dazu gehoert auch random().

random(), wenn du nicht explizt einen Seed angibts, seeded mit der Systemzeit. Und das kann schon mit folgender einfacherer Schlussfolgerung ein Problem sein.
Ein guter Passwortmanager sollte wissen wann ein Passwort generiert wurde. Und sei es einfach nur um zu sagen das nach Zeit X ein Wechsel ansteht. Also ist das irgendwo gespeichert. Schlimmstenfalls dann unverschluesselt, weil ist ja nicht so wichtig. Und Zack hat ein potenzieller Angreifer einen starken Anhaltspunkt wo er anfangen kann dein mit random() erstelltes Passwort auszuhebeln.
Letztendlich ist alles was man mit random() macht so sicher wie der Seed den man verwendet. Und das alleine ist schon limitiert durch den Faktor, das der Seed maximal ein Int32 sein kann. Das sind nur etwas mehr als 2 Millionen moegliche Passwoerter die du so erstellen kannst.

Cryptographische Zufallsgeneratoren nutzen wesentlich mehr Input fuer den Seed. Sie bieten nichtmal eine Moeglichkeit einen Seed anzugeben. Dazu kann dann auch spezielle Hardware gehoeren, frueher wurden Benutzereingaben ueber eine bestimmte Zeit genommen, oder andere Dinge die letztendlich nicht unter direkter Kontrolle des Computers stehen.

Nun mag es irgendwann moeglich sein "Zufall" bis zum kleinsten subatomaren Partikel zu bestimmen. Oder da ist noch mehr. Keine Ahnung, hier wird es jetzt wie gesagt philosophisch :D
 
Ranayna schrieb:
random ist nicht fuer kryptographisch sicheren Zufall.
das ist hier unerheblich. Es ist auch mit random ausreichend unwahrscheinlich, daß du sein Passwort ermittelst.
 
Zuletzt bearbeitet:
Nicht umsonst war in der ersten Antwort in diesem Thread die Frage schon drin wie der Zufall gemacht wird.

Gehen wir mal davon aus, das ein potenzieller Angreifer den Code hat. Was bei .NET trivial ist, wenn man die EXE hat. Guter Crypto ist das egal, also wird das immer als gegeben erwartet. Und Geheimnisse gehoeren nicht in den Code, Stichwort "Security by obscurity"
Wenn der Angreifer dann beispielsweise eine Datenbank mit einem Passworthash hat, hat er in der Regel auch einen Timestamp zu dem Passwort. Hoechstwahrscheinlich im Klartext, weil dieser eigendlich keine sensible Information ist.
Und damit ist der Kreis an Seeds die der Angreifer mit random durchgehen muss nur noch ein Bruchteil aller moeglichen Seeds. Rein auf die Rechenzeit bezogen also wesentlich einfacher als den Hash zu knacken, wenn dieser selber hinreichend sicher ist.
Wobei das in diesem Fall eh hinfaellig ist, das duerfe bei Kenntnis des Codes auch ohne Anhaltspunkt zum Timestamp wesentlich einfacher zu knacken sein als ein sicherer Hash.

Natuerlich ist das im konkreten Fall ein extrem unwahrscheinliches Szenario.
Aber ich bleibe dabei: random ist fuer sowas, und sei es noch so Trivial, einfach nicht das richtige Werkzeug. Man sollte sich das garnicht erst angewoehenen. Ich weiss selber wie schwer es ist schlechte Gewohnheiten loszuwerden :D
Wer weiss denn ob der TE nicht demnaechst eine Webseite bauen will und dann aehnlich unsicher sich seine eigenen Algorithmen baut, weil es im nie jemand gesagt hat dass das keine gute Idee ist?
 
Zurück
Oben