Frage:
Vor- und Nachteile von Stream vs Block Ciphers
Eric Warriner
2010-11-14 20:32:28 UTC
view on stackexchange narkive permalink

Verschlüsselungsalgorithmen wie Blowfish, AES, RC4, DES und Seal sind in einer von zwei Kategorien von Chiffren implementiert. Was sind die Vor- und Nachteile der Art der Chiffren?

Fünf antworten:
AviD
2010-11-15 01:18:41 UTC
view on stackexchange narkive permalink

Während beide symmetrische Chiffren sind, basieren Stream-Chiffren darauf, einen "unendlichen" kryptografischen Schlüsselstrom zu erzeugen und diesen zu verwenden, um jeweils ein Bit oder Byte zu verschlüsseln (ähnlich dem einmaligen Pad), während Blockchiffren bei größeren arbeiten Datenblöcke (dh Blöcke) gleichzeitig, wobei häufig Blöcke für zusätzliche Sicherheit kombiniert werden (z. B. AES im CBC-Modus).

  • Stream-Chiffren sind normalerweise schneller als Block, aber das hat seinen eigenen Preis.
  • Blockchiffren benötigen normalerweise mehr Speicher, da sie mit größeren Datenblöcken arbeiten und häufig von vorherigen Blöcken "übertragen" werden, während Streamchiffren nur mit wenigen Bits gleichzeitig arbeiten und relativ niedrig sind Speicheranforderungen (und daher in begrenzten Szenarien wie eingebetteten Geräten, Firmware und insbesondere Hardware billiger zu implementieren).
  • Stream-Chiffren sind schwieriger korrekt zu implementieren und anfällig für Schwachstellen aufgrund der Nutzung - seit dem Prinzipien sind ähnlich wie bei einem einmaligen Pad, der Keystream hat sehr strenge Anforderungen. Auf der anderen Seite ist dies normalerweise der schwierige Teil und kann auf z. eine externe Box.
  • Da Blockchiffren jeweils einen ganzen Block verschlüsseln (und darüber hinaus "Feedback" -Modi haben, die am meisten empfohlen werden), sind sie anfälliger für Rauschen bei der Übertragung, wenn Sie einen Teil des Blocks durcheinander bringen Daten, der Rest ist wahrscheinlich nicht wiederherstellbar. Während bei Stream-Chiffren Bytes ohne Verbindung zu anderen Datenblöcken (in den meisten Chiffren / Modi) einzeln verschlüsselt werden und häufig Unterbrechungen in der Leitung unterstützen.
  • Stream-Chiffren bieten auch keinen Integritätsschutz oder keine Authentifizierung, wohingegen einige Block-Chiffren (je nach Modus) zusätzlich zur Vertraulichkeit einen Integritätsschutz bieten können.
  • Aus all diesen Gründen eignen sich Stream-Chiffren normalerweise am besten für Fälle, in denen die Datenmenge entweder unbekannt oder kontinuierlich ist, z. B. für Netzwerk-Streams. Blockchiffren hingegen oder nützlicher, wenn die Datenmenge bereits bekannt ist - z. B. eine Datei, Datenfelder oder Anforderungs- / Antwortprotokolle wie HTTP, bei denen die Länge der Gesamtnachricht bereits am bekannt ist Anfang.
