Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   3DES mit DEC (Delphi Encryption Compendium) (https://www.delphipraxis.net/162385-3des-mit-dec-delphi-encryption-compendium.html)

Dano 20. Aug 2011 04:02

3DES mit DEC (Delphi Encryption Compendium)
 
hallo

ich suche die möglichkeit ein "3DES" mit "2-Key"(2mal56bit=112bit) zu entschlüsseln und auch zu verschlüsseln

hab jetzt einiges mit googel durch, aber da scheint es unterschiede zwischen DEC 5.1 und 5.2 zu geben

habe mir auch alles in part I angesehen und nach "DEC Tutorial" gesucht...aber leider bahnhof
register... registerclass
kann der ganzen sache kein "AHA"-effekt entreißen

ok, um es kurz zu umschreiben

was brauch ich alles um mit DEC den 3DES zu meistern?

2 functionen:

function EnCrypt3DES(Input, Passwort: String): String;
function DeCrypt3DES(Input, Passwort: String): String;

aso, ich bin auf CBC angewiesen und 112bit passwort
ich habe D7 (nicht 2007)

hoffe das geht mit DEC, meine kolegen die C,C++ oder C# benutzen haben auch probleme aber leider mehr sourcecode im internet :(

dankbar für hilfe

mfg Dano

cookie22 20. Aug 2011 08:06

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Benutz mal die SuFu, zum DEC steht hier wirklich massig im Forum.

Warum benutzt du 3DES? DES ist outdated.

r2c2 20. Aug 2011 09:15

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Zitat:

Zitat von cookie22 (Beitrag 1118219)
Warum benutzt du 3DES? DES ist outdated.

Verwechsele 3DES nicht mit DES. DES ist nicht nur outdated, sondern geknackt. 3DES (also drei mal DES hintereinander) ist nach aktuellem Stand sicher und wird auch noch häufig eingesetzt. Beispielsweise in Geldautomaten...


mfg

Christian

cookie22 20. Aug 2011 10:00

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Zitat:

Zitat von r2c2 (Beitrag 1118222)
Zitat:

Zitat von cookie22 (Beitrag 1118219)
Warum benutzt du 3DES? DES ist outdated.

Verwechsele 3DES nicht mit DES. DES ist nicht nur outdated, sondern geknackt. 3DES (also drei mal DES hintereinander) ist nach aktuellem Stand sicher und wird auch noch häufig eingesetzt. Beispielsweise in Geldautomaten...


mfg

Christian

Das weiss ich, 3DES war aber nur ein Versuch DES wieder halbwegs tauglich zu machen. Es gibt da wesentlich besseres und in sicht auf die Zukunft sollte man doch was anderes wählen.

Dano 20. Aug 2011 22:49

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
danke, habe es selber hinbekommen nachdem ich mir den ganzen tag den quellcode von DEC angeschaut habe^^

die probleme mit dem padding habe ich auch hinbekommen

jetzt habe ich nur ein anderes problem
wenn ich mit cryptool die gegenprobe mache stimmt immer der erste 8byte block nicht
nach 8 byte sind beide synchron zu einander

und wenn ich das selbe mit cryptool verschlüssel und dann in delphi decodiere habe ich für den ersten 8byte block denau die selben hyroglyphen

mfg Dano

WM_CLOSE 20. Aug 2011 23:16

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
sieh dir die Parameter die du der Verschlüsselung mitgibst nochmal geanu an. Ich hatte vor eineiger Zeit das selbe Problem. K-A. welcher es war:oops:

Dano 20. Aug 2011 23:34

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
hm, sind nur 2 parameter... init mit passwort und cmCBCx als mode

zumal ja der rest stimmt

aus '12345678901234567890'
wird 'xxxxxxxx901234567890'
wobei x für irgendwas steht

meine delphi fuktion für sich selber geht reibungslos das en- und de- coden
das selbe bei cryptool

nur das beide bei der verschlüsselung unterschiedliche ergebnisse liefern... padding habe ich schon ausgeschlossen

und wenn beide das verschlüsselte vom jeweils anderen entschlüsseln ist immer der doofe 8byte block der in beiden fällen auch noch gleich ist

weiß nicht ob cryptool noch was am ersten block manipuliert... zb ein seed oder sowas, aber das kann ich mir nicht vorstellen...

mfg Dano

himitsu 20. Aug 2011 23:46

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Zitat:

aber da scheint es unterschiede zwischen DEC 5.1 und 5.2 zu geben
Jupp, von den schnittstellen her, hätte die 5.2 wohl eher 6.0 heißen sollen. :angle2:

Nja, falls hier wirklich keiner mehr eine Lösung findet, dann nur nicht aufgeben und Ruhe bewahren.
Der Schöpfer vom DEC ließt hier öfters mal mit und wenn man etwas wartet, kommt da bestimmt nochmal eine Antwort.


So, blos daß wir jetzt nichts falsch verstehn:
Also das Ver-/Entschlüsseln innerhalb des DEC geht
und nur das Ver-/Entschlüsseln zwischen DEC und diesem Crypttool will nicht so richtig?

WM_CLOSE 21. Aug 2011 01:02

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Hmmm.... Das erste Byte eines String ist doch das Längenbyte, oder? kann das damit zusammenhängen?

Dano 21. Aug 2011 01:33

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
ja, ich bin immer ruhig... nur gerade aufgewühlt^^

also das string[0] die längenangabe sein kann weiß ich, ist aber nicht relevant da ich selber keine stringumwandlungen mache.... der DEC bekommt ganz einfache strings übergeben... also schließe ich das mal aus

ich habe meine aufgabe mittlerweile gelöst... habe einfach die ersten 8 zeichen ignoriert und erst mit string[9] angefangen zu analysieren... also ob da text ist... aufgabe war ein BruteForce Angriff auf 3DES mit eingeschränktem schlüsselraum... bzw es waren 10 zeichen vom schlüssel bekannt

nur leider kamm dann das andere problem zum vorschein... ab ca. $100 im text kam auch nur müll, also nach 256byte

dann kommt immer die selbe 8Byte wiederholung bei dem was entschlüsselt werden sollte :(
ohne grund... er hat ja die blöcke davor auch sauber entschlüsselt( abgesehen von den ersten 8byte)
Zitat:

Cologne, Germany, April 3–4êïDÃ4Ô‘#ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò 3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3 Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â \ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\Í ØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØ Ôò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔ ò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò 3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3Â\ÍØÔò3 Â\ÍØÔò3Â\ÍØÔò3Â\ÍØ
das ist der übergang bei 0x100(256Byte)... warum das so ist, ist unbekannt

den oder die gefundenen schlüssel habe ich dann ich cryptool benutzt
sie waren richtig und cryptool hat mir dann auch den ganzen text korrekt entschlüsselt...

kann jetzt nicht alles poste da dies eine öffentliche aufgabe von mysterytwister ist und wäre uncool wenn man ne lvl2 chalange hier per googel gelöst bekommt

aber irgendwas muß verkehrt an 3DES mit CBC sein im DEC 5.2... ich gehe auch nicht dafon aus das ich irgendwo einen bufferüberlauf habe der dann in andere bereiche reinschreibt/überschreibt

hagen wird mich bestimmt gleich in der luft zerreisen weil er eigentlich keine support-sorgen haben möchte mit den Bibliotheken die er uns freundlicher weiße überlassen hat

aber ungelöste/unlogische probleme mag ich auch nicht ;)

mfg Dano

Dano 21. Aug 2011 01:36

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Zitat:

Zitat von himitsu (Beitrag 1118387)
So, blos daß wir jetzt nichts falsch verstehn:
Also das Ver-/Entschlüsseln innerhalb des DEC geht
und nur das Ver-/Entschlüsseln zwischen DEC und diesem Crypttool will nicht so richtig?

ist richtig :)

