Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

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

Re: Dateien verschlüsseln - aber wie?

  Alt 6. Okt 2003, 11:38
Zitat:
Wenn ich somit ohne Random arbeite (bei den Files) aber mit CTS, dann müssten Known-Plaintext-Angriffe bei mir doch immer noch schlechter durchzuführen sein, als bei Steganos, oder? Und das wiederum würde bedeuten, dass ich ruhig auf Random verzichten kann, denn Steganos wird ja wohl schon sicher genug sein!
Wenn ich jetzt ECB (oder wie das auch immer heißt) verwenden würde (ohne Random), würde das weniger Sicherheit bieten als CTS?
Ich weiß nicht ob Steganos mit ECB arbeitet, kann es mir nur schwer vorstellen. Sollte es so sein dann hätten die Designer einen groben Fehler gemacht.
Der Zufallswert expandiert nur die Nachricht, es können also auch andere Ciphermodes angewendet werden die "seekable" sind. Ich glaube aber nicht das Steganos "wahlfreien" Zugriff bei der Entschlüsselung ermöglicht. So gut ist Steganos nun auch wieder nicht.

Es gibt Ciphermodes die genauso sicher wie CTS/CBC sind und dennoch wahlfreien Zugriff auf die Daten während der Entschlüsselung bieten. Z.b. der CTR=Counter Modus. Dabei wird jeder Block der Verschlüsselung durchnummeriert. Intern wird ein zB. 64/128 Bit Zähler mitgeführt, als IV sozusagen, und die Nummer des Blockes draufaddiert. Nun hat man den IV berechnet der zu dem Block gehört. Da der Counter sich so von Block zu Block immer erhöht hat jeder Block seinen eigenen Counter, ist aber NICHT abhänig von vorherigen Blöcken. Dieser CTR Mode ist ein Vorschlag bei der AES Auswahl der zukünftigen Standard Ciphermodes. Der Startcounter beim CTR sollte nur einmal verwendet werden !

Ich persönlich würde dennoch mit CTS arbeiten, da er durch seine Eigenschaften eine Alles oder Nichts Entschlüsselung ermöglicht. Dies ist das algorithmisch gesehen höchste Maß an Sicherheit.
Auch der CTS ermöglicht eine Live-Ver-/Entschlüsselung, aber eben nur sequentiell vom ersten Block zum letzten Block der Message.

Allerdings ist CTS in keinster Weise ein Standardmodus, sondern ein von mir entwickelter "Doppel-Feedback" Modus. D.h. meine Änderungen sind so gemacht das sie einen CBC Modus erweitern um einen "Doppelt-CBC-Modus" zu bekommen. Wenn also der CBC Modus als sicher gilt so muß es auch der CTS Modus sein. CBC ist ein sehr anerkannter Standardmodus. Diese "Design" Philosophie musste ich benutzen damit CTS sicher bleibt/wird, denn ich selber habe nicht die Resourcen um effektiv zu beweisen das CTS wirklich sicher ist.

Was macht CTS ?
CBC verknüpft per XOR das Feedbackregister mit den Datenblock der verschlüsselt werden soll. Danach wird der Datenblock verschlüsselt und ins Feedbackregister kopiert.
CTS macht das gleiche, aber statt Kopieren wird das Feedbackregister wiederum XOR verknüpft mit dem nun verschlüsselten Datenblock.
Das Feedbackregister enthält am Schluß im CTS Modus die XOR Verknüpfungen der Daten vor Verschlüsseung mit der XOR Verknüpfung der Daten nach der Verschlüsselung ALLER Datenblöcke.
Im CBC Modus enthält das Feedbackregister am Schluß den letzten verschlüsselten Datenblock.

Hier erkennt man die Eigenschaft der "Error-Propagation" des CTS Modus, denn das letzte Feedbackregister ist sozusagen die XOR Summe aller Blöcke + deren Verschlüsseltes Produkt in verschlüsselter Form. Eine einzigste Fehlerbit-Änderung würde damit vollständig die nachfolgenden Blöcke zerstören.

Die Gegenüebrstellung der Modis sieht so aus:

Zitat:
IV = initialization Vector
c() = verschlüsslungsfunktion eines Blockes
Cx = Ciphertext des x. Blockes, die verschl. Message besteht aus C1...Cx
Dx = Plaintext des x. Datenblockes, die Message besteht aus D1..Dx
F = Feedbackregister

CBC-Modus

C0 = IV
C1 = c(C0 xor D1)
C2 = c(C1 xor D2)
C3 = c(C2 xor D3)
C4 = c(C3 xor D4)

CTS-Modus

C0 = IV
C1 = c(C0 xor D1)
C2 = c(C0 xor C1 xor D2)
C3 = c(C0 xor C1 xor C2 xor D3)
C4 = c(C0 xor C1 xor C2 xor C3 xor D4)

verkürzt und intern in meinen Ciphern benutzt siehts so aus:

F = IV
C1 = c(F xor D1); F = F xor C1; // F == C0 xor C1
C2 = c(F xor D2); F = F xor C2; // F == C0 xor C1 xor C2
C3 = c(F xor D3); F = F xor C3; // F == C0 xor C1 xor C2 xor C3
C4 = c(F xor D4); F = F xor C4; // F == C0 xor C1 xor C2 xor C3 xor C4

F = Cipher-Message-Authentication-Code

CBC-Mode

F = IV
C1 = c(F xor D1); F = C1;
C2 = c(F xor D2); F = C2;
C3 = c(F xor D3); F = C3;
C4 = c(F xor D4); F = C4;

F = letzter verschlüsselter Block

vollständige Formel für C3 ist:

CTS-Mode

C3 = c(IV xor D3 xor c(IV xor D2 xor c(IV xor D1)) xor c(IV xor D1))

CBC-Mode

C3 = c(c(c(IV xor D1) xor D2) xor D3)
Man sieht sehr schön um wie vieles stärker der CTS Modus sein muß, obwohl nur eine einzigste Operation verändert wurde. Statt F = Cx, eben F = F xor Cx !

Im CBC Mode wird nur der 1. Datenblock mit dem Zufalls-IV verknüpft.
Im CTS Mode werden ALLE Datenblöcke mit dem IV verknüpft.
Im CBC Mode wird nur der vorherige verschlüsselte Block mit dem aktuellen Block verknüpft.
Im CTS Mode werden ALLE vorherigen verschlüsselten Blöcke mit dem aktuellen Block verknüpft.

Wie gesagt ich meine das ich NICHT der absolute Kryptoguru bin und nicht die Fähigkeiten besitze um sagen zu können das meine Analysen was taugen. Jeder sollte sich selber ein Bild über CTS machen, und darüber selber nachdenken ob CTS nun besser als CBC ist. Ich persönlich bin davon überzeugt das er um vielfaches besser ist als CBC.

Gruß Hagen
  Mit Zitat antworten Zitat