elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 287
41  Seguridad Informática / Criptografía / Algoritmo DES (Data Encryption Standard) explicado paso a paso. en: 6 Febrero 2022, 09:30 am
Cifrado DES Explicado by StringManolo

DES (Data Encryption Standard) es un algoritmo de cifrado por bloques ya en desuso en su versión clásica, aunque en teoría su versión tripleDES es "segura", no se recomienda su uso debido a que hay alternativas mas seguras y rápidas. Aún así vale la pena conocer como funciona. La versión TripleDES no es mas que cifrar 3 veces el mensaje con DES.

- En el cifrado simétrico por bloques DES se utiliza una clave de 64 caracteres como entrada

Por ejemplo la clave en ASCII/UTF-8 (abcdefgh)
Cada caracter en esta clave se represta usando 1 byte (8 bits).
ASCII -> abcdefgh
Binario -> 01100001 01100010 01100011 01100100 01100101 01100110 01100111 01101000
Secuencia -> 0110000101100010011000110110010001100101011001100110011101101000

Código
  1. /* Ejemplo de codigo para convertir texto a binario */
  2.  
  3. const text = "abcdefgh";
  4. let end = "";
  5. for (let i in text) {
  6.  let aux = text[i].charCodeAt(0).toString(2)
  7.  if (aux.length < 8) {
  8.    aux = "0".repeat(8 - aux.length) + aux;
  9.  }
  10.  end += aux + " ";
  11. }
  12. console.log(end);

El algoritmo de DES ignora un bit por cada byte de la clave. Se cree que fue una estrategia de la NSA para poder romper el cifrado antes que nadie. Asique el tamaño de clave real utilizado internamente es de 56 bits aunque la entrada requiera de 64 bits.

- El algoritmo de DES usa tablas predefindas recurrentemente para realizar permutaciones. Se conocen como PC (Permuted Choice)

La primera tabla de permutación de DES es la siguiente (PC-1):
Cita de: PC-1
57, 49, 41, 33, 25, 17, 9,
1, 58, 50, 42, 34, 26, 18,
10, 2, 59, 51, 43, 35, 27,
19, 11, 3, 60, 52, 44, 36,
63, 55, 47, 39, 31, 23, 15,
7, 62, 54, 46, 38, 30, 22,
14, 6, 61, 53, 45, 37, 29,
21, 13, 5, 28, 20, 12, 4

Esta tabla nos indica la posición que debemos elegir de nuestra clave para generar la clave permutada de 56 bits a partir de la de 64 bits.

Nuestro binario es:
0110000101100010011000110110010001100101011001100110011101101000

Vamos a elegir el bit de la posición 57, después el que se encuentre en la posición 49 y así hasta finalizar toda la tabla.

Cita de: Permutaciones
57 -> 0
49 -> 0
41 -> 0
33 -> 0
25 -> 0
17 -> 0
9  -> 0

1  -> 0
58 -> 1
50 -> 1
42 -> 1
34 -> 1
26 -> 1
18 -> 1

10 -> 1
2  -> 1
59 -> 1
51 -> 1
43 -> 1
35 -> 1
27 -> 1

19 -> 1
11 -> 1
3  -> 1
60 -> 0
52 -> 0
44 -> 0
36 -> 0

63 -> 0
55 -> 1
47 -> 1
39 -> 0
31 -> 0
23 -> 1
15 -> 1

7  -> 0
62 -> 0
54 -> 1
46 -> 1
38 -> 1
30 -> 1
22 -> 0

14 -> 0
6  -> 0
61 -> 1
53 -> 0
45 -> 0
37 -> 0
29 -> 0

21 -> 0
13 -> 0
5  -> 0
28 -> 0
20 -> 0
12 -> 0
4  -> 0

Y aquí tenemos nuestra clave permutada de 56 bits con PC-1:
0000000
0111111
1111111
1110000
0110011
0011110
0010000
0000000

- El siguiente paso es divir la clave por la mitad en 2 trozos de 28 bits cada uno:
0000000
0111111
1111111
1110000

0110011
0011110
0010000
0000000

- El siguiente paso es aplicar una operación de cambio de bits hacia la izquierda a cada uno de los trozos para crear 2 grupos formados por 16 secuencias de bits cambiados.

