Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Passwörter generieren (Besondere) (https://www.delphipraxis.net/157419-passwoerter-generieren-besondere.html)

DelphiSecurity 11. Jan 2011 13:36

Passwörter generieren (Besondere)
 
Hallo,

wie der Titel schon verrät möchte ich einen Passwortgenerator erstellen! :-D
Kennt jemand zufällig eine Funktion oder DLL (mit Quellcode :thumb: bitte) mit der man soetwas machen kann?

Bedingung: Man kann:

a) die Länge angeben
b) die Zeichen angeben
c) wenn möglich auch die Stärke angeben

Danke schonmal!

Deep-Sea 11. Jan 2011 13:42

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von DelphiSecurity (Beitrag 1073855)
[...] möchte ich einen Passwortgenerator erstellen!

Wenn du jetzt eine DLL nutzt, die alles schon für dich macht, was hast du dann da überhaupt noch selbst gemacht? :shock:

DelphiSecurity 11. Jan 2011 13:47

AW: Passwörter generieren (Besondere)
 
Sorry, hab mich nicht richtig ausgedrückt. ICH will ja daraus lernen, verstehe aber das Prinzip nicht.
Mit DLL meinte ich Quellcode, keine erstellte DLL :wink:
Wie funktioniert soetwas?

Außerdem ist der Passwortgenerator nur eine art Funktion für das Programm, irgendwo müssen ja die Passwörter her die mein Programm für andere Sachen brauch! (Ist ein Verschlüsselungsprogramm für Texte!)


DelphiSecurity

Klaus01 11. Jan 2011 13:48

AW: Passwörter generieren (Besondere)
 
Hallo,

zum Thema Passwortstärke möchte ich Dir diesen Thread ans Herz legen.

Grüße
Klaus

DelphiSecurity 11. Jan 2011 13:50

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von Klaus01 (Beitrag 1073866)
Hallo,

zum Thema Passwortstärke möchte ich Dir diesen Thread ans Herz legen.

Danke, aber was ist Extended für ein Variablen Typ?

Deep-Sea 11. Jan 2011 13:51

AW: Passwörter generieren (Besondere)
 
Hat dein Delphi denn keine Hilfe? :roll:

DelphiSecurity 11. Jan 2011 14:19

AW: Passwörter generieren (Besondere)
 
Achso.... Muss die noch installieren :wink: :wink: :wink:

shmia 11. Jan 2011 14:54

AW: Passwörter generieren (Besondere)
 
Ein Zufallspasswort kannst du z.B. so erzeugen:

Delphi-Quellcode:
function RandomString(const len: Integer; const CharSet: string): string;
var
   i: Integer;
   pResult : PChar;
begin
   SetLength(Result,len); // Speicher im Result-String reservieren
   pResult := PChar(Result);
   for i := 1 to len do
   begin
      pResult^ := CharSet[1+Random(Length(CharSet))];
      Inc(pResult);
   end;
end;

...
neuesPasswort := RandomString(6, ['0'..'9', 'A'..'Z']);

Deep-Sea 11. Jan 2011 15:00

AW: Passwörter generieren (Besondere)
 
Wobei man noch einmalig vorher Randomize aufrufen muss.
Und selbst dann wäre Random nicht kryptographisch sicher.

Luckie 11. Jan 2011 15:05

AW: Passwörter generieren (Besondere)
 
Es wird ja auch nur das Passwort generiert und nichts damit verschlüsselt. Und zum Generieren reicht es. Oder was sollte bei einem kryptografisch sicheren Zufallsgenerator anderes rauskommen, als ein zufälliges Passwort?

Deep-Sea 11. Jan 2011 15:15

AW: Passwörter generieren (Besondere)
 
Wenn man den Algorithmus dahinter kennt - und das tut man im Falle von Delphis Random-Funktion ja - kann man wahrscheinlich mit nur einem bekannten Passwort, also z.B. seinem eigenen, die nachfolgend generierten Passwörter selbst berechnen. (Und selbst ohne bekanntem Passwort geht es, wenn auch etwas ungenauer, da als Saat ja nur die Zeit genutzt wird).
Wo ist dann da die Sicherheit?

