Um das Authentifizierungs-Tag im Galois / Counter-Modus (GCM) zu berechnen, wird zunächst ein MAC mit GHASH über der Chiffre berechnet Text und die zusätzlichen Daten. Danach wird dieser MAC mit GCTR (unter Verwendung des ersten Zählers) verschlüsselt.

Meine Frage lautet: Warum ist dieser letzte Verschlüsselungsschritt erforderlich? Was wäre das Sicherheitsproblem, wenn ich nur die Ausgabe von GHASH direkt als Authentifizierungs-Tag verwenden würde?

Antwort

Was wäre das Sicherheitsproblem, wenn ich nur die Ausgabe von GHASH direkt als Authentifizierungs-Tag verwenden würde?

Dann könnte jemand, der verschlüsselte Nachrichten abhört, $ H $ wiederherstellen, von denen einer korrekt ist.

Die Ausgabe von GHASH ist ein öffentliches Polynom (basierend auf dem Chiffretext und dem AAD), das mit einem geheimen Wert $ H $ ausgewertet wird. Es stellt sich heraus, dass bei einem solchen Polynom $ H $ effizient wiederhergestellt werden kann, indem das Polynom entweder als $ \ umgeschrieben wird mathrm {GHASH} (H) + \ mathrm {Tag} = 0 $ und Wiederherstellen der Wurzeln davon (was in einem endlichen Feld erfolgen kann) oder noch einfacher, zwei solcher Chiffretexte zu erhalten und beide neu zu schreiben Verwenden Sie einen erweiterten euklidischen Wert, um ihre gemeinsame Wurzel wiederherzustellen.

Bei $ H $ kann ein Angreifer verschlüsselt beliebige Änderungen an verschlüsselten Nachrichten vornehmen ;; Ja, das ist schlecht.

Kommentare

  • Eine weitere Frage: Warum muss GCTR verwendet werden, um den GHASH-Block zu verschlüsseln, anstatt nur zu verwenden $ Enc_H (GHASH) $ als Tag? Auf diese Weise kann GMAC ohne IV verwendet werden.
  • @mat: Sie meinen, $ GHASH $ über AES zu senden (mit $ H $ als Schlüssel ) Nun, eigentlich würde so etwas funktionieren (nun, ich würde ' nicht $ H $ als Schlüssel verwenden, aber anders als das …) und wäre ein konservativeres Design, jedoch wurde GCM ursprünglich als Pipe-Lineable-Modus konzipiert, dh es könnte bei einer AES-Hardware-Implementierung implementiert werden, bei der wir der Hardware bei jedem Taktzyklus den nächsten Klartextblock geben und bei jedem Taktzyklus den Der Chiffretext von vor 10 bis 14 Zyklen wird angezeigt. Durch eine Verschlüsselung des GHASH blockieren wir ' die Pipeline …
  • Ich meine nur eine einfache EZB-Verschlüsselung (entweder mit $ H $ oder $ K $ als Schlüssel) des GHASH, anstatt dies mit GCTR zu tun Dies hätte den Vorteil, dass GMAC einfacher zu verwenden wäre, da ' keine Nonce mehr benötigt. Das Pipelinig ist hier kein Problem, da die Verschlüsselung des Tags ohnehin der allerletzte Schritt in GCM ist, sodass die Pipeline zu diesem Zeitpunkt definitiv leer ist.
  • @David 天宇 Wong: Hauptsächlich Leistung ( GHASH ist parallisierbar, nicht verschlüsselte Hashes sind normalerweise nicht ' t)
  • @David 天宇 Wong: Oh, richtig, das auch …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.