La operación de cambio de bits hacia la izquiera se realiza moviendo cada bit hacia la izquierda pasando el que se encuentra en la primera posición al final del todo. Por ejemplo si tenemos la secuencia de bits 1101:
0° -> 1101
1° -> 1011
2° -> 0111
3° -> 1110
4° ...
5° ...

No todas las iteraciones tienen la misma cantidad de cambio de bits.
El número de bits por iteración que tenemos que desplazar hacia la izquierda es el siguiente:
Cita de: Bits desplazados por cada iteración
1°  -> 1 bit
2°  -> 1 bit
3°  -> 2 bits
4°  -> 2 bits
5°  -> 2 bits
6°  -> 2 bits
7°  -> 2 bits
8°  -> 2 bits
9°  -> 1 bit
10° -> 2 bits
11° -> 2 bits
12° -> 2 bits
13° -> 2 bits
14° -> 2 bits
15° -> 2 bits
16° -> 1 bit


El resultado es:

Cita de: Grupo 1: (Primera mitad de 28 bits)
0°  -> 0000000011111111111111110000
1°  -> 0000000111111111111111100000
2°  -> 0000001111111111111111000000
3°  -> 0000111111111111111100000000
4°  -> 0011111111111111110000000000
5°  -> 1111111111111111000000000000
6°  -> 1111111111111100000000000011
7°  -> 1111111111110000000000001111
8°  -> 1111111111000000000000111111
9°  -> 1111111110000000000001111111
10° -> 1111111000000000000111111111
11° -> 1111100000000000011111111111
12° -> 1110000000000001111111111111
13° -> 1000000000000111111111111111
14° -> 0000000000011111111111111110
15° -> 0000000001111111111111111000
16° -> 0000000011111111111111110000

Cita de: Grupo 2: (Segunda mitad de 28 bits)
0°  -> 0110011001111000100000000000
1°  -> 1100110011110001000000000000
2°  -> 1001100111100010000000000001
3°  -> 0110011110001000000000000110
4°  -> 1001111000100000000000011001
5°  -> 0111100010000000000001100110
6°  -> 1110001000000000000110011001
7°  -> 1000100000000000011001100111
8°  -> 0010000000000001100110011110
9°  -> 0100000000000011001100111100
10° -> 0000000000001100110011110001
11° -> 0000000000110011001111000100
12° -> 0000000011001100111100010000
13° -> 0000001100110011110001000000
14° -> 0000110011001111000100000000
15° -> 0011001100111100010000000000
16° -> 0110011001111000100000000000

- Lo siguiente es agruparlos juntos:
Cita de: Agrupados
1°  -> 0000000111111111111111100000 1100110011110001000000000000
2°  -> 0000001111111111111111000000 1001100111100010000000000001
3°  -> 0000111111111111111100000000 0110011110001000000000000110
4°  -> 0011111111111111110000000000 1001111000100000000000011001
5°  -> 1111111111111111000000000000 0111100010000000000001100110
6°  -> 1111111111111100000000000011 1110001000000000000110011001
7°  -> 1111111111110000000000001111 1000100000000000011001100111
8°  -> 1111111111000000000000111111 0010000000000001100110011110
9°  -> 1111111110000000000001111111 0100000000000011001100111100
10° -> 1111111000000000000111111111 0000000000001100110011110001
11° -> 1111100000000000011111111111 0000000000110011001111000100
12° -> 1110000000000001111111111111 0000000011001100111100010000
13° -> 1000000000000111111111111111 0000001100110011110001000000
14° -> 0000000000011111111111111110 0000110011001111000100000000
15° -> 0000000001111111111111111000 0011001100111100010000000000
16° -> 0000000011111111111111110000 0110011001111000100000000000

Y aplicar otra permutación con una nueva tabla (PC-2) para obtener 48 bits a partir de estos 56 que tenemos.
La tabla PC-2 es:
Cita de: PC-2
14, 17, 11, 24, 1, 5,
3, 28, 15, 6, 21, 10,
23, 19, 12, 4, 26, 8,
16, 7, 27, 20, 13, 2,
41, 52, 31, 37, 47, 55,
30, 40, 51, 45, 33, 48,
44, 49, 39, 56, 34, 53,
46, 42, 50, 36, 29, 32

