2014-07-01 11 views
5

Ho letto molto su GCM e come impressionante è e vorrei sapere come potevo usare AES-GCM crittografia autenticato utilizzando PHP. È supportato in mcrypt()? Ho trovato alcuni riferimenti a GCM nella documentazione del framework Codeigniter che mi porta a credere che sia possibile utilizzare in Codeigniter.Come possiamo utilizzare la crittografia in modalità GCM in PHP?

E ho anche trovato qualcosa in un documento su Zend. Non sto cercando di utilizzare un driver Codeigniter anche se non utilizzo alcun framework e non intendo per i miei progetti attuali. Mi sembra tuttavia che se Codeigniter sia in grado di farlo, allora dovremmo essere in grado di farlo senza il framework.

Sembra che lo GCM sia la strada da percorrere per sicurezza e prestazioni (ho visto cifre di prestazioni molto impressionanti). La mia sensazione è che abbiamo bisogno di questo, ma non riesco a trovare alcun esempio. Qualcuno deve avere un'idea di come farlo. So che è supportato da OpenSSL.

Qualsiasi aiuto sarà molto apprezzato.

+1

Siamo spiacenti, ma GCM non funziona con PHP. Se hai bisogno di una modalità AEAD, controlla [libsodium] (https://github.com/jedisct1/libsodium-php). –

+1

Grazie. Ho finito con l'uso di libsodium nel mio codice. È molto semplice. – xendi

risposta

4

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.

2

È possibile impostare la modalità come parametro per la funzione di inizializzazione:

$this->encryption->initialize(
     array('mode' => 'gcm') 
); 

Per utilizzare questo codice, che hai di utilizzo naturalmente CI ed è classi di crittografia

$this->load->library('encryption'); 

si può anche cambiare cifra , driver e chiave all'interno del metodo di inizializzazione - per ulteriori informazioni, dare un'occhiata a http://www.storycon.us/ci3/libraries/encryption.html#id11

+5

Si prega di chiarire che la risposta è relativa alla libreria CodeIgniter [Encryption] (http://www.storycon.us/ci3/libraries/encryption.html). Altrimenti, non è immediatamente evidente il motivo per cui esiste una proprietà 'encryption' su' this' e chi supporta esattamente la modalità 'gcm'. –

+0

@OlegEstekhin Ho pensato, era chiaro, perché l'autore collegava la pagina ci docu corrispondente – Philipp

1

OpenSSL non funziona correttamente poiché AEAD non è supportato per tutte le versioni precedenti a PHP 7.1.

È possibile utilizzare questa libreria: https://github.com/Spomky-Labs/php-aes-gcm

Questa è una libreria PHP puro. La crittografia/decrittografia potrebbe essere più lenta di un'estensione PHP, ma fa il lavoro. Questa libreria viene anche testata utilizzando i vettori di test dal NIST.

Problemi correlati