Die 2. Kugel ist nicht genau. Der Unterschied im Speicher aufgrund der "Übertragung" von früheren Blöcken ist vernachlässigbar und viel kleiner als der Unterschied im Speicher von Algorithmus zu Algorithmus (z. B. vergleiche RC4 mit seinen 256 Bytes des internen Zustands mit AES mit 0 Bytes des internen Zustands in einigen Implmeentationen). Die letzte Kugel macht falsche Unterscheidungen und ist ein schlechter Rat.
@D.W. Die zweite Kugel war "allgemein gesprochen", wie dies normalerweise der Fall ist (aber ich akzeptiere, dass es nicht genau ist).
@D.W. Haben Sie eine Grundlage für Ihren Kommentar zur letzten Kugel? Wo ist die falsche Unterscheidung und warum sagen Sie, dass dies ein schlechter Rat ist?
Ja, ich habe eine Grundlage für meinen Kommentar zur letzten Kugel. Es scheint nur auf der ganzen Linie verwirrt. Blockchiffren eignen sich gut zum Streamen von Daten. siehe z. B. CBC-Modus, CTR-Modus usw. für verschiedene Betriebsmodi, die mit Streaming-Daten gut funktionieren. Blockchiffren sind nicht auf Fälle beschränkt, in denen die Datenmenge im Voraus bekannt ist. Mir ist kein Grund bekannt, Stream-Chiffren für Streaming-Daten besser in Betracht zu ziehen als Block-Chiffren (trotz des Namens).
D.W. ist richtig: Das Wort 'Stream' in Stream Cipher gibt an, dass es einen Schlüsselstrom gibt - einen Stream von Bits, der mit Klartext kombiniert wird, um den Chiffretext zu erzeugen. Es spiegelt nicht die Klartextkomposition wider. Offensichtlich ist dies ein Detail, das Entwickler und Ingenieure oft verwirrt, mit denen letzteres normalerweise impliziert wird. Blockchiffren können verwendet werden, um Streaming-Klartext einwandfrei zu manipulieren. Oft ist es auch verwirrend, dass Blockchiffren als Stream-Chiffre mit einer geeigneten Betriebsart und bei atomarer Blockgröße (z. B. 1 Byte) verwendet werden können.
Sie haben einen Punkt vergessen: Welcher ist sicherer?
@trusktr das ist eine kontextlose Frage im luftleeren Raum :-). Für beide hängt es davon ab, welcher Algorithmus, wie er verwendet wird, wofür er verwendet wird usw. Kurz gesagt, es hängt von der Situation ab, und es gibt gute (dh "sicher genug") Lösungen für beide ein Kompromiss mit anderen Faktoren. Die Antwort von Thomas deckt diese Punkte gut ab.
Süß, danke für die Antwort. :) Auch wenn beide gleichmäßig sicher sind (abhängig vom durchschnittlichen Szenario), ist es dennoch ein guter Punkt zu sagen.
Sie sprechen über den Feedback-Modus, aber wenn ich das richtig verstehe, ist dies in Stream-Chiffren nicht Block-Chiffren
@David 天宇 Der Wong-Feedback-Modus ist eine Funktion von Blockchiffren, mit der die verschiedenen Blöcke "verbunden" werden können. Siehe z. CBC, OFB ... http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
Thomas Pornin
2011-07-23 02:37:38 UTC
view on stackexchange narkive permalink

Eine Blockverschlüsselung ist ein vielseitiger Algorithmus, der eine schlüsselabhängige Permutation von Werten implementiert, die Sequenzen einer festen Anzahl von Bits sind (als "Blöcke" bezeichnet). Es kann für verschiedene Rollen in vielen Arten von kryptografischen Protokollen verwendet werden. Eine solche Rolle ist die Massenverschlüsselung langer Datenströme. Um dies zu erreichen, muss die Blockverschlüsselung mit einem geeigneten Betriebsmodus (auch als "Verkettungsmodus" bezeichnet) verwendet werden, wobei der traditionelle Modus CBC und der trendigere neuere Modus CTR ist.

Eine Stream-Verschlüsselung ist ein spezialisierter Algorithmus zum Zweck der Massenverschlüsselung langer Datenströme. Die Idee ist, dass durch den Verlust der Vielseitigkeit der Blockverschlüsselung ein effizienterer Algorithmus erstellt werden kann (dh etwas, das Daten schneller >) verschlüsselt.

Beide Blockchiffren Bei einem Stream-orientierten Verschlüsselungsmodus und Stream-Chiffren können Sicherheitsprobleme auftreten, wenn derselbe Schlüssel zweimal für zwei unterschiedliche Streams verwendet wird, ohne dass ein geeigneter, eindeutig / zufällig genug Initialisierungsvektor vorhanden ist. Für die CBC-Verschlüsselung muss die IV für jede neue Nachricht eine neue, gleichmäßig zufällige Folge von Bits sein, die dieselbe Größe wie ein Block haben. Gute Stream-Chiffren akzeptieren auch eine IV. Eine traditionelle Stream-Chiffre namens RC4 ist IV-frei (in ihrer Spezifikation ist nicht angegeben, wo oder wie eine IV eingefügt werden könnte), was zu viel Chaos führte und dem Konzept der Stream-Chiffren einen schlechten Namen gab.

