För att beräkna autentiseringstaggen i Galois / Counter-läge (GCM) beräknas först en MAC med GHASH över chifferet text och tilläggsdata. Därefter krypteras denna MAC med GCTR (med den första räknaren).
Min fråga är: Varför är det här sista krypteringssteget nödvändigt? Vad skulle säkerhetsproblemet vara om jag bara använde utdata från GHASH direkt som autentiseringstagg?
Svar
Vad skulle säkerhetsproblemet vara om jag bara använde utdata från GHASH direkt som autentiseringstagg?
Då kan någon som lyssnar på krypterade meddelanden återhämta sig $ H $ , varav en är korrekt.
Utdata från GHASH är ett offentligt polynom (baserat på ciphertext och AAD), utvärderat till ett hemligt värde $ H $ . Det visar sig att med tanke på ett sådant polynom kan $ H $ effektivt återställas, antingen genom att skriva om polynomet som $ \ mathrm {GHASH} (H) + \ mathrm {Tag} = 0 $ , och återställa rötterna till det (vilket kan göras i ett ändligt fält), eller ännu enklare, få två sådana ciphertexts, skriva om båda dem och använda ett utökat euklidiskt värde för att återställa deras gemensamma rot.
Med tanke på $ H $ kan en angripare trivialt göra godtyckliga ändringar av krypterade meddelanden ; ja, det är dåligt.
Kommentarer
- Ytterligare en fråga: Varför är det nödvändigt att använda GCTR för att kryptera GHASH-blocket istället för att bara använda $ Enc_H (GHASH) $ som tagg? På så sätt kan GMAC användas utan behov av IV.
- @mat: du menar att skicka $ GHASH $ genom AES (med $ H $ som nyckel Ja, faktiskt skulle den typen av saker fungera (ja, jag skulle inte ' inte använda $ H $ som en nyckel, men förutom det …) och skulle vara en mer konservativ design; emellertid GCM var ursprungligen utformad för att vara ett rörledningsbart läge; det vill säga det kunde implementeras med en AES-hårdvaruimplementering där varje klockcykel ger vi nästa klartextblock till hårdvaran och varje klockcykel ciphertext från 10-14 cykler sedan dyker upp. Genom att göra en kryptering på GHASH blockerar vi ' rörledningen …
- Jag menar bara en enkel ECB-kryptering (med antingen $ H $ eller $ K $ som nyckel) av GHASH istället för att göra det med GCTR. Det w skulle ha fördelen att GMAC skulle vara lättare att använda, eftersom det inte ' skulle behöva en nonce längre. Rörledningen är inte ett problem här, eftersom kryptering av taggen är det allra sista steget som görs i GCM ändå, så rörledningen är definitivt tom i detta skede.
- @ David 天宇 Wong: mestadels prestanda ( GHASH är paralliserbar, hasade hashknappar är vanligtvis inte ' t)
- @ David 天宇 Wong: åh, rätt, det också …