it-swarm-eu.dev

Bietet symmetrische Verschlüsselung Datenintegrität?

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 MACs, 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 das openssl-Tool unter Linux zum Verschlüsseln einer Datei verwendet habe. 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 benutzte, waren:

openssl enc -aes-128-cbc -in test -out test.enc
openssl enc -d -aes-128-cbc -in test.enc -out test.dec
18
88keys

Symmetrische Verschlüsselung bietet nicht 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 und überprüfte Integrität kombinieren (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 Quelldatenlänge ein Vielfaches der Blockverschlüsselungsblocklänge (16 Byte für AES) sein muss. . Da eine beliebige Eingabenachricht eine beliebige Länge haben kann, werden einige Auffüllungen hinzugefügt: einige Bytes mit bestimmten Inhalten, so dass 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.

19
Tom Leek

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 behoben 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).

12
iamtheneal

Die AES-CBC-Verschlüsselung bietet keine Integrität. Abhängig davon, wie es implementiert und verwendet wird, kann es vorkommen, dass versehentlich Änderungen am Chiffretext vorgenommen werden, aber es schützt nicht vor böswilligen Manipulationen am Chiffretext .

Verschlüsselung ohne Authentifizierung ist einer der häufigsten Fehler bei der Verwendung von Kryptografie . Es hat zu schwerwiegenden Sicherheitslücken in vielen Systemen geführt, einschließlich ASP.NET, XML-Verschlüsselung, Amazon EC2, JavaServer Faces, Ruby on Rails, OWASP ESAPI, IPSEC und WEP. Siehe den vorherigen Link für Mehr Informationen.

Die Lösung: Sie sollten entweder ein authentifiziertes Verschlüsselungsschema (nicht AES-CBC) wie EAX verwenden oder einen Nachrichtenauthentifizierungscode wie CMAC im Verschlüsselungs- und dann Authentifizierungsmodus verwenden.

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

9
D.W.

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 einzuschließen, die Daten enthalten, mit denen die Integrität des Pakets überprüft werden kann. In der Regel handelt es sich um eine Hash-basierte Prüfsumme ( edit: verschlüsseltes HMAC). Dies ist, was z.B. für die Sicherheit der Transportschicht.

Hier ist ein Beispiel eines Klartext-Schutzschemas, 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, wenn Sie nur einen verschlüsselten MAC hinzufügen Geheimtext. Für paketgeschützte Formate wie D.W. weist auf die Details hin, und "Prüfsumme" sollte als verschlüsselter MAC durchgeführt werden.

5
Versile