Aby obliczyć tag uwierzytelniania w trybie Galois / Counter (GCM), najpierw obliczany jest adres MAC za pomocą GHASH na szyfrze tekst i dodatkowe dane. Następnie ten adres MAC jest szyfrowany przy użyciu GCTR (przy użyciu pierwszego licznika).
Moje pytanie brzmi: dlaczego ten ostatni krok szyfrowania jest konieczny? Jaki byłby problem z bezpieczeństwem, gdybym użył danych wyjściowych GHASH bezpośrednio jako tagu uwierzytelniającego?
Odpowiedź
Jaki byłby problem z bezpieczeństwem, gdybym użył danych wyjściowych GHASH bezpośrednio jako tagu uwierzytelniającego?
Wtedy ktoś nasłuchujący zaszyfrowanych wiadomości mógłby odzyskać $ H $ , z których jeden jest poprawny.
Wynik GHASH jest publicznym wielomianem (opartym na zaszyfrowanym tekście i AAD), obliczanym na tajną wartość $ H $ . Okazuje się, że mając taki wielomian, $ H $ można skutecznie odzyskać, przepisując wielomian jako $ \ mathrm {GHASH} (H) + \ mathrm {Tag} = 0 $ i odzyskanie korzeni tego (co można zrobić w polu skończonym) lub nawet łatwiej, uzyskanie dwóch takich szyfrogramów, przepisanie obu je i użyć rozszerzonej wartości euklidesowej, aby odzyskać ich wspólny katalog główny.
Biorąc pod uwagę $ H $ , atakujący może w trywialny sposób wprowadzić dowolne modyfikacje zaszyfrowanych wiadomości ; tak, to źle.
Komentarze
- Jeszcze jedno pytanie: dlaczego konieczne jest użycie GCTR do zaszyfrowania bloku GHASH zamiast używania $ Enc_H (GHASH) $ jako tag? W ten sposób GMAC może być używany bez potrzeby IV.
- @mat: masz na myśli wysyłanie $ GHASH $ przez AES (używając $ H $ jako klucza Cóż, w rzeczywistości tego typu rzeczy by działały (no cóż, nie ' nie używałbym $ H $ jako klucza, ale poza tym …) i nie byłby bardziej konserwatywny projekt; jednak GCM został pierwotnie zaprojektowany jako tryb liniowy; to znaczy, można go zaimplementować, biorąc pod uwagę implementację sprzętową AES, w której każdy cykl zegara przekazuje sprzętowi następny blok tekstu jawnego, a każdy cykl zegara wyskakuje szyfrogram sprzed 10–14 cykli. Wykonując szyfrowanie w GHASH, ' d blokujemy potok …
- Mam na myśli proste Szyfrowanie przez EBC (przy użyciu klucza $ H $ lub $ K $) GHASH zamiast robić to za pomocą GCTR. miałoby tę zaletę, że GMAC byłoby łatwiejsze w użyciu, ponieważ nie ' nie potrzebowałoby już wartości jednorazowej. Potok nie stanowi tutaj problemu, ponieważ szyfrowanie tagu i tak jest ostatnim krokiem wykonywanym w GCM, więc potok jest zdecydowanie pusty na tym etapie.
- @David 天宇 Wong: głównie wydajność ( GHASH jest paraliżalny, skróty bez klucza zazwyczaj nie są ' t)
- @David 天宇 Wong: och, racja, to też …