Thema: Delphi Dateien verschlüsseln

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

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

Re: Dateien verschlüsseln

  Alt 10. Mai 2005, 04:43
Delphi-Quellcode:
function XOR_KeyGen( const Password : String ; const KeySize : Integer ) : String;
var
  PassSum : Integer;
  Loop : Integer;
  Key : String;
begin
// 1.)
  PassSum := 0;
  for Loop := 1 to Length( Password ) do
    Inc( PassSum , Ord( Password[Loop] ) );

// 2.)
  Randomize;
// 3.)
  RandSeed := PassSum;

// 4.)
  Key := '';
  for Loop := 1 to KeySize do
    Key := Key + IntToStr( Random(10) );

  Result := Key;
end;
So nun zur Analyse deines Keysetups:

bei 1.) reduzierst du die Komplexität des übergeben Schlüssels auf 32 Bit. Angenommen man übergibt einen Schlüssel von 128 Bit länge dann wäre es 1 aus 2^128 möglichen Schlüsseln. Bei Punkt 2.) steht in PassSum=32Bit nur noch 1 aus 2^32 möglichen PassSum Werten drinnen. Ergo: es gehen wertvolle Schlüsselinformationen verloren und die effektive Sicherheit beträgt nur 32 Bit.

bei 2.) rufst du unnötiger weise Randomize() auf obwohl bei 3.) RandSeed := PassSum gesetzt wird. Das gibt mir zwei wichtige Hinweise: Du hast keine Ahnung von Programmierung, ergo kein fundiertes Fachwissen oder du arbeitest schlampig und hast vergessen deinen Testcode zu entfernen. Beides reduziert mein Vertrauen in deine Arbeit auf Null. Sorry das ich das so hart und deutlich sagen muß, aber es ist leider nun mal fakt. Und du kannst nichts lernen wenn man keine ehrliche Kritik übt. Nehme mein Aussagen also sportlich und nicht persönlich, bitte

bei 4.) setzt du nun noch einen drauf. Zuerst hast du die Schlüsselkomplexität künstlich reduziert und dann expandierst du virtuell wieder die Schlüssellänge damit es nach mehr aussieht. Solche Vorgehensweisen werden üblicherweise immer dann benutzt wenn der Entwickler des Algorithmus absichtlich die Sicherheit reduzieren will oder muß. "Muss" auf Grund von Exportbestimmungen oder weil er für verschiedene Organsitationen arbeitet die kein Interesse an echter Sicherheit für uns haben. Man könnte sowas Sabotage nennen, oder Unterminierung der realen Sicherheit. Denn lange Schlüssel bedeuten nicht zwangsläufig mehr Sicherheit.

Die effektive Komplexität des so erzeugten Schlüssel ist maximal 32 Bit groß. Also selbst wenn du mit KeySize = 1024 = 8192 Bits arbeitest so kannst du durch die Benutzung von Random()->RandSeed nur maximal 2^32 verschiedene Schlüssel aus einer Menge von 2^8192 real möglichen Schlüssel erzeugen. Ergo: aus einem verfügbaren Schlüsselraum von 2^8192 Schlüsseln werden maximal nur 2^32 mögliche Schlüssel benutzt. Man verschenkt also 2^(8192-32) = 2^8160 Schlüssel Kombinationen. Je größer nun KeySize wird desto schlimmer wird dieses Mißverhältnis.

Gruß Hagen
  Mit Zitat antworten Zitat