Neuere, sicherere (und schnellere) Stream-Chiffren finden Sie im eSTREAM-Portfolio. Diese Algorithmen wurden von vielen Kryptographen ziemlich gründlich analysiert und gelten als "ziemlich sicher".

Eine Stream-Verschlüsselung kann durch Verschlüsseln einer langen Folge von Bytes mit dem Wert Null in einen Pseudozufallszahlengenerator konvertiert werden. Tatsächlich arbeiten viele (aber nicht alle) Stream-Chiffren intern als PRNG und erzeugen eine lange Folge von schlüsselabhängigen pseudozufälligen Bytes, die anschließend (durch bitweises XOR) mit den zu verschlüsselnden (oder zu entschlüsselnden) Daten kombiniert werden Das Verschlüsseln von Null Bytes entspricht dann dem Weglassen des XOR insgesamt. Daher werden Stream-Chiffren häufig als benutzerdefiniertes PRNG verwendet.

Sie haben vergessen zu erwähnen, was im Allgemeinen sicherer ist (Stream vs Block).
Ich habe nicht vergessen, weil die Behauptung keinen allgemeinen Sinn ergibt. Sowohl Block- als auch Stream-Chiffren können eine angemessene Sicherheit bieten, wenn sie ordnungsgemäß angewendet werden und keine strukturellen Schwächen aufweisen.
"Die Vielseitigkeit der Blockchiffre" Ich habe Probleme mit diesem Teil.Was macht eine Blockverschlüsselung von Natur aus vielseitiger?Blockchiffren können verwendet werden, um entweder beide Streams (z. B. TLS) oder paketierte Daten (z. B. ESP) und dieselben für Stream-Chiffren (z. B. TLS oder DTLS) zu verschlüsseln und zu authentifizieren.Es gibt Fälle, in denen eine Stream-Verschlüsselung "natürlicher" erscheint (z. B. das Verschlüsseln von Audio) oder eine Blockverschlüsselung "natürlicher" erscheint (z. B. das Verschlüsseln von Festplatten), aber ich sehe für beide nur keine große Lücke in vernünftigen Anwendungen.
Bruno Rohée
2011-04-02 18:45:20 UTC
view on stackexchange narkive permalink

Ein Vorteil von Stream-Chiffren, die zuvor nicht erwähnt wurden, besteht darin, dass sie nicht aufgefüllt werden müssen (Block-Chiffren arbeiten mit vollständigen Blöcken. Wenn Sie also nicht über genügend Daten verfügen, müssen Sie irgendwie mehr generieren). Und Überraschung (nicht wirklich, Kryptographie ist das Gebiet, in dem Murphy überall ist), das Auffüllen kann falsch gemacht werden, wie zum Beispiel in Praktisches Auffüllen von Oracle-Angriffen.

Auch Sicherheit von Blockchiffren Es hängt ziemlich stark von ihrer Funktionsweise ab. Manchmal wird hier und da immer noch die EZB verwendet, und sie ist nicht viel besser als gar keine Krypto.

Grundsätzlich kann man nicht sagen, dass eine besser ist als die andere. Man muss sich ein komplettes Kryptosystem ansehen, um ein Sicherheitsurteil zu fällen.

zu Ihrem ersten Absatz: Es gibt Betriebsmodi für Blockchiffren, die nicht aufgefüllt werden müssen, z. B. den CTR-Modus. Dies ist also kein Vorteil, der nur für Streaming-Chiffren gilt. Aber +1 zu deinem letzten Absatz - gut gesagt!
Nun, ich würde sagen, CTR und OFB sind Konstruktionen, um eine Stream-Verschlüsselung aus einer Blockverschlüsselung zu erstellen. Das ist eine weitere großartige Sache bei Blockchiffren. Sie können leicht als Bausteine ​​für andere Dinge verwendet werden, sei es Stream-Chiffren oder Einweg-Hashes. Stream-Chiffren sind nicht so vielseitig.
Sie haben vergessen zu erwähnen, was im Allgemeinen sicherer ist (Stream vs Block).
Keiner ist von Natur aus sicherer, es ist wirklich so, wie Sie sie verwenden.
gbr
2010-11-14 20:54:30 UTC
view on stackexchange narkive permalink

