Autor Beitrag
bl3nder
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 58



BeitragVerfasst: Fr 24.08.07 08:55 
Hi,
Ich benutze in einem meiner Programme die Funktion random() um Passwoerter der variablen Laenge von 12-16 Zeichen zu erstellen. Neben den Klein- und Großbuchstaben sollen weitere Sonderzeichen im Passwort vorkommen.
Funktioniert auch super.
Da nun diese Passwortgenerierung fuer mindestens 1000 Passwoerter erforderlich sein soll, frage ich mich, wie gut random eigentlich ist. Die Passwoerter sollten sich nicht wiederholen und vorallem sollten sie nicht rekonstruierbar sein.
Bin ich mit random auf einer einigermaßen sicheren Seite ?
christian_u
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 30



BeitragVerfasst: Fr 24.08.07 09:03 
Zufallszahlen sind nicht dazu da, das sie sich nicht wiederholen.
Richtige Zufallszahlen wiederholen sich sogar erstaunlich oft.
Wenn du sicher sein willst, das die Passwörter eindeutig sind musst du sie schon gegeneinander prüfen.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6388
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 24.08.07 09:18 
user profile iconbl3nder hat folgendes geschrieben:
Bin ich mit random auf einer einigermaßen sicheren Seite ?
Das kommt auf das Einsatzgebiet für Dein Passwörter an. Willst Du eine Hochsicherheitstrakt schützen oder nur den Zugriff auf ein Programm?

user profile iconchristian_u hat folgendes geschrieben:
Zufallszahlen sind nicht dazu da, das sie sich nicht wiederholen.
Richtige Zufallszahlen wiederholen sich sogar erstaunlich oft.
Wenn du sicher sein willst, das die Passwörter eindeutig sind musst du sie schon gegeneinander prüfen.
Selbst wenn sich Zufallszahlen wiederholen, ist doch äußerst unwahrscheinlich, dass sich bei mindestens 12 Zeichen für das Passwort, die ganze Sequenz wiederholt.

Es gibt allerdings eine Lücke. Es kann passieren, dass identische Passwörter erzeugt werden, wenn mit identischen Startwerten gearbeitet wird. Wenn als Randomize in zwei Fällen zum gleichen Zeitpunkt gestartet wird (Randomize arbeiten meines Wissens mit der Uhrzeit als Initialwert), kann Random zu identischen Sequenzen führen. Dies ist mir bereits einmal passiert mit meinem Passwort-Generator.
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Fr 24.08.07 09:21 
Ich kenne die Random-Funktion. Nur nicht sooo genau, aber mein Informatik-Versand sagt mir, dass eine Funktion sich keine Zahlen ausdenken kann. Nach irgendeinen Prinzip muss diese Fnktion doch die Zahlen ausgeben. Mensch denken sich Zahlen aus, aber keine Computer. Demnach wäre die Zahlenfolge rekonstruierbar. Addiere zu der "Zufallszahl" Teile aus dem Datum und Uhrzeit, während der Generierung der "Zufallszahlen". Also Date + Zufallszahl. Auch wenn die Zufallszahlen rekonstruierbar sind, das Datum und die Sekunde der Erstellung kennst nur Du. Ansonsten ist Random für 1000 Werte vollkommen okay. Wie oft muss diese Generierung denn passieren. Einmalig?

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Fr 24.08.07 09:23 
GEFUNDEN: E:Exception <- sorry, gehört hier garnicht her!

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.


Zuletzt bearbeitet von mexx am Fr 24.08.07 09:38, insgesamt 1-mal bearbeitet
bl3nder Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 58



BeitragVerfasst: Fr 24.08.07 09:35 
Ja nur einmalig. Allerdings koennte im Laufe der Nutzung des Programms neue Passwoerter hinzukommen.
Das mit dem Datum ist keine schlechte Idee. Mal dran machen ;)
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Fr 24.08.07 09:52 
Du kannst in die Berechnung die Zahlen eines kompletten Datumsformates einbinden.

dd.mm.yyyy hh.mm.ss.ms

