Uso de RC4 en aplicaciones en tiempo real

3

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?

    
pregunta jfgdfhggjfhgjv 26.11.2015 - 21:05
fuente

1 respuesta

1

Esta es una mala práctica por muchas razones.

  1. RC4 se ha roto en todas direcciones desde el domingo.
  2. Su algoritmo de generación de claves es propio y puede que no sea seguro. Quizás alguien en crypto.stackexchange.com esté dispuesto a analizarlo por usted. Lo dejaría atrás y usaría un KDF .
  3. Hay ataques conocidos contra RC4 que involucran derivaciones posteriores de una clave de inicio. No sé si hay uno para esto.
  4. La función de hash SHA no fue diseñada para ser un buen PRNG, ni un buen generador de claves, no es su propósito. Puede haber artefactos dentro del hash resultante que comprometen la forma en que cualquier cifrado lo usa como clave, y mucho menos RC4.
  5. Los cifrados de bloque modernos con el modo CBC son más rápidos de lo que su flujo de red puede manejar datos, por lo que si se está desplazando por un cable, no necesita un cifrado de flujo.

Esta Q & A tiene una excelente respuesta de por qué debe usar cifrados de bloque sobre cifrados de flujo. Además, prefiero AES + CBC para privacidad (encriptación) y HMAC para la protección de integridad sobre algoritmos como EAX o GCM que realizan ambos en un solo paso. No estoy seguro de si podría defender esta posición (seguridad, matemáticamente), sin embargo, el único algoritmo para abordar ambos me molesta.

    
respondido por el Andrew Philips 26.11.2015 - 22:07
fuente

Lea otras preguntas en las etiquetas