AGB  ·  Datenschutz  ·  Impressum  







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

DEC 5.1 wie benutzen?

Ein Thema von delphin06 · begonnen am 2. Feb 2008 · letzter Beitrag vom 23. Nov 2008
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    
Benutzerbild von negaH
negaH

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

Re: DEC 5.1 wie benutzen?

  Alt 4. Feb 2008, 15:03
@Jargos:

bei ADest.WriteBuffer(Salt[1], Length(Salt)); in Encrypt() kannst du vor oder danach eigene Daten abspeichern. Die musst du natürlich in Decrypt() auch wieder rauslesen. Also eigene Datenmenge abspeichern und exakt gleiche Datenmenge vor dem Entschlüsseln wieder rauslesen. Du musst nur die TStream basierten Prozeduren abändern.

Gruß Hagen

PS: beachte das diese Daten dann unverschlüsselt sind. Möchtest du dies nicht dann kannst du auch ein zweifaches .EncodeStream(ASource, ADest,..) einbauen. das ginge dann so

Delphi-Quellcode:

with ...Create do
try
  ...blabla Init Sequenz

  SetLength(AData, Cipher.Context.BufferSize * x);
  AData := EncodeBinary(AData, TFormat_COPY);
  ADest.WriteBuffer(AData[1], Length(AData));
  EncodeStream(ASource, ADest, ....);
finally
  Free;
end;
Nur musst du beachten das die Anzahl an Bytes in AData exakt ein Mehrfaches der Cipher.BufferSize sind um ein vorzeitiges Padding zu vermeiden. Du verschlüsselt als so als wenn in ASource ein Header von dir vor den eigentlichen Daten drinnenstehen würde.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#32

Re: DEC 5.1 wie benutzen?

  Alt 4. Feb 2008, 15:20
Zitat von negaH:
wenn man den CipherMode cmCTSx/cmCTS8 benutzt kann man am Ende eine CMAC errechnen und abspeichern.

[SNIP]

Am Ende einer Verschlüselung/Entschlüsselung kann man mit Cipher.CalcMAC eine sogenannte Cipher-MAC errechnen und somit auf Datenintegrität testen. Wie oben angedeutet wird sich die so errechnet CMAC komplett unterscheiden wenn nur 1 Datenbit falsch übertragenm wurde. Ok, da die meisten Cipher mit zb. 8 Bytes Feedbackregster arbeiten ist diese CMAC auch meistens nur 64 Bit groß. Das Kollisionsrisiko im Vergleich zu eienr guten Hash-MAC ist also viel größer. Nutzt man aber zb. einen 16 Bytes Blockcipher so ist das identisch mit einer zb. MD5-HMAC. Aber mit dem Unterschied das diese CMAC Berechnung Performancetechnisch schon inklusive ist.
Zuerst war ich verwirrt, weil CMAC das "standardisierte" OMAC1 ist, aber im DEC-Quellcode stehts dann ja drin (wenn man weiß, was man nachsehen soll), und offensichtlich gibts diese "CMAC" praktisch kostenlos für alle Modi bis auf EBC. Wäre doch eine gute Idee für in Luckies Unit, diese Prüfbytes neben Salt und Ciphertext mit abzuspeichern und beim Entschlüsseln zu verifizieren.

Zitat von negaH:
Also, das was ich im DEC implementiert habe hat meiner Meinung nach sehr wohl ein kryptographisch sauberes Fundament, ...
Ich habe auch ich nicht unterstellt, daß dem so wäre, und wie man sieht ist ja auch eine Authentizitäts- / Verifikationsmöglichkeit vorhanden, und nur das war ein Punkt meines Beitrags.

Gruß Gammatester
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: DEC 5.1 wie benutzen?

  Alt 4. Feb 2008, 15:37
hey, ich weiß wer du bist und demzufolge weiß ich auch wie du es gemeint hast, ich bin zu keiner Zeit davon ausgegangen das ich mich angegriffen fühlen müsste

Ja, man kann das oben noch einbauen, ginge sogar sehr einfach. Das Thema habe ich aber unter -> Es gibt Verbesserungen und hier in der DP schon als Source zu finden, abgehackt. Ich muß halt immer einen Kompromiß anstreben, zwischen dem was ich hier als Beispiele poste und noch verständlich ist und dem was alles möglich wäre. Kryptographie ist deshalb sicher weil man das bestehende Wissen auch begriffen hat, man weiß es also. Erkläre ich zuviel kann mir keiner mehr folgen und man wird auf gut Glauben das wiederkauen wa ich an Beispielen gepostet habe ohne es verstanden zu haben. Das ist dann keine Kryptographie mehr, leider.

denoch hier die Änderungen mal angedeutet:

Delphi-Quellcode:
procedure Encrypt(ASource, ADest: TStream; ...blabla); overload;
var
  ... blabla
  MAC: Binary;
begin
  with ... do
  try
    ...blabla Initialisierung hier

    EncodeStream(ASource, ADest, -1);

    MAC := CalcMAC(TFormat_COPY);
    ADest.WriteBuffer(MAC[1], Length(MAC));
  finally
    Free;
    ....bla
    ProtectBinary(MAC);
  end;
end;

procedure Decrypt(ASource, ADest: TStream; ...blabla); overload;
var
  ... blabla
  MAC: Binary;
begin
  with ... do
  try
    ...blabla Initialisierung hier

    DecodeStream(ASource, ADest, ASource.Size - ASource.Position - BufferSize);

    SetLengh(MAC, BufferSize);
    ASource.ReadBuffer(MAC[1], Length(MAC));
    if MAC <> CalcMAC(TFormat_COPY) then
      raise Exception.Create('invalid decryption data maybe modifyed or please verify your password');
  finally
    Free;
    ....bla
    ProtectBinary(MAC);
  end;
