Alternative zu MD5, denkfehler?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Suco-X

Betreff: Alternative zu MD5, denkfehler?

BeitragDi, Sep 07, 2004 6:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin Blitzer.
Mir ist da gerade eine Idee gekommen von der ich mal das Pro und Kontra
hier Diskutieren möchte. Ich nehme hierbei mal die Passwort Situation als Beispiel. Wer Daten von anderen Benutzern z.b. bei einem Forum zu Gesicht bekommt sollte diese auch gut schützen. Das wird üblicherweise mit MD5 gemacht. Nur vergrößert die MD5 Version aber auch den String. Und ich brauche eine Variante die klein und Relativ sicher ist. Außerdem mag ich die Strings nicht vergleichen, zu lahm.
Da ist mir halt gerade noch eine andere Idee gekommen, ich finde den Denkfehler aber einfach nicht. Das ganze beruht auf einem Relativ einfachen Prinzip, zu einfach meiner Meinung nach.
Jedenfalls wird der String Buchstabe für Buchstabe auseinandergepflückt und die Asciis werden zu einem Integer dazu Addiert. Am ende hat man einen 4 byte großen Wert der aber nicht mehr zu entschlüsseln ist meiner Meinung nach. Er kann nur zum vergleich dienen. Nun, ich bin aber Relativ müde und geschafft und finde den Harken nicht.
Aber Theoretisch sollte man es einfach nicht mehr Rückgängig machen können. Wofür ist MD5 also gut wen diese schlichte Version gleiches tut, weniger Platz wegnimmt und schneller ist.
Habe zum Verständniss auch direkt kleinen Code dazu gebastelt.
Code: [AUSKLAPPEN]

teststring$ = "xyzpasswort"

testwert= StringToInt(teststring)

Print "Integer Wert: "+testwert

Print "Vergleich wird gestartet........"

check = StringVergleich(teststring,testwert)

If check
   Print "Wert stimmt überein!!"
Else
   Print "Wert stimmt nicht überein..."
EndIf


WaitKey()



Function StringVergleich(fp_string$,fp_wert)
Local If_tempwert = StringToInt(fp_string)

If If_tempwert =fp_wert
   Return True
EndIf

Return False
End function


Function StringToInt(fp_string$)
Local if_tempbyte = 0
Local If_finalinteger = 0


For i = 1 To Len(fp_string)
   if_tempbyte = Asc(mid(fp_string,i,1))
   If_finalinteger = If_finalinteger+if_tempbyte
Next

Return If_finalinteger
End function


Dann lasst mal Pro und Kontra hören.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Dreamora

BeitragDi, Sep 07, 2004 6:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Pro: Relativ simpel und erweiterbar

Kontra: Eine sehr unsichere Variante für wichtige Daten wie Passworte, da es zuviele Möglichkeiten gibt das gleiche Passwort zu erzeugen.


MD5 ist dieser Variante deshalb überlegen, weil es die Anzahl möglicher Kollisionen ( also Anzahl von verschiedene Eingabe-Passworte mit gleichem verschlüsselten Passwort ) stark reduziert und das ist bezüglich Schutz vor Bruteforceprogrammen von elementarer Bedeutung.


[EDIT]

Sehe übrigens das Problem an MD5 nicht. Es kann nicht entschlüsselt werden, da es kein eindeutiges Verfahren ist.
Das einzige was man tun kann, ist mittels Bruteforcemethoden eine funktionierende Kombination erzeugen.
Für Onlineprodukte empfielt es sich sogar in gegebenen Masse, eine relativ "plumpe" Keyverschlüsselung zu verwenden, damit potientielle Hacker "unendlich" viele Keys erzeugen können ( zb zur Installation des Programmes ), diese jedoch danach beim Rückcheck mit dem Netz nicht in der Liste der vergebenen Keys steht und ein Autouninstall gleich angehängt wird. Wenn die User 50000 Mal XXX MB installieren müssen bis sie einen wirklich existierenden Key haben, hängt es ihnen noch schnell Mal aus Wink

Ein Beispiel für eine solche Art von Sicherung ist Blizzards Battle.Net, welche einen verhältnismässig einfach zu knackenden CD Key hat, deren Onlinezugang jedoch eine Liste aller wirklich existierenden Keys und welcher auf dem Gateway gerade in Benutzung ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am Di, Sep 07, 2004 6:38, insgesamt einmal bearbeitet
 

lettorTrepuS

BeitragDi, Sep 07, 2004 6:23
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Suco-X

Betreff: ......

BeitragDi, Sep 07, 2004 6:45
Antworten mit Zitat
Benutzer-Profile anzeigen
@Dreamora : Das Problem mit Md5 ist, das es für Passwörter kein Problem ist. Jedoch für das eigentliche was ich vorhab muss wirklich jedes byte gespart werden und die Geschwindigkeit muss auch stimmen. Ich brauche nur einen vergleich, der muss nichtmal verschlüsselt sein.