Hay que aplicar esta tabla a cada uno de los 16 grupos para obtener un total de 16 claves de 48 bits cada una. Se hace igual que la primera permutación anteriormente mostrada con la tabla PC-1.

1°  -> 00000001111111111111111000001100110011110001000000000000

Cita de: Permutaciones
14 -> 1
17 -> 1
11 -> 1
24 -> 0
1  -> 0
5  -> 0

3  -> 0
28 -> 0
15 -> 1
6  -> 0
21 -> 1
10 -> 1

23 -> 1
19 -> 1
12 -> 1
4  -> 0
26 -> 0
8  -> 1

16 -> 1
7  -> 0
27 -> 0
20 -> 1
13 -> 1
2  -> 0

41 -> 0
52 -> 0
31 -> 0
37 -> 1
47 -> 0
55 -> 0

30 -> 1
40 -> 1
51 -> 0
45 -> 0
33 -> 1
48 -> 0

44 -> 1
49 -> 0
39 -> 1
56 -> 0
34 -> 1
53 -> 0

46 -> 0
42 -> 0
50 -> 0
36 -> 0
29 -> 1
32 -> 0

1°:
111000  
001011
111001
100110
000100
110010
101010
000010

Tienes que repetir este paso para el resto de las 16 secuencias. El proceso de los 15 restantes es omitido por brevedad, solo se mostrarán los resultados directamente.

Aquí el código que hice para no tener que realizarlas a mano:

Código
  1. /* PC a binario */
  2. const pc = (bin, table) => {
  3.  let result = "";
  4.  for(let i = 0; i < table.length; ++i) {
  5.    result += bin[table[i] - 1];
  6.  }
  7.  
  8.  return result;
  9. }
  10.  
  11.  
  12. const BIN = "00000001111111111111111000001100110011110001000000000000";
  13. const DES_PC2 = [
  14.  14, 17, 11, 24, 1, 5,
  15.  3, 28, 15, 6, 21, 10,
  16.  23, 19, 12, 4, 26, 8,
  17.  16, 7, 27, 20, 13, 2,
  18.  41, 52, 31, 37, 47, 55,
  19.  30, 40, 51, 45, 33, 48,
  20.  44, 49, 39, 56, 34, 53,
  21.  46, 42, 50, 36, 29, 32
  22. ];
  23.  
  24. const res = pc(BIN, DES_PC2);
  25. console.log(res);
  26. /* FIN DEL CÓDIGO */

Para calcular todas las secuencias, el código que añadí es:
Código
  1. /* Calcula las 16 secuencias con PC-2 */
  2. const BINS = [
  3.  "00000001111111111111111000001100110011110001000000000000",
  4.  "00000011111111111111110000001001100111100010000000000001",
  5.  "00001111111111111111000000000110011110001000000000000110",
  6.  "00111111111111111100000000001001111000100000000000011001",
  7.  "11111111111111110000000000000111100010000000000001100110",
  8.  "11111111111111000000000000111110001000000000000110011001",
  9.  "11111111111100000000000011111000100000000000011001100111",
  10.  "11111111110000000000001111110010000000000001100110011110",
  11.  "11111111100000000000011111110100000000000011001100111100",
  12.  "11111110000000000001111111110000000000001100110011110001",
  13.  "11111000000000000111111111110000000000110011001111000100",
  14.  "11100000000000011111111111110000000011001100111100010000",
  15.  "10000000000001111111111111110000001100110011110001000000",
  16.  "00000000000111111111111111100000110011001111000100000000",
  17.  "00000000011111111111111110000011001100111100010000000000",
  18.  "00000000111111111111111100000110011001111000100000000000"
  19. ];
  20.  
  21. for (let i in BINS) {
  22.  console.log( pc(BINS[i], DES_PC2) )
  23. }
  24. /* FIN DEL CÓDIGO */

