Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Perl][Delphi] Unterschiedliche Verschlüsselung (RC6) (https://www.delphipraxis.net/103050-%5Bperl%5D%5Bdelphi%5D-unterschiedliche-verschluesselung-rc6.html)

StarFire_ 9. Nov 2007 07:24


[Perl][Delphi] Unterschiedliche Verschlüsselung (RC6)
 
Hallo Welt,

Ich möchte meine Daten, die in Delphi als Resourcen eingebunden sind, vor dem Kompilieren verschlüsseln und zur Laufzeit wieder entschlüsseln. Als Algorithmus habe ich RC6 gewählt, da dieser schon anderweitig im Projekt verwendet wird.

Die Daten, die als Resourcen eingebunden werden, verschlüssle ich mit Perl (ActivePerl), mit dem Modul Crypt::RC6 von cpan:

Code:
#
# Create RC6 cipher
$cipher = new Crypt::RC6 $password;

#
# Read data, encrypt them and write them back
while ($readLen = read(CLEAR_FILE, $fileBuf, 16)) {
  if ($readLen < 16) {
    $fileBuf = pack("a16", $fileBuf);
  };
  $encryptedData = $cipher->encrypt($fileBuf);
  print ENC_FILE $encryptedData;
};
Beide Dateien sind mit binmode geöffnet worden. Auf der Delphi-Seite verwende ich den RC6 aus der DEC Komponente:
Delphi-Quellcode:
decAlg := TCipher_RC6.Create();
try
  decAlg.Init(password);
  Result := decAlg.DecodeBinary(sText);
finally
  decAlg.Free();
end; // try - finally
Das Problem: Ich kann die Daten in Delphi nicht mehr entschlüsseln. Überprüft habe ich:
  • Passworte: Beide identisch (32 Bytes)
  • Anzahl Runden bei der Verschlüsselung: bei beiden 20
  • Blockgrösse: bei beiden 16 Bytes

Was mache ich falsch, bzw. an welchen Stellen muss ich was ändern? Ist mein Padding in Perl falsch? Muss ich Delphi noch etwas setzen?

Gruss SF

StarFire_ 9. Nov 2007 09:09

Re: [Perl][Delphi] Unterschiedliche Verschlüsselung (RC6)
 
Zitat:

Zitat von StarFire_
Auf der Delphi-Seite verwende ich den RC6 aus der DEC Komponente:
Delphi-Quellcode:
decAlg := TCipher_RC6.Create();
try
  decAlg.Init(password);
  Result := decAlg.DecodeBinary(sText);
finally
  decAlg.Free();
end; // try - finally

Ich gebe mir gleich selbst Antwort: Die Ursprungsdaten, die verschlüsselt werden, sind Textdaten. In diesem Fall muss der Cipher Mode korrekt gesetzt werden auf cmECBx. Der Code sieht also wie folgt aus:

Delphi-Quellcode:
decAlg := TCipher_RC6.Create();
try
  decAlg.Mode := cmECBx;
  decAlg.Init(password);
  Result := decAlg.DecodeBinary(sText);
finally
  decAlg.Free();
end; // try - finally
Gruss SF

negaH 9. Nov 2007 09:41

Re: [Perl][Delphi] Unterschiedliche Verschlüsselung (RC6)
 
Also wenn du den Ciphermode auf cmECBx stellst geht es ?
Das ist übel !

ECB=Electronic Code Book sollte bei einer Blockverschlüsselung niemals für Produktivdaten benutzt werden, soll heisen deine Verschlüsselung mit ECB sind unsicher. Ok, exakter formuliert: es existieren praktische Angriffsmöglichkeiten auf deine verschl. Daten, sogar einige, nur weil der falsche Modus gesetzt ist. Schau mal ob du PHP dazu bekommst im CBC Modus zu arbeiten, oder CFB wäre noch besser. Also irgendein Feedback Modus muß es sein. Dieser verknüpft die einzelenen Datenblöcke während der Verschlüsselungen untereinander. Angenommen deine Textdatei ist eine Banküberweisung. Du hast schonmal so eine Überweisung abgesendet in der du mir 1 Euro überwiesen hast. Ich habe nun diese verschlüsselte Banküberweisnd abgefangen, die verschlüsselte. Nun überweist du 10000 Euro an deinen Autodealer und ich habe ebenfalls diese Nachricht abgefangen. Bei bestimmten Dateiaufbau der Banküberweisung kann ich nun aus den beiden verschlüsselten Nachrichten eine neue verschlüsslte Nachricht zusammenbauen ohen sie überhaupt entschlüsseln zu müssen. Das wäre dann eine Banküberweisung von 10000 Euro auf mein Konto.

Also, niemals ECB benutzen in einem Blockcipher. ECB-> Electronic Code Book, ist wie es der Name schon sagt nur ein Modus um Testvektoren zu erzeugen um die Arbeitsweise der Implementierung des Ciphers zu überprüfen. ECB lässt nur den reinen Cipher arbeiten ohne äußeren Feedbackmodus.

Zwei Ausnahmen gibt es für ECB:
1.) man baut seinen eigenen äußeren Feedbackmodus drumherum
2.) die Daten die man verschlüsseln möchte bestehen aus purem Zufall, zb. Schlüsselaustausch

Gruß Hagen

StarFire_ 12. Nov 2007 14:25

Re: [Perl][Delphi] Unterschiedliche Verschlüsselung (RC6)
 
Zitat:

Zitat von negaH
[snip]

Zwei Ausnahmen gibt es für ECB:
1.) man baut seinen eigenen äußeren Feedbackmodus drumherum
2.) die Daten die man verschlüsseln möchte bestehen aus purem Zufall, zb. Schlüsselaustausch

Gruß Hagen

Ich hab mir das Perl - Modul mal angesehen, da gibt es keine Möglichkeit, den Ciphermode einzustellen... Ich muss wohl den Feedback - Modus selber bauen (entweder aussen drumherum oder direkt im C-Code des Perl - Moduls (ist ja OpenSource))...
Eigentlich wollte ich das ja benutzen, damit ich die Sache nicht selbst implementieren muss :( Hat jemand einen Hinweis, wo ich etwas Dokumentation dazu finde? Danke.

Gruss SF


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 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