Wenn Du dann noch diese Berechnung nicht im Quelltext machen lässt, sondern das in einer DLL, kann man auch nicht mit einen HEX-Editor oder ähnlichen die Source Deiner EXE durchwühlen und die Berechnungsmethode rausfinden. Die DLL solltest dann nur Du besitzen. Das ganze bietet einen sehr guten Schutz. Der Angreifer weiss erstens nicht, dass Du die Zufallszahl mit Datumsangaben Addierst/Multiplizierst/Suptrahierst/... und wenn er es wüsste zweitens keine Ahnung hat, wie Du das machst.

Random(10) + tt / yyyy * hh???

Denn wenn das nur in Deiner DLL verankert ist und nur Du diese DLL besitzt, kann das Passwort nicht herrausgefunden werden.

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8538
Erhaltene Danke: 475

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 24.08.07 10:02 
Öhm...ich würde einfach einmalig Randomize benutzen, und dann mehrfach Random. Der Zufallsgenerator ist zwar nicht perfekt, und es gibt sicherlich bessere, aber vorhersagbar sind die Ergebnisse von Random afaik nicht - oder nur mit erheblichem Aufwand.

Von daher würde ich da nicht allzuviel reininvestieren.

_________________
We are, we were and will not be.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Fr 24.08.07 10:03 
Bei Aufrufe von Randomize, wird der Variable RandSeed folgendes zugeweisen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  Counter: Int64;
begin
  if QueryPerformanceCounter(Counter) then
    RandSeed := Counter
  else
    RandSeed := GetTickCount;
end;


Die DOH schreibt zu RandSeed:
Zitat:
Durch die Zuweisung eines bestimmten Wertes an RandSeed kann Random mehrmals eine bestimmte Folge von Zufallszahlen generieren.


Sprich: Die Chance die selben Werte zu bekommen ist so recht groß (aber dennoch bei 12 Stellen sehr sehr klein), da die Funktion die Zeit benutzt, seit Windows läuft. Wenn du nun im exakt selben Moment wieder Randomize aufrufst, kämen die selben Zufallszahlen.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 24.08.07 19:12 
@gta place: was denkste wie randomize arbeitet? den code dazu hast ja grad gequoted...

@bl3nder: klar sind die zufallszahlen, bei identischen startwerten rekonstruierbar. das zeichnet ja einen guten zufallszahlengenerator aus... :-) . aber du musst ja nicht immer die selben startwerte setzen.... und randomize, ruft man auch nur EINMAL im programm auf, ausser man möchte verschiedene szenarien simulieren, dann muss random jeweils wieder auf den identischen startwert gesetzt werden... aber das war wohl nicht deine erwartung...
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Fr 24.08.07 20:26 
Echten Zufall kann eine CPU nicht erzeugen, es sei denn, man schafft es, das Rauschen einzufangen.

Die Random()-Funktion ist auch kein Zufallszahlengenerator, sondern ein PSEUDO-Zufallszahlengenerator. Gott-Sei-Dank produziert er bei gleichem Seed identische Zahlensequenzen. Erst damit wird der Zufall deterministisch und damit wiederholbar.

Random() ist zwar recht simpel, erzeugt jedoch gleichverteilte Zufallszahlen ohne erkennbares Muster. Das genügt für einfache Anwendungen (also die Meisten).

Eine sehr einfache und wirlich sehr sichere Erzeugung von "verdammt zufälligen" und schlecht reproduzierbaren Zufallszahlen besteht in der Verwendung von GUIDs. Die Delphi-OH wird sicherlich eine Funktion dafür ausspucken. Eine GUID ist ja letztendlich "nur" eine 128-bit Zahl von der MS behauptet, sie sei 'weltweit eindeutig'.

_________________
Na denn, dann. Bis dann, denn.
hkk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 64

Win XP Pro, Win ME, openSUSE 10.2, Ubuntu 7.xx; Firefox 2 (en-US)
D7 Pers, D3 Prof
BeitragVerfasst: Sa 25.08.07 00:51 
nur mal ne kleine anmerkung zu dem wiederholt erwähnten "wenn du das ganze zum exakt selben zeitpunkt startest":
also wenn der code, den gta-place gequoted hat, wirklich der von Randomize ist, dann arbeitet die zeitfeststellung mit der CPU-Frequenz. Bei prozessoren mit mehreren Ghz ist es also ziemlich schwer, den exakt selben zeitpunkt zu erwischen (f=1GHz=10^9Hz -> T(Periodendauer)=10^-9s=1ns)

