Zusätzliche authentifizierte Daten (Additional Authenticated Data, AAD) sind beliebige Strings, die Sie bei einer Verschlüsselungs- oder Entschlüsselungsanfrage an den Cloud Key Management Service übergeben. AAD werden als Integritätsprüfung verwendet und können dabei helfen, Ihre Daten vor einer Confused Deputy Attack zu schützen. Der AAD-String darf nicht größer als 64 KiB sein.
Cloud KMS entschlüsselt Geheimtext nur, wenn derselbe AAD-Wert sowohl für die Verschlüsselung als auch für die Entschlüsselung verwendet wird.
AAD sind an die verschlüsselten Daten gebunden, da der Geheimtext nur entschlüsselt werden kann, wenn die AAD bekannt sind. Sie werden jedoch nicht als Teil des Geheimtexts gespeichert. AAD erhöhen auch nicht die kryptografische Stärke des Geheimtexts. Stattdessen ermöglichen sie eine zusätzliche Prüfung durch Cloud KMS, um eine Entschlüsselungsanfrage zu authentifizieren.
In Cloud KMS sind AAD immer vorhanden, wenn Sie eine Verschlüsselung oder Entschlüsselung anfordern. Wenn Sie keinen Wert für AAD angeben, wird ein leerer String verwendet. Wenn ein leerer String als AAD für die Verschlüsselung von Klartext verwendet wird, ermöglicht nur ein leerer String die Entschlüsselung des Geheimtexts.
AAD werden von Cloud-Audit-Logging nicht erfasst.
Zeitpunkt der Nutzung von AAD
Ein Beispiel für die Verwendung von AAD ist, wenn Ihre Anwendung als Wrap-/Unwrap-Proxy mit einem einzelnen Schlüssel und einer unbegrenzten Anzahl von Clients dient, wobei jeder Client unterschiedliche Sicherheitsgrenzen aufweist. Die Anwendung könnte beispielsweise eine Tagebuchanwendung sein, mit der Nutzer ein privates Tagebuch führen können. Wenn ein Nutzer einen privaten Tagebucheintrag ansehen möchte, kann die Anwendung den eindeutigen Nutzernamen als AAD in der Unwrap-Anfrage (Entschlüsselung) verwenden, um den Nutzer ausdrücklich zu authentifizieren. In diesem Szenario können Sie einen einzelnen Schlüssel für mehrere (unbegrenzte) Nutzer verwenden. Ein großer Vorteil besteht darin, dass Sie keinen Status für einzelne Nutzer gewährleisten müssen.
Ein weiteres Beispiel wäre eine Anwendung, die Inhabertokens mit persönlichen Daten wie einer E-Mail-Adresse verwenden muss. Eingaben für die Inhabertokens wären die für ein Inhabertoken verwendeten authentifizierten Daten plus die Klartext-E-Mail-Adresse. Diese Eingaben würden dann verschlüsselt, damit das ausgetauschte Inhabertoken die Form von Additional Encrypted Authenticated Data (AEAD) hat.
Beispiel für eine Confused Deputy Attack
Dieses Beispiel zeigt, wie eine Anwendung so getäuscht werden kann, dass sie Geheimtext im Namen eines böswilligen Nutzers entschlüsselt. Die Anwendung in diesem Beispiel ist der "Confused Deputy", weil die Anwendung nicht erkennt, dass der Angreifer die Anwendung so getäuscht hat, dass er ihre Berechtigungen nutzen kann. Das Ergebnis ist, dass der Angreifer verschlüsselte Daten ansehen kann, die ursprünglich für einen anderen Nutzer verschlüsselt wurden. Beachten Sie, dass dem Angreifer bei diesem Angriff der Verschlüsselungsschlüssel nicht bekannt sein muss, weil die Entschlüsselung durch den "Confused Deputy" durchgeführt wird.
Mit einer Tagebuchanwendung können Nutzer ein privates Tagebuch führen. Jeder Tagebucheintrag wird verschlüsselt und darf nur von dem Nutzer entschlüsselt werden, der ihn erstellt hat.
Anne erstellt einen Tagebucheintrag. Die Anwendung verschlüsselt den Tagebucheintrag und speichert dann den verschlüsselten Tagebucheintrag an einem Ort, der für Tagebucheinträge von Anne reserviert ist.
Anne sendet eine Anfrage, um ihren Tagebucheintrag ansehen zu können. Da sich der verschlüsselte Tagebucheintrag an einem für Anne reservierten Ort befindet, entschlüsselt die Anwendung die Daten und gibt sie als Antwort auf die Anfrage von Anne zurück. Dies ist das vorgesehene Verhalten der Anwendung.
Daniel kopiert den Tagebucheintrag von Anne aus dem für Anne reservierten Standort an den für Daniel reservierten Standort.
Daniel sendet eine Anfrage, um Daniels Kopie von Annes Tagebucheintrag einzusehen. Da sich die Kopie von Annes Tagebucheintrag an einem für Daniel reservierten Ort befindet, entschlüsselt die Anwendung den Tagebucheintrag und gibt den Klartext als Antwort auf Daniels Anfrage zurück. Daniel kann dann Annes Tagebucheintrag ansehen, was nicht das vorgesehene Verhalten der Anwendung ist.
Als Schutz gegen diese Art von Angriff kann die Anwendung einen nicht leeren String als AAD zur Verschlüsselung und Entschlüsselung verwenden. Die AAD bieten eine zusätzliche Prüfung für Entschlüsselungsanfragen. Wenn Daniel die Entschlüsselungsanfrage sendet, um Daniels Kopie von Annes Tagebucheintrag einzusehen, ist Daniels Anfrage nur erfolgreich, wenn Daniel die Anwendung auch dazu bringen kann, die korrekten AAD zu verwenden.
AAD speichern oder reproduzieren
Entscheiden Sie vor der Verschlüsselung mit AAD, ob Sie die AAD zusammen mit den verschlüsselten Daten speichern oder die AAD zur späteren Entschlüsselung reproduzieren.
Ein Grund zum Speichern von AAD besteht darin, die Verwendung der AAD zu vereinfachen, wenn Geheimtext entschlüsselt werden muss. Zum Beispiel könnte eine Datenbankzeile sowohl den Geheimtext als auch die AAD enthalten, die verwendet wurden, als der Klartext verschlüsselt wurde. Wenn eine Entschlüsselungsanfrage empfangen wird, kann die Anwendung sowohl die AAD als auch den Geheimtext aus der Datenbank abrufen. Die Anwendung kann dann die AAD für die Entschlüsselung des Geheimtexts verwenden.
Ein Grund, AAD zu reproduzieren, besteht darin, alle nicht privaten Daten zu verifizieren und zugleich die Speicherung der AAD zu vermeiden. Wenn Sie beispielsweise dafür sorgen möchten, dass der Dateipfad und der Dateiname einer verschlüsselten Datei nicht geändert wurden, können Sie den Dateipfad und den Dateinamen als AAD angeben, wenn Sie die Datei verschlüsseln. Wenn eine Verschlüsselungsanfrage für die Datei gesendet wird, können Sie die AAD reproduzieren, indem Sie den Dateipfad und den Dateinamen untersuchen.
AAD speichern
Speichern von AAD bedeutet, dass AAD gespeichert werden und dann für Ihre Anwendung zur späteren Nutzung verfügbar sind. Beispielsweise könnte eine Datenbanktabelle eine Spalte für den Geheimtext und eine Spalte für die AAD enthalten, die bei der Erstellung des Geheimtexts verwendet wurden. Wenn es an der Zeit ist, den Geheimtext zu entschlüsseln, ruft die Anwendung die AAD ab und verwendet sie für die Entschlüsselung.
Ein Beispiel ist eine Tagebuchanwendung, die einen Tagebucheintrag nur für den Nutzer anzeigen soll, der ihn erstellt hat. Wenn ein Tagebucheintrag erstellt wird, wird er verschlüsselt und in einer Datenbank in der Spalte ENCRYPTED_DIARY_ENTRY
gespeichert. Für jede Anfrage zum Anzeigen eines Tagebucheintrags authentifiziert die Anwendung den Nutzer und stellt den Tagebucheintrag dann für den Nutzer bereit.
Nehmen wir an, dass keine AAD verwendet werden (außer den standardmäßigen leeren Strings) und Daniel die ENCRYPTED_DIARY_ENTRY
-Daten von Anne in die ENCRYPTED_DIARY_ENTRY
-Daten von Daniel kopieren konnte. Wenn Daniel eine Entschlüsselungsanfrage für die ENCRYPTED_DIARY_ENTRY
-Daten von Daniel sendet (die aus Annes Daten kopiert wurden), führt die Anwendung die Entschlüsselung durch, ohne zu bemerken, dass sie getäuscht wurde.
Daniel kann den Tagebucheintrag von Anne als Klartext sehen.
Nehmen wir an, die E-Mail-Adresse des Nutzers wird als AAD verwendet, wenn ein Tagebucheintrag verschlüsselt wird. Wenn Anne einen Tagebucheintrag erstellt, speichert die Anwendung ihre unverschlüsselte E-Mail-Adresse in der Spalte EMAIL
zusammen mit den ENCRYPTED_DIARY_ENTRY
-Daten. Nehmen wir außerdem an, dass Daniel die ENCRYPTED_DIARY_ENTRY
-Daten von Anne in die ENCRYPTED_DIARY_ENTRY
-Daten von Daniel kopieren konnte.
Wenn Daniel eine Entschlüsselungsanfrage sendet, ruft die Anwendung die E-Mail-Adresse von Daniel aus der Spalte EMAIL
ab, um die AAD für die Entschlüsselungsanfrage zu verwenden.
Die E-Mail-Adresse von Daniel funktioniert nicht als AAD zur Verschlüsselung, also ermöglicht die Anwendung Daniel nicht, den Tagebucheintrag von Anne als Klartext zu sehen.
AAD reproduzieren
Das Reproduzieren von AAD bedeutet, dass die AAD nicht gespeichert, sondern reproduziert werden, wenn es Zeit für die Entschlüsselung ist.
Als Beispiel können Sie einen Dateipfad und Dateinamen als AAD verwenden. Gehen wir davon aus, dass bei der Verschlüsselung die verschlüsselte Datei in MY_PATH\MY_FILE1.enc
gespeichert wurde, sodass "MY_PATH\MY_FILE1.enc"
als AAD verwendet wurde. Diese AAD werden nicht gespeichert. Diese AAD werden nicht gespeichert. Wenn eine Entschlüsselungsanfrage empfangen wird, reproduziert die Anwendung die AAD, indem sie den Dateipfad und den Dateinamen der zu entschlüsselnden Datei untersucht. Wenn die verschlüsselte Datei nicht an einen anderen Speicherort verschoben wird, wird "MY_PATH\MY_FILE1.enc"
während der Entschlüsselung als AAD verwendet, was den AAD entspricht, die während der Verschlüsselung verwendet wurden, damit die Entschlüsselung fortgesetzt werden kann.
Wenn die verschlüsselte Datei verschoben wurde, z. B. zu SOME_OTHER_PATH\MY_FILE1.enc
, wird "SOME_OTHER_PATH\MY_FILE1.enc"
als AAD zur Entschlüsselung verwendet. Dieser AAD-Wert entspricht nicht dem für die Verschlüsselung verwendeten AAD-Wert. Somit schlägt die Entschlüsselung fehl.