Y el resultado es:
1°  -> 111000001011111001100110000100110010101010000010
2°  -> 111000001011011001110110000100000010001100000111
3°  -> 111001001101011001110110101101100000000010000100
4°  -> 111001101101001101110010010000000010001111000011
5°  -> 101011101101001101110011001101101010000000001001
6°  -> 101011110101001101011011011000100001010101000010
7°  -> 001011110101001111011001000011001010000100101010
8°  -> 000111110101100111011001011001000101110001000000
9°  -> 000111110100100111011001010010101001100001000000
10° -> 000111110110100110011101110000001100010100111000
11° -> 000111110010110110001101000010010001111000001000
12° -> 010110110010110010101101110110000101000000110000
13° -> 110110011010110010101100000000010100101000101100
14° -> 110100001010111010101110100100000011100010010000
15° -> 111100001011111000100110101000010000001000110101
16° -> 111100001011111000100110101000110100001010000000


- En DES el mensaje que quieres encryptar debe ser dividido en bloques de 64 bits.

Para el mensaje debemos realizar una permutación inicial con una nueva tabla IP (Initial Permutation):
Cita de: IP
58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6,
64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1,
59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5,
63, 55, 47, 39, 31, 23, 15, 7

Usaré el mensaje "hello world" como ejemplo:
h -> 01101000
e -> 01100101
l -> 01101100
l -> 01101100
o -> 01101111
  -> 00100000
w -> 01110111
o -> 01101111
r -> 01110010
l -> 01101100
d -> 01100100

En bloques de 64 bits es:
0110100001100101011011000110110001101111001000000111011101101111
011100100110110001100100

Aquí tenemos un bloque de 64 bits y otro de 24.
Para no complicar el proceso con el padding, rellenaré de ceros el resto del bloque hasta alcanzar los 64 bits.
0110100001100101011011000110110001101111001000000111011101101111
0111001001101100011001000000000000000000000000000000000000000000

Ahora se aplica la tabla de permutación inicial (IP) a cada bloque:
B1 -> 1101111101000000110111101101001000000000111111111001110111010000
B2 -> 0000011100000001000001100000000000000000000001110000001000000001


- Ahora se divide cada bloque a la mitad (32 bits).

L  -> 11011111010000001101111011010010
R -> 00000000111111111001110111010000

(Este segundo bloque lo ignoraremos, porque hay distintas formas de combinar bloques, que esto ya no entra dentro de lo que es el propio algoritmo de DES y necesitaría una entrada propia)
L  -> 00000111000000010000011000000000
R -> 00000000000001110000001000000001

- El siguiente paso es utilizar una función que toma como entradas una clave de 48 bits y un texto de 32 bits, para generar una salida de 32 bits.
Usaremos las 16 claves de 48 bits que computamos en los pasos anteriores y los trozos de 32 bits que acabamos de hacer partiendo el mensaje en 2. Necesitamos aplicar las 16 claves a cada mitad usando una función.

Las claves que ya teníamos:
1°  -> 111000001011111001100110000100110010101010000010
2°  -> 111000001011011001110110000100000010001100000111
3°  -> 111001001101011001110110101101100000000010000100
4°  -> 111001101101001101110010010000000010001111000011
5°  -> 101011101101001101110011001101101010000000001001
6°  -> 101011110101001101011011011000100001010101000010
7°  -> 001011110101001111011001000011001010000100101010
8°  -> 000111110101100111011001011001000101110001000000
9°  -> 000111110100100111011001010010101001100001000000
10° -> 000111110110100110011101110000001100010100111000
11° -> 000111110010110110001101000010010001111000001000
12° -> 010110110010110010101101110110000101000000110000
13° -> 110110011010110010101100000000010100101000101100
14° -> 110100001010111010101110100100000011100010010000
15° -> 111100001011111000100110101000010000001000110101
16° -> 111100001011111000100110101000110100001010000000

El algoritmo que necesitamos utilizar es:
Código
  1. L[n] = R[n - 1]
  2. R[n] = L[n - 1] XOR F(R[n - 1], K[n])
L es el trozo izquierdo del bloque recientemente permutado
R es el trozo derecho del bloque recientemente permutado
XOR es una operación de Bits (Disyunción Exclusiva en Español).
F es una función con múltiples pasos que se detallará en seguida.
K es la clave.
n es la iteración/ronda.