Ich habe aber den Nachteil entdeckt Laughing
Strings müssen nicht zwingend gleich sein, sie müssen nur die gleichen Buchstaben enthalten. "test" wäre also genau wie "stet" etc.
Mal schauen ob mir dazu noch was einfällt.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

BladeRunner

Moderator

BeitragDi, Sep 07, 2004 6:58
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmm... Multipliziere jeden Asciiwert mit seiner Position und addiere sie dann.
"test" ->116*1+101*2+115*3+116*4=817
"stet" ->115*1+116*2+101*3+116*4=844
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Dreamora

BeitragDi, Sep 07, 2004 7:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Suco: das wäre ja noch ein problem ... problematisch wäre zb dass mit deiner methode Test = Tfss = Tgrs = Thrr etc.

Die Variante mit der Multiplikation gemäss Position im String wäre da schon eine erste Abhilfe. Würde viele der jetzigen Möglichkeiten loswerden ( zb die von mir oben würden alle wegfallen da sie verschiedene verschlüsselte Resultate hätten ).
Eigentlich handelt es sich hierbei eigentlich schon nimmer um Verschlüsselung etc sondern nur noch Hashing, da du ja nur die Ausgabewerte vergleichst und kein Ver- und Entschlüsseln betreibst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Suco-X

Betreff: .......

BeitragDi, Sep 07, 2004 7:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Klappt nun alles soweit.
Danke für den Anstoß, BladeRunner Wink
Das ganze ist wie gesagt auch nicht für das verschlüsseln geplant gewesen, ist nur als Beispiel genannt. Es ist nur ein Nebeneffekt. Ich brauche nur die Möglichkeit einen String für einen späteren vergleich platzsparend zu speichern. Und das klappt ja mittlerweile und Nachteile sehe ich im mom nicht mehr. Ein bischen abgewandelt sehe ich es trotzdem als Alternative zur Einweg Zerstörrung, auch wen es zu Simple wirkt.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

David

BeitragDi, Sep 07, 2004 8:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

@ShadowTurtle
Code: [AUSKLAPPEN]

Für Verschlüsseln: 1. MD5, 2. String Komprimierung, 3. XOR
Für Entschlüsseln: 1. XOR, 2. String Komprimierung, 3. MD5


Da wirst du bei der Entschlüsselung nicht besonders weit kommen, denn MD5 ist kein Verschlüsselungsalgorithmus sondern ein Hashalgorithmus und damit unumkehrbar!
Aber du kannst den String komprimieren und mit XOR Verschlüsseln, soweit klappts dann bestens. Wink

grüße
http://bl4ckd0g.funpic.de
 

lettorTrepuS

BeitragDi, Sep 07, 2004 8:17
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

David

BeitragDi, Sep 07, 2004 8:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Jep, abhängig von der länge des Textes schon ein paar Jährchen und länger! Smile

grüße
http://bl4ckd0g.funpic.de

TheShadow

Moderator

BeitragDi, Sep 07, 2004 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
1) MD5 ist alt und gillt als unsicher, es gibt einen trick das ganze zurückzurechnen - dazu sind weniger möglichkeiten als bei brute force nötig. Man erhält dann mit höchster sicherheit nicht das original-Passwot, sondern ein "kollidiertes" - was ausreichen würde um z.B. in ein account zu gelangen... Es wird empfohlen SHA1 zu nutzen. Hab aber gehört, dass es da angeblich auch möglich ist das ganze zu knacken - Details wurden bisher noch nicht genannt - es gibt aber auch noch sicherere SHA-Nachfolger, die sehr lange hash-werte erzeugen...

2) Wenn du INT willst, warum nimmst du du dann nicht CRC32 ??? Das ist zudem viel viel schneller als MD5 und Co - aber auch so sicher wie ein kaputtes schloß - darum wird es nur benutzt um Dateien schnell zu vergleichen...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

David

BeitragDi, Sep 07, 2004 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Oder Adler32...

@TheShadow:
Von den Trick hab ich noch nichts gehört...
Sehr interessant!

Sicherer kanns werden, wenn du MD5 mit diversen anderen Schutzvorkehrungen koppelst! Hotmail hat das bei seinem Logginvorgang recht gut hinbekommen, wie ich finde.

grüße
http://bl4ckd0g.funpic.de

Cornelius

BeitragDi, Sep 07, 2004 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Denkfehler: Einer der Besonderheiten an Hash-Algorithmen ist, dass es praktisch unmöglich ist, ein String zu erzeugen, welcher den selben (MD5-)Wert zurückgibt.

Bei deiner Variante (und auch noch bei der Verbesserung von BladeRunner) kann man, wenn man die Zahl kennt, ein gültiges Passwort generieren - es ist sehr unwarscheinlich, dass es das gleiche ist, was ursprünglich eingegeben wurde, aber das ist ja egal.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group