2010-09-10 37 views
18

Según mi lectura, no estoy seguro de si AES es un algoritmo único y estandarizado que puede funcionar con diferentes claves de longitud o una familia de algoritmos similares. Lo que quiero decir es que si encuentro 2 implementaciones de AES que tengan una clave de 128 bits, ¿debería estar seguro de que funcionarán de manera idéntica (excluyendo errores)?Cifrado AES y C#

Específicamente en .Net/C#, que estaba confundido por qué hay dos implementaciones de clase base abstracta System.Security.Cryptography.Aes: System.Security.Cryptography.AesCryptoServiceProvider & System.Security.Cryptography.AesManaged.

Entonces parece que hay distinción/superposición entre AES y Rijndael, .NET tiene Rijndael y RijndaelManaged clases, así como RijndaelManagedTransform

¿Cuál es la diferencia entre todos ellos? Noto que las clases AES parecen existir solo desde .NET 3.5 mientras que Rijndael ha estado presente desde 1.0

Disculpa si estas son preguntas tontas, soy nuevo en criptografía que no sean funciones seguras de hashing.

Respuesta

27

AES, el Estándar de cifrado avanzado, define en FIPS PUB 197 tres cifras de bloque simétricas: AES-128, AES-192 y AES-256. Los tres algoritmos se definen mediante elecciones de parámetros específicos para el algoritmo Rijndael.

AES-128-encryption es una función (clave, datos) -> (cifrado). Rijndael-encryption es una función (clave, datos, tamaño de bloque, tamaño de clave) -> (cifrado).

AesCryptoServiceProvider utiliza el subyacente de Windows CryptoAPI 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 la posibilidad de una mayor velocidad y el hecho de que CryptoAPI está certificado por FIPS (en ciertas versiones de Windows).

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 versiones anteriores de .NET framework. No he visto a nadie utilizar las opciones de parámetros que no son AES.

+0

Como se mencionó anteriormente sobre la certificación FIPS, AesCryptoServiceProvider funcionará en situaciones en las que una aplicación .NET se ejecuta en un PC configurado con la política de seguridad local de "algoritmos" Uso compatible con FIPS. El AesManaged no lo hará. Por ejemplo, una aplicación que se ejecuta en un PC con Windows 10 configurado para el gobierno de Estados Unidos tiene esta configuración y arrojará una excepción de error en el uso de AesManged (Mensaje de error: Esta aplicación no es parte de los Windows Platform FIPS validado algoritmos criptográficos) . –

0

Tenga en cuenta que estas funciones no son compatibles con XP (ni siquiera XP SP3), por lo que si el soporte para XP es importante, no debe utilicen

+0

¿Cuál? Incluso 'Rijndael' que estaba en .NET 1.0? ¿Y por qué no son compatibles si están en el marco? –

+0

Usted está equivocado, AesCryptoServiceProvider funciona en XP SP3. – wRAR

+0

Sé que AesCryptoServiceProvider debería funcionar en XP SP3, pero no en nuestras pruebas. – SamMeiers

3

Lo siguiente es de la página de MSDN AesCryptoServiceProvider.

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows (Rol Server Core no está soportado) Server 2008, Windows Server 2008 R2 (Rol del servidor central no son compatibles), Windows Server 2003 SP2

.NET Framework no es compatible con todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos del sistema de .NET Framework.

La cuestión es que realmente no veo una razón de por qué no sería compatible. .NET 3.5 se instala comúnmente en Windows XP ahora, pero puede haber algo sobre el CLR antes de XP SP3 que puede ser diferente e impedir que funcione correctamente. Realmente no hay suficiente información en la página de MSDN para especular; aunque.

cuanto a su pregunta, las diferencias (de nuevo desde MSDN) entre las clases son las siguientes:

AesManaged

proporciona una implementación administrada de Advanced Encryption Standard (AES) algoritmo simétrico .

El algoritmo AES es esencialmente el algoritmo simétrico de Rijndael con un tamaño de bloque fijo y 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 simétrico y descifrado usando la aplicación de programación de aplicaciones criptográficas Interfaces (CAPI) del algoritmo Advanced Encryption Standard (AES).

Aes

Representa la clase base abstracta de la que deben heredarse todas las implementaciones del estándar de cifrado avanzado (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 realmente verlo en acción.

+0

Solo SP3 se menciona en "Plataforma" solo porque no puede instalar .NET 4 en SP2. Puede cambiar a la versión 3.5 de la página y menciona SP2. – wRAR

Cuestiones relacionadas