und ich gehe davon aus das außer padding beide nach RFC arbeiten sollten, habe auch beim debuggen nix bemerkt in DEC das da ein fehler sein könnte

bin eher ratlos, bin zwar fertig mit der arbeit, aber würde das doch gerne noch plausiebel auflösen, falls ich mal wieder auf DEC und 3DES zurückgreifen muß

mfg Dano

BUG 21. Aug 2011 01:43

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Du sollst CBC nehmen nimmst aber cmCBCx als Modus.

Vielleicht gibt es damit Probleme :gruebel:

Dano 21. Aug 2011 01:54

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
ich habe nur folgende möglichkeiten
Zitat:

cmCTSx = double CBC, with CFS8 padding of truncated final block
cmCBCx = Cipher Block Chainung, with CFB8 padding of truncated final block
cmCFB8 = 8bit Cipher Feedback mode
cmCFBx = CFB on Blocksize of Cipher
cmOFB8 = 8bit Output Feedback mode
cmOFBx = OFB on Blocksize bytes
cmCFS8 = 8Bit CFS, double CFB
cmCFSx = CFS on Blocksize bytes
cmECBx = Electronic Code Book
und wie gesagt, das mit dem padding wenn der letzte block nicht voll ist habe ich auch gelöst

aber der algorythmus macht 8byte müll, dann 248byte alles super, und dann wieder periodischen unsinn

