TCrypto - Commenti sulle decisioni di progettazione che ho preso?

1

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).

link

Altri commenti?

Grazie mille!

Timo

    
posta timoh 09.07.2011 - 00:39
fonte

2 risposte

0
  1. Non è necessario un MAC interno. Non mi è chiaro a quale problema ti riferisci. Presumo che il tuo schema funzioni in questo modo: comprimi i dati, quindi applica encrypt-then-MAC ai dati compressi. Se il digest MAC è valido, puoi essere sicuro che dopo la decifrazione elaborerai gli stessi dati inviati dal mittente, quindi non è necessario avere un altro MAC.

  2. Dipende dalla variante della modalità CTR che usi e da come viene formato il contatore. Nella forma più semplice, per crittografare un messaggio di n sotto IV v , usiamo v , v +1, v +2, .., v + n -1 come contatori, quindi supponiamo che sia quello che stai facendo (altrimenti, per favore specifica). La generazione di un contatore casuale a 128 bit con /dev/urandom va bene.

  3. Sembra che tu stia facendo qualcosa di carino per generare la chiave usata per crittografare ogni messaggio. Non posso commentare in merito, perché non hai fornito informazioni specifiche su ciò che stai facendo.

Se dividi questo in più domande e fornisci ulteriori dettagli, potremmo essere in grado di fornirti risposte migliori.

    
risposta data 10.07.2011 - 03:48
fonte
-3

La compressione e la crittografia sono molto facili da testare e gli errori di solito vengono notati rapidamente. Quindi non c'è bisogno di avere un altro MAC all'interno. Non ho mai visto una tale configurazione, e inoltre sarebbe sufficiente avere solo un CBC o simile per quel caso. Suggerisco semplicemente di mettere una serie di test automatici dopo la procedura di compilazione / installazione.

Per quanto ne so, non c'è differenza nella raccomandazione della scelta IV tra differenti modalità di cifratura. Schneier e Ferguson raccomandano in Crittografia pratica di utilizzare un contatore come IV. L'uso di un valore casuale è altrettanto sicuro finché hai un PRNG prevalentemente funzionante.

Se le chiavi sono veramente uniche per ogni crittografia, non importa affatto come viene scelta la IV. L'IV è specificamente per fare più crittografie con la stessa chiave. Ma probabilmente non puoi fare affidamento su questo, poiché il tempo potrebbe essere costante o ripristinato per qualche motivo. (In generale, non dovresti assumere un orologio funzionante nella tua crittografia :-)) Quindi dovresti comunque usare un IV di conteggio o includere / dev / random nella chiave attuale.

Invece di encrypt-then-mac, è possibile utilizzare un codice cifrato con crittografia e autenticazione combinate, come GCM o CCM. Se ricordo bene, il vantaggio del CTR è solo che la crittografia di un messaggio può essere parallelizzata.

Dichiarazione di non responsabilità: non sono un crittografo.

    
risposta data 09.07.2011 - 01:04
fonte

Leggi altre domande sui tag