Esquema de cifrado DES DES es un esquema de cifrado en bloque que opera sobre bloques de texto de 64 bits, devolviendo bloques cifrados también de 64 bits. Así pues, DES sobre 264 posibles combinaciones de bits. Cada bloque de 64 bits es dividido en dos bloques del mismo tamaño (32 bits cada uno), que se representan mediante L (para los 32 bits de la izquierda) y R (para los 32 bits de más a la derecha) Ejemplo: Sea M cierto mensaje con el texto plano siguiente: M = 0123456789ABCDEF, donde M está en formato hexadecimal. Si transformamos M al sistema binario obtendremos el siguiente bloque de bits (64): M = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 L = 0000 0001 0010 0011 0100 0101 0110 0111 R = 1000 1001 1010 1011 1100 1101 1110 1111 Una de las características de DES es que opera con bloques de 64 bits, pero usando tamaños de claves de 56 bits. La clave se almacena usando 64 bits, pero el octavo bit de cada byte (de izda. a dcha.) no se usa. Ejemplo: Sea K una clave en formato hexadecimal K = 133457799BBCDFF1. En binario: K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001 El esquema de cifrado DES realizará los siguientes pasos:
Paso 1: Crear 16 sub-claves de 48 bits cada una La clave de 64 bits se permuta usando la tabla PC-1. Ya que la primera entrada en la tabla es 57, esto significa que el bit nº 57 de la clave original pasará a ser el primer bit de la permutación; análogamente, el bit 49 pasará a ser el segundo en la permutación, y así sucesivamente. NOTA: es importante observar que en la tabla PC-1 no aparecen los bits de paridad, para así eliminarlos. PC-1 57 1 10 19 63 7 14 21
49 58 2 11 55 62 6 13
41 50 59 3 47 54 61 5
33 42 51 60 39 46 53 28
25 34 43 52 31 38 45 20
17 26 35 44 23 30 37 12
9 18 27 36 15 22 29 4
Ejemplo: A partir de la clave original de 64 bits: K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001 se obtiene, aplicando la permutación PC-1: K+ = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111 A continuación, dividimos el resultado en dos mitades C0 y D0, cada una de ellas de 28 bits. A partir de K+ tendríamos: C0 = 1111000 0110011 0010101 0101111 D0 = 0101010 1011001 1001111 0001111
Con C0 y D0 definidas, ahora creamos 16 bloques Ci y Di, 1 85E813540F0AB405 De esta forma hemos usado DES para codificar M = 0123456789ABCDEF en C = 85E813540F0AB405. IMPORTANTE: el proceso de descifrado es exactamente igual al anterior, pero invirtiendo el orden en el que se aplican las sub-claves. Es decir, comenzaríamos usando K16.