Algoritmo para n = 1 (la primera vez que aplicas el algoritmo):
Código
  1. n = 1;
  2. L[1] = R[0];
  3. R[1] = L[0] XOR F(R[0], K[1]);

Código
  1. n = 1:
  2. R[0] = 00000000111111111001110111010000;
  3. L[1] = R[0]
  4. R[1] = 11011111010000001101111011010010 + F(00000000111111111001110111010000, 111000001011111001100110000100110010101010000010)

- Ahora vamos a empezar con la función F:

La función F utiliza una tabla de permutaciones (E) para expandir R[n - 1] de 32 bits a 48 bits.
Cita de: E
32, 1, 2, 3, 4, 5,
4, 5, 6, 7, 8, 9,
8, 9, 10, 11, 12, 13,
12, 13, 14, 15, 16, 17,
16, 17, 18, 19, 20, 21,
20, 21, 22, 23, 24, 25,
24, 25, 26, 27, 28, 29,
28, 29, 30, 31, 32, 1

En esta primera ronda, R[0] es 00000000111111111001110111010000

Tras expandir R[0] usando la tabla (E) para realizar la permutación, se obtiene:
000000000001011111111111110011111011111010100000

- El siguiente paso de la función es realizar un XOR entre R[0] expandido y K[1] (La primera clave)
000000000001011111111111110011111011111010100000 XOR 111000001011111001100110000100110010101010000010 -> 111000001010100110011001110111001001010000100010

El siguiente paso de F incluye el uso de S-Boxes (cajas de substitución).
Primero, hay que dividir el resultado de la clave xoreada con la mitad expandida del mensaje permutado en grupos de 6 bits:
111000 001010 100110 011001 110111 001001 010000 100010

La primera S-Box (S1) es:
Cita de: S1
14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
  0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
  4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
  15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13

La S-Box es como un mapa de coordenadas. Hay que elegir el primer y el último bit de cada grupo de 6 bits para obtener la coluna y los bits restantes (en el medio) se utilizan para elegir la fila.
En el caso de 111000:
Primer y último bit -> 10
Bits del medio -> 1100

Los pasamos a decimal:
10 -> 2
1100 -> 12

Y ahora empleamos estos 2 números como guía para obtener el decimotercero número de la tercera columna (Las columnas y filas empiezan a contar en 0).

El número que obtenemos es el 3.
3 -> 0011

Es decir, usando la S-Box con 111000 como entrada, obtenemos como salida 0011.

Ahora tenemos que repetir lo mismo para el resto de grupos de 6 bits, PERO necesitamos utilizar una S-Box distinta para cada grupo.

Cita de: Las 8 S-Boxes (una para cada grupo de 6 bits)
 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
  0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
  4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
  15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13
  
  15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
  3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
  0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
  13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9
  
  10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
  13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
  13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
  1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12
  
  7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
  13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
  10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
  3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14
      
  2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
  14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
  4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
  11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3
  
  12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
  10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
  9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
  4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13
  
  4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
  13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
  1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
  6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12
  
  13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
  1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
  7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
  2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11

