DES es un cifrado de bloque , lo que significa que procesa bloques de un tamaño fijo. Cuando desea cifrar un mensaje , es decir, una secuencia de bits cuya longitud no es necesariamente la de un solo bloque, debe aplicar un modo de operación que aplica el cifrado de bloque" correctamente "para cifrar y descifrar un mensaje.
La página de Wikipedia tiene buenos esquemas. Cada modo de operación tiene sus propios requisitos en la longitud de entrada; por ejemplo, el modo CBC requiere que la longitud de entrada sea un múltiplo exacto del tamaño del bloque. Por lo tanto, CBC requiere algo de relleno e invariablemente da como resultado un texto cifrado que es más grande que el texto plano. Algunos otros modos pueden hacer un cifrado de bit a bit exacto (cifrar k bits en exactamente k bits, para todos k ), notablemente OFB , CFB y CTR. CBC también se puede hacer sin relleno con CTS ("robo de texto cifrado") siempre que el tamaño de entrada sea al menos tan largo como un bloque.
Tenga en cuenta, sin embargo, que casi todos los modos de operaciones necesitan un Vector de inicialización , que debe ser elegido por quién encripta y Transmitido a quien desencripta; Si el IV no se puede inferir del contexto, se debe transmitir , lo que aumenta los requisitos de la red. La selección IV es crucial para la seguridad; algunos modos necesitan un IV totalmente impredecible y aleatorio, mientras que otros pueden lograr seguridad con un IV no repetitivo, pero un IV fijo y codificado por lo general no será bueno en absoluto.
Un modo sin IV que convierta 100 bits de texto simple en 100 bits de texto cifrado debería ser determinista (esto es una necesidad matemática ); por lo tanto, tal modo necesariamente revelaría si dos mensajes cifrados son idénticos. Esto puede o no ser un problema, dependiendo del contexto de uso. Un modo seguro sin IV es un modo sin IV que filtra exactamente esa información, pero no más. Que yo sepa, no hay un estándar para un modo seguro sin IV, pero hay algunas construcciones académicas conocidas ( este se puede hacer práctico; ese es teóricamente " mejor "pero mucho menos práctico).
Todavía hay algunos comentarios por hacer. En primer lugar, DES es obsoleto y débil, precisamente por su longitud de clave: la clave de 56 bits está al alcance de una búsqueda exhaustiva (esfuerzo sustancial, pero alcanzable, incluso por aficionados con un presupuesto moderado). 3DES es mucho más fuerte, pero también tres veces más lento (mientras que DES ya era bastante lento en el software "normal"). Tanto DES como 3DES usan bloques de 64 bits, que son un poco demasiado estrechos (esto puede generar problemas de seguridad al cifrar muchos datos con una sola clave). 3DES también está en desuso; Los protocolos modernos deben utilizar AES , cuyos bloques son más grandes (128 bits), evitando estos problemas de seguridad. AES también es sustancialmente más rápido que 3DES.
Además, el cifrado debe aplicarse en contextos donde hay una necesidad de confidencialidad contra los espías. En la mayoría de estos contextos, los atacantes también pueden ser activos , es decir, alterar los datos en tránsito. Las alteraciones se pueden detectar de manera confiable mediante el uso de un MAC , pero esto necesariamente aumenta el tamaño del mensaje (nuevamente debido a las palomas) . La combinación de cifrado y MAC no es fácil en absoluto, y los mensajes sucesivos deben estar "vinculados" de alguna manera para derrotar los ataques de repetición y otras alteraciones en el nivel del paquete. Se supone que todo esto debe manejarse definiendo un protocolo seguro : un protocolo es un conjunto de algoritmos criptográficos elementales (por ejemplo, AES) para proporcionar algunas propiedades de seguridad bien definidas. Un ejemplo de un protocolo es TLS . Diseñar un protocolo seguro es incluso más difícil que diseñar un algoritmo seguro; incluso implementar un protocolo ya definido es difícil de hacer correctamente (es decir, sin filtrar información secreta).