Editar: Pondré esto más claro.
De la forma más simple, estoy preguntando si si AES cifra en CTR más con Mcrypt (usando PHP), ¿puedo crear el "IV" simplemente leyendo 16 bytes desde / dev / urandom? ¿Eso hace el trabajo correctamente?
Leí la respuesta anterior por D.W. y él dijo:
"En la forma más simple, para cifrar un mensaje de n-block debajo de IV v, usamos v, v + 1, v + 2, .., v + n -1 como contadores , entonces déjeme asumir que eso es lo que está haciendo (si no, especifique). Generar un contador aleatorio de 128 bits con / dev / urandom está bien ".
Ahora pregunto si entendí bien esa respuesta (mi entendimiento es que si utilizo el modo CTR, uno puede crear el "IV" simplemente leyendo de / dev / urandom y eso al respecto).
Divido esta pregunta de TCrypto - Comentarios sobre decisiones de diseño I hecho?
@ D.W. "Depende de la variante del modo CTR que uses y de cómo se forme el contador. En la forma más simple, para cifrar un mensaje de bloque n debajo de IV v, usamos v, v + 1, v + 2, .., v + _n_-1 como contadores, así que déjeme suponer que es lo que está haciendo (si no, especifique). Generar un contador aleatorio de 128 bits con / dev / urandom está bien ".
Estaba mirando esto y no estoy seguro de si Mcrypt ya hace esa construcción "v + 1, v + 2 ..." internamente (utilizando el IV suministrado). Básicamente, Mcrypt toma una clave y una IV y realiza la cifrado utilizando esos parámetros.
¿O tengo que dividir manualmente el mensaje en partes y realizar el cifrado de la primera parte utilizando el IV, luego cifrar la segunda parte utilizando IV + 1 como IV, etc.?
Aquí está la función de cifrado (en el modo CBC, la interfaz de Mcrypt para usar el modo CTR es similar):