it-swarm.com.de

Warum kann ich nicht denselben Schlüssel für Verschlüsselung und MAC verwenden?

Ich habe ein einfaches Dateiverschlüsselungsprogramm als Beispiel für die korrekte Verschlüsselung geschrieben, aber nach dem Lesen von Fragen zu Verschlüsselung + MAC habe ich einen Fehler gemacht, indem ich das verwendet habe gleicher Schlüssel für beide.

Ich bin dabei, mein Programm zu reparieren, um einen längeren Schlüssel zu generieren und ihn zu teilen, aber ich frage mich, welche schlimmen Dinge passieren, wenn Sie dies tun?

34
Brendan Long

Die Verwendung eines Schlüssels für mehrere Zwecke wird im Allgemeinen als schlechter Stil angesehen. Dies impliziert nicht direkt eine Sicherheitsanfälligkeit. Ich verstoße gelegentlich gegen dieses Prinzip, wenn es für das Protokolldesign geeignet ist.

Der wichtigste Grund dafür ist, dass Sie, wenn Sie denselben Schlüssel für mehrere Schemata verwenden, Interaktionen zwischen den verschiedenen Schemata berücksichtigen müssen. Mit unabhängigen Schlüsseln müssen Sie sich darüber keine Sorgen machen.

Ein weiteres Problem besteht darin, dass ein Schema möglicherweise beschädigt wird und die Schlüsselwiederherstellung ermöglicht. Diese Schlüsselwiederherstellung unterbricht dann alle Teile Ihres Protokolls, die diesen Schlüssel verwendet haben. Wenn Sie beispielsweise einen fehlerhaften MAC-Algorithmus implementieren, kann eine Unterbrechung dieses Algorithmus nicht nur die Authentifizierung, sondern auch die Vertraulichkeit Ihrer Nachricht beeinträchtigen.

Einige praktische Beispiele:

  • Die Verwendung von AES-CBC für die Verschlüsselung zusammen mit AES-CBC-MAC ist völlig fehlerhaft, wenn Sie denselben Schlüssel verwenden.
  • Die Verwendung von AES zur Verschlüsselung zusammen mit HMAC-MD5/SHA-1/SHA-2 hat keine bekannten Wechselwirkungen. Es ist unplausibel, dass es solche Wechselwirkungen gibt.
  • AES-CCM ist ein Modus, der AES-CTR für die Verschlüsselung und AES-CBC-MAC als MAC verwendet. Dieser Modus ist nachweislich so stark wie AES.

Diese Beispiele zeigen, dass die praktische Sicherheit einer solchen Kombination von völlig kaputt bis nachweislich sicher reichen kann.


Der richtige Ansatz besteht darin, mit einem Hauptschlüssel zu beginnen und eine Schlüsselableitungsfunktion wie HKDF zu verwenden, um einzelne Schlüssel abzuleiten. Diese Schlüssel sind unabhängig und verhindern Interaktionen zwischen den verschiedenen Schemata. Es ist nicht möglich, den Hauptschlüssel von einzelnen Schlüsseln wiederherzustellen, sodass eine Unterbrechung eines Teils des Systems nicht alles andere auf der Grundlage dieses Hauptschlüssels zerstört.

40
CodesInChaos