Byte intercambiando defectos de seguridad del algoritmo de cifrado?

1

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?

    
pregunta Luca 11.07.2014 - 17:03
fuente

2 respuestas

3
  

algunas de esas combinaciones son más entrópicas que otras

Por favor, no torturen palabras.

Entropy es una característica de un proceso aleatorio: es una cuantificación de cuántos resultados diferentes podría haber obtenido. En su caso, su "clave" es una permutación de 256 valores, por lo que el proceso es el que produce una nueva permutación. El proceso tiene entropía; Ninguna permutación de salida tiene ninguna entropía. Una permutación es solo un valor, es lo que es; no "contiene" entropía. En consecuencia, no tiene sentido declarar que cualquier permutación específica es más o menos "entrópica" que cualquier otra; los valores no son "entrópicos" en absoluto.

  

La principal debilidad es su simplicidad, supongo.

No, la simplicidad es su principal fortaleza, no su principal debilidad. La simplicidad es buena. La principal debilidad de tu esquema es que es débil.

Lo que describe es un cifrado de permutación , que es un subcaso de cifrados de transposición . Estos son tipos de algoritmos que eran populares en la época en que no podíamos hacerlo mejor porque era anterior a la invención de la computadora. Están horriblemente llenos de fugas en muchos aspectos (por ejemplo, no ocultan la frecuencia de las letras, ya que todas las letras de texto simple aún están allí). Edgar Allan Poe se jactó de que podía romper todo tipo de sustitución o cifrado de transposición, y no se demostró que estaba equivocado antes de su muerte en 1849.

    
respondido por el Tom Leek 11.07.2014 - 18:01
fuente
1

Sí, es muy, muy débil. Considere algo que podría querer cifrar: digamos, esta solicitud HTTP.

POST /login HTTP/1.1
Accept-Encoding: gzip;q=0.9
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Host: example.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
username=false&password=%3B4NBt~%3A8%22%26xOqeZy

Transposición aleatoria en los primeros 256 bytes:

cT_
ox(tAHPM/ztz.au  knel-:amnie-eanL11AwlSCl  Mi.xti ;o 4c (-tpp.s.qpEetX3ewGo71x
P.pr ec H0/e1:iln9mKe/ie3plk8eTKg6fC1apo5 /  3 oe:T-
HrLvegy, S.g
u/1l5w7kne)W. c5
l0 0gn6tOo.x3m-o3i)6-rbo
oci1maioCodet6/h-dp5oc3enifa/cdnoT5lepinraen9UTAlits;ren:.cpin:=6

Si sabe cuál es el texto en claro, y en muchos casos no es difícil de adivinar, solo hay algunas posibilidades para el siguiente bloque, y está garantizado para ser tan reconocible Datos ya que hay caracteres únicos en el texto plano conocido. Dado que, rellenar el resto es más fácil, y es el caso de cada bloque que obtiene con la misma clave.

Ese es el más obvio, pero también está el hecho de que puede hacer un análisis de frecuencia para averiguar exactamente qué se está enviando, o reducir los conjuntos de caracteres para las contraseñas transferidas, simplemente suponga ...

Puedes "arreglar" esto de dos maneras:

  • Usando una clave diferente, no relacionada para cada bloque. Felicidades; tienes una versión más débil del pad de una sola vez.

  • Al calcular una clave diferente para cada bloque. Felicidades; tiene una versión más débil de cada cifrado con programación de claves.

respondido por el Ry- 11.07.2014 - 17:21
fuente

Lea otras preguntas en las etiquetas