AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi bitte verschlüsselungsfunktion bewerten/testen
Thema durchsuchen
Ansicht
Themen-Optionen

bitte verschlüsselungsfunktion bewerten/testen

Ein Thema von Davidb · begonnen am 28. Nov 2005 · letzter Beitrag vom 30. Nov 2005
Antwort Antwort
Seite 3 von 4     123 4      
Daniel G
(Gast)

n/a Beiträge
 
#21

Re: bitte verschlüsselungsfunktion bewerten/testen

  Alt 28. Nov 2005, 21:39
Zitat von simonko:
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.
Entspräche das nicht einfach dem Caesar - Verfahren? Beim BND gibts 'ne schicke Aufgabe dazu...
  Mit Zitat antworten Zitat
simonko

Registriert seit: 2. Jun 2005
125 Beiträge
 
#22

Re: bitte verschlüsselungsfunktion bewerten/testen

  Alt 28. Nov 2005, 21:41
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#23

Re: bitte verschlüsselungsfunktion bewerten/testen

  Alt 28. Nov 2005, 21:44
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 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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#24

Re: bitte verschlüsselungsfunktion bewerten/testen

  Alt 28. Nov 2005, 21:45
Zitat von simonko:
kjadjshiushfisfksfkjshfhiuak der kann ja keine informationen
weitergeben
Sicher? In deinen Augen vielleicht nicht, aber wer weiß, was der Empfänger damit anfangen kann.

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

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

Registriert seit: 2. Jun 2005
125 Beiträge
 
#25

Re: bitte verschlüsselungsfunktion bewerten/testen

  Alt 28. Nov 2005, 21:49
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



  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#26

Re: bitte verschlüsselungsfunktion bewerten/testen

  Alt 29. Nov 2005, 08:34
Zitat von simonko:
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.
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
  Mit Zitat antworten Zitat
Davidb

Registriert seit: 11. Nov 2005
Ort: Hamburg
15 Beiträge
 
Delphi 2005 Personal
 
#27

Re: bitte verschlüsselungsfunktion bewerten/testen

  Alt 29. Nov 2005, 13:08
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
::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::Es gibt immer mehrere::::::::::::
:::::::::::::::Versionen von der:::::::::::::::
::::::::::::::::::::Wahrheit::::::::::::::::::::
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#28

Re: bitte verschlüsselungsfunktion bewerten/testen

  Alt 29. Nov 2005, 16:44
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
  Mit Zitat antworten Zitat
Davidb

Registriert seit: 11. Nov 2005
Ort: Hamburg
15 Beiträge
 
Delphi 2005 Personal
 
#29

Re: bitte verschlüsselungsfunktion bewerten/testen

  Alt 29. Nov 2005, 17:29
Hallo hagen,
danke für deine antwort, dann war meine methode also doch schonmal gar nicht so schlecht
Zitat:
wenn auch deine Impelemntierung ziemlich unkonvetionell bzw. umständlich ist.
kein wunder habe ich mir schließlich ausgedacht

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

gruß,
david
::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::Es gibt immer mehrere::::::::::::
:::::::::::::::Versionen von der:::::::::::::::
::::::::::::::::::::Wahrheit::::::::::::::::::::
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#30

Re: bitte verschlüsselungsfunktion bewerten/testen

  Alt 29. Nov 2005, 17:48
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:


   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.

      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 ??

 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz