AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [Perl][Delphi] Unterschiedliche Verschlüsselung (RC6)
Thema durchsuchen
Ansicht
Themen-Optionen

[Perl][Delphi] Unterschiedliche Verschlüsselung (RC6)

Ein Thema von StarFire_ · begonnen am 9. Nov 2007 · letzter Beitrag vom 12. Nov 2007
Antwort Antwort
StarFire_

Registriert seit: 8. Nov 2007
Ort: Schiers
4 Beiträge
 
#1

[Perl][Delphi] Unterschiedliche Verschlüsselung (RC6)

  Alt 9. Nov 2007, 08:24
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
  Mit Zitat antworten Zitat
StarFire_

Registriert seit: 8. Nov 2007
Ort: Schiers
4 Beiträge
 
#2

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

  Alt 9. Nov 2007, 10:09
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
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

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

  Alt 9. Nov 2007, 10:41
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
  Mit Zitat antworten Zitat
StarFire_

Registriert seit: 8. Nov 2007
Ort: Schiers
4 Beiträge
 
#4

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

  Alt 12. Nov 2007, 15:25
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
  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 18:48 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