Aquí el código que utilicé para generar todos los bits, utilizando los grupos y las cajas de substitución:
Código
  1. const transformSboxes = (groups, sboxes) => {
  2.  const ret = [];
  3.  for (let i in groups) {
  4.    const column = parseInt(groups[i][0] + groups[i][5], 2);
  5.    const field = parseInt(groups[i].substring(1, 5), 2);
  6.    let res = sboxes[i][column][field].toString(2);
  7.    if (res.length < 4) {
  8.      res = "0".repeat(4 - res.length) + res;
  9.    }
  10.    ret.push(res);
  11.  }
  12.  
  13.  return ret;
  14. }
  15.  
  16. const groups = [
  17.  "111000",
  18.  "001010",
  19.  "100110",
  20.  "011001",
  21.  "110111",
  22.  "001001",
  23.  "010000",
  24.  "100010"
  25. ]
  26.  
  27. const sBox = [
  28.  
  29.  [
  30.    [14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7],
  31.    [0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8],
  32.    [4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0],
  33.    [15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13]               ],
  34.  
  35.  [
  36.    [15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10],
  37.    [3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5],
  38.    [0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15],
  39.    [13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9]
  40.  ],
  41.  
  42.  [
  43.    [10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8],
  44.    [13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1],
  45.    [13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7],
  46.    [1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12]
  47.  ],
  48.  
  49.  
  50.  [
  51.    [7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15],
  52.    [13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9],
  53.    [10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4],
  54.    [3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14]
  55.  ],
  56.  
  57.  [
  58.    [2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9],
  59.    [14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6],
  60.    [4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14],
  61.    [11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3]
  62.  ],
  63.  
  64.  [
  65.    [12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11],
  66.    [10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8],
  67.    [9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6],
  68.    [4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13]
  69.  ],
  70.  
  71.  [
  72.    [4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1],
  73.    [13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6],
  74.    [1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2],
  75.    [6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12]
  76.  ],
  77.  
  78.  [
  79.    [13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7],
  80.    [1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2],
  81.    [7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8],
  82.    [2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11]
  83.  ]
  84. ];
  85.  
  86.  
  87. const res = transformSboxes(groups, sBox);
  88. console.log(res);
  89. /* END CODE */

Resultado:
0011 1011 1001 0001 1001 0111 0011 1011

De momento tenemos:
R[1] = 11011111010000001101111011010010 XOR F(0011 1011 1001 0001 1001 0111 0011 1011)

El último paso de la función es otra permutación:
Cita de: P
16, 7, 20, 21,
29, 12, 28, 17,
1, 15, 23, 26,
5, 18, 31, 10,
2, 8, 24, 14,
32, 27, 3, 9,
19, 13, 30, 6,
22, 11, 4, 25

El resultado de F es 11101111001010100110111100001010

Ahora tenemos que hacer xor a L[0] y al resultado de F para obtener R[1]:
R[1] = 11011111010000001101111011010010 XOR 11101111001010100110111100001010
R[1] -> 00110000011010101011000111011000

Ya finalizamos la primera ronda para n = 1. Recuerda:
Cita de: Algoritmo para n = 1
n = 1
L[1] = R[0]
R[1] = L[0] XOR F(R[0], K[1])

Ahora hay que realizar los mismos pasos para n = 2:
Cita de: Algoritmo para n = 2
n = 2
L[2] = R[1]
R[2] = L[1] XOR F(R[1], K[2])

Cuando finalizes todas las rondas (16), tendrás L[16] y R[16] (32 bits cada uno)
Solo te faltará darle la vuelta al orden. Ejemplo
Si L[16] es 00110000011010101011000111011000 y R[16] es 10110000011010101011000111011001 tendrás:
1011000001101010101100011101100100110000011010101011000111011000

Y aplicas la última permutación
Cita de: P-1
40, 8, 48, 16, 56, 24, 64, 32,
39, 7, 47, 15, 55, 23, 63, 31,
38, 6, 46, 14, 54, 22, 62, 30,
37, 5, 45, 13, 53, 21, 61, 29,
36, 4, 44, 12, 52, 20, 60, 28,
35, 3, 43, 11, 51, 19, 59, 27,
34, 2, 42, 10, 50, 18, 58, 26,
33, 1, 41, 9, 49, 17, 57, 25

El resultado es tu mensaje cifrado con DES.

Para descifrar es exactamente lo mismo.
42  Seguridad Informática / Hacking / Re: Como funciona este archivo? en: 3 Febrero 2022, 07:11 am
Te lo decodifiqué:

Cita de: original.rml
e070 18e3 2270 18e3 2e01 6e9f 5270 10c6
2177 1ae3 2272 18e0 2570 18c7 3770 18e5
2572 1dea 2f71 18e2 2770 18e2 2771 1a98
3a74 18eb 2471 11ea 2f6d 19f2 2770 18e2
2775 1c94 5212 7a97 3715 7c9b 5b60 1ae2
2470 04f2 546e 69fc 3760 08f2 3760 08f2
3760 08f2 3760 08f2 3760 08f2 3760 08f2
3760 08f2 3760 08f2 3770 18e2 2f72 18e3
2370 1fe3 2270 18e2 2f72 18e3 2370 1fc3
2270 18e2 2f72 19e2 2771 1ae0 2670 18c2
2474 1fe1 2770 18e0 2278 18e2 2771 1be2
2770 19e1 2770 1be4 7579 4ab6 2377 1cb1
3a76 19b6 2e6d 10e0 7579 05b3 2272 19ff
2322 19e0 7570 4be5 2478 4be1 2770 18e2
3700 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000