end;
ABER VORSICHT! Die Berechnung der CMAC hängt stark vom verwendeten Ciphermode ab. Im Grunde ist diese CMAC nur dann aussagekräftig wenn im cmCTS?/cmCFS? Modus gearbeitet wird. Im cmCBCx Modus kann man eine CMAC berechnen lassen nur wird diese auf Grund der Selbstsynchronisation des CBC Modus eben nicht aussagekräft sein.
Der cmCTS?/cmCFS? Modus enthält quasi einen Lawineneffekt. Ein falsches Bit lösste eine Lawine aus die alle nachfolgenden Bits verändert, bis zum Ende der Verschlüsselung und der Berechnung des CMAC. Die Selbstsynchrnisation ist zerstört dafür ergibt sich quasi sowas wie eine Prüfsumme über alle Datenbits. Dies trifft aber auf alle selbstsynchronisierenden Modis nicht zu.

So. Und wieder die Verständlichkeit dieses Threades verschlechtert

Gruß Hagen
  Mit Zitat antworten Zitat
delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#34

Re: DEC 5.1 wie benutzen?

  Alt 4. Feb 2008, 17:36
Ich möchte hier kurz nochmal was anderes einwerfen und zwar bekomme ich bei Delphi 2007 sehr viele Warnungen:

Delphi-Quellcode:
[DCC Warnung] DECData.pas(3948): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3948): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3949): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3949): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3950): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3951): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3951): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3951): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3952): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3952): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3954): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3954): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3954): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3954): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3955): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3955): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3957): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3957): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3958): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3958): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3958): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3958): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3959): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3959): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3959): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3962): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3962): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3963): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3963): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3963): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3963): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3964): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3964): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3964): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECData.pas(3964): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECHash.pas(2128): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECHash.pas(2130): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECHash.pas(2133): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECHash.pas(2134): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECHash.pas(2168): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECHash.pas(2170): W1012 Konstantenausdruck verletzt untere Grenzen
[DCC Warnung] DECHash.pas(2172): W1012 Konstantenausdruck verletzt untere Grenzen
Ich weiß nicht ob die schlimm sind, deshalb möchte ich nur mal eben nachfragen. Ich hab es immer lieber, wenn gar keine Warnungen auftreten.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: DEC 5.1 wie benutzen?

  Alt 4. Feb 2008, 18:17
In den Projektoptionen -> Compiler -> alle Laufzeitfehlerüberprüfungen wie RangeChecks usw. ausschalten. Das sollte Standard sein. Die gemeldeteten "Fehler" sind in Wahrheit keine, dh. alles ist richtig. Man könnte jetzt im Projekt/Units selber diese Überprüfungen per Compilerswitches deaktivieren, aber auch das hat Nachteile.

Also {$R-} am Anfang der Units einfügen oder alternativ in Ver.inc diesen Switch aufnehmen um damit in allen DEC Units diese Überprüfung auszuschalten.

Gruß Hagen
  Mit Zitat antworten Zitat
delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#36

Re: DEC 5.1 wie benutzen?

  Alt 4. Feb 2008, 18:22
OK, Danke.
  Mit Zitat antworten Zitat
jorgos

Registriert seit: 6. Nov 2004
8 Beiträge
 
#37

Re: DEC 5.1 wie benutzen?

  Alt 5. Feb 2008, 10:09
Hallo zusammen,

erstmal Danke für die Tipps.
Ich habe so einigermaßen umgesetzt, was ich wollte.

Delphi-Quellcode:
Adata := 'teststring123';
....
ADest.WriteBuffer(Salt[1], Length(Salt));
EncodeStream(ASource, ADest, -1, AProgress);

...
ADest.WriteBuffer(Adata[1], Length(Adata));
....
Hier schaffe ich es, die Daten ans Ende der Datei anzuhängen.
Ist im Klartext (Erstmal egal).

Aber wie schaffe ich es, diese Daten beim decodieren wieder auszulesen.
Bin bei allen Versuchen gescheitert.

Delphi-Quellcode:
... habe hier versucht am Ende der Datei + lenge adata, die Daten auszulesen.
ASource.ReadBuffer(adata[1], Length(Salt) + length(adata));
form1.Label1.Caption := adata;
Aber das geht nicht (werdet ihr schon gesehen haben )

Hat jemand noch einen Wertvollen Tipp für mich

Würde mich freuen.
Vielen Dank nochmal
Jorgos
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#38

Re: DEC 5.1 wie benutzen?

  Alt 5. Feb 2008, 10:17
Du musst natürlich zu erste an die Stelle in der Datei springen, an der sich die Daten befinden. Deswegen ist es günstiger diese Daten an den Anfang der Datei zu schreiben. Da kannst du sie einfach lesen und wenn du sie gelesen hast, kannst du einfach den Rest lesen, ohne den Dateizeiger hin und her bewegen zu müssen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: DEC 5.1 wie benutzen?

  Alt 5. Feb 2008, 11:51
Nicht nur das sondern du musst auch die Größe in Bytes deiner AData mit speichern. Wenn AData also in der Länge variable sein kann dann kannst du diese nur exakt wieder auslesen wenn du deren vorherigen Länge weist. Es sei denn AData hat immer die gleiche Länge, dann kannst du das hardcoded machen, quasi wie im Beispiel mit dem Salt.

Gruß hagen
  Mit Zitat antworten Zitat
jorgos

Registriert seit: 6. Nov 2004
8 Beiträge
 
#40

Re: DEC 5.1 wie benutzen?

  Alt 5. Feb 2008, 16:47
Yepp,
das war´s.
Habe alle Info´s, die ich brauche.
Danke an alle.

Jorgos
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    


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 17:02 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