Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi bitte verschlüsselungsfunktion bewerten/testen (https://www.delphipraxis.net/57921-bitte-verschluesselungsfunktion-bewerten-testen.html)

Davidb 28. Nov 2005 18:45


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;

supermuckl 28. Nov 2005 19:05

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

für wie sicher haltet ihr diese verschlüsselung
meiner meinung nach aus dem gefühl heraus unsicher - kann dir aber nicht genau sagen wie man es anderst machen sollte

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*

Sharky 28. Nov 2005 19:22

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

Zitat von supermuckl
... dein hash hat zwar immer 32 zeichen (egal wie lang das ursprungspassword ist) und genau da ist der erste haken

Das ist eigentlich bei jedem Hash so oder? Und 32 Byte sind dann ein 256 Bit Hash. Um da eine Kollision zu bekommen wird dein Rechner einige hunder Jahre rechnen müssen.

Davidb 28. Nov 2005 19:36

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

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
naja das ist doch immer so, dass man wenn das pass sehr kurz ist es schnell herausbekommt

Zitat:

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*
klar kann ihn jemand der ihn schon hat nochmal hashen, aber er bringt mir schon etwas, weil man den text jetzt nicht mehr durch häufikeitsanalyse entschlüsseln kann. es wird ja nach 32 zeichen immer mit einem "neuem" passwort verschlüsselt

supermuckl 28. Nov 2005 20:01

Re: bitte verschlüsselungsfunktion bewerten/testen
 
hmm stimmt aber irgendwie hat mich das iritiert o_O

tn249 28. Nov 2005 20:02

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

CalganX 28. Nov 2005 20:24

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

Davidb 28. Nov 2005 20:35

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

-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.
was meinst du damit das passwort entschlüsseln. gibt es eine möglichkeit (außer bruteforcen) das passwort herauszubekommen.

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:

Das liegt einfach daran weil alles eindeutig ab dem wissen über das pw ist.
aber das ist doch immer so oder nicht? ich mein wenn du für einen verschlüsselten text hast und das passwort kannst du ihn auch entschlüsseln (vorausgesetzt du kennst den algo)

Davidb 28. Nov 2005 20:42

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

Luckie 28. Nov 2005 20:47

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

Zitat von Chakotay1308
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.

Zitat:

Dass Xor jedoch unsicher ist, ist eine ziemlich weit verbreitete Meinung, die schon seine Richtigkeit hat.
Generell wäre ich mit solchen Verallgemeinerungen immer sehr vorsichtig. Wenn man XOR richtig implementiert und gewisse Bedingungen erfüllt sind, ist eine XOR Verschlüsselung sehr sicher. Näheres kann dir Hagen dazu sagen.

simonko 28. Nov 2005 20:50

Re: bitte verschlüsselungsfunktion bewerten/testen
 
nur so ne frage kann man das auch wieder entschlüßeln?

Davidb 28. Nov 2005 20:57

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:

St.Pauli 28. Nov 2005 21:03

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

Zitat von Luckie
Wenn man XOR richtig implementiert und gewisse Bedingungen erfüllt sind, ist eine XOR Verschlüsselung sehr sicher.

Genau! XOR kann unknackbar sein, wenn man, wie du sagst, XOR richtig anwendet. XOR angewandt auf ein Text, welcher mit einem echten Zufallspasswort, was nur einmal verwendet wird und die gleiche Länge wie der Text hat, verschlüsselt wird, ist unkackbar.

simonko 28. Nov 2005 21:06

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:

Genau! XOR kann unknackbar sein, wenn man, wie du sagst, XOR richtig anwendet. XOR angewandt auf ein Text, welcher mit einem echten Zufallspasswort, was nur einmal verwendet wird und die gleiche Länge wie der Text hat, verschlüsselt wird, ist unkackbar.
vigenere ist auch unknackbar wenn das password so lang ist wie der text :))

Tubos 28. Nov 2005 21:11

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

ist der algorithmus bekannt kann man sowieso alles wieder entschluesseln.
Wie kommst du da drauf?

simonko 28. Nov 2005 21:19

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.

Tubos 28. Nov 2005 21:21

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?

Daniel G 28. Nov 2005 21:22

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Chakotay1308
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.

Zitat:

Dass Xor jedoch unsicher ist, ist eine ziemlich weit verbreitete Meinung, die schon seine Richtigkeit hat.
Generell wäre ich mit solchen Verallgemeinerungen immer sehr vorsichtig. Wenn man XOR richtig implementiert und gewisse Bedingungen erfüllt sind, ist eine XOR Verschlüsselung sehr sicher. Näheres kann dir Hagen dazu sagen.

Hat er bereits:

In diesem Beitrag

simonko 28. Nov 2005 21:34

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

Zitat von Tubos
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?

wenn für jeden buchstaben immer ein andere sobstituiert wird. werden die häufigkeiten der buchstaben einfach 24 mal verschoben. das muster dass am meisten dazu passt wird dann genommen. da dass hier nicht der fall ist könnte man anders vorgehen:
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:

