La biblioteca de encriptación en mi lenguaje de programación no es compatible con CTR, aunque es compatible con CBC, CFB, CTS, ECB y OFB. Supongo que teóricamente es posible implementar CTR de forma segura en uno de estos otros modos.
Entonces, me pregunto si estas citas describen la implementación correcta de CTR desde una perspectiva de seguridad. Por lo que he leído, creo que sí, pero solo quiero asegurarme de que no me esté perdiendo algo.
Estudié un poco más y descubrí que la transformación de bloque para el modo CTR es en realidad el resultado de que XOR'ing el texto sin formato con una transformación AES ECB de un contador que aumenta de forma monotínica. Con ese entendimiento, pude implementar un modo AES CTR con bastante facilidad sobre el modo AES ECB integrado en .NET BCL.
Y,
Es posible implementar AES crypto en modo CTR usando la clase AesManaged, aunque requiere un trabajo extra. Para implementar el modo CTR con la clase .NET AesManaged, esto es lo que hice: Utilice CipherMode.ECB, PaddingMode.None. [No es necesario rellenar en modo CTR porque siempre estamos cifrando un contador de 16 bytes.] Al cifrar, llame a CreateEncryptor (). Usando el ICryptoTransform resultante, para cada bloque, transforme un nonce de 16 bytes (Igual que el tamaño del bloque AES), y luego XOR el resultado de esa transformación con el texto plano para obtener el texto cifrado. Incrementa el nonce después de cada bloque. Continúe hasta que no haya más bloques; no olvide la transformación de bloque final, para el último bloque de 16 bytes o menos.
Por un lado, cuando la cita dice "incremento", ¿qué tipo de incremento debería ser? Seguramente no es lineal?