Stream-Chiffren krypten die Klartextdaten mit einem zufälligen Bitstrom (normalerweise mit einem XOR, da sie leicht umgekehrt werden können). Wenn Sie über 128-Bit-Daten verfügen, verwenden Sie zum Verschlüsseln einen 128-Bit-Psedurandom-Strem (Ihren Schlüssel).

Blockchiffren krypten die Klartextdaten blockweise mit derselben Transformation (basierend auf dem Schlüssel) ). Sie haben also Ihre 128-Bit-Daten, die Chiffre zerlegt sie in Blöcke (wie 4 Blöcke mit 32 Bits) und wendet dieselbe Transformation auf jeden Block an, der 4 verschlüsselte Blöcke erhält, die zusammen das endgültige Kryptogramm bilden.

Of Aus diesem Grund sind Block-Chiffren sicherer, aber in Bezug auf die damit verbundene Hardwarekomplexität teuer. Stream-Chiffren sind schneller und "billig", können jedoch bei falscher Implementierung für Sicherheitsprobleme anfällig sein.

Der letzte Absatz enthält eine Reihe von sachlichen Fehlern. Blockchiffren sind im Allgemeinen weder sicherer noch in der Hardware notwendigerweise schlechter. Stream-Chiffren sind nicht unbedingt schneller oder billiger.
@D.W.: Ungeachtet dessen sind Stream-Chiffren normalerweise schneller oder billiger als Block-Chiffren, denn das ist der Deal: Ein weniger vielseitiger Algorithmus, der gegen eine verbesserte Leistung eingetauscht wird. Eine Stream-Verschlüsselung, die langsamer und teurer als AES / CTR ist, wird überhaupt nicht verwendet.
Sie haben vergessen zu erwähnen, was im Allgemeinen sicherer ist (Stream vs Block).
yfeldblum
2011-04-02 19:42:15 UTC
view on stackexchange narkive permalink

Daten (das zu verschlüsselnde Material) kommen normalerweise in Streams. Um es zu verschlüsseln, müssen wir eine Stream-Verschlüsselung verwenden, dh einen Verschlüsselungsalgorithmus, der für die Verwendung in einem Datenstrom geeignet ist. Ein Stream ist eine Folge von Bits (oder Bytes) beliebiger, variierender oder nicht spezifizierter Länge.

Die besten Chiffren, die wir bisher erfunden haben, sind normalerweise Blockchiffren. Eine Blockverschlüsselung kann einen einzelnen Datenblock fester Größe verschlüsseln. und nach den Beweisen um uns herum ist es anscheinend einfacher, gute Blockchiffren zu erstellen als Streamchiffren.

Gute Nachrichten. Durch die Verwendung einer bestimmten Blockverschlüsselung in bestimmten Mustern (eine "Betriebsart") und mit Hilfe bestimmter Auffüllstrategien können wir jede Blockverschlüsselung in eine Stream-Verschlüsselung umwandeln! Das heißt, wir können die besseren Chiffren, die Blockchiffren sind, verwenden, um alle Daten zu verschlüsseln, von denen der Großteil in Streams vorliegt.

Der zweite Satz scheint irreführend. Sie können Streaming-Daten mithilfe einer Blockverschlüsselung verschlüsseln, indem Sie eine Reihe von Standardbetriebsmodi verwenden: z. B. CBC-Modus, CTR-Modus usw. AES-CBC ist immer noch eine Blockverschlüsselung. Tatsächlich unterstützt fast jede Standardbetriebsart für Blockchiffren bereits das Streaming von Daten. Darüber hinaus ist eine Blockverschlüsselung ohne einen Betriebsmodus nicht sicher, sodass es nicht so ist, als ob ein Betriebsmodus eine optionale Sache ist, die Sie nur benötigen, wenn Sie Streaming-Daten verschlüsseln möchten.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 2.0-Lizenz, unter der er vertrieben wird.
Loading...