Cita de: conDirecciones.rml
00000000: e070 18e3 2270 18e3 2e01 6e9f 5270 10c6
00000010: 2177 1ae3 2272 18e0 2570 18c7 3770 18e5
00000020: 2572 1dea 2f71 18e2 2770 18e2 2771 1a98
00000030: 3a74 18eb 2471 11ea 2f6d 19f2 2770 18e2
00000040: 2775 1c94 5212 7a97 3715 7c9b 5b60 1ae2
00000050: 2470 04f2 546e 69fc 3760 08f2 3760 08f2
00000060: 3760 08f2 3760 08f2 3760 08f2 3760 08f2
00000070: 3760 08f2 3760 08f2 3770 18e2 2f72 18e3
00000080: 2370 1fe3 2270 18e2 2f72 18e3 2370 1fc3
00000090: 2270 18e2 2f72 19e2 2771 1ae0 2670 18c2
000000a0: 2474 1fe1 2770 18e0 2278 18e2 2771 1be2
000000b0: 2770 19e1 2770 1be4 7579 4ab6 2377 1cb1
000000c0: 3a76 19b6 2e6d 10e0 7579 05b3 2272 19ff
000000d0: 2322 19e0 7570 4be5 2478 4be1 2770 18e2
000000e0: 3700 0000 0000 0000 0000 0000 0000 0000
000000f0: 0000 0000 0000 0000 0000 0000 0000 0000

Cita de: decodificado
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000000  e070 18e3 2270 18e3 2e01 6e9f 5270 10c6  .p.."p....n.Rp..
0x00000010  2177 1ae3 2272 18e0 2570 18c7 3770 18e5  !w.."r..%p..7p..
0x00000020  2572 1dea 2f71 18e2 2770 18e2 2771 1a98  %r../q..'p..'q..
0x00000030  3a74 18eb 2471 11ea 2f6d 19f2 2770 18e2  :t..$q../m..'p..
0x00000040  2775 1c94 5212 7a97 3715 7c9b 5b60 1ae2  'u..R.z.7.|.[`..
0x00000050  2470 04f2 546e 69fc 3760 08f2 3760 08f2  $p..Tni.7`..7`..
0x00000060  3760 08f2 3760 08f2 3760 08f2 3760 08f2  7`..7`..7`..7`..
0x00000070  3760 08f2 3760 08f2 3770 18e2 2f72 18e3  7`..7`..7p../r..
0x00000080  2370 1fe3 2270 18e2 2f72 18e3 2370 1fc3  #p.."p../r..#p..
0x00000090  2270 18e2 2f72 19e2 2771 1ae0 2670 18c2  "p../r..'q..&p..
0x000000a0  2474 1fe1 2770 18e0 2278 18e2 2771 1be2  $t..'p.."x..'q..
0x000000b0  2770 19e1 2770 1be4 7579 4ab6 2377 1cb1  'p..'p..uyJ.#w..
0x000000c0  3a76 19b6 2e6d 10e0 7579 05b3 2272 19ff  :v...m..uy.."r..
0x000000d0  2322 19e0 7570 4be5 2478 4be1 2770 18e2  #"..upK.$xK.'p..
0x000000e0  3700 0000 0000 0000 0000 0000 0000 0000  7...............
0x000000f0  0000 0000 0000 0000 0000 0000 0000 0000  ................

Si buscas .rlm python en google, te salen varios resultados. Parece que pueda ser un modelo.
43  Foros Generales / Dudas Generales / Re: dudas generales en: 3 Febrero 2022, 06:43 am
Algunos lápices/memorias/pendrives USB tienen un botón por el lado para poner en modo solo lectura. Igual lo activaste sin querer al enchufarlo o desenchufarlo.

