2011-07-20 6 views
6

Según Wikipedia, TripleDES admite longitudes de clave de 56, 112 y 168 bits, pero el System.Cryptography.TripleDESCryptoServiceProvider.LegalKeySizes indica que solo acepta longitudes de clave de 128 y 192 bits.Tamaños de clave TripleDES - .NET vs Wikipedia

El sistema que estoy desarrollando debe ser interoperable (los datos cifrados por mi código deben poder descifrarse en PHP, Java y Objective-C) y no sé quién es el correcto en este caso.

Entonces, ¿quién debería creer? ¿Y cómo puedo estar seguro de que mis datos encriptados son portátiles?

Respuesta

13

Wikipedia no dice TripleDES admite claves de 56 bits. Las "opciones de codificación" hablan de teclas de "longitud triple" y teclas de "doble longitud", la última "reduce el tamaño de la clave a 112 bits". El tamaño de clave efectivo para el DES original es de 56 bits. Sin embargo, tal clave se construye a partir de la entrada de 64 bits, donde 8 bits permanecen sin usar. La opción de "triple longitud" funciona con tres veces 56 bits (= 168) construidos a partir de tres veces 64 bit (= 192 bit) y la opción "double-length" funciona con dos veces teclas de 56 bit (= 112) construido a partir de dos veces 64 bit (= 128).

Como su TripleDESCryptoServiceProvider necesita derivar primero las claves reales de la entrada basada en 64 bits, solo tomará 128 bits (doble longitud) o 192 bits (triple longitud) como entrada y luego deducirá internamente 168 o claves reales de 112 bits de esa entrada.

Este es el procedimiento estándar para TripleDES, por lo que no debería tener problemas con la portabilidad en todas las plataformas.

+0

tres días de mirar ejemplos inútiles entonces esta respuesta ayudó a darme cuenta de lo .Net soporta claves de 128 bits y los CCCrypt función le obliga a 192bit. .. copia los primeros 64 bits de los 128 bits en el extremo, así que K3 = K1. iOS <-> Interoperabilidad C# .Net. Tan sencillo. –

0

Triple DES solo usará 112/168 bits de su clave de 128/192 bits. .NET pide más bits para la alineación (cada subclave de 56 bits está alineada en un límite de 64 bits).

56 bit DES está roto y espero que lo hayan hecho más difícil de usar.

0

Creo que algunas (¿todas?) Implementaciones de DES usan solo 7 bits por carácter de la clave (codificación ASCII). No estoy seguro si la definición de DES permite caracteres de 8 bits en las claves o si realmente ignora el bit alto de cada byte. Creo que es el último.

Sin embargo, en tamaños de clave .NET se basan en el número de bytes, multiplicado por 8 bits por byte, incluso si el algoritmo subyacente ignora ese bit superior. Esa es probablemente la principal discrepancia.

TripleDES ejecuta DES tres veces con potencialmente tres claves DES diferentes de 56 bits. En algunas implementaciones, el ciclo medio se invierte (encriptación-descifrado-encriptación o "EDE") para que al usar la misma clave DES de 56 bits para las tres duplique el cifrado de DES simple. Esto se hizo por compatibilidad con sistemas más antiguos donde ambos usan cifrado basado en hardware. No estoy seguro si el TripleDESCryptoServiceProvider usa este enfoque "EDE" o el enfoque "EEE" (o le da una opción). Además, la misma clave DES de 56 bits se puede usar para la primera y tercera ejecución, usando una clave de 112 bits en lugar de la clave de 168 bits que también podría usar.

El TripleDESCryptoServiceProvider certificado no acepta claves de 56 bits (64 bits) porque en realidad no es seguridad 3DES (¿podría usar DESCryptoServiceProvider en su lugar?). Al mismo tiempo, se determinó que el EEE (o EDE?) 3DES de 168 bits no proporciona una mayor seguridad que el uso de una clave de 112 bits (128 bits). Sin embargo, puede haber algunos ataques extremos (generalmente no disponibles) en los cuales la clave más corta es teóricamente más vulnerable. Eso también puede aplicarse a la pregunta EDE vs EEE.

En su pregunta de compatibilidad frente a otras lenguas, las clases .NET * CryptoServiceProvider son solo una API contenedora alrededor de la biblioteca subyacente de Windows CRYPTO.Si los otros lenguajes también usan la biblioteca Windows CRYPTO, debería ser compatible. De lo contrario, tendría que averiguar si están usando EDE o EEE y asegurarse de que todos estén usando el mismo (puede o no tener flexibilidad) y obviamente usar la misma longitud de clave. Probablemente todos estén usando el mismo orden de bytes, pero si encuentras que las cosas aún no coinciden, podría ser otra cosa que verifique. Lo más probable es que en Windows todos estén usando CRYPTO y probablemente coincidan siempre que pueda establecer las opciones de la misma manera para todos ellos.

+0

Tarde, pero: la definición de DES reservó el bit * low * de cada byte de clave para la paridad (impar); en la década de 1970, la criptografía se realizaba en hardware discreto dedicado y los errores de bit eran una posibilidad real. Hoy en día, con casi todo en software o firmware, algunas implementaciones ignoran la paridad y algunas todavía la comprueban por su compatibilidad; No sé qué dot-NET (o CAPI) hace. No se debe suponer ni exigir ASCII para valores clave, y ciertamente no tiene nada que ver con la definición. ... –

+0

... Además, tanto EDE como EEE se consideraron en la década de 1990 cuando era evidente que se necesitaba una "mejora" de los DES, pero solo EDE estaba estandarizada y me sorprendería mucho encontrar cualquier implementación hoy haciendo EEE. –

+0

@ dave_thompson_085 gracias por la aclaración sobre la estandarización con EDE. En el bit de paridad, sería bastante malo si la implementación del software (traduciéndose en una posible implementación de hardware) tomara los 7 bits superiores de cada byte proporcionado cuando hay más entropía en los 7 bits inferiores (en caso de que se proporcione una contraseña de cifrado directamente) -si acaso tontamente). Me parece más sensato que mantenga los 7 bits más bajos de cada byte y los desplaza junto con la paridad calculada en la implementación de 3DES. Por supuesto, podría hacer algo menos sensato, en cambio, y perder la entropía. –

0

Des utiliza múltiplos de claves de 64 bits, pero tira 8 bits, lo que deja una longitud útil de clave de 64 bits.
Triple des puede usar la longitud de la llave doble o triple.
Sin embargo, como la repetición de des con la misma clave descifra el mensaje que se ejecuta des un número par de veces, puede descifrar parcialmente cosas si las claves comparten patrones.

Por esta razón, des siempre se ejecuta un número impar de veces.

Esta es también la razón por la que nunca debe elegir una tecla donde se repitan las partes de 64 bits.

Con Triple DES de 192 bits que por lo tanto tiene una longitud efectiva de la clave de 112 bits