simetrica - Cifrado AES y C#
rijndael c# (3)
AES, el Estándar de cifrado avanzado, define en FIPS PUB 197 tres cifrados de bloques simétricos: AES-128, AES-192 y AES-256. Los tres algoritmos están definidos por opciones de parámetros específicos para el algoritmo de Rijndael.
El cifrado AES-128 es una función (clave, datos) -> (cifrado). El cifrado Rijndael es una función (clave, datos, tamaño de bloque, tamaño de clave) -> (cifrado).
AesCryptoServiceProvider
utiliza la CryptoAPI de Windows subyacente para realizar el cifrado. AesManaged
realiza el cifrado en código administrado puro. RijndaelManaged
admite la gama completa de opciones de parámetros (también en código administrado puro).
Las ventajas de usar AesCryptoServiceProvider
incluyen el potencial de una mayor velocidad y el hecho de que CryptoAPI está certificada por FIPS (en ciertas versiones de Windows).
Las ventajas de AesManaged
incluyen la portabilidad ( AesCryptoServiceProvider
no es compatible con todas las versiones de Windows).
La única ventaja de RijndaelManaged
es que es compatible con las versiones anteriores de .NET framework. Nunca he visto a nadie usar las opciones de parámetros que no sean AES.
Por lo que he leído, no estoy seguro de si AES es un algoritmo único y estandarizado que pueda funcionar con claves de diferente longitud o una familia de algoritmos similares. Lo que quiero decir es que si encuentro que 2 implementaciones de AES toman una clave de 128 bits, ¿debo confiar en que funcionarán de manera idéntica (salvo errores)?
Específicamente en .Net / C #, estaba confundido por qué hay dos implementaciones de la clase base abstracta System.Security.Cryptography.Aes
: System.Security.Cryptography.AesCryptoServiceProvider
& System.Security.Cryptography.AesManaged
.
Entonces parece que hay una distinción / superposición entre AES y Rijndael, .NET tiene clases Rijndael
y RijndaelManaged
, así como RijndaelManagedTransform
¿Cuál es la diferencia entre todos estos? Me doy cuenta de que las clases de AES parecen existir solo desde .NET 3.5, mientras que Rijndael ha existido desde 1.0
Lo siento si estas son preguntas tontas, soy nuevo en criptografía que no sean funciones de hash seguro.
Lo siguiente es de la página de MSDN de AesCryptoServiceProvider .
Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows Server 2008 (no se admite la función principal del servidor), Windows Server 2008 R2 (no se admite la función principal del servidor), Windows Server 2003 SP2
.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, consulte .NET Framework System Requirements.
Sin embargo, la cuestión es que realmente no veo una razón por la que no sea compatible. .NET 3.5 normalmente se instala en Windows XP ahora, pero puede haber algo en el CLR antes de XP SP3 que puede ser diferente e impide que esto funcione correctamente. Realmente no hay suficiente información en la página de MSDN para especular incluso; aunque.
En cuanto a su pregunta, las diferencias (de nuevo de MSDN) entre las clases son las siguientes:
AesManaged
Proporciona una implementación administrada del algoritmo simétrico del Estándar de cifrado avanzado (AES).
El algoritmo AES es esencialmente el algoritmo simétrico de Rijndael con un tamaño de bloque fijo y un recuento de iteraciones. Esta clase funciona de la misma manera que la clase RijndaelManaged pero limita los bloques a 128 bits y no permite los modos de retroalimentación.
AesCryptoServiceProvider
Realiza el cifrado y descifrado simétricos utilizando la implementación de las interfaces de programación de aplicaciones criptográficas (CAPI) del algoritmo del Estándar de cifrado avanzado (AES).
Aes
Representa la clase base abstracta de la que deben heredarse todas las implementaciones del Advanced Encryption Standard (AES).
Siempre me he quedado con las implementaciones de * CryptoServiceProvider ya que siempre me han proporcionado lo que deseo. Lo único que sugiero es que si quieres ver si las diferentes clases tienen un rendimiento diferente es escribir algunos casos de prueba y pruebas unitarias y verlo en acción.
Tenga en cuenta que estas funciones no son compatibles con XP (ni siquiera con XP SP3), por lo que si el soporte de XP es importante, no debe usarlas