is AES-128-CBC then SHA-256 more secure than AES-128-GCM?
Non sono affatto comparabili. SHA-256 è non un MAC! Un MAC richiede un segreto. AES-128-CBC con un HMAC-SHA-256 sul testo cifrato sarebbe più simile a AES-128-GCM, ma GCM sarebbe comunque preferito semplicemente perché ti dà meno opportunità di rovinarlo.
I tried to use AES-128-GCM, however I did some simple modification in the ciphertext before decrypting, just appended some bytes to the ciphertext, and found that it decrypts successfully
Sembra che tu stia utilizzando la libreria in modo errato o che la libreria abbia un bug. Qual è la libreria e hai un esempio che riproduce il problema?
AES GCM is authenticate then encrypt algorithm?
Non proprio. Non sono completamente sicuro della terminologia qui, ma non penso che sia realmente considerato MAC-then-encrypt o encrypt-then-MAC, è in una classe separata di modalità AEAD che include un MAC nell'algoritmo di crittografia invece di prima o dopo. Direi che è più simile a encrypt-then-MAC, come puoi vedere nel diagramma su Wikipedia è il testo cifrato che viene inserito nella funzione GHASH, non nel testo in chiaro.
encrypt then authenticate feels more secure to me
Vedi questa domanda su encrypt-then-MAC vs MAC-then-encrypt. Encrypt-then-MAC è generalmente raccomandato, in quanto impedisce cose come l'attacco padding oracle (se fatto correttamente), tuttavia tu Devo anche essere consapevole di cose come non dimenticare di includere l'IV nel MAC. Non dovresti farlo da solo, dovresti usare una libreria che gestisca tutte le "cose crittografiche" per te.
AES GCM authentication even secure enough to be compared to SHA256 for example or is it CRC tier for quick integrity
Come affermato in precedenza, SHA-256 non è un MAC, ma il miglior confronto che ho trovato di HMAC-SHA-256 e GHASH è qui . HMAC-SHA-256 troncato a 16 byte sembra essere sicuro per i 128 bit completi, mentre la sicurezza di GHASH dipende dalla dimensione del testo cifrato. Se un utente malintenzionato tenta di creare un testo cifrato a 1 blocco, ha una probabilità 1/2 128 di riuscire, tuttavia se prova un messaggio di blocco 2 32 - 1 (la dimensione massima per GCM) la loro probabilità aumenta a circa 1/2 96 . È improbabile che ciò sia importante nella pratica, poiché 2 96 è ancora proibitivamente grande, specialmente dato che richiede l'uso di un testo cifrato di molti gigabyte.
L'altra cosa da ricordare su GCM è che la sua autenticità dipende da nonce uniche. Se un nonce viene mai riutilizzato non puoi più fidarti dell'autenticità dei messaggi, che è una preoccupazione se non sei estremamente sicuro che i nonces non saranno mai riutilizzati. Il compromesso è che GCM è generalmente molto più veloce di CBC + HMAC, motivo per cui è solitamente preferito da TLS dove le chiavi sono di breve durata (rendendo il riutilizzo nonce ancora meno probabile). Come spiegato qui , finché usi un contatore da 12 byte che sei molto sicuro non arriverà mai indietro (ad es. a causa di un guasto hardware) o un IV casuale a 16 byte dovresti stare bene.