Frage

Ich Schreibe eine Implementierung der XXTEA-Verschlüsselung-Algorithmus, der die Werke auf "streams", dh, die verwendet werden können, wie:crypt mykey < myfile > > Ausgang.

Eine der Voraussetzungen ist, dass Sie nicht auf die Datei zugreifen können überhaupt (es liest nur eine Feste Größe zu blockieren, bis finden ein EOF).Der Algorithmus, der die Daten-bytes ist Vielfaches von 4, so seine notwendig, um fügen Sie eine Polsterung.

Für nur-text eine gute Lösung ist pad mit Nullen, und die Entschlüsselung nur ignorieren Null-Werte, aber die gleiche Strategie kann verwendet werden für Binär-streams (enthalten können eingebetteten Nullen).

Ich habe gelesen, die gemeinsame Lösungen, wie die Polsterung mit der Anzahl der fehlenden chars (wenn Sie vermissen 3 chars, dann fügen Sie eine 3, 3, 3 am Ende) und etc, aber ich Frage mich:gibt es eine elegantere Lösung?

War es hilfreich?

Lösung

Das Lesen der Frage es wie der Sicherheitsaspekt dieser aussieht, ist strittig. Einfach gesagt, haben Sie eine api, die ein Vielfaches von 4 Bytes als Eingabe erwartet, die Sie müssen nicht immer.

Anfügen von bis zu 3 Bytes auf jeden binären Strom ist gefährlich, wenn man keine Garantien machen kann, dass der binäre Strom kümmert sich nicht darum. Anfügen 0'en auf das Ende einer exe-Datei spielt keine Rolle, wie EXE-Dateien haben Header die relevanten Größen aller restlichen Bits angibt. Anfügen 0'en auf das Ende einer PCX-Datei würde es brechen, wie PCX-Dateien haben einen Header, der eine bestimmte Anzahl von Bytes aus dem Ende der Datei beginnt.

Also wirklich, Sie haben keine andere Wahl - es gibt keine andere Wahl von Magie Paddingbytes können Sie verwenden, die garantiert niemals natürlich am Ende eines binären Stroms auftreten: Sie muss immer mindestens einen anhang weitere dword von Informationen zur Beschreibung des Paddingbytes verwendet.

Andere Tipps

Lesen: http://msdn.microsoft .com / en-us / library / system.security.cryptography.paddingmode.aspx

Es hat eine Liste von gemeinsamen padding Methoden, wie:

PKCS7. - Die PKCS # 7-padding-String aus einer Folge von Bytes besteht, von denen jede gleich der Gesamtzahl der Auffüll-Bytes hinzugefügt

Das ANSIX923 padding-String besteht aus einer Folge von Bytes mit Nullen aufgefüllt, bevor die Länge.

Die ISO10126 padding String besteht aus Zufallsdaten vor den Längen.

Beispiele:

Rohdaten: 01 01 01 01 01

PKCS # 7: 01 01 01 01 01 03 03 03

ANSIX923 01 01 01 01 01 00 00 03

ISO10126: 01 01 01 01 01 CD A9 03

Informieren Sie sich über chiffrierten Text zu stehlen . Es ist wohl viel eleganter als Klar Polsterung. Auch ich würde vorschlagen, eine Blockgröße größer als 4 Bytes mit -. 64 Bit ist wahrscheinlich das absolute Minimum

Genau genommen, Do-it-yourself-Kryptographie ist eine gefährliche Idee; es ist schwer, Algorithmen zu schlagen, dass die gesamte Krypto Gemeinschaft versucht hat und es versäumt, zu brechen. Viel Spaß, und betrachten das Lesen dieser , oder zumindest etwas von Schneiers „related Lesen“Abschnitt.

Eigentlich würde ich erwarten, dass ein guten stream cipher braucht keine Polsterung an alle.RC4 zum Beispiel braucht keine Polsterung und ist ein sehr starkes stream-Chiffre.Es kann aber angegriffen werden, wenn der Angreifer kann feed unterschiedlichen gewählten Daten auf die ver-routine, das immer über die gleiche Taste, und hat auch Zugang zu den verschlüsselten Daten.Die Wahl der richtigen input-Daten und die Analyse der output-Daten können verwendet werden, um wiederherstellen des Verschlüsselungsschlüssels, ohne brute-force-Angriff;aber auch andere als die RC4 ist sehr sicher.

Wenn es braucht, Polsterung, es ist keine stream-cipher-IMHO.Als wenn Sie das pad, um ein Vielfaches von 4 byte oder ein Vielfaches von 16 byte, was ist der große Unterschied?Und wenn es gepolstert ist, um ein Vielfaches von 16 byte, könnten Sie mit so ziemlich jedem block cipher.Eigentlich das Chiffre ist ein block-cipher-es funktioniert einfach mit 4-byte-Blöcke.Es war eine stream-Chiffre, die auf einem system wo jeder "symbol" ist 4 byte (z.B.wenn die Verschlüsselung, UTF-32, text, in dem Fall werden die Daten immer ein Vielfaches von 4 ist für sicher, so es ist nie eine Polsterung).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top