Generación de sal para cifrado de flujo

0

Lo siento si esta es una pregunta elemental pero no pude encontrar una respuesta directa.

Para el cifrado de extremo a extremo de los mensajes que esperan temporalmente en un servidor y donde los tamaños pueden variar desde unos pocos caracteres hasta una cantidad mucho mayor de caracteres.

Parece que OpenSSL AES-ctr sería una opción razonable, pero no estoy seguro de las implicaciones de la sal.

Si la frase de contraseña es estática, ¿el hecho de que haya potencialmente muchos mensajes para el mismo usuario significa que la sal debe ser aleatoria por mensaje?

Si es así, ¿es OpenSSL rand una forma suficientemente buena de generarlo?

    
pregunta jimb 20.12.2015 - 09:22
fuente

1 respuesta

0

En términos generales: sí, debería. La "sal" en ??? - CTR steram ciphers es en realidad el IV / NONCE utilizado para generar la corriente XOR. Como lo indica el nombre (NONCE = Número usado una vez), debe ser único y tener una cantidad razonable de entropía.

En una secuencia de cifrado no hay mensajes. Eso significa que el NONCE es teóricamente único por sesión / conexión. Pero si esa conexión permanece activa durante un período de tiempo más largo (por ejemplo, varias horas) y / o se transfieren mayores cantidades de datos con el mismo NONCE (por ejemplo, 100 MB y más), el cifrado de flujo puede llegar a ser sospechoso de criptoanálisis (según el tamaño de clave, la entropía de la NONCE y el algoritmo de cifrado en uso). La mayoría de los protocolos tipo SSL (incluido el estándar TLS) sugieren que se regenere el valor NONCE cada X minutos o cada Y bytes transferidos.

Este es un ejemplo que consideraría lo suficientemente seguro para datos confidenciales:

  • CTR AES-192 o AES-256
  • NONCE se generó utilizando un CSPRNG (ver FIPS-140) con semilla de alta entropía (por ejemplo, / dev / random)
  • Lo mismo ocurre con los números aleatorios de intercambio de claves
  • Cada 2 horas o cada 200 MB intercambian una nueva clave y un nuevo NONCE.

En la práctica, tendrá que elegir estos parámetros si no confía en una conexión TLS estándar.

openssl rand_bytes () es suficiente para generar NONCEs.

    
respondido por el marstato 20.12.2015 - 17:43
fuente

Lea otras preguntas en las etiquetas