gammatester 11. Jan 2011 15:16

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von Luckie
was sollte bei einem kryptografisch sicheren Zufallsgenerator anderes rauskommen, als ein zufälliges Passwort?

Da kommt dann ein Paswort raus, was nicht so leicht zu "reproduzieren" ist, wie eins mit random. Du willst doch wohl nicht behaupten, daß Du den Unterschied nicht kennst. Wie oft haben wir hier zB schon die Frage gehabt "Ich habe randomize auf gerufen und erhalte trotzdem das gleiche Passwort".

Luckie 11. Jan 2011 15:25

AW: Passwörter generieren (Besondere)
 
OK, Beispiel: Mein Passwort für die Delphipraxis habe ich mit Delphi unter der Verwendung von Random erstellt. Es lauter jqf73wcnjwie. Auch für den FTP-Zugang meines Webspace habe ich mit ein Passwort so generieren lassen. Jetzt kannst du mir sicher sagen, wie es lautet.

Man naht nur dann ein Problem, wenn man sich eine Serie von Passwörtern generieren lässt und sie dann auch in einer Serie verwendet. Also Datren1 mit Passwort1 verschlüsseln, Daten2 mit Passwort2 verschlüsseln und so weiter. Aber selbst dann müsste man den Zeitstempel kennen, um die Passwörter zu reproduzieren zu können.

DelphiSecurity 11. Jan 2011 15:26

AW: Passwörter generieren (Besondere)
 
Kann man denn einstellen welche Zeichen vorkommen sollen???

Luckie 11. Jan 2011 15:28

AW: Passwörter generieren (Besondere)
 
Ja. Quellcode angucken und verstehen.

Deep-Sea 11. Jan 2011 15:32

AW: Passwörter generieren (Besondere)
 
Somit ist die Funktion aber nicht sonderlich universell einsetzbar, da man sehr viele Bedingungen einhalten muss. Man darf keine Serien von Passwörtern erstellen, man muss sicherstellen, dass man nicht erraten kann, wann das Passwort erstellt wurde, usw.
Alles Dinge, die es anfällig machen. Aber gut, wenn man damit leben kann ist's ja ok. Man sollte sich dessen aber bewusst sein.

DelphiSecurity 11. Jan 2011 15:33

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von shmia (Beitrag 1073889)
Ein Zufallspasswort kannst du z.B. so erzeugen:

function RandomString(const len: Integer; const CharSet: string): string;
var
i: Integer;
pResult : PChar;
begin
SetLength(Result,len); // Speicher im Result-String reservieren
pResult := PChar(Result);
for i := 1 to len do
begin
pResult^ := CharSet[1+Random(Length(CharSet))];
Inc(pResult);
end;
end;

...
neuesPasswort := RandomString(6, ['0'..'9', 'A'..'Z']);

Achso hier eingeben was man brauch! Danke!!!!!!!

DelphiSecurity 11. Jan 2011 15:34

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von Deep-Sea (Beitrag 1073908)
Somit ist die Funktion aber nicht sonderlich universell einsetzbar, da man sehr viele Bedingungen einhalten muss. Man darf keine Serien von Passwörtern erstellen, man muss sicherstellen, dass man nicht erraten kann, wann das Passwort erstellt wurde, usw.
Alles Dinge, die es anfällig machen. Aber gut, wenn man damit leben kann ist's ja ok. Man sollte sich dessen aber bewusst sein.

Das mit der Serie wäre toll!

ToFaceTeKilla 11. Jan 2011 15:37

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von DelphiSecurity (Beitrag 1073910)
Das mit der Serie wäre toll!

2 Stichworte für deine Suche:
  1. for-i-Schleife
  2. TStringlist

H2H

gammatester 11. Jan 2011 15:39

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von Luckie (Beitrag 1073904)
Man naht nur dann ein Problem, wenn man sich eine Serie von Passwörtern generieren lässt und sie dann auch in einer Serie verwendet. Also Datren1 mit Passwort1 verschlüsseln, Daten2 mit Passwort2 verschlüsseln und so weiter. Aber selbst dann müsste man den Zeitstempel kennen, um die Passwörter zu reproduzieren zu können.

