![]() |
bitte verschlüsselungsfunktion bewerten/testen
ich hoffe mal das ist hier die richtige stelle für meine frage/bitte.
also ich habe für ein schulprojekt eine verschlüsselungsalgo programmiert und wüsste jetzt gern was ihr dazu sagt bzw. ob ihr verbesserungsvorschläge habt oder andere anregungen. jetzt zu der art der verschlüsselung: die verschlüsselung arbeitet mit einem passwort das prinzipiell natürlich beliebig lang sein kann, es wird intern jedoch in einen hash mit 32 zeichen umgewandelt(mit dem DEC von hagen) weshalb ein längeres passwort eigentlich keinen sinn macht. mit diesem passwort werden dann die ersten 32 zeichen des zu verschlüsselnden textes xor verknüpft. dann wird aus dem hash wiederum ein hash gebildet mit dem die nächsten 32 zeichen xor verknüpft werden. und das immer so weiter bis der text zu ende ist. für wie sicher haltet ihr diese verschlüsselung? habt ihr irgenwelche tipps? natürlich könnte ich auch die verschlüsselungsfunktionen nutzen die im DEC enthalten sind, aber wie schon gesagt es ist für die schule und da zählt halt das selbermachen. und hier noch die funktion:
Delphi-Quellcode:
procedure TForm1.codierenClick(Sender: TObject);
var s: string; //temp string des zu verschlüssenden textes i: Integer; j: Integer; n: Integer; Hpass: string; begin Hpass := THash_MD5.CalcString(pass, nil, fmtHEX); //pass = das passwort das eingegeben wurde if length(pass) > 10 then begin j := 0; s := Inhalt.Text; //Inhalt.Text = text feld mit text der verschlüsselt werden soll for i := 0 to length(s) do begin j := i mod length(Hpass); n := Ord(Hpass[j]); n := n mod 31; s[i] := char(n Xor Ord(s[i])); if (j = 0) and (i <> 0) then begin Hpass := THash_MD5.CalcString(Hpass, nil, fmtHEX); end; end; Inhalt.Text :=s; end else Inhalt.Text := 'Sie müssen ein Passwort mit mehr als 10 Zeichen eingeben'; end; |
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
2 sachen die mir aufgefallen sind: dein hash hat zwar immer 32 zeichen (egal wie lang das ursprungspassword ist) und genau da ist der erste haken ich kann da wunderbar mit bruteforce angreifen wenn das pass sehr kurz ist das nächste ist wohl, das dir das garnix bringt, wenn du den hash mit sich selbst hashest. das ist sicherlich kein problem für einen, der deinen ersten hash bruteforced hat, ihn nochmal zu hashen *g* |
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
|
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
Zitat:
|
Re: bitte verschlüsselungsfunktion bewerten/testen
hmm stimmt aber irgendwie hat mich das iritiert o_O
|
Re: bitte verschlüsselungsfunktion bewerten/testen
Naja sicher in welcher Beziehung?
-wenn der Angreifer darauf aus ist, das passwort zu entschlüsseln um dann eine umkehrfunktion deines algorithmus zu bauen, ist die methode genauso sicher/unsicher wie nur xor mit dem ganzen string und dem einen hash. Das liegt einfach daran weil alles eindeutig ab dem wissen über das pw ist. (vorrausgesetzt man kennt deine aglo, aber das dürfte mit google nicht so schwer werden) -wenn er direkt an den text will, weiß ich nicht genau was passiert. ich habe noch keinen hash selbst gehasht und dann geschaut, was dabei rauskommt bzgl häufigkeit. den ansatz könntest du dir ja evtl. selbstweiterdenken Gruß Thomas |
Re: bitte verschlüsselungsfunktion bewerten/testen
Hi David,
deine Verschlüsselung ist - und bleibt - eine XOR-Verschlüsselung, d.h. sie ist per se unsicher. Eine genaue Argumentation kann ich dir aber leider nicht liefern. Ich empfehle dir dafür auf Hagen zu warten. :mrgreen: Dass Xor jedoch unsicher ist, ist eine ziemlich weit verbreitete Meinung, die schon seine Richtigkeit hat. Das Hashen deines Passwortes bringt da rein gar nichts. Eher wird das ein Nachteil, wie supermuckl schon sagte. Aber der Hash alleine ändert nichts an der Sicherheit der Verschlüsselung. Und dass du dein Passwort zweimal hasht, ändert ebenfalls nichts. Du nimmst dir die ersten 32 Byte und crackst die, nimmst die nächste 32 Byte und so weiter und so fort. Wege und Möglichkeiten gibts immer. Also: ist und bleibt unsicher. ;) Chris |
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
und eine umkehrfunktion braucht man nicht weil mit der verschlüsselungsfunktion auch entschlüsselt wird und wenn man einen hash wieder hasht sollte das keine probleme ergeben schließlich arbeiten manche seiten im internet auch damit(heißt glaub ich one time password) Zitat:
|
Re: bitte verschlüsselungsfunktion bewerten/testen
hallo chris,
das eine xor verschlüsselung grundsätzlich unsicher ist stimmt glaube ich so nicht es kommt nur darauf an wie sie eingesetzt wird und ich meine da jetzt nicht nur den OTP. und ich glaube es ist nicht so leicht die ersten 32 zeichen zu cracken schließlich gibt es für die immerhin 2^255 möglichkeiten ich bin aber gern berait mich eines besseren belehren zu lassen david |
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
Zitat:
|
Re: bitte verschlüsselungsfunktion bewerten/testen
nur so ne frage kann man das auch wieder entschlüßeln?
|
Re: bitte verschlüsselungsfunktion bewerten/testen
Liste der Anhänge anzeigen (Anzahl: 1)
klar kann man das wieder entschlüsseln. mit der gleichen function plus passwort plus verschlüsseltem text
hier noch die exe zum testen: |
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
|
Re: bitte verschlüsselungsfunktion bewerten/testen
aja sorry..
es kommt eben nicht drauf an wie oft man ein xor einbaut und wie oft man das weiterverschlüßelt. ist der algorithmus bekannt kann man sowieso alles wieder entschluesseln. wichtig ist auch dass keine sturktur einer sprache in einem verschlüßelten text auffindbar ist. denn das kann man leicht mit autokorrelation des alphabets knacken. aber mehr weiss ich auch nicht dazu )) :cheers: Zitat:
|
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
|
Re: bitte verschlüsselungsfunktion bewerten/testen
das ist doch logisch. Wenn ich weiss dass du 100 meter gelaufen bist dann ins geschäft bist 50 bier gekauft hast und dann wieder nach hause gelaufen bist. warum soll ich dass ganze nicht umkehren können? der Rsa algorithmus ist z.b schwer umkehrbar und deshalb auch nicht so leicht zu knacken.
|
Re: bitte verschlüsselungsfunktion bewerten/testen
Angenommen ich XOR-verschlüssle einen beliebigen Text mit einem beliebigen Schlüssel. Der Algo ist bekannt. Und du probierst alle möglichen Schlüssel durch. Woher weißt du dass du den richtigen gefunden hast?
|
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
![]() |
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
und zwar könnte man einfach die häufigkeiten zählen jeder buchstaben und jetzt schaun ob die irgendwie mit dem muster der häufigkeiten der buchstaben einer sprache zusammenpassen. also so in der art. das ganze kann man dann sichernoch verbessern indem man sachen ausschließt usw. aber glaub mir das geht. :cheers: |
Re: bitte verschlüsselungsfunktion bewerten/testen
Was machst du bei Zufallstext oder binären Daten? :P
|
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
|
Re: bitte verschlüsselungsfunktion bewerten/testen
keine ahnung. aber eigentlich verschlüßelt man ja was damit es andere nicht lesen weil es geheim ist. was bringt dir da ein zufallstext? kjadjshiushfisfksfkjshfhiuak der kann ja keine informationen
weitergeben :wall: |
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
Zitat:
Alle zur Zeit verwendeten Verschlüsselungsalgorithmen sind bekannt. Genau genommen ist genau das gegenteil deiner Aussage richtig: Eine Verschlüsselung muss auch dann sicher sein, wenn der Algorithmus bekannt ist. Denn wenn die Sicherheit eines Algorithmusses darauf baut, dass der Algorithmus unbekannt ist, dann kannst du alles in die Tonne treten, wenn jemand den Algorithmus knackt. Zitat:
|
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
//Edit: Tjoar... Rechtschreibfehler sind ne feine Sache :D //Edit: Übrigens: Der Text ist nicht zufällig... Er hat ein Muster... |
Re: bitte verschlüsselungsfunktion bewerten/testen
Lucki genau das wollte ich sagen :)
wir können ja alle mal ein bier trinken gehen vielleicht gehts uns dann besser. ich geh jetzt jedenfalls :) :cheers: :cheers: :cheers: :cheers: :cheers: :cheers: |
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
Du hast eine 4 Bytes lange Nachricht "Test" und xor-verknüpfst diese mit einen Zufalls-Passwort. Dieses Passwort ist nicht reproduzierbar und wird nur einmalig benutzt. XOR ist eine math. Operation die mit 50% Wahrscheinlichkeit ein Bit kippt oder es beläst. Ergo aus Sicht der XOR Operation A = B xor C sind als Output A jede Bitkombination exakt gleichwahrscheinlich wie jede andere wenn entweder B oder C rein zufällig sind. Das bedeutet nun für einen Angreifer wenn er zb C nicht kennt aber A, das für B alle maximal möglichen Kombinationen exakt gleichwahrscheinlich sind. Oder anders ausgedrückt hast du A und kennst C nicht dann kannst du auch niemals B kennen. B könnte also "Test" sein, aber auch "Haus", "nicht", "aaaa", "0123" oder jede andere beliebige Kombination der maximal 2^(256 *4) Bit kombinationen. Der Angreifer kann also bei diesem OTP=One Time Pad genannten Verfahren niemals irgendwas knacken. Logisch, da jede der maximal möglichen Nachrichten verschlüsselt worden sein könnte und die richtige Nachricht nur mit dem richtigen Passwort restauriert wird. Ein falsches Passwort könnte die Nachricht "Haus" entschlüsseln, die der Angreifer eben nicht als richtig oder falsch identifizieren kann. Wenn es also zb. 150.000 verschiede deutsche 4 Zeichen Wörte gäbe dann wäre aus Sicht des Angreifers jedes dieser Wörter eine gültige Nachricht. Welche dieser Nachrichten er erzeugt hängt nur von seinem gewählten Test-Passwort ab und nicht mehr von der originalen Nachricht "Test". Ergo du erzählst Quatsch. Deshalb ist dieses Verfahren auch das einzigste als 100% sicher bekannte Verfahren. Mal abgesehen das es rein theoretischer Natur ist da unpraktikabel. Gruß Hagen |
Re: bitte verschlüsselungsfunktion bewerten/testen
hi hagen,
danke für deine antwort jetzt wurde endlich klarheit geschaffen. hast du dir schon meinen verschlüsselungsalgo den ich am anfang gepostet habe angeschaut? mich würde deine meinung dazu interressieren. danke schonmal im voraus, david |
Re: bitte verschlüsselungsfunktion bewerten/testen
Gerade eben;)
Das ist ein MDC = Message Digest Cipher, wenn auch deine Impelemntierung ziemlich unkonvetionell bzw. umständlich ist. Ein MDC benutzt das Passwort als Seed und erzeugt dann wiederholt durch hashen dieses Seeds einen Schlüsselstrom der mit XOR die Nachricht verschlüsselt. Ansich eine gute Idee da so sichergestellt wird das es keine Zurückrechenbaren Abhängigkeiten vom Passwort zum produzierten Schlüsselstrom gibt. Auf alle Fälle weit weit besser als Delphi Random zu benutzen. Aber wie überall gibts ein Problem: Einige MDC sind unsicher und wurden gebrochen, sogar ziemlich viele. Das lag aber meisten daran wir der Seed erneut in den neuen Seed per Hash eingerechnet wurde. MDC sind also in der Verrschlüsselung verpönt, man wendet sie deshalb nicht an weil es Verschlüselungsalgos. gibt die exakt auf die Aufgabe "Verschlüsseln" hin konstruiert und analysiert wurden. MDC mißbrauchen quasi eine Hashfunktion die ganz andere Aufgaben erledigen soll zur Konstruktion einer Verschlüsselung. Der Beweis der Sicherheit einer MDC ist weit schwieriger als bei einer gleichstarken Verschlüsselung. B.Schneier meint das man sie nicht anwenden sollte. Auf Grund deiner Art&Weise über String zu arbeiten, mod 31 durchzuführen, immer nur nach X zeichen des MDC zu berechnen würde ich meinen das einiges dadurch unsicherer wird, heist das dadurch Angriffsmöglichkeiten existieren werden die bei einem rein binär arbeitenden MDC nicht existent sind. Mache folgendes:
Delphi-Quellcode:
Gruß Hagen
var
Hash: THash; Counter: Cardinal; Register: array[0..19] of Byte; begin SetLength(Result, Length(Value)); Hash := THash_SHA1.Create; try Hash.Init; Hash.Calc(Password[1], Length(Password)); Hash.Done; for Counter := 1 to Length(Value) do begin Move(Hash.DigestKey^, Register, SizeOf(Register)); Hash.Init; Hash.Calc(Counter, Sizeof(Counter)); Hash.Calc(Register, SizeOf(Register)); Hash.Done; Byte(Result[Counter]) := Byte(Value[Counter]) xor PByte(Hash.DigestKey)^; end; finally Hash.Free; end; Result := StrToFormat(PChar(Result), Lenght(Result), fmtHEX); end; |
Re: bitte verschlüsselungsfunktion bewerten/testen
Hallo hagen,
danke für deine antwort, dann war meine methode also doch schonmal gar nicht so schlecht :-D Zitat:
ich habe da dann noch ein paar fragen zu deinem code (arbeite noch nicht lange mit delphi) Zitat:
freue mich schon auf die antworten :-D gruß, david |
Re: bitte verschlüsselungsfunktion bewerten/testen
Hi David,
hm, was soll ich jetzt antworten ? Das du als "Laie" dich mit der Materie beschäftigen willst ist immer eine gute Idee, aber um wirklich gute Algorithmen entwickeln zu können solltest du eben auch die Grundlagen beherrschen. Ich meine damit folgende Fragen:
Delphi-Quellcode:
Das ist eine Derefernezierung eines Pointers, schau in die Delphi Hilfe.
Move(Hash.DigestKey^, Register, SizeOf(Register)); // was bewirkt move hier genau und was macht dieses zeichen "^"?
Move() kopiert also den Inhalt des durch den Hash berechneten Wertes über die Daten in das temporäre Register.
Delphi-Quellcode:
Value ist dein String den du verschlüsseln möchtest und wird meisten als Parameter einer Funktion übergeben. Er könnte aber auch global sein oder lokal in einer nested Funktion oder dynamisch berechnet als Property eines Objektes das obigen Source in einer seiner Methoden enthält.
SetLength(Result, Length(Value)); //ich vermute mal, dass Value ein wert ist der
//der funktion übergeben wird oder der global ist?
Delphi-Quellcode:
.Init und .Done müssen aufgerufen werden um den Hash zu initialisieren und auch zu finalisieren. Das bedeutet das die Daten in Counter und Register bei mehrmaliger sequentieller Anwendung con .Calc() wie ein Datenblock aufgefasst werden. Man kann also damit verschiedene Daten so hashen als wären sie eines. .Done schließt diese Berechnung nun ab und berechnet somit den Digest des Hashs komplett.
Hash.Init; // warum muss man init mehrmal aufrufen?
// wird dadurch ein wert wieder zurückgesetzoder so ? Hash.Calc(Counter, Sizeof(Counter)); //wird hier der hash von counter an den von register angehängt oder Hash.Calc(Register, SizeOf(Register)); // werden sie erst verbunden und dann gehasht ? Hash.Done; // wie wird der hash vom passwort in diesen hash mit Da Register den vorherigen Hash Digest enthält und nun wieder in die Berechnung einfließt entsteht eine Kette von miteinander verknüpften und voneinander abhängigen Daten. Da das erste Glied der Kette unser Password ist werden alle Glieder der voneinander abhängigen Kette auch abhängig vom Passwort sein.
Delphi-Quellcode:
Ist ein Char wie in Result[Counter] typkompatibel zu einen einfach dereferenzierten Pointer ??
Byte(Result[Counter]) := Byte(Value[Counter]) xor PByte(Hash.DigestKey)^; //was bewirkt byte und pbyte?
Delphi-Quellcode:
Dann schau mal in Unit DECUtils.pas rein.
Result := StrToFormat(PChar(Result), Lenght(Result), fmtHEX); // was macht strtoformat? das finde ich in der hilfe nicht
Tja, das sind alles Fragen die einem daran zweifeln lassen das du mir deinem Werkzeug Delphi + DEC so richtig umgehen kannst. Das ist weiß Gott nicht persönlich gemeint sondern eher ein Fakt. Und Sicherheit in der Kryptographie wird nicht durch gute Algorithmen primär erzeugt, sondern EINZIGST das korrekte und fundierte WISSEN schafft die Sicherheit. Also auch das Wissen wie man seine Werkzeuge richtig benutzen muß. Hoffe das dieser "Dämpfer" nicht falsch bei dir ankommt ;) Gruß Hagen |
Re: bitte verschlüsselungsfunktion bewerten/testen
Nein der kommt nicht falsch an keine angst und danke für deine ausführliche antwort(wieder einmal) und deine direktheit
mir war von anfang an klar, dass ich kein verschlüsselung programmieren kann die für die öffentlichkeit sicher genug ist wie gesagt es handelt sich um eine arbeit für die schule und dieses programm soll eigentlich nur eine art beispiel darstellen und deshalb auch relativ einfach zu erklären sein. meine arbeit soll sich mit internetsicherheit, verschlüsselung und wodurch auch bei sicherer verschlüsselung sicherheitsrisiken entstehen konnen, befassen. außerdem soll die geschichte der crytographi grob dargestellt werden. du sieht also das dieses programm gar nicht den aktuellen sicherheitsstandarts endsprechen muss. weil ich mich aber selbst sehr für die materie interessiere werde ich mich auch weiterhin damit beschäftigen und vielleicht verstehe ich dann ja irgendwann mal die verschiedenen funktionen des DEC da du dich ja anscheinend sehr gut mit verschlüsselungen und ähnlichem auskennst, kannst du hier vielleicht ein paar links posten die mir bei meiner arbeit (und vielleicht auch beim verstehen des DECs) weiterhelfen? danke schon mal, gruß, david |
Re: bitte verschlüsselungsfunktion bewerten/testen
Zitat:
Links sind so'ne Sache, ich habe keine mehr. Meine Linksammlung die ich erstellt hatte als ich selber noch auf der Suche nach Wissen war habe ich durch den Test einer SyGate Firewall zerstört. Seitdem habe ich keine Links mehr gesammelt, konnte ja nicht wissen das die Kerio nicht solche Sachen macht wie die SyGate. Und viel wichtiger ist das ich im Grunde schon seit 2 Jahren garnicht mehr aktiv am DEC oder in der Kryptographie arbeite. Ich bin quasi fertig mit dem was ich wissen wollte, und beobachte zur Zeit nur die Entwicklung. Ok, von Zeit zu Zeit mache ich noch kleinere Arbeiten an meinem DECMath, aber das wars dann auch schon. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz