2012-03-26 5 views
2

Ich möchte kleine serialisierte Datenstrukturen (~ 256 Bytes) verschlüsseln, damit ich sie (insbesondere in URLs) sicher weitergeben kann. Mein derzeitiger Ansatz besteht darin, eine symmetrische Blockchiffre zu verwenden und dann die Basis 64 zu kodieren, dann URL den verschlüsselten Text zu kodieren. Dies ergibt einen verschlüsselten Chiffretext, der (etwas überraschend) ein wenig länger ist als die ursprüngliche Datenstruktur. Die Länge dieser verschlüsselten Chiffren ist ein bisschen ein Usability-Problem; Idealerweise hätte der verschlüsselte Text ungefähr die gleiche Länge wie der eingegebene Text.Chiffre zum Erzeugen von URL-sicherem Chiffretext ohne Kodierung

Gibt es eine Blockchiffre, die so konfiguriert werden kann, dass die Werte der Ausgangsbytes im URL-sicheren Bereich liegen? Ich nehme an, dass es einen Sicherheitskonflikt geben würde, wenn es einen gibt.

Antwort

2

Für einen gegebenen Schlüssel K muss eine Chiffre für jeden Klartext einen anderen Chiffretext erzeugen. Wenn Ihr Nachrichtenbereich 256 Bytes beträgt, muss die Chiffre in der Lage sein, mindestens 256^256 verschiedene Nachrichten zu erzeugen. Dies erfordert mindestens 256 Bytes, und eine Verringerung der Größe des Ausgabealphabets erfordert längere Nachrichten.

Wie Sie gesehen haben, können Sie später einige Kodierungen vornehmen, um bestimmte Ausgabesymbole zu vermeiden, auf Kosten einer erhöhten Länge. Außerdem würden Sie die gleichen Kosten zahlen, wenn die Verschlüsselung Teil des eigentlichen Verschlüsselungsalgorithmus wäre. Aus diesem Grund ist dies kein Merkmal eines Verschlüsselungsalgorithmus.

Wie andere bereits erwähnt haben, ist die einzige wirkliche Antwort, die Größe der Daten zu reduzieren, die Sie verschlüsseln, so dass Sie weniger Daten verschlüsseln müssen. (Entweder das oder nicht die Daten in URLs an erster Stelle z. B. speichern Sie die Daten in einer Datenbank und legen Sie eine eindeutige ID in der URL). Also komprimiere> verschlüssle> kodiere.

+0

Dies ist genau das, was ich vorschlagen würde. Speichern Sie Ihre Datenserverseite und übergeben Sie ein Hash-Token wie einen sha1-Hash, der diesen Datensatz in Ihrer Datenbank identifiziert. Dann haben Sie nur 40 alphanumerische Zeichen, die nicht base64- oder urlencodiert sein müssen. Sie können die Daten referenzieren, indem Sie sie einfach, sicher und sicher aus Ihrem eigenen Server herausziehen, ohne Ihre verschlüsselten Daten jedem Website-Besucher zugänglich zu machen bittet Hacker zu versuchen, Ihre Verschlüsselung zu brechen und Ihre Website zu beschädigen. – Brian

1

Die URL-Codierung erweitert die base64-codierte Zeichenfolge nicht wesentlich, da 62 der 64 Zeichen nicht geändert werden müssen. Sie können jedoch modified base64 encoding verwenden, um ein wenig besser zu machen. Diese Codierung verwendet die Zeichen '-' und '_' anstelle der Zeichen '+' und '/', um eine leichte Effizienzverbesserung zu erzielen.

Die Chiffre selbst verursacht keine signifikante Datenerweiterung. Es wird die Daten auf ein Vielfaches der Blocklänge auffüllen, aber das ist in Ihrem Fall unbedeutend. Sie könnten versuchen, die Eingabe vor der Verschlüsselung zu komprimieren. 256 Bytes sind nicht viel, aber Sie könnten eine Verbesserung sehen.

1

Wenn Ihre Datenstruktur 256 Byte lang ist, wird sie mit einer Blockchiffre von 8 Byte (abhängig von der konkreten Eingangslänge) auf 8 Byte erhöht.

Daher vor der Anwendung von Base64 haben Sie bis zu 264 Bytes, die durch die Base64-Codierung um bis zu 352 Bytes erhöht werden.

Daher, wie Sie sehen können, wird die meisten Overhead von der Base64-Codierung erstellt. Es gibt einige etwas effektivere Codierungen wie Base91 - aber sie sind sehr ungewöhnlich.

Wenn die Größe zählt, würde ich empfehlen, die Daten vor der Verschlüsselung zu komprimieren.