Qué modelo es?
44  Seguridad Informática / Hacking / Re: xss en etiqueta META en: 3 Febrero 2022, 06:40 am
Puedes pasar el código vulnerable? Es decir, no la página en sí, si no el código que trata la info, o al menos tu payload insertado en la página y el código de alrededor para poder analizarlo.
45  Seguridad Informática / Hacking / Re: Entornos para hacking en: 14 Enero 2022, 20:46 pm
maven web security dojo
46  Seguridad Informática / Seguridad / Re: VPN/TOR en: 14 Enero 2022, 20:42 pm
Pues si... si cometes un delito grave siempre darán contigo así uses VPN sobre VPN en serie o en paralelo... los únicos cyberdelincuentes que están a salvo son los apoyados por el gobierno de un país, siempre y cuando no salgan de ese país...

Yo use mucho TOR para navegar por la Dark Web en un tiempo y todo sin novedad... hasta me llegue a registrar en sitios de chateo y foros pero siempre con correos temporales de Yopmail, hasta que tuve una experiencia muy perturbadora en chat de Anon-Chan donde colocaron 3 imágenes de pornografía infantil y cerré el sitio de inmediato, aunque las terribles imágenes quedaron grabadas en mi mente... al día siguiente oí en la radio que unas autoridades no se de donde habían intervenido y cerrado un sitio de la dark web por mostrar porno infantil, y se trataba de ese mismo donde yo estaba registrado... entonces me retire de esa red y no he tenido porque entrar mas... eso fue hace como 8 años... y bueno, siempre descargo el TOR para tenerlo por allí actualizado porque uno no sabe cuando puede hacer falta instalarlo...

 :rolleyes: :o :rolleyes:

Eso es un peligro, pera ya no en tor. Una web cualquiera puede alojar imágenes pedófilas, incluirlas en la web pero no mostrarlas, por ejemplo haciéndolas totalmente transparentes. De esta forma tu navegador se las descarga. Es un problema grave de seguridad del diseño de la web. Y tal como están las leyes, cualquiera demuestra que no las viste y que fue una web de venta de pcs la que te hizo el lío...
47  Seguridad Informática / Seguridad / Re: VPN/TOR en: 14 Enero 2022, 13:28 pm
La VPN no aporta nada, a menos que tu ISP impida utilizar TOR. En ese caso si debes usar VPN. En cualquier otro, no te lo recomiendo, pasas 100% a depender de la privacidad del VPN y de que no guarde logs de todo lo que haces en TOR. Y tampoco añade una capa de seguridad, por lo que puedes seguir siendo víctima a ataques por nodos maliciosos de TOR. Asique en mi opinión usar un VPN aumenta los posibles vectores de desanonimización.
48  Foros Generales / Foro Libre / Re: El asteroide 2009 JF1, el quinto más peligroso, podría impactar contra la Tierra en 2022: hay día y hora en: 13 Enero 2022, 04:35 am
Madre mía. Pintan como si una roca de 15 metros fuese a destruir medio planeta. Cuando en realidad a la hostia que viene, se desintegraría/fundiría en el aire al rozar con la atmósfera en un par de segundos xD

PD: La última afirmación es falsa. Ni es el mas peligroso ni va a impactar contra la tierra. Tiene entre un 0 y un 0.3 de probabilidades de que impacte. Ni siquiera causaría la extinción de la vida humana en la tierra, fijaros como de terrible es "el mas peligroso".

Qué verguenza de periodismo español.
49  Foros Generales / Dudas Generales / Re: Información sobre los CARDERS y la compra de CRIPTOMONEDAS en: 8 Enero 2022, 03:47 am
Tienes nombre de alguien que quiere hacer una tesis, sí.  ;)

50  Programación / Desarrollo Web / Re: [Pregunta]: ¿Meta descripción va en todos mis html? en: 1 Enero 2022, 20:16 pm
No estoy seguro si esta es la sección pero es "Desarrollo web" creo...
Quería saber si la meta description solamente tendría que ir en el archivo index o tiene que ir en todos mis html, sería lo mismo la meta keywords...
En todos tus html.

Para evitar escribir lo mismo 10.000 veces, puedes usar un lenguaje/entorno de backend como node o php. O hacer una SPA (Single Page Aplication)
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 287
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines