 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 27.02.2005, 16:46 Titel: |
|
|
Dusky_Joe hat Folgendes geschrieben: | Naja, ganz einfach...:
Code: |
INPUT "PASSWORT"; pass$
FOR byte = 1 TO len(pass$)
vsByte = (RND * 256 + ASC(MID$(pass$, byte, 1))) MOD 256
totalByte = totalByte + vsByte
NEXT
|
und schon erhältst du eine wunderbare Zahl, die (außer durch Brute force ) nicht mehr zu knacken ist. Da das Passwort recht lang sein kann, solltest du totalByte als LONG dimensionieren, wenn nicht sogar als Currency (oder so ähnlich, die Suffix ist auf jeden fall ein @.)
Wichtig ist aber, dass du dann in deinem Programm eine RANDOMIZE-Zeile hast. Und nicht RANDOMIZE TIMER, weil ja dann jedes mal was anderes rauskommt. Da kannst du dich jetzt entscheiden, ob die einfach im Programm eingebaut werden soll
(RANDOMIZE 1), oder ob das vom User als zweite sicherheit eingegeben werden soll (INPUT rand: RANDOMIZE rand).
Damit solltest du dann endgültig auf der sicheren Seite sein *g* |
schön und gut, aber "ab" und "ba" geben dasselbe Verschlüsselte zurück... |
|
Nach oben |
|
 |
code
Anmeldungsdatum: 19.01.2005 Beiträge: 154
|
Verfasst am: 27.02.2005, 17:07 Titel: |
|
|
wenn du in deinem Prog nun randomize 1 stehen hast ist diese verschlüsselung recht einfach zu knacken:
(ver$=Verschlüsseltes Passwort)
Code: |
FOR byte = 1 TO len(ver$)
vsByte = (ASC(MID$(pass$, byte, 1))-RND * 256) MOD 256
totalByte = totalByte + vsByte
NEXT |
ich meinte:
du zerlegst den Passwort-String in einzelne Zeichen, dann adierst du die ASCI- Codes jedes Zeichen. Am Ende hast du eine Zahl (=endzahl)
dann die Folgende Zeile:
und dann weiter wie es Dusky_Joe beschrieben hat.
Dann kommen bei RND immer andere Zahlen heraus.
Das Problem bei Randomize 1 ist, es kommen bei RND immer die gleichen zahlen heraus. wenn du nun diese Zahlen zum ASCI-Code des Passwortzeichen adierst, kannst du alles rückgänig machen indem du die werte einfach wieder subtrahierst.
Zu deinem Problem mit "ab" und "ba": wenn man die ASCI- Werte addiert kommt zwar die gleiche zahl heraus, mit der man Randomize initallisiert, aber das verschlüsselte Passwort ist nachher ein anderes.
Der erste Wert den RND zurückgibt, wird einmal zu "b" und einmal zu "a" adiert, bem zweiten genauso. du siehst also die verschlüsselten Paswörter sind verschieden. |
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 27.02.2005, 17:27 Titel: |
|
|
So, jetzt bin ich so weit:
Code: | INPUT "PASSWORT"; pass$
FOR byte = 1 TO LEN(pass$)
r% = ASC(MID$(pass$, byte, 1)) + r%
NEXT
RANDOMIZE r%
FOR byte = 1 TO LEN(pass$)
vsByte& = (RND * 256 + ASC(MID$(pass$, byte, 1))) MOD 256
totalByte& = totalByte& + vsByte&
NEXT
PRINT totalByte&
|
Jedoch ergeben "abc" und "cba" oder "bca" usw. den selben Rückgabewert...
Wenn ich es als String speichere werden sie unterschiedlich lange und es sind halt einfach die Zahlen an einer anderen Zeile...
Gibt es nicht eine Möglichkeit den String auf eine bstimmte länge zu beschränken? |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 27.02.2005, 17:32 Titel: |
|
|
Sebastian hat Folgendes geschrieben: | Hallo.
Füll doch einfach mir Nullen auf, um den String immer gleich lang zu haben.
Viele Grüße!
Sebastian |
aber wenn ich einen überlangen String erhalte?
Einfach ein paar Zeichen löschen  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.02.2005, 18:05 Titel: |
|
|
kannste machen, das merkt der User ja nicht. Musst nur immer die selben abschneiden, also zB immer die Hinteren oder immer die Vorderen die zu viel sind, dann kommt doch immer wieder der selbe Wert beim addieren raus. Also kein Problem  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 27.02.2005, 18:12 Titel: |
|
|
MisterD hat Folgendes geschrieben: | kannste machen, das merkt der User ja nicht. Musst nur immer die selben abschneiden, also zB immer die Hinteren oder immer die Vorderen die zu viel sind, dann kommt doch immer wieder der selbe Wert beim addieren raus. Also kein Problem  |
aber dann gibt es andere passwörter mit demselben wert... |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 27.02.2005, 21:41 Titel: |
|
|
Sebastian hat Folgendes geschrieben: | Hallo.
Das ist bei CRC und Konsorten aber überall so.
Viele Grüße!
Sebastian |
sicher nicht....
sonst bringt ja das nix...
so könnte jeder mit einem bestimmten, anderen passwort hier ins Forum rein... |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.02.2005, 22:05 Titel: |
|
|
gandro hat Folgendes geschrieben: | MisterD hat Folgendes geschrieben: | kannste machen, das merkt der User ja nicht. Musst nur immer die selben abschneiden, also zB immer die Hinteren oder immer die Vorderen die zu viel sind, dann kommt doch immer wieder der selbe Wert beim addieren raus. Also kein Problem  |
aber dann gibt es andere passwörter mit demselben wert... |
Die gibts eh.
"Hallo" und "Gbkmo" haben den selben wert wenn du die einzelnen Asciiwerte einfach nur addierst. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
code
Anmeldungsdatum: 19.01.2005 Beiträge: 154
|
Verfasst am: 28.02.2005, 14:26 Titel: |
|
|
wie schon gesagt, "ab" und "ba" haben zwar den selben wert, mit dem du randomize initallisierst, aber das verschlüsselte passwort ist nachher nicht dasselbe.
Ein Beispiel:
"a" hat den ASCI-Wert 97,
"b" hat den Wert 98,
-> Die initallisierst randomize mit 195
Mit folgendem Code:
Code: | randomize 195
x=int(rnd*256)
y=int(rnd*256) |
erhälst du für x=2 und für y=191
das verschlüsselte passwort ist bei:
"ab"=chr$(asc("a")+2)+chr$(asc("b")+191)
"ba"=chr$(asc("b")+2)+chr$(asc("a")+191)
Hier entsteht beides mal ein fehler weil die
asci-Werte bei chr$(asc("b/a")+191) mehr als 255 geben, aber das
kann behoben werden indem man vom davon
255 abzieht, es entsteht ein Wert wie wenn
man nach 255 wieder auf 0 springen würde.
Im endeffekt würde bei "ab" als verschlüsseltes Passwort "c$" rauskommen, bei "ba" würde "d!" herauskommen.
Ich hoffe es ist nun etwas klarer geworden, auch wenns etwas umständlich erklärt ist .
(übrigens, es kann sein das zwei verschiedene Passwörter das gleiche verschlüsselte Passwort ergeben, aber in der Praxis sieht es so aus, das die Wahrscheinlichkeit ein solches identisches Passwort zu finden sehr gering ist.) |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 28.02.2005, 16:55 Titel: |
|
|
Die Praxis heißt Brute force
Und das sollte ja das einzige Mittel sein, mit dem man das Passwort rausfinden können sollte, oder?
Wenn du willst, dass auch das nicht mehr möglich ist, musst du eben eine Wartezeit zwischen den Eingaben einbauen, oder so was wie beim Handy: Man kann 3 mal den PIN eingeben, dann kommt der PUK ran *g* _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 01.03.2005, 00:01 Titel: |
|
|
Hallo!
Soweit ich weiss, liefert RND zwar immer die gleichen Zufallszahlen, wenn mit dem selben Wert per RANDOMIZE initialisiert, aber nur nach einem Neustart. Man müsste also nach einer falschen Eingabe das Programm komplett beenden. Das könnte etwas nervig für den Anwender sein.
Im Prinzip reicht es ja schon, die ASCII-Werte der Zeichen des Originalpasswortes der Reihe nach zu multiplizieren, zu quadrieren oder was auch immer. Überschreitet das Ergebnis dieser Rechnung einen bestimmten Wert, wird es hinten abgeschnitten. Dadurch wird ein Zurückrechnen unmöglich gemacht, weil sich ja nicht mehr rekonstruieren lässt, wie oft oder was abgeschnitten wurde. Jedenfalls denke ich das - ich bin allerdings kein grosser Mathematiker...
Die Länge des entstehenden Schlüssels kannst du festlegen, indem du den Maximalwert setzt, ab dem das Ergebnis abgeschnitten werden soll.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 01.03.2005, 16:21 Titel: |
|
|
So einen RND-Reset bekommst du ganz einfach, indem du RND(-1) abfragst. Alles nachzulesen auf EPS's seite *g*
Das Problem bei einer Multiplikation ist - wie auch bei der einfachen Addition - dass man das selbe ergebnis für "ab" wie auch für "ba" erhält. Durch das Abschneiden kann das vllt unterbunden werden, aber dazu muss das passwort eine bestimmte länge haben, damit es überhaupt zugenschnitten werden kann *g*
So was aber dürfte schwer zurückzuverfolgen sein.
Code: |
FOR i = 1 TO LEN(pass$)
byte = ASC(MID$(pass$, i, 1))
endprodukt = (endprodukt * byte) MOD 256
NEXT
|
Praktisch bei dieser Methode ist, dass nur 1 Byte geschrieben werden muss. Wenn man die volle 'Kapazität' eines INTEGERs ausnutzen will, muss eben MOD 65536 dastehen... ach ne, MOD 32767, QB-Integer sind ja signed *g*
Möglich wäre auch, die werte voneinander Abzuziehen. Denn
ASC("a") - ASC("b")
ist nicht das selbe wie
ASC("b") - ASC("a")
Das Ergebnis wäre dann eben negativ. Also am besten so was wie MOD -32768 anfügen, oder so *g*
Sinnvoll wäre auch eine Kombination, also erst Plus, dann Minus, dann Mal, dann getelt...
Die frage bei der Division ist dann eben, ob es eine Integerdiv sein soll, oder eine normale. Bei der IntDiv ist das Problem, dass man schnell mal zwei erlaubte passworte bekommt...
(16 / = (11\ 5) = (12 \ 5) = ....
Aber inzwischen sollte es ziemlich schwer sein, das Passwort irgendwie nachzuvollziehen.... schließlich weiß der Hacker ja gar ned, wie es überhaupt erstellt wurde *g* _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
code
Anmeldungsdatum: 19.01.2005 Beiträge: 154
|
Verfasst am: 01.03.2005, 18:05 Titel: |
|
|
ich weiß gar nicht über was ihr redet, das mit ab und ba.
mag ja sein das das der Schlüssel-mit dem man randomize initalliisiert- der selbe ist aber das verschlüsselte Passwort-der String der am ende ensteht- ist doch völlig anders.
hab ich doch schon mal probiert zu beschreiben.(siehe oben)
oder ich hab immer noch nicht verstanden über was ihr redet  |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 01.03.2005, 19:00 Titel: |
|
|
Ach, so, du hast so was gemeint, wie:
Code: |
FOR i = 1 TO LEN(pass$)
byte = ASC(MID$(pass$, i, 1)) + RND * 256
RANOMIZE byte
NEXT
|
?
Ja, das wäre möglich, aber damit bist du beim Chew-Crypto, und der is knackbar, da du einen Festen Startwert hast. Und damit kommt dann immer die selbe zahlenfolge raus, die auch zurückverfolgbar ist.
wäre zwar ziemlich schwer zu knacken, ist aber möglich. _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
gandro

Anmeldungsdatum: 18.02.2005 Beiträge: 108 Wohnort: Schweiz
|
Verfasst am: 16.05.2005, 17:11 Titel: |
|
|
Ich weiss, der Thread ist etwas verstaubt aber das Problem habe ich leider immer noch nicht lösen können. Auf jedenfall ist mir eine neue Idee gekommen:
Bei der Passworterstellung der der Benutzer ein Passwort mit der maximalen Länge von 128 Zeichen erstellt. Danach wird das Passwort in der Hälfte (oder wenn ungerade halt etwas mehr oder weniger) halbiert und beide Strings mit Zusätzlichen Zeichen auf die Länge von ja 64 Zeichen aufgefüllt. Danach verschlüssele ich den ersten String mit dem zweiten.
Bei der Passwortabfrage wird dann dasselbe getan ausser mit dem Unterschied dass das verschlüsselte mit dem zweiten Teil des Passwortes "entschlüsselt" wird. Und wenn dann das Entschlüsselte + der Zweite String das Passwort ergeben war die Abfrage erfolgreich...
So müsste es doch eigentlich ein nicht-entschlüsselbares Passwort mit einer Konstanten Länge entstehen oder habe ich einen Denkfehler gemacht? |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|