Frage:
Bietet symmetrische Verschlüsselung Datenintegrität?
88keys
2011-12-04 04:17:51 UTC
view on stackexchange narkive permalink

Angenommen, ich habe einen Server, der eine Datei mit einem symmetrischen Schlüssel verschlüsselt, z. AES-CBC und sendet es an Clients, die es entschlüsseln. Bietet dies Datenintegrität beim Entschlüsseln? Oder kann jemand die Datei manipulieren, während sie noch verschlüsselt ist, und später, wenn der Client sie entschlüsselt, eine geänderte Datei erstellen?

Ich sehe normalerweise Datenintegrität und -authentizität im Hinblick auf die Verwendung digitaler Signaturen oder MAC, aber niemals im Zusammenhang mit der Verschlüsselung. Ich habe auch Benchmarks gesehen, die zeigen, dass Verschlüsselung teurer ist als Hashing, aber das ist nicht meine Hauptüberlegung.

UPDATE

Ich habe ein Experiment versucht, bei dem Ich habe das openssl-Tool unter Linux verwendet, um eine Datei zu verschlüsseln. Dann habe ich versucht, die Datei auf verschiedene Arten zu ändern (Ändern eines Bytes, Löschen eines Bytes, Anhängen eines Bytes). In jedem Fall würde ich beim Versuch der Entschlüsselung eine "schlechte Entschlüsselung" erhalten. Die Befehle, die ich verwendet habe, waren:

  openssl enc -aes-128-cbc -in test -out test.encopenssl enc -d -aes-128-cbc -in test.enc -out test. dec  
