La honestidad me ordena de inmediato que diga que no soy un profesional, pero me fascina el cifrado de datos. Este algoritmo no se utilizará en el código de producción, así que no me inundes con "No diseñes tu propio cripto", lo sé. Pido disculpas por adelantado si la pregunta no es adecuada para este sitio.
Me preguntaba qué tan seguro sería el siguiente algoritmo de cifrado. Tomaría:
- una clave de 256 bytes de longitud, que debe interpretarse como una serie de números.
- los datos se cifrarán, se leen en bloques de 256 bytes.
La clave es tal que no se repiten dos valores, y todos los valores deben estar en el rango 0x00–0xFF. Esto significa que hay 256! posibles combinaciones, si no me equivoco. Sin embargo, algunas de esas combinaciones son más entrópicas que otras, lo que hace que algunas de ellas sean menos útiles, ¿no?
Ahora, se crea una copia del fragmento de datos y la clave se itera. El primer byte en el fragmento de datos original se mueve al primer valor de la clave; el segundo, al segundo valor en la clave, y así sucesivamente.
En pseudocódigo:
for index, destination in enumerate(key):
data_enc[destination] = data[index]
Al no ser un cifrado de sustitución, debería ser más difícil adivinar qué valor es cuál. Sin embargo, soy consciente de que la sustitución es siempre la misma en todos los datos, por lo que seguramente cuenta como una debilidad.
La principal debilidad es su simplicidad, supongo. ¿Qué piensas?