Ho bisogno di usare un codice di flusso nella mia applicazione. So che usare la stessa chiave per molti messaggi non è una buona pratica per i cipri stream (RC4). Ma non voglio neanche creare una nuova chiave tutto il tempo, così ho pensato a quanto segue.
Creo in modo sicuro una chiave segreta. Quindi per ogni messaggio che invio, la chiave che uso nella crittografia sarà l'hash sha1 della chiave precedente.
Quindi per il primo messaggio la chiave sarà key = sha1(key)
per il 2 ° messaggio la chiave sarà key = sha1(sha1(key))
, ecc.
key := makeSecureKey()
while(true){
key := sha1hash(key);
message := getNewMessage();
encrypted_message := RC4.Encrypt(message, key);
send(encrypted_message);
}
La crittografia è utilizzata correttamente qui?
Infine se invece di usare il risultato a 160 bit dell'algoritmo sha1, io uso solo i primi 128 dei 160 bit come chiave c'è un problema?