Ho inviato del codice a GitHub per dimostrare l'utilizzo della crittografia a chiave simmetrica in PHP. Si tratta di una piccola libreria di memorizzazione a valori-chiave che, facoltativamente, offre la possibilità di crittografare le informazioni memorizzate. Mi piacerebbe sentire i tuoi commenti su un paio di decisioni progettuali che ho preso:
La crittografia viene eseguita utilizzando AES in modalità CBC (casuale IV), con autenticazione "encrypt-then-MAC". L'informazione è fondamentalmente un array PHP, che è serializzato e opzionalmente compresso (gzdeflate). Questa stringa viene quindi crittografata. Mi piacerebbe sentire alcune opinioni sarebbe valsa la pena aggiungere una verifica MAC ("interna"), che si occuperebbe di controllare che i dati siano validi dopo la decompressione? All'inizio, sembra una perdita di tempo, poiché esiste già un controllo MAC. D'altra parte, questo potrebbe contrastare alcuni problemi che potrebbero sorgere a causa di errori nel livello di compressione ecc. Qualche commento su questo?
Un'altra cosa, gli esperti di crittografia consiglia che quando si utilizza la modalità CTR, il nonce dovrebbe essere generato utilizzando un "numero di messaggio" unico e crescente. Tuttavia, in TCrypto non è possibile mantenere un elenco di tali numeri di messaggi, quindi ho deciso di non utilizzare la modalità CTR. Pensi che sarebbe sicuro usare la modalità CTR generando il "nonce" in modo casuale (/ dev / urandom)? Le chiavi di crittografia in TCrypto sono derivate utilizzando una chiave costante, timestamp e IV (ciò garantisce che le chiavi di crittografia siano univoche per ogni operazione di crittografia).
Altri commenti?
Grazie mille!
Timo