AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Passwortlänge DEC 3.0 vs. DEC 5.1

Ein Thema von ringli · begonnen am 21. Apr 2006 · letzter Beitrag vom 22. Apr 2006
Antwort Antwort
ringli

Registriert seit: 7. Okt 2004
508 Beiträge
 
Delphi 11 Alexandria
 
#1

Passwortlänge DEC 3.0 vs. DEC 5.1

  Alt 21. Apr 2006, 21:16
Ich verwende das DEC um einen String zu verschlüsseln und wollte jetzt von Version 3.0 auf Version 5.1 aktualisieren. Den Funktionsaufruf habe ich entsprechend angepasst und grundsätzlich funktioniert das Ganze auch. Das einzige Problem ist das die angepasste Funktion keine Passwörter über 32 Zeichen erlaubt. Wenn ich nämlich ein Passwort >32 Zeichen verwende, erhalte ich vom Compiler nur den Fehler Keymaterial is to large as can be used, security issue. Mit dem alten DEC war ein Passwort >32 Zeichen kein Problem, also vermute ich mal das ich noch irgendwas falsch mache. Die Frage ist nur was ich falsch mache...

So sah die Funktion bei Verwendung des DEC 3.0 aus:
Delphi-Quellcode:
{*** Einen beliebigen String verschlüsseln ***}
function Encode(const Value : String): String;
begin
  with TCipher_Rijndael.Create('Passwort mit über 32 Zeichen ohne Probleme', nil) do
    try
      Result := CodeString(Value, paEncode, fmtMIME64);
    finally
      Free;
  end;
end;
So sieht die Funktion bei Verwendung des DEC 5.1 aus:
Delphi-Quellcode:
{*** Einen beliebigen String verschlüsseln ***}
function Encode(const Value : String): String;
begin
  with TCipher_Rijndael.Create do
    try
      Mode := cmCBCx;
      Init('Passwort bis maximal 32 Zeichen');
      Result := EncodeBinary(Value, TFormat_MIME64);
    finally
      Free;
    end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: Passwortlänge DEC 3.0 vs. DEC 5.1

  Alt 21. Apr 2006, 21:55
Du machst garnichts falsch !

Unter den vielen Änderungen im DEC 5.x verglichen zur Version 3.x sind im Besonderen die konzeptionellen Änderungen wichtig. Das sind Änderungen am Konzept zu Gunsten höherer Anwendungssicherheit (Fehlervermeidung durch den Programmierer) und die "Abspeckungs-" Maßnahmen zu nennen.

In Version 3.x gab es zb. zwei verschiedene Möglichkeiten einen Cipher zu initialisiren
a.) .Init()
b.) .InitKey()


Während .Init() die Standardmethode zur Initialisierung eines Ciphers ist und dabei zu langes Keymaterial einfach abgeschnitten hat, benutzte Methode .InitKey() eine interne Transformation per Hashfunktion vom Keymaterial um dieses auf die erforderliche Passwortgröße des Ciphers umzuwandeln.

Diese Umwandlung erfolgt heutzutage durch sogennate KDF = Key Derivation Function. Der Trend geht absehbar in diese Richtung. Allerdings sind die benutzten Verfahren so unterschiedlich das es faktisch unmöglich ist dise alle im DEC zu integrieren. Es entsteht eine Zwickmühle, entweder die vielen KDFs ins DEC integrieren und damit die Abspeckmaßnahmen zunichte machen und wieder eine "überfrachtete" Library zu bauen, oder einfach nur die notwendigen Mittel integrieren und den letzten Schliff muß der Endanwender in par Zeilen Sourcecode selber machen. Ich habe mich für letzteres entschieden, weil nur so die Zielsetzung das DEC 5.x einfacher werden sollte, erreichbar war.

Im DEC 5.x gibt es also die Methode .InitKey() nicht mehr. Methode .Init() und die ganze Benutzung der Cipher seber wird durch eine FSM=Finite State Machine nun zusätzlich abgesichert. Dh. es sind mehr Überprüfungen, Plausibilitätschecks im Version 5.x integeriert. Dies erhöht die Sicherheit vor Fehlbenutzungen der Cipher durch Endanwender wie Dich.