Tubos 28. Nov 2005 21:37

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Was machst du bei Zufallstext oder binären Daten? :P

Daniel G 28. Nov 2005 21:39

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

Zitat von simonko
Zitat:

Zitat von Tubos
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?

wenn für jeden buchstaben immer ein andere sobstituiert wird. werden die häufigkeiten der buchstaben einfach 24 mal verschoben. das muster dass am meisten dazu passt wird dann genommen. da dass hier nicht der fall ist könnte man anders vorgehen:
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:

Entspräche das nicht einfach dem Caesar - Verfahren? Beim BND gibts 'ne schicke Aufgabe dazu...

simonko 28. Nov 2005 21:41

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:

Luckie 28. Nov 2005 21:44

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

Zitat von simonko
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?

Und
Zitat:

der Rsa algorithmus ist z.b schwer umkehrbar und deshalb auch nicht so leicht zu knacken.
Das sind zwei ganz unterschiedliche Aussagen. Bekannt <> schwer umkehrbar!

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:

Zitat von St.Pauli
XOR angewandt auf ein Text, welcher mit einem echten Zufallspasswort, was nur einmal verwendet wird und die gleiche Länge wie der Text hat, verschlüsselt wird, ist unkackbar.

:mrgreen:

Daniel G 28. Nov 2005 21:45

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

Zitat von simonko
kjadjshiushfisfksfkjshfhiuak der kann ja keine informationen
weitergeben :wall:

Sicher? In deinen Augen vielleicht nicht, aber wer weiß, was der Empfänger damit anfangen kann.

//Edit: Tjoar... Rechtschreibfehler sind ne feine Sache :D

//Edit: Übrigens: Der Text ist nicht zufällig... Er hat ein Muster...

simonko 28. Nov 2005 21:49

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:

negaH 29. Nov 2005 08:34

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

Zitat von simonko
Zitat:

Zitat von Tubos
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?

wenn für jeden buchstaben immer ein andere sobstituiert wird. werden die häufigkeiten der buchstaben einfach 24 mal verschoben. das muster dass am meisten dazu passt wird dann genommen. da dass hier nicht der fall ist könnte man anders vorgehen:
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:

Quatsch.
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

Davidb 29. Nov 2005 13:08

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

negaH 29. Nov 2005 16:44

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:
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;
Gruß Hagen

Davidb 29. Nov 2005 17:29

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:

wenn auch deine Impelemntierung ziemlich unkonvetionell bzw. umständlich ist.
kein wunder habe ich mir schließlich ausgedacht :oops:

ich habe da dann noch ein paar fragen zu deinem code (arbeite noch nicht lange mit delphi)


Zitat:

Delphi-Quellcode:
var
  Hash: THash;
  Counter: Cardinal;
  Register: array[0..19] of Byte;
begin
  SetLength(Result, Length(Value)); //ich vermute mal, dass Value ein wert ist der
                                   //der funktion übergeben wird oder der global ist?
  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)); // was bewirkt move hier genau und was macht dieses zeichen "^"?
      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 einbezogen?
      Byte(Result[Counter]) := Byte(Value[Counter]) xor PByte(Hash.DigestKey)^; //was bewirkt byte und pbyte?
    end;
  finally
    Hash.Free;
  end;  
  Result := StrToFormat(PChar(Result), Lenght(Result), fmtHEX); // was macht strtoformat? das finde ich in der hilfe nicht
end;

ich hab die fragen mal als kommentare in den code eingefügt. ich hoffe es sind nicht zu viele
freue mich schon auf die antworten :-D

gruß,
david

negaH 29. Nov 2005 17:48

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:
   Move(Hash.DigestKey^, Register, SizeOf(Register)); // was bewirkt move hier genau und was macht dieses zeichen "^"?
Das ist eine Derefernezierung eines Pointers, schau in die Delphi Hilfe.
Move() kopiert also den Inhalt des durch den Hash berechneten Wertes über die Daten in das temporäre Register.

Delphi-Quellcode:
 SetLength(Result, Length(Value)); //ich vermute mal, dass Value ein wert ist der
                                   //der funktion übergeben wird oder der global ist?
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.

Delphi-Quellcode:
      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
.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.

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:
      Byte(Result[Counter]) := Byte(Value[Counter]) xor PByte(Hash.DigestKey)^; //was bewirkt byte und pbyte?
Ist ein Char wie in Result[Counter] typkompatibel zu einen einfach dereferenzierten Pointer ??

Delphi-Quellcode:
 Result := StrToFormat(PChar(Result), Lenght(Result), fmtHEX); // was macht strtoformat? das finde ich in der hilfe nicht
Dann schau mal in Unit DECUtils.pas rein.

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

Davidb 29. Nov 2005 21:23

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

negaH 30. Nov 2005 01:47

Re: bitte verschlüsselungsfunktion bewerten/testen
 
Zitat:

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?
Fragen kannst du hier stellen und so muß ich eventuell nicht Fragen doppelt beantworten.
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