kann sein das es an meinem programm liegt, aber ich habe nix auffälliges gemacht mit zeiger verbiegen oder sonstiges

mfg Dano

Dano 21. Aug 2011 02:08

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
ok, asche über mein haupt *duck*... hab ein fehler gefunden, der input-buffer war nur 256byte... und das einlesen der datei war damit corrupt :(


aber die ersten 8 byte sind immernoch unlogisch

mfg Dano

himitsu 21. Aug 2011 08:29

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Eventuell wird an der Stelle die Länge oder ein Hash mit eincodiert?

Dano 21. Aug 2011 18:42

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
habs gefunden^^

es gibt einen "Initialization vector"

und der wird irgendwie randomm gefüllt wenn ich den nicht mit angebe
habe den jetzt extra auf #0#0#0#0#0#0#0#0 gesetzt und jetzt ist auch der erste block lesbar :)

Delphi-Quellcode:
implementation

uses DECUtil, DECCipher, DECFmt;

{$R *.dfm}

// CrypTool padding bei CBC mit der anzahl der padding's...
// also z.b. #4#4#4#4 wenn 4 aufgefüllt werden
// Bei CBC wird bei Blockgröße auf/um 8 erweitert...
// input=15byte, output=16... padding #1
// input=16, output=24... padding #8#8#8#8#8#8#8#8
// IV mit 8mal 0 initialisieren, sonst ist erster block müll #0#0#0#0#0#0#0#0
procedure TForm1.Button1Click(Sender: TObject);
var
  DefCipherClass: TCipher_2DES;
  Temp: String;
begin
  DefCipherClass:=TCipher_2DES.Create;
  DefCipherClass.Mode:=cmCBCx;

  Temp:='AAAAAAAAAAAAAAAA';
  DefCipherClass.Init(Temp,#0#0#0#0#0#0#0#0); // passwort und IV setzen
  Memo1.Lines.Add(IntToStr(Length(Temp))+':'+Temp);
  Memo1.Lines.Add(TFormat_HEX.Encode(Temp));

  // unsere nachricht + padding damit wir auf blockgröße 8 kommen
  Temp:='123456789012345'+#1;
  Memo1.Lines.Add(IntToStr(Length(Temp))+':'+Temp);
  Memo1.Lines.Add(TFormat_HEX.Encode(Temp));

  Temp:=DefCipherClass.EncodeBinary(Temp);     // verschlüsseln
  Memo1.Lines.Add(IntToStr(Length(Temp))+':'+Temp);
  Memo1.Lines.Add(TFormat_HEX.Encode(Temp));

  DefCipherClass.Done;                        // aufräumen

  Temp:=DefCipherClass.DecodeBinary(Temp);    // entschlüsseln
  Memo1.Lines.Add(IntToStr(Length(Temp))+':'+Temp);
  Memo1.Lines.Add(TFormat_HEX.Encode(Temp));

  // jetzt müßte noch das padding entfernt werden

  DefCipherClass.Free;
end;
bin jetzt selber überrascht wie einfach das mit DEC ging^^
war am anfang schnell überfordert weil in den beispielen soooo viel drin stand und ich nur schwer das für mich benötigte rausfiltern konnt
aber wenn man einmal den durchblick hat, ist das DEC einfach nur genial :)

und wenn man noch die ganzen Memo1.Lines.Add weglässt ist es ein 10 zeilen code um mit 3DES zu verschlüsseln und gleich wieder zu entschlüsseln
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  DefCipherClass: TCipher_2DES;
  Temp: String;
begin
  DefCipherClass:=TCipher_2DES.Create;
  DefCipherClass.Mode:=cmCBCx;
  DefCipherClass.Init('AAAAAAAAAAAAAAAA',#0#0#0#0#0#0#0#0); // passwort und IV setzen

  Temp:='123456789012345'+#1;                  // text+ padding
  Temp:=DefCipherClass.EncodeBinary(Temp);     // verschlüsseln
  DefCipherClass.Done;                         // aufräumen
  Temp:=DefCipherClass.DecodeBinary(Temp);     // entschlüsseln
  // jetzt müßte noch das padding entfernt werden
  DefCipherClass.Free;
end;
das ist jetzt zu 100% kompatibel zu CrypTool

danke euch für die hilfe :)
mfg Dano

r2c2 21. Aug 2011 20:47

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Ich hab mich mit DEC und DES jetzt nicht größer auseinander gesetzt, aber es ist AFAIK wichtig, dass ein Initialization Vector (pseudo-)zufällig ist. Genau das war IIRC eines der Probleme von WEP. WEP verwendet intern RC4, das prinzipiell OK ist, aber der IV war in den meisten Implementierungen vorhersehbar (in inkrementierter Counter). Und auf einmal hatte man einen wunderbare Known-Plaintext-Angriff...

BTW: try..finally solltest du einbauen...

mfg

Christian

Dano 21. Aug 2011 20:57

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
mit try...finaly hast du ja recht,
aber das ist jetzt auch kein programm das ich anderen gebe, und selbst bei mir sind es oft nur paar versuche die es läuft das ich sogar das free fast immer weglasse^^ speicher gibt ja in hülle und fülle
also für einen versuchsaufbau ist das ok, und jeder fehler der auftritt behandel ich selber im debugger

bei ner schleife mit 10000 kommt das free natürlich mit rein, wenn ein fehler auftritt ist es belanglos für mich ob ein finaly block existiert... strg+f2 und fehler suchen
ist kein ablauf der die fehler fremder benutzer auffangen muß/soll

das mit dem IV ist natürlich schon wichig um den ersten block zu schützen, aber in der sache mußte ich mich an das system anpassen welches die referenz darstelt... also IV=00000000

mfg Dano

r2c2 21. Aug 2011 22:30

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Ich würde dir trotzdem raten, try..finally zu verwenden. Und wenn es nur ist, um das zur Gewohnheit zu machen, damit dus dann, wenns wichtig ist, nicht vergisst. Das tut nicht weh, aber es hilft.

Das ist wie mit dem Autofahren. Da gibts auch Leute, die sich sagen "Da ist doch eh keiner hinter mir, da muss ich nicht blinken, wenn ich abbiege." Und das sind dann auch die, die das Blinken mal vergessen, wenns wichtig wäre. Die paar Kalorien, die man aufwenden muss, um den Blinker anzumachen, kann man schonmal investieren. Das sind noch nichtmal Erdnüsse...


mfg

Christian

cookie22 22. Aug 2011 07:22

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Wenn man Speicher anfordert, hat man den auch wieder freizugeben. Also muss hier zwingend ein "try..finally Block" hin.

Dano 25. Aug 2011 20:12

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
ok^^
ich versuch mich zu bessern :)