Willkommen bei IT Security Stack Exchange. Diese Site (wie alle Stack Exchange-Sites) funktioniert besser, wenn Sie in jede Frage eine Frage einfügen, nicht mehrere. Beachten Sie, dass es auch eine [Schwesterseite über Kryptographie] (http://crypto.stackexchange.com) gibt, aber ich würde nur die zweite Frage (in leicht angepasster Form) als passend ansehen.
Das Problem bei der symetrischen Verschlüsselung ist, dass mindestens zwei und normalerweise mehr Personen eine Kopie desselben Schlüssels haben. Wenn viele Personen eine Kopie des Schlüssels haben, kann nicht festgestellt werden, wer einen Schlüssel für die Verschlüsselung verwendet hat. Oder wer es entschlüsselt hat.
In meinem Fall gibt es einen Server, der die Datei verschlüsselt, und viele Clients, die sie entschlüsseln. Ich habe die Frage aktualisiert, um mich nur auf die Datenintegrität zu konzentrieren.
@D.W. In der aktuellen Form ja. In ihrer [ersten Überarbeitung] (http://security.stackexchange.com/revisions/9437/1) enthielt die Frage eine Frage, wo dies relevant wäre. (Ich lösche meinen vorherigen Kommentar jetzt jedoch als veraltet.)
@this.josh: Sie beziehen sich auf die Authentifizierung, aber die Frage betrifft die Integrität.
Fünf antworten:
Tom Leek
2011-12-05 00:59:28 UTC
view on stackexchange narkive permalink

Symmetrische Verschlüsselung nicht bietet Integrität. Die Kontrolle, die ein Angreifer über verschlüsselte Daten haben kann, hängt vom Verschlüsselungstyp ab. und einige spezifische Details einiger Verschlüsselungsmodi können dem Angreifer das Leben etwas erschweren, wenn er chirurgische Änderungen vornehmen möchte. Mit CBC kann der Angreifer jedes gewünschte Bit umdrehen, vorausgesetzt, es macht ihm nichts aus, ein Dutzend anderer Bytes in zufälligen Junk umzuwandeln.

Es gibt aktuelle Verschlüsselungsmodi, die symmetrische Verschlüsselung kombinieren und überprüfte Integrität (mit einem MAC). Diese Modi gewährleisten sowohl Vertraulichkeit als auch Integrität. AES-CBC ist nicht einer von ihnen. Wenn Sie einen Verschlüsselungsmodus mit Integrität wünschen, empfehle ich EAX.

Update: bezüglich Ihres Experiments: CBC ist ein Modus, in dem die Länge der Quelldaten angegeben werden muss ein Vielfaches der Blockverschlüsselungsblocklänge sein (16 Bytes für AES). Da eine beliebige Eingabenachricht eine beliebige Länge haben kann, wird ein Auffüllen hinzugefügt: einige Bytes mit bestimmten Inhalten, sodass sie bei der Entschlüsselung eindeutig entfernt werden können. In Ihrem Fall beschwert sich OpenSSL darüber, dass es bei der Entschlüsselung keine geeignete Auffüllstruktur findet. Wenn der Angreifer jedoch die letzten 32 Bytes der verschlüsselten Daten nicht ändert, bleibt das Auffüllen unbeschädigt, sodass Änderungen aller bis auf die letzten 32 Bytes unentdeckt bleiben. Und selbst für die letzten 32 Bytes gibt es Möglichkeiten, sich der Erkennung mit einer nicht allzu geringen Wahrscheinlichkeit zu entziehen.

Ich habe mein Experiment überarbeitet, um etwas anderes als die letzten 32 Bytes zu ändern, und openssl hat es bei der Entschlüsselung nicht erkannt.
iamtheneal
2012-04-14 07:35:22 UTC
view on stackexchange narkive permalink

Die CBC-Verschlüsselung bietet keine Datenintegrität. Hier ist der Grund:

Korrigieren Sie einen Schlüssel k (dem Angreifer unbekannt). Sei E (k, -) und D (k, -) die bloße Verschlüsselungs- und Entschlüsselungsfunktion einer Blockverschlüsselung. Sei p ein einzelner Klartextblock. Ich werde XOR mit + bezeichnen. Nachdem wir einige IV repariert haben, verschlüsseln wir wie folgt:

c = E (k, p + IV).

Dann senden wir IV und c über den Draht. Zum Entschlüsseln berechnen wir

p = D (k, c) + IV.

(Beachten Sie, dass dies der Aussage D (k, c) = IV + p entspricht. )

Angenommen, ein Angreifer kennt ein einzelnes Klartext / Chiffretext-Paar. Bezeichnen wir sie wie oben als p und (IV, c). Angenommen, der Angreifer möchte Chiffretext erstellen, der in einen anderen Klartextblock seiner Wahl entschlüsselt wird - sagen wir p '. Ich behaupte, dass (IV + p + p ', c) zu p' entschlüsselt. Warum?

Nun, wir folgen einfach dem obigen Entschlüsselungsverfahren und ersetzen IV durch IV + p + p '. Wir haben

D (k, c) + (IV + p + p ') = (IV + p) + (IV + p + p') = p '.

Amüsanterweise ist der EZB-Modus für dieses Problem nicht anfällig (obwohl ich seine Verwendung auch nicht unterstütze).

Tolle theoretische Erklärung.
D.W.
2011-12-05 02:06:05 UTC
view on stackexchange narkive permalink

Die AES-CBC-Verschlüsselung bietet keine Integrität. Abhängig davon, wie es implementiert und verwendet wird, kann es vorkommen, dass versehentliche Änderungen am Chiffretext festgestellt werden, es jedoch nicht gegen böswillige Manipulationen am Chiffretext verteidigt.

Das Verschlüsseln ohne Authentifizierung ist einer der häufigsten Fehler bei der Verwendung von Kryptografie. Es hat zu schwerwiegenden Sicherheitslücken in vielen Systemen geführt, darunter ASP.NET, XML-Verschlüsselung, Amazon EC2, JavaServer Faces, Ruby on Rails, OWASP ESAPI, IPSEC und WEP. Weitere Informationen finden Sie unter dem vorherigen Link.

Das Update: Sie sollten entweder ein authentifiziertes Verschlüsselungsschema (nicht AES-CBC) wie EAX oder einen Nachrichtenauthentifizierungscode wie CMAC zum Verschlüsseln verwenden -dann-Authentifizierungsmodus.

Wenn Sie Kryptografie selbst implementieren möchten, empfehlen wir Ihnen, die Frage mit dem Titel Lehren und Missverständnisse in Bezug auf Verschlüsselung und Kryptologie zu lesen, um Ihnen zu helfen Vermeiden Sie einige der häufigsten Fehler. Die Verwendung der Verschlüsselung ohne Authentifizierung ist eine davon.

Sehr hilfreiche Vorschläge in dem von Ihnen angegebenen Link.
Dies sollte die akzeptierte Antwort sein, da die Aussage "Symmetrische Verschlüsselung bietet keine Integrität" in solchen allgemeinen Worten einfach nicht wahr ist.AES-CBC allein tut dies nicht, während Sie korrekt auf andere _symmetrische_ Verschlüsselungsalgorithmen verweisen, die _do_ Integrität (und Authentizität) bieten.
Versile
2011-12-04 18:34:23 UTC
view on stackexchange narkive permalink

Symmetrische Chiffren bieten an sich keine Integrität, da sie keine böswilligen oder versehentlichen Änderungen am Chiffretext erkennen. Bei der Entschlüsselung wird etwas anderes als der ursprüngliche Klartext ausgegeben. Wenn dies nicht zu einer Protokollverletzung der entschlüsselten Nutzdaten führt, liegt ein Integritätsproblem vor.

Die Lösung besteht darin, Klartext in Pakete zu verpacken, die Daten enthalten, die verwendet werden können Um die Integrität des Pakets zu überprüfen, wird normalerweise eine Hash-basierte Prüfsumme verwendet ( Bearbeiten: HMAC mit Schlüssel). Dies ist, was z.B. für die Sicherheit der Transportschicht.

Hier ist ein Beispiel eines Klartextschutzschemas, das in einem sicheren Byte-Transportprotokoll der Versile Platform verwendet wird (Haftungsausschluss: Ich bin an der VP-Entwicklung beteiligt).

Bearbeiten: Ich habe festgestellt, dass die Nachrichtenkapselung für Ihr Szenario, das eine vollständige Datei umfasst, übertrieben ist. Daher ist es besser, nur einen verschlüsselten MAC zum vollständigen Chiffretext hinzuzufügen. Für paketgeschützte Formate wie D.W. weist auf die Details hin, und "Prüfsumme" sollte als verschlüsselter MAC durchgeführt werden.

Bitte beachten Sie mein Update oben. Denken Sie, dass es eine "Protokollverletzung" gibt, die dazu führt, dass die Entschlüsselung fehlschlägt? Wenn ja, bietet AES-CBC Datenintegrität?
@88keys,, wie in meiner Antwort erläutert, erkennt möglicherweise einige versehentliche Änderungen am Chiffretext, reicht jedoch nicht aus, um böswillige Änderungen am Chiffretext zu erkennen oder zu verhindern.
@Versile, eine "Hash-basierte Prüfsumme" ist nicht ausreichend. Es ist an zwei Enden unzureichend: Erstens müssen Sie einen Nachrichtenauthentifizierungscode verwenden, keinen nicht verschlüsselten Hash. Zweitens sollten Sie normalerweise den MAC auf den Chiffretext anwenden und den Klartext vor der Verschlüsselung nicht hashen. Folglich enthält Ihr zweiter Absatz schlechte Ratschläge, die einige Leser in die Irre führen können. Die Details sind hier wichtig.
@D.W. Vielen Dank, dass Sie auf den ungenauen Verweis auf Prüfsummen hingewiesen haben, bei denen es sich um einen MAC handeln sollte. In Bezug auf Klartext vs. Chiffretext als MAC-Eingabe glaube ich, dass es mehrere Möglichkeiten gibt, dies zu tun, z. Der MAC für TLS-Datensätze verwendet komprimierten Klartext als Eingabe (RFC 5246, Abschnitt 6.2.3.1).
@Versile, Ja, es gibt mehrere Möglichkeiten, dies zu tun, aber einige (verschlüsseln und dann authentifizieren) sind sicher. Andere (authentifizieren und dann verschlüsseln) sind nicht garantiert sicher. TLS 1.0 verwendet Authentifizieren und Verschlüsseln, was sich als subtile Sicherheitslücke herausstellt: siehe den jüngsten BEAST-Angriff. Daher empfehle ich Ihnen nicht, TLS zu folgen. Stattdessen empfehle ich die Verwendung von Encrypt-Then-Authenticate.
Ben
2016-08-02 16:22:04 UTC
view on stackexchange narkive permalink

Wenn Sie den Klartext einschließen, würde ich mit Ja sagen, dass die Verwendung eines symmetrischen Schlüssels zum Verschlüsseln von Daten, bei dem der Empfänger ihn entschlüsseln und mit dem Klartext vergleichen kann, Datenintegrität bietet.



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 3.0-Lizenz, unter der er vertrieben wird.
Loading...