nur mal so ^^

~HKK
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 25.08.07 08:42 
Ich hab mich da mehr auf das GetTickCount bezogen, falls man über keinen Hardwarecounter verfügt ;-) Und dass es passieren kann, hat ja jascoul erzählt.

user profile iconjascoul hat folgendes geschrieben:
Dies ist mir bereits einmal passiert mit meinem Passwort-Generator.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mo 27.08.07 12:57 
Der Zufallszahlengenerator von Delphi ist nicht kryptographisch sicher, insbesondere ist es meines Wissens relativ einfach, die Zufallszahlenfolge vorherzusagen, wenn nur relativ wenige Zahlen bekannt sind.

Windows enthält einen Zufallszahlengenerator für kryptographische Anwendungen, für Passworterzeugung würde ich den benutzen:

CryptGenRandom (MSDN)

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
hansdergott
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 55

XP Mediacenter Edition; XP Home
Delphi
BeitragVerfasst: Di 28.08.07 00:15 
Titel: Random mit 1000
hi
also ich habe ein programm geschrieben um herauszufinden
wie lange es dauert bis die von mir eingestellte zahl
per random(1000) (erraten) wird

als beispiel meine zahl war 532 und bei random(1000)
hatt es 7 sek. gedauert und 275 versuche

bei random(10000) mit dergleichen zahl 532 hatt es
schon 26 sek bei 1103 versuchen gebraucht
muß aber dazu sagen das der timer für die vegleiche
und der neuen zufallszahl auf 1ms eingestellt war

grüße
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8538
Erhaltene Danke: 475

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 28.08.07 08:09 
Öhm...Timer?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  x := StrToInt(Edit1.Text);
  repeat
  until (random(10000000) = x);
  showmessage('fertig');

Die benötigte Zeit hierfür ist bei weniger als eine Sekunde. Nicht, dass man so eine potentielle Endlosschleife in ein Programm einbauen sollte - aber nen Timer zum Code knacken zu benutzen ist etwas umständlich.

_________________
We are, we were and will not be.
Alpha_Wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 297

Ubuntu, Win XP, Win Vista
C#, Delphi 6 Prof, Delphi 2007 Prof, Java
BeitragVerfasst: Di 28.08.07 10:11 
Habe bisher ungefähr 15000 solcher GUIDs in einem Programm erstellt und bisher keinen einzigen gleichen erwischt. Allerdings verwende ich die GUID als eindeutige Identifizierung eines Datensatzes und nicht als Passwort.

Die Wahrscheinlichkeit das mal eine gleiche GUID erzeug wird ist sehr gering:
user defined image

Zur Verwendung:

unit SysUtils

function CreateGUID(out Guid: TGUID): HResult;


Das ist schnell eingebaut und man muss sich nicht mit dem netten random vergnügen ;)

_________________
Diskutiere nie mit einem Irren - er zieht dich auf sein Niveau und schlägt dich mit seiner Erfahrung.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1332
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 28.08.07 20:50 
Wenn man sich die Delphi Hilfe zur Random Funktion anschaut, dann steht da drinn das man Random nicht an Stellen verwenden sollte wo man garantiert über alle noch möglichen Delphi Versionen hinweg die gleichen Ergebnisse erhalten will. Zb. in der Kryphtographie.
Ich persönlich verwende in meinen Programmen ISSAC.
Der ist recht schnell und produziert sehr lange sich nicht wiederholende Zahlenfolgen. Also genau das richtige für Stromverschlüsselungen (wie ich sie verwende)

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1653
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 28.08.07 21:23 
Hallo,

Isaac liest sich toll, aber als untere Grenze der Wiederholungrate 2^-40 ist doch etwas merkwürdig wenig, im Verhältnis zum Durchschnitt von 2^-8295 .

Gruß Horst
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1332
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 28.08.07 21:37 
Keine Ahnung warum die Differenz so groß ist. Mir reichen jedoch 2^40 dicke aus.
Ich kann mir im Moment keinen Einsatzort vorstellen bei dem ich jehmals längere Reihen benötigen würde. (2^40 = 1.099.511.627.776)

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?