Questo dovrebbe essere un commento, ma è un po 'lungo.
Ho l'impressione che tu stia facendo le domande sbagliate.
Sì, ECB è male, ma solo se il tuo testo cifrato è più di un singolo blocco - e i tuoi dati non lo sono. Se è più lungo, allora qualsiasi modalità di feedback (vale a dire tutto il resto) è un miglioramento.
Stai solo chiedendo informazioni sulle diverse modalità di crittografia o sull'implementazione della crittografia?
Hai solo quattro opzioni per la crittografia in PHP:
- estensione mcrypt
- estensione openssl
- estensione sodio
- Implementazioni basate su PHP
Mentre le attuali versioni di PHP sono abbastanza veloci da gestire la crittografia / decrittografia scritta in PHP, l'utilizzo di un'estensione a un oggetto condiviso comune implica che l'implementazione sottostante abbia un'esposizione molto più ampia - e quindi revisione, test e compatibilità. Nel frattempo libmcrypt è stato descritto come abandonware . Mentre sarebbe bello pensare che gli sviluppatori avrebbero potuto effettivamente produrre qualcosa che è noto per essere privo di bug e resistito alla tentazione di continuare ad aggiungere nuove funzionalità, mi piacerebbe pensare che quegli sviluppatori stiano spingendo fuori le informazioni ogni tanto per dire che stavano ancora tenendo d'occhio le cose e tutto andava bene. Anche se non ho fatto molta attenzione, non ho notato nessuna di queste informazioni. Il rovescio della medaglia è che se ci fossero vulnerabilità note, queste dovrebbero apparire come annunci CVE. Il CVE più recente che riesco a trovare per libmcrypt è del 2003, quindi forse il codice è davvero finito. OTOH l'estensione PHP è ora deprecata.
Non ho guardato l'estensione di sodio in alcun dettaglio.
Come Shawn dice (+1) Rijndael-256 NON è AES-256. Perché deliberatamente scegliere di utilizzare ciò che è effettivamente un algoritmo raro a meno che non si abbiano ragioni molto specifiche, che non hai indicato nella tua domanda. Digressione per un momento .... un motivo valido sarebbe che è necessario mantenere la compatibilità dei dati, ma l'algoritmo da solo non determina questo - si tratta della codifica del testo cifrato, del vettore di inizializzazione e di qualsiasi meccanismo di verifica dell'integrità associato. Quali sono anche le cose che determinano il sovraccarico e influenzano la sicurezza e l'affidabilità della soluzione. Passare a una diversa implementazione dell'algoritmo mantenendo la compatibilità potrebbe significare un sacco di reingegnerizzazione della codifica.
what I am storing is session identifiers
... il che implica che non è necessario mantenere la compatibilità. Se si sta modificando l'implementazione, è sufficiente fornire supporto per 2 diverse implementazioni durante una breve transizione.
Se hai bisogno di molto affidabilità / disponibilità elevata dei dati, allora il punto di partenza è che non hai il testo cifrato nell'implementazione della crittografia.