Necesito usar un cifrado de flujo en mi aplicación. Sé que usar la misma clave para muchos mensajes no es una buena práctica para cifrados de flujo (RC4). Pero tampoco quiero hacer una nueva clave todo el tiempo, así que se me ocurrió lo siguiente.
creo de forma segura una clave secreta. Luego, por cada mensaje que envíe, la clave que uso en el cifrado será el hash sha1 de la clave anterior.
Entonces, para el primer mensaje, la clave será key = sha1(key)
para el segundo mensaje, la clave será key = sha1(sha1(key))
, etc.
key := makeSecureKey()
while(true){
key := sha1hash(key);
message := getNewMessage();
encrypted_message := RC4.Encrypt(message, key);
send(encrypted_message);
}
¿Se utiliza correctamente el cifrado aquí?
Finalmente, si en lugar de usar el resultado de 160 bits del algoritmo sha1, uso solo los primeros 128 de los 160 bits como clave, ¿hay algún problema?