mfg Dano

negaH 1. Sep 2011 13:50

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
sorry sehe den Thread erst jetzt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Temp: String;
begin
  with TCipher_2DES.Create do
  try
    Mode := cmCBCx;

    Init('AAAAAAAAAAAAAAAA',#0#0#0#0#0#0#0#0); // passwort und IV setzen
   
    Temp := EncodeBinary('123456789012345'+#1); // verschlüsseln

    Temp := DecodeBinary(Temp);

  finally
    Free;
  end;
end;
Geht noch ein bischen übersichlicher und mit Schutzblöcken.
Man muß bei der Adaption der Algorithmen mit dem DEC, ja mit jedweiger Crypto-Library, folgende wichtige Punkte hinterfragen

1.) welcher Algorithmus
2.) welcher Feedback Modus wurde benutzt, CBC, ECB, OFB usw. (in DEC cm???x oder cm???8) Modis
3.) welches Passwort-Präprocessing wurde gemacht, also zb. wird das Passort direkt benuzzt, wird es expandiert auf eine exakte Schlüsselbitanzahl, wird es noch mit Zufall + Hash Funktionen abgesichert usw.
4.) wird ein InitVector benutzt, wie wird er berechnet ?
5.) wird der PlanText vor der Verschl. noch modifiziert, zb. Padding auf Mehrfaches von Cipher.Context.BufferSize Bytes, werden Sonderzeichen entfernt oder eingebaut
6.) wird der CipherText nach der Verschl. nochmals umformatiert, zb. binär nach MIM64 Format usw.

