Utilizzare KeyGenerator
come metodo preferito. Come indicato da Duncan, darei sicuramente le dimensioni della chiave durante l'inizializzazione. KeyFactory
è un metodo che dovrebbe essere utilizzato per le chiavi preesistenti.
OK, quindi passiamo al nocciolo della questione. In linea di principio le chiavi AES possono avere qualsiasi valore. Non ci sono "chiavi deboli" come in (3) DES. Né ci sono bit che abbiano un significato specifico come in (3) bit di parità DES. Quindi generare una chiave può essere semplice come generare un array di byte con valori casuali e creare uno SecretKeySpec
attorno ad esso.
Ma ci sono ancora vantaggi per il metodo che si sta utilizzando: lo KeyGenerator
è stato creato appositamente per generare chiavi. Ciò significa che il codice potrebbe essere ottimizzato per questa generazione. Questo potrebbe avere vantaggi di efficienza e sicurezza. Potrebbe essere programmato per evitare attacchi di canale laterali temporali che potrebbero esporre la chiave, per esempio. Tieni presente che potrebbe essere già una buona idea svuotare qualsiasi byte[]
che contiene le informazioni chiave in quanto potrebbero essere trapelate in un file di scambio (tuttavia, questo potrebbe comunque essere il caso).
Inoltre, come detto, non tutti gli algoritmi utilizzano chiavi completamente casuali. Quindi utilizzando KeyGenerator
renderebbe più semplice passare ad altri algoritmi. Tuttavia, i codici più moderni accettano solo chiavi completamente casuali; questo è visto come un importante vantaggio rispetto ad es. DES.
Infine, e nel mio caso il motivo più importante, è che il metodo KeyGenerator
è l'unico metodo valido per gestire le chiavi AES all'interno di un token sicuro (smart card, TPM, token USB o HSM). Se si creacon SecretKeySpec
, la chiave deve essere provenire dalla memoria. Ciò significa che la chiave può essere inserita nel token sicuro, ma che la chiave è esposta in memoria a prescindere. Normalmente, i token sicuri funzionano solo con chiavi generate nel token sicuro o iniettate da es. una smart card o una cerimonia chiave. Un KeyGenerator
può essere fornito con un provider in modo che la chiave venga generata direttamente nel token sicuro.
Come indicato in Duncan's answer: specificare sempre la dimensione della chiave (e qualsiasi altro parametro) in modo esplicito. Non fare affidamento sui valori predefiniti del provider in quanto questo corrisponderà a e renderà poco chiaro cosa sta facendo l'applicazione e ciascun provider potrebbe avere i suoi valori predefiniti.
fonte
2013-08-14 10:38:19
Questo mighth aiuto http://stackoverflow.com/questions/10252449/is-aes-key-random – Tala
@Tala Ecco dove ho trovato il [codice citato] (http://stackoverflow.com/a/10252662/1005481). Ma da quel post, non sono riuscito a determinare un consenso su come creare la chiave casuale, e perché era un modo sicuro. –