Habe Dein Paswort nicht ausprobiert :)

Allerdings hat man nicht nur in dem beschriebene Scenario Probleme, wenn der Algorithmus bekannt ist (das sollte bei Kryptoanwendungen der Fall sein, die Sicherheit kommt aus Schlüssel, Salz etc)

Beispiel 1: Du verschlüsselst Dateien. Aus der Zeitstempel der Datei erhaltst das ungefähre Randseed.

Bespiel 2: Dein Passwort kann auf keinen Fall mehr als 32-Bit "Zufall" haben, anders heraum Du kannst maximal 2^32 Passwörter erzeugen. Das ist lächerlich gering und mit Bruteforce relativ einfach zu knacken.

Deep-Sea 11. Jan 2011 15:40

AW: Passwörter generieren (Besondere)
 
@ToFaceTeKilla:
Ein Stichwort: CSPRNG :wink:


Zitat:

Zitat von gammatester (Beitrag 1073917)
Allerdings hat man nicht nur in dem beschriebene Scenario Probleme, wenn der Algorithmus bekannt ist (das sollte bei Kryptoanwendungen der Fall sein, die Sicherheit kommt aus Schlüssel, Salz etc)

Richtig. Aber Random hat keinen Schlüssel ;)

gammatester 11. Jan 2011 15:46

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von Deep-Sea (Beitrag 1073919)
Richtig. Aber Random hat keinen Schlüssel ;)

Du wirst doch wohl nicht random ohne randseed benutzen?

ToFaceTeKilla 11. Jan 2011 15:48

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von Deep-Sea (Beitrag 1073919)
@ToFaceTeKilla:
Ein Stichwort: CSPRNG :wink:

Klar, ich denke da sind sich alle einig, dass die mit oben gepostetem Code produzierten Passwörter nicht unbedingt kryptografisch sicher sind.
Aber man muss ja nicht gleich mit Kanonen auf Anfänger Spatzen schießen.

Deep-Sea 11. Jan 2011 15:50

AW: Passwörter generieren (Besondere)
 
@gammatester:
Nein schon klar, ich meinte, dass es keinen Schlüssel im Sinne von "kryptographischen Schlüssel" hat. Ungünstig ausgedrückt, sry.


@ToFaceTeKilla:
Na ok *gg*

DelphiSecurity 11. Jan 2011 15:52

AW: Passwörter generieren (Besondere)
 
Sorry aber der Quellcode funktioniert nicht, so wie er da steht, ParameterFehler

shmia 11. Jan 2011 15:59

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von DelphiSecurity (Beitrag 1073931)
Sorry aber der Quellcode funktioniert nicht, so wie er da steht, ParameterFehler