Du müsstest also die Art & Weise des Keysetups aus dem DEC 3.x in Version 5.x manuell nachbauen, oder aber wie ich es empfehlen würde darauf verzichten und neuere im DEC 5.x unterstütze Wege einschlagen.

Zb.

Delphi-Quellcode:
var
  Salt: Binary;
begin
  Salt := RandomBinary(16);
  with TCipher_Rijndael.Create do
  try
    Mode := cmCBCx;
    Init(THash_SHA1.KDFx(APassword, Salt, Context.KeySize));
    
    En/DecodeBlaBla();
  finally
    Free;
  end;
end;
Schaue dir auch mal des Project DECTest.dpr im Ordner \DECx\PART_I\DECtest\ an. Dort findest du einen Vorschlag wie man Dateien sicherer verschlüsseln kann.

Und noch eines ist ganz wichtig. In meinem Rijndael aus Version 3.x wurde noch das originale KeySetup des Rijndaels benutzt. Erst später in Version 5.1c (<- wichtig) habe ich das keySetup auf den neuesten Stand nach AES gebracht (wurde ja auch 3 -> dreimal -> im AES Standard geändert !!). Das bedeutet Rijndael im DEC 3.x ist nicht kompatibel im KeySetup zum DEC 5.1c !!

Gruß Hagen
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
508 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Passwortlänge DEC 3.0 vs. DEC 5.1

  Alt 22. Apr 2006, 02:17
Danke für die ausführliche Erklärung Hagen.

Ich habe meinen Code jetzt so abgeändert wie du es vorgeschlagen hast. Eine interessante Beobachtung habe ich noch gemacht. Nachdem ich jetzt die neue Version vom DEC verwende ist die Anwendung um über 200kB kleiner geworden.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: Passwortlänge DEC 3.0 vs. DEC 5.1

  Alt 22. Apr 2006, 14:00
Ja ich weis. Das liegt eben auch daran das durch das überarbeitete Klassenkonzeot im DEC 5.x einige Klassen fehlen, einige Exceptionklassen wegoptimiert wurden und ganz wichtig eben nicht mehr alle möglichen Algorithmen per Standard auch registriert werden. Dies reduziert dann beim Linken enorm den benötigten Speicherbedarf.

Und obwohl DEC 5.x also sparsammer ist ist die ereichbare Funktionalität eben höher und universeller als in Version 3.x (quasi mehr Inhalt bei weniger Masse).

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: Passwortlänge DEC 3.0 vs. DEC 5.1

  Alt 22. Apr 2006, 18:48
Wahrscheinlich stelle ich mich nur dumm an, aber Context gibt es bei mir nicht. Ich habe das DEC allerdings auch nicht als Komponente registriert, sondern binde nur die erfordlerlichen Units, also DECCipher und DECFmt zum en/decodieren ein.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Passwortlänge DEC 3.0 vs. DEC 5.1

  Alt 22. Apr 2006, 22:02
Zitat von Florian Bernd:
Wahrscheinlich stelle ich mich nur dumm an, aber Context gibt es bei mir nicht. Ich habe das DEC allerdings auch nicht als Komponente registriert, sondern binde nur die erfordlerlichen Units, also DECCipher und DECFmt zum en/decodieren ein.
Schau dir mal diesen Beitrag an. Da hat Hagen freundlicherweise ein komplettes Beispiel gepostet. Ich habe DEC auch lediglich über Library Pfad in Delphi eingebunden und es funktioniert auch. Der "Context" kommt von DECCipher.pas und wird zunächst algemein in der TDECCipher Klasse definiert:
Delphi-Quellcode:
type
//..

TDECCipher = class(TDECObject)
  private
    //..
  protected
    //...
  public
    //...
    class function Context: TCipherContext; virtual; abstract;
    //...
  published
    //..
  end;
Context ist somit von Typ "TCipherContext":
Delphi-Quellcode:
type
//..
TCipherContext = packed record
    KeySize: Integer; // maximal key size in bytes
    BlockSize: Integer; // mininmal block size in bytes, eg. 1 = Streamcipher
    BufferSize: Integer; // internal buffersize in bytes
    UserSize: Integer; // internal size in bytes of cipher dependend structures
    UserSave: Boolean;
  end;
Später wird es in den jeweiligen Verschlüsselungsvarianten das TCipherContext Record noch genauer spezifiziert.

jus
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:54 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