Autor |
Beitrag |
FloFri
Beiträge: 97
|
Verfasst: Mi 29.10.03 09:35
Auch wenn der Thread schon etwas älter ist würde ich gerne zu dem Zufallsprinzip noch etwas fragen:
Was währe denn bei folgendem Beispiel zur erzeugung von Zufallszahlen:
Man macht zuerst ein Randomize.
Dann holt man sich per Random das erste Zeichen des Schlüssels.
Dannach holt man sich per Random einen zweiten wert zwischen 1 und 5
Ist dieser Wert gleich 5, dann wird der Random-Pool mit dem letzten Zeichen des Schlüssels neu initialisiert.
Dann geht das Spiel von vorne los.
Was haltet ihr dafon? Wie zufällig währe das?
Ach so: und hat jemand ein Beispiel für einen Reellen Zufalls-Algo?
|
|
Motzi
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mi 29.10.03 13:22
Das Problem ist dasselbe - Random ist nur ein Pseudo-Zufallsgenerator der nur auf einer 32-Bit Variable basiert. Kennt man den ersten Ausgangswert von RandSeed kann man deinen kompletten Algorithmus rekonstruieren! Und wie bereits gesagt vereinfacht der Einsatz von Randomize eine BruteForce-Attacke, da RandSeed mit der Anzahl der vergangenen Millisekunden seit 0 Uhr füllt und dieser Wert hat nunmal ein Maximum von 24*60*60*1000 = 86400000 und ist somit 49 mal kleiner als der höchst mögliche Wert eine 32-Bit Variable!
Die einzige Möglichkeit Random sinnvoll einzusetzten wäre wieder nur in Verbindung mit einer echten Zufallsquelle zB Mausbewegungen, aber wenn man bereits eine echte Zufallsquelle hat braucht man dann eigentlich auch kein Random mehr...!
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
FloFri
Beiträge: 97
|
Verfasst: Mi 29.10.03 14:51
Hm, gibt es irgendwo ein beispiel, wie ich so eine eigene random-funktion schreibe, oder reicht es, wenn ich den seed-startwert aus einer reellen-zufallsquelle nehme?
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Mi 29.10.03 17:16
Ich hatte vor eineiger Zeit mal ein bissl rumprobiert und dabei ist folgende Fkt rausgekommen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| function Rand(v: integer): integer; begin repeat result := round(v * 3 * cos(randseed * 133.579487179487)); randseed := (randseed + gettickcount + random(10)); if result < 0 then result := -result; until result < v; end; |
Allerdings weiß ich nicht wie sicher die ist. (Rekonstruierbar dürften die Zahlen aber nicht ohne weiteres sein)
|
|
Motzi
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mi 29.10.03 17:32
Und mit welchem Wert initialisierst du RandSeed das erste mal..?
Das Problem ist nunmal, dass Random auf einer 32-Bit Variable basiert und damit maximal 2^32 mögliche Zufallsfolgen erstellen kann. Und auch wenn RandSeed aufgrund eines eigenen Algos neu berechnet wird erhöht das die Sicherheit keinesfalls, da ja das gesamte Prinzip nur auf einem 32-Bit Ausgangswert beruht! Wird dieser Ausgangswert ermittelt (bei 32 Bit ist das per BruteForce kein Problem) so kann man alle weiteren Werte ohne Probleme berechnen..!
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Mi 29.10.03 18:27
Motzi hat folgendes geschrieben: | Und mit welchem Wert initialisierst du RandSeed das erste mal..? :roll: |
GetTickCount(=Anzahl der Millisekunden seit letztem Windows-start)
Und ich glaube kaum, dass du in diesem Fall alles wiederherstellen kannst, weil du nicht weist, wie lange mein PC für einen Schleifendurchlauf, in dem eine Zahl berechnet wird, braucht.
(Ich lasse mich aber gerne belehren ;))
|
|
sakura
Beiträge: 137
W2KS, W2K3S
D1Pr, D3Pr, D4Pr, D5E, D7A, D8A, D2005A
|
Verfasst: Mi 29.10.03 21:28
Ich wollte nur eine Korrektur zu Randomize anbringen. Ich bin mir nicht sicher, seit welcher Delphi-Version es anders ist, aber das ließe sich morgen mal testen. Unter Windows wird RandSeed i.A. mit 64 Bit initialisiert.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure Randomize; {$IFDEF LINUX} begin RandSeed := _time(nil); end; {$ENDIF} {$IFDEF MSWINDOWS} var Counter: Int64; begin if QueryPerformanceCounter(Counter) then RandSeed := Counter else RandSeed := GetTickCount; end; {$ENDIF} |
EDIT: Vergesst es, ändert ja nichts an der Tatsache dass RandSeed vom Typ LongInt (32 Bit) ist
_________________ Das Lächeln ist die eleganteste Art dem Gegner die Zähne zu zeigen.
Borland SE
|
|
Motzi
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Do 30.10.03 11:53
@obbschtkuche: oh.. hab übersehen, dass du innerhalb deiner Rand-Funktion auch nochmal GetTickCount verwendest... das macht die Sache natürlich etwas komplizierter, allerdings ist das auch noch nicht der ideale Zufall...!
@sakura: also bei meinem Delphi schaut Randomize so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| procedure Randomize; {$IFDEF LINUX} begin RandSeed := _time(nil); {$ENDIF} {$IFDEF MSWINDOWS} var systemTime : record wYear : Word; wMonth : Word; wDayOfWeek : Word; wDay : Word; wHour : Word; wMinute : Word; wSecond : Word; wMilliSeconds: Word; reserved : array [0..7] of char; end; asm LEA EAX,systemTime PUSH EAX CALL GetSystemTime MOVZX EAX,systemTime.wHour IMUL EAX,60 ADD AX,systemTime.wMinute IMUL EAX,60 XOR EDX,EDX MOV DX,systemTime.wSecond ADD EAX,EDX IMUL EAX,1000 MOV DX,systemTime.wMilliSeconds ADD EAX,EDX MOV RandSeed,EAX {$ENDIF} end; |
Aber wie du richtig bemerkt hast "ändert ja nichts an der Tatsache dass RandSeed vom Typ LongInt (32 Bit) ist" und dass die Anzahl der möglichen Zufallsfolgen damit sehr begrenzt ist...
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
FloFri
Beiträge: 97
|
Verfasst: Fr 31.10.03 09:01
Aber das sollte doch eigendlich keinen stören mit den Zufallsfolgen, da doch eh ständig eine andere benutzt wird (am beispiel von obbschtkuche).
Noch eine andere Frage: Es können ja bei verschlüsselten Strings und Keys 255 verschiedene Zeichen rauskommen. Einige davon sind aber ja Steuerzeichen, von denen wiederum einige für den String tabu sind, da diese den string an sich verändern, ohne das der benutzer was macht.
Ein beispiel dafür ist das Zeichen chr(0), da dieser den Schluss des strings symbolisiert und dadurch der string an der stelle abgeschnitten wird.
Andere Tabu-Zeichen sind zum beispiel der backslash, da auch der den string verändert.
Steuerzeichen, die zum beispiel nicht tabu sind, sind chr(13) und chr(10), da diese ja nur eine neue zeile beginnen, aber nicht den string verfälschen.
Hat zufällig jemand eine Liste, mit solchen tabu-zeichen, die einen string verfälschen?
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 31.10.03 11:57
soweit ich weiß nur #0, aber das macht auch nichts, da dateien binär gespeichert werden
|
|
FloFri
Beiträge: 97
|
Verfasst: Fr 31.10.03 14:48
Habe schon herausgefunden, warum mein text immer verfälscht wurde. Habe es aus Debug-Gründen erst in ein Memo-Feld gepostet, befor ich es gespeichert habe.
Speicher es jetzt direkt und kann sogar #0 benutzen.
|
|
pHew
Beiträge: 16
Win XP Prof
D6 Enter
|
Verfasst: Sa 17.01.04 18:15
Hm, kann ich so ein OneTimePad nicht knacken, wenn ich Wörter kenne die darin vorkommen?
Ich probier einfach alle Chiffres durch, bis bei einem ein hoher Prozentsatz "sinnvoller" Wörter drin stehen. Oder ergibt jeder beliebige Klartext sinnvolle Wörter (das wär ja arger Zufall, oder?).
_________________ Kill Bill
|
|
Motzi
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Sa 17.01.04 18:38
Nein.. ein OneTimePad erzeugt einen vollkommen willkürlichen Chiffre-Text. Und da jeder Schlüssel geleich wahrscheinlich ist, ist auch jeder mögliche Klartext gleich wahrscheinlich! Und zu diesen unendlich vielen möglichen Klartexten gehören eben auch alle möglichen Klartexte die durchaus sinnvollen Text haben. Aber dadurch, dass eben jeder dieser Klartexte gleich wahrscheinlich ist hat man keinen Anhaltspunkt welcher nun der gesuchte ist...
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
pHew
Beiträge: 16
Win XP Prof
D6 Enter
|
Verfasst: Di 20.01.04 18:40
Aber ob der Text jetzt
Thomas ging zur Arbeit und vergaß seinen Schal.
oder
Herbert Bügelbrett Paul t334 sieben komma!
lautet, hilft mir. Dann muss ich eben alle durchsehen, wo meine Wörter vorkommen. Wenn ich genug probier is das richtige sicher dabei, und das erkenn ich dann am Sinn der Worte. Mit Pech ist es eben das letzte von unendlich vielen.
_________________ Kill Bill
|
|
Motzi
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Sa 05.06.04 12:32
Hoppla.. das Posting ist mir damals komplett durch die Lappen gegangen..
pHew hat folgendes geschrieben: | Aber ob der Text jetzt
Thomas ging zur Arbeit und vergaß seinen Schal.
oder
Herbert Bügelbrett Paul t334 sieben komma!
lautet, hilft mir. Dann muss ich eben alle durchsehen, wo meine Wörter vorkommen. Wenn ich genug probier is das richtige sicher dabei, und das erkenn ich dann am Sinn der Worte. Mit Pech ist es eben das letzte von unendlich vielen. |
Wie du in deinem letztem Satz schon sagst gibt es unendlich viele Möglichkeiten und jede dieser Möglichkeiten ist gleich wahrscheinlich! Und in diesen unendlich vielen Möglichkeiten gibt es zwar unendlich viele Möglichkeiten die keinen Sinn ergeben, aber auch unendlich viele die sehr wohl einen Sinn ergeben. Und da jede dieser Möglichkeiten gleich wahrscheinlich ist hat man keine Möglichkeit festzustellen welche jetzt die richtige ist..!!
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
FAlter
Beiträge: 192
Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
|
Verfasst: Sa 05.06.04 13:43
Ich habe vor einiger Zeit aich ein Verschlüsselungsprogramm geschrieben. Es basiert zwar nicht auf XOR-Basis, hat aber mit dem OTP trotzdem gewisse Ähnlichkeit.
Der Schlüssel steckt im zur Verschlüsselung verwendeten Passwort. Dieses darf zwar beliebig lang sein, am besten <= zu verschlüsselnde Daten in Byte, aber wenn man ihn genau gleich groß macht und nir zufälligen Symbolen füllt (und das Passwort kann nicht nur Buchstaben, sondern alle Zeichen von #0 bis #255 aufnehmen) dann ist es doch genauso schlecht knackbar, oder? Wenn man ein falsches Passwort eingibt, bekommt man nur Datenmüll.
Nur, da es schwierig ist, sich einen mehrere MB großen Schlüssel zu merken, habe ich ein System entwickelt, nach dem auch bei kürzeren Passwörtern einigermaßen Sicherheit bestehen soll. Der Schlüssel wird nach einem System jedesmal neu berechnet, wenn er fertig genutzt wurde. Dadurch sind auch bei Eingabe eines ähnlichen Passwortes nur die ersten paar Zeichen korrekt entschlüsselt.
Eine weitere Möglichkeit ist es, den Entschlüsselungsalgo... zum Verschlüsseln zu nutzen und dem zum Verschlüsseln beim Entschlüsseln. Das funktioniert einwandfrei, und der, der es Knacken will, muss möglicherweide doppelt so viele Kombinationen durchgehen.
Versucht mal, mit jetzigen Kenntnissen über das System (mehr hat der entschlüsselnde ja auch nicht), das zu entschlüsseln:
ËŽáÚÆŽÉÚÔ‡¹’XåȈ̒Ì×kš@ìØã„£’ÍÕÓŽÜÕÌ’ÜÒÖÜ@ÏÓ¢‚þòîí\ï÷ÿ£åj
PS: Der Schlüssel bestand nur aus auf der Tastatur eingebbaren Zeichen, war Englisch, kürzer als der Verschlüsselte Text und entsprach ihm Inhaltlich ungefähr.
|
|
raziel
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Sa 05.06.04 14:40
Titel: welcher kommentar?
FAlter hat folgendes geschrieben: | Der Schlüssel steckt im zur Verschlüsselung verwendeten Passwort. Dieses darf zwar beliebig lang sein, am besten <= zu verschlüsselnde Daten in Byte, aber wenn man ihn genau gleich groß macht und nir zufälligen Symbolen füllt (und das Passwort kann nicht nur Buchstaben, sondern alle Zeichen von #0 bis #255 aufnehmen) dann ist es doch genauso schlecht knackbar, oder? Wenn man ein falsches Passwort eingibt, bekommt man nur Datenmüll.
|
naja. wenn du deinen schlüssel aus einem passwort mit zufälligen daten generierst erstellst, kannst dich gleich komplett auf zufällige daten stützen -> das passwort wird sinnlos, weil du auch - genau wie beim one-time-pad - den schlüssel speichern bzw. mitübertragen musst.
FAlter hat folgendes geschrieben: | Nur, da es schwierig ist, sich einen mehrere MB großen Schlüssel zu merken, habe ich ein System entwickelt, nach dem auch bei kürzeren Passwörtern einigermaßen Sicherheit bestehen soll. Der Schlüssel wird nach einem System jedesmal neu berechnet, wenn er fertig genutzt wurde. |
Wie meinen
FAlter hat folgendes geschrieben: | Versucht mal, mit jetzigen Kenntnissen über das System (mehr hat der entschlüsselnde ja auch nicht), das zu entschlüsseln:
ËŽáÚÆŽÉÚÔ‡¹’XåȈ̒Ì×kš@ìØã„£’ÍÕÓŽÜÕÌ’ÜÒÖÜ@ÏÓ¢‚þòîí\ï÷ÿ£åj
PS: Der Schlüssel bestand nur aus auf der Tastatur eingebbaren Zeichen, war Englisch, kürzer als der Verschlüsselte Text und entsprach ihm Inhaltlich ungefähr. |
Scherzkeks. Du hast zwar im gröbsten umrissen wie du den schlüssel generierst, aber kein wort über die art der verschlüsselung. wir wissen nur dass nicht ge xort wurde...
//edit: oder is das ein schlüssel?
raziel
_________________ JSXGraph
|
|
Motzi
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Sa 05.06.04 16:56
FAlter hat folgendes geschrieben: | Nur, da es schwierig ist, sich einen mehrere MB großen Schlüssel zu merken, habe ich ein System entwickelt, nach dem auch bei kürzeren Passwörtern einigermaßen Sicherheit bestehen soll. Der Schlüssel wird nach einem System jedesmal neu berechnet, wenn er fertig genutzt wurde. |
Die Sicherheit basiert aber dennoch nur auf dem kurzen Passwort..! Ich brauche schließlich nur das kurze Passwort zu kennen um daraus den langen Schlüssel berechnen zu können..!
Bei eine Kryptanalyse geht man davon aus, dass der Angreifer bestens über den Algorithmus bescheid weiß. Du kannst also gerne deinen Code hier posten und ich schau ihn mir mal an..
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
FAlter
Beiträge: 192
Win XP Home
Turbo Delphi 2006 (Win32), C# (VS 2008 Prof.), Java (Eclipse), PHP
|
Verfasst: So 06.06.04 17:52
Titel: Re: welcher kommentar?
raziel hat folgendes geschrieben: | das passwort wird sinnlos, weil du auch - genau wie beim one-time-pad - den schlüssel speichern bzw. mitübertragen musst. |
Ich übertrage keinen Schlüssel. Der Empfänger gibt das Passwort ein, das ich vorher z. B. mit ihm persönlich abgemacht habe. Da dieses Passwort den Schlüssel darstellt, muss ich es nicht jedesmal mit übertragen.
motzi nicht, sondern auch raziel hat folgendes geschrieben: | Wie meinen |
Ich berechne aus dem Passwort eine Zahl und mit deren Hilfe codiere ich die Zeichen noch zusätzlich. Das bietet höhere Sciherheit, als nur nochmal mit dem Passwortanfang zu beginnen.
aber diesmal motzi hat folgendes geschrieben: | Die Sicherheit basiert aber dennoch nur auf dem kurzen Passwort..! Ich brauche schließlich nur das kurze Passwort zu kennen um daraus den langen Schlüssel berechnen zu können..! |
Nun, dieses "kurze" Passwort ist natürlich niche mehrere MB lang lang, aber Ein Sprichwort ist doch schon ziemlich lang oder ein Gedicht. Oder man nimmt einfach Teile eines Liedes ("DhGDEheD(A)"). Wenn man möchte, kann man auch den Ihnalt des letzten Briefes nehmen. Dieser sollte dann einiger KB groß sein.
Um zur Realität zurückzukommen: Was nutzt es dir, wenn du weißt, dass das Passwort Meyer oder Mayer oder Majer oder so ist? Und Wenn dui das Passwort nicht weißt, hast du kaum eine Chance.
Damit ihr den Text oben entschlüsseln könnt, hier ein paar weitere Infos: Mein Schlüssel basiert aus Addition und Subtraktion des Byte-Wertes. Ich hoffe, ihr könnt es trotz dieser Information nicht entschlüsseln. (Ich werde natürlich nicht so viel verraten, dass die ganze Sicherheit weg ist.)
Und noch was:
10 15 15 10 _ 1 5 5 _ 14 1 5 !
Leichter zu entschlüsseln (HEX!!!) Endlich habe ich es geschafft, einen Hex-Satz zu schreiben!
[sub]//Edit: Namen in Quote-Tags geändert[/sub]
Zuletzt bearbeitet von FAlter am So 06.06.04 18:22, insgesamt 1-mal bearbeitet
|
|
raziel
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: So 06.06.04 18:05
Titel: Re: welcher kommentar?
FAlter hat folgendes geschrieben: | motzi hat folgendes geschrieben: | Wie meinen |
|
Das war von mir, nich vion Motzi...
FAlter hat folgendes geschrieben: | (Ich werde natürlich nicht so viel verraten, dass die ganze Sicherheit weg ist.) |
An dieser Stelle zitier ich sehr gerne Bruce Schneier aus seinem Buch "Angewandte Kryptographie":
Bruce Schneier hat folgendes geschrieben: | Wenn ich von Ihnen verlange, einen Brief zu lesen, den ich in einen Safe gelegt und dann irgendwo in New York versteckt habe, dann hat das nichts mit Sicherheit zu tun, sondern ist ein einfaches Verstecken. Wenn ich diesen Brief jedoch in den Safe lege, Ihnen dann die Entwicklungspläne des Safes und noch hundert Safes gleicher Bauart mitsamt ihren Kombinationen gebe, so daß Sie mit Hilfe der weltbesten Safeknacker den Sperrmechanismus ausgiebig studieren können, aber immer noch nicht in der Lage sind, den Safe zu öffnen und den Brief zu lesen - dann ist das Sicherheit. |
In diesem Sinne,
raziel
_________________ JSXGraph
|
|
|