Tu fai diverse domande qui, quindi vado a risolverli come sopra indicato:
È supportato in mcrypt()?
No, mcrypt non supporta la crittografia AES di per sé. Tuttavia, supporta Rijndael (pronunciato come "rain-doll"), che è l'algoritmo di base per AES. AES è definito come un set specifico di parametri per Rijndael, quindi è possibile utilizzare i parametri appropriati per abbinare AES, ma la modalità GCM non è disponibile.
Sembra che GCM sia la via da percorrere per la sicurezza e anche la prestazione (ho visto cifre di prestazioni molto impressionanti). La mia sensazione è , ma abbiamo bisogno di questo, ma non riesco a trovare alcun esempio.
Sfortunatamente, questo è il modo sbagliato per scegliere un modello di sicurezza o un'implementazione. Differenti algoritmi e modalità di cifratura hanno usi diversi e l'applicazione della modalità sbagliata, ad esempio, può rendere l'applicazione vulnerabile agli attacchi anche se si utilizza un cifrario apparentemente forte come AES. GCM è parlato molto bene perché questa modalità offre crittografia e autenticazione in un colpo solo. Non tutte le applicazioni richiedono entrambe o possono usarle in modo tale da indebolire la loro resistenza progettata. Dovrai fare i compiti per assicurarti che questa sia la modalità corretta da utilizzare per la tua applicazione e quali sono i parametri minimi attuali da utilizzare.
A meno che non siate esperti di sicurezza, è molto meglio utilizzare un framework comprovato. Non è mai una buona idea implementare la propria crittografia o gestione della sicurezza perché è molto facile commettere errori che possono lasciarti aperto a semplici attacchi. L'opzione migliore è trovare un framework open source, comprovato e testato che faccia ciò che si vuole realizzare e configurarlo attentamente in base alle proprie esigenze. Dopodiché, è fondamentale mantenere il framework aggiornato e aggiornato.
Dato che si menzionano le statistiche sulle prestazioni per AES-GCM, sì, si comporta molto bene con le moderne CPU (i7 e successive), che hanno un supporto hardware specificamente progettato per accelerare le operazioni necessarie. Se il tuo server o client non hanno accelerazione hardware, AES-GCM sarà molto più lento. Oltre all'effettivo supporto hardware, la libreria software che utilizzi è fondamentale, perché sarà necessario richiamare l'hardware necessario per sfruttare la maggiore velocità.
So che è supportato da OpenSSL.
OpenSSL è una di queste librerie che implementa AES-GCM e sfrutta il vantaggio di AES-NI (la tecnologia di accelerazione hardware) quando disponibile.
La cattiva notizia è che le estensioni PHP disponibili oggi (inizio febbraio 2015) non supportano la libreria specifica che implementa AES-GCM. La fretta di utilizzare GCM deriva dalle recenti vulnerabilità riscontrate nel protocollo SSL, che alla fine obbligano tutti a migrare a TLS e ad una modalità di crittografia con autenticazione. Anche se gli esperti di sicurezza hanno spinto per una tale mossa per anni, sia i server che i produttori di browser stavano trascinando i loro piedi in attesa l'uno dell'altro per muovere i primi passi verso la crittografia autenticata. Stiamo finalmente iniziando a vedere il movimento nella giusta direzione.
Credo che entro la fine dell'anno avremo finalmente AES-GCM in PHP, ma per ora non è disponibile gratuitamente.
Alcune fonti di informazioni: http://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption Che mostra la libreria EVP. Un'implementazione di alto livello di AES-GCM che sfrutta AES-NI
http://phpaes.com Un'implementazione AES per PHP. Non so se sono stati testati correttamente o se usano l'accelerazione hardware. Non offrono GCM, ma potrebbe essere un buon strumento di apprendimento.
Siamo spiacenti, ma GCM non funziona con PHP. Se hai bisogno di una modalità AEAD, controlla [libsodium] (https://github.com/jedisct1/libsodium-php). –
Grazie. Ho finito con l'uso di libsodium nel mio codice. È molto semplice. – xendi