Die festlegung all dieser Punkte sind Aufrage des übergeordneten Protokolls das man implementieren möchte, also sowas wie PKCS# oder PGP usw. Das wäre, wenn es mit DEC weiter gegangen wäre, die Aufgabe vom nicht exitenten DEC Teil 3 gewesen. Also Basis,Formatierungen,sym. Kryptographie in Part I, große Zahlenbibliothek + asymmtrische Kryptographie in Part II und alle Protokolle wir PKCS#, Open/PGP usw. im Part III. Jetzt wird es auch verständlich warum in den Basisklassen des DECs, so wie es jetzt ist, eben keine Rücksicht auf diese verschiedenen Protokolle genommen wurde, wichtig war vom Design her nur das alles was grundsätzlich in den Protokollen benötigt wird schon im DEC Part I vorraus geplant wurde. Somit sollte es sehr einfach sein, mit dem jetzigen DEC und bischen Fleißarbeit in der Vorbereitungsphase, auf's konkrete Ziel zu adoptieren.

Gruß Hagen

Dano 8. Sep 2011 22:36

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
hallo hagen ;)

das mit der fleißarbeit vorher ist kein problem (erweckt eher den pioniergeist^^)
nur in den beispielen ist soooo viel drin das ich zuerst den kopf in den sand stecken wollte... aber nach langem probieren hatte ich dann den "AHA"-effekt... dann wars relativ einfach

und dein DEC ist super!!!

leider bin ich auch nicht der profi, so das mir nicht jede semantik und alle möglichkeiten von delphi immer verständlich sind :/

aber eins muß ich sagen: hagen hat mich mit seinem IInteger/DEC unheimlich an wissen bereichert, und viele kryptorätsel hätte ich in delphi garnicht lösen können... gerade RSA z.B.

also danke :)
(warscheinlich hast du jeden tag 100 liebesbriefe von bekloppten wie mir in der post :D)

so, was das 3DES hier betrifft, muß ich leider sagen das viele ihr eigenes süppchen kochen, also finde ich es soweit garnicht verkehrt das man den plaintext selber vorbereiten muß... das padding selber übernimmt, den IV macht auch jeder anders, weil ich das jetzt halbwegs verstanden habe was ich machen muß, finde ich es durchaus OK

darum habe ich auch meine (end)lösung hier gepostet, um den leuten anleitung zu geben die das selbe problem haen wie ich^^

Was dein IInteger betrifft bin ich bischen traurig... es war das beste was mir über den weg gelaufen ist ;) hoffe du machst daran weiter, gerade jetzt wo 64bit voll da ist und vlt auch CUDA (ka ob ATI sowas bietet) mit reinzupacken... wobei da wieder dll's usw mit reinkommen, da denke ich das es nicht einfach ist... treiber-programmierung mit delphi habe ich auch nicht die ahnung... also das man das was cuda bietet direckt anspricht ohne über die c++ bibliothek... ok, ich schweif ab

deine math-lib ist best ever lieber Hagen :)

mfg Dano

Codewalker 8. Mär 2012 18:45

AW: 3DES mit DEC (Delphi Encryption Compendium)
 
Zitat:

Zitat von Dano (Beitrag 1122751)
deine math-lib ist best ever lieber Hagen :)

Gibt es diese MathLib auch für Delphi XE2? Ich kenne nur die "Reste" aus dem Archiv-Teil des DEC und der geht ja nur bis Delphi 7.

Zitat:

Zitat von negaH (Beitrag 1120882)
Das wäre, wenn es mit DEC weiter gegangen wäre, die Aufgabe vom nicht exitenten DEC Teil 3 gewesen.

Woran ist das eigentlich gescheitert? Ich glaube die Unterstützung vieler in der DP wäre Dir sicher.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 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 by Thomas Breitkreuz