Äh ja, das war nicht ganz richtig.
Der Zeichenvorrat muss als String und nicht als Menge übergeben werden:
Delphi-Quellcode:
neuesPasswort := RandomString(6, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789');

DelphiSecurity 11. Jan 2011 16:01

AW: Passwörter generieren (Besondere)
 
Danke, ist erstmal GELÖST!

Kann man das irgenwo einstellen?

Deep-Sea 11. Jan 2011 16:03

AW: Passwörter generieren (Besondere)
 
Wie einstellen? Wo einstellen? :gruebel:

hathor 11. Jan 2011 18:41

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von shmia (Beitrag 1073940)
Der Zeichenvorrat muss als String und nicht als Menge übergeben werden:
Delphi-Quellcode:
neuesPasswort := RandomString(6, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789');

Man könnte noch '€~}|{`_^]\[@?>=<;:/.-,+*)('&%$#"!' hinzufügen.

Die Function RandomString hat einen entscheidenden Fehler:
es wird nicht verhindert, dass ein Zeichen mehrfach auftritt.
Das verringert die Sicherheit gewaltig.

Chemiker 11. Jan 2011 19:28

AW: Passwörter generieren (Besondere)
 
Hallo,

gehört zwar nicht ganz zum Thema, wie speichert Ihr Eure Passwörter?

Bis bald Chemiker

Luckie 11. Jan 2011 19:31

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von Chemiker (Beitrag 1073994)
gehört zwar nicht ganz zum Thema

Und deswegen mache bitte ein neues Thema auf.

rollstuhlfahrer 11. Jan 2011 19:32

AW: Passwörter generieren (Besondere)
 
Und um die Sicherheit noch zu erhöhen (und vor allem denjenigen den Wind aus den Segeln zu nehmen, die meinen zu wissen, wann du dein PW generiert hast): Klatsche noch einen relativ schnell tickenden Timer aufs Form und nimm immer wieder eine Zufallszahl. So veränderst du jedes Mal den RandSeed und es ist somit nicht mehr ganz eindeutig, von welchem RandSeed du dein PW gebaut hast. Außerdem hängen dann nicht 2 PWs direkt hintereinander, da du zwischen dem ersten und dem 2. Passwort > 1 Durchlauf des Timers hast. Dein 2. Passwort wird also weniger abhängig vom ersten Passwort.

TrueCrype (welches OpenSource ist) geht einen ähnlichen Weg. Um einen möglichst zufälligen Schlüssel zu erhalten soll man möglichst lange zufällig mit der Maus auf dem Form Bewegungen machen. Je länger, desto besser, weil man dann nicht aus dem Zeitstempel auf den RandSeed schließen kann.

Bernhard

Klaus01 11. Jan 2011 19:36

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von hathor (Beitrag 1073984)
Die Function RandomString hat einen entscheidenden Fehler:
es wird nicht verhindert, dass ein Zeichen mehrfach auftritt.
Das verringert die Sicherheit gewaltig.

Zufall heißt ja nicht, dass ein Zeichen nur einmal vorkommen darf.
Ob das, wenn ein Zeichen nur einmal vorkommt, zu Sicherheit beiträgt wurde
in einem anderen Thread schon einmal recht ausführlich diskutiert.

Grüße
Klaus

lbccaleb 11. Jan 2011 19:50

AW: Passwörter generieren (Besondere)
 
Hatte auch mal einen gemacht:

Password Generator

gammatester 11. Jan 2011 22:13

AW: Passwörter generieren (Besondere)
 
Zitat:

Zitat von rollstuhlfahrer
Und um die Sicherheit noch zu erhöhen (und vor allem denjenigen den Wind aus den Segeln zu nehmen, die meinen zu wissen, wann du dein PW generiert hast): Klatsche noch einen relativ schnell tickenden Timer aufs Form und nimm immer wieder eine Zufallszahl. So veränderst du jedes Mal den RandSeed und es ist somit nicht mehr ganz eindeutig, von welchem RandSeed du dein PW gebaut hast.

Das ändert aber nichts daran, daß mit einem fixen Algorithmus via Randseed/Random "nur" 2^32 Passwörter generiert werden können.

Zitat:

Zitat von rollstuhlfahrer
TrueCrype (welches OpenSource ist) geht einen ähnlichen Weg. Um einen möglichst zufälligen Schlüssel zu erhalten soll man möglichst lange zufällig mit der Maus auf dem Form Bewegungen machen. Je länger, desto besser, weil man dann nicht aus dem Zeitstempel auf den RandSeed schließen kann.

Das ist mM eine völlig unzutreffende Beschreibung des TrueCrypt Random-Generators, der im Gegensatz zu Delphi-Random wahrscheinlich ein CPRNG ist: Maus- UND Tastatur- und Netzwerk- und Festplatten-Ereignisse werden gesammelt um Entropie/Zufall in einen Pool reinzumischen mit einer wählbaren Hashfunktion (RIPEMD160, SHA512, oder Whirlpool).

Da das (wahrscheinlich) ein CPRNG ist, kann man selbst wenn man einen bestimmten Zustand kennt, NICHT den nächsten oder vorherigen Zustand bestimmen, ganz im Gegensatz zu Delphi, wo man beliebig Vor- und Zurückrechnen kann: x(n+1) = a*x(n) + b mod 2^32 bzw x(n-1) = (x(n)-b) * (1/a) mod 2^32.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz