Haga rodar su propio cifrado - con un giro

-4

Estoy familiarizado con la Ley de Schneier:

  

Cualquier persona puede inventar un sistema de seguridad tan inteligente que no pueda imaginar una forma de romperlo.

He leído las muchas publicaciones en este intercambio lleno de preguntas sobre cómo escribir su propio algoritmo de seguridad, y he leído las respuestas obvias de por qué es una idea terrible fuera de un experimento mental.

Esta pregunta pretende ser diferente, aunque probablemente será igual de ignorante que el resto. Sin embargo, estoy interesado en lo que todos ustedes tienen que decir.

Cuando pienso en el cifrado, lo veo aproximadamente así:

(data) * (algo % key) = (encrypted data)  

en otras palabras, tome algunos datos, agregue una contraseña a través de un algoritmo y obtendrá datos encriptados.

Pero, ¿y si el algoritmo fuera la contraseña? ¿Qué pasaría si escribiera un programa pequeño y simple que modificaría los datos que le proporcionó y luego destruyó el programa después de cada uso?

Por ejemplo, lo mantendremos muy simple. Tienes una cadena de palabras como

"My name is Alice"

Supongamos que escribes un programa muy, muy simple que toma esta cadena y la modifica:

std::string input="My name is Alice";
std::string output;
std::string oginput;

for(char& c : input) {
    output += (c + 1); 
}   

for(char& c : output) {
    oginput+= (c - 1); 
}   

std::cout<<output<<std::endl;
std::cout<<oginput<<std::endl;
  

Salida:

     

Nz! obnf! jt! Bmjdf

     

Mi nombre es Alice

La idea es simple: agregue 1 a cada carácter para cifrar, reste 1 de cada carácter para descifrar. Este tipo de programa es lo suficientemente simple para que la idea de lo que hace pueda ser recordada, y lo suficientemente simple para volver a implementarlo, incluso si su sintaxis o medios (las funciones) son diferentes. Incluso una idea más compleja, puede ser lo suficientemente simple como para recordar cómo implementarla, incluso si es una página o dos de código para hacerlo.

Entonces, si toma este algoritmo en su cabeza, escriba un programa que modifique una parte de los datos de alguna manera, luego destruya el programa (asumamos que el código, el programa compilado, los archivos obj, etc. no se almacenan en el disco duro). o guardados de cualquier manera - son 100% desaparecidos para siempre).

Ahora estás sentado con un blob aleatorio de datos Nz!obnf!jt!Bmjdf sin punto de inicio para conectarlo, sin algoritmos conocidos para descifrarlo contra w / un montón de claves, etc. Acabas de ingresar una entrada, la has activado de manera tan simple que solo usted sabe cómo invertir, y destruyó cualquier migaja de galleta en el camino.

¿Es esta una forma viable de encriptación para las personas técnicamente inclinadas? Por supuesto, este ejemplo es lo suficientemente simple como para descifrar, se pueden encontrar patrones, etc. Pero una serie de pequeños cambios en los datos en un orden secreto, y quizás múltiples iteraciones, se agregan muy rápidamente a la entropía.

    
pregunta RollYourOwn 15.06.2016 - 21:29
fuente

4 respuestas

9

La falla en tu pensamiento está aquí:

  

Acabas de tomar una entrada, la has convertido en galimatías de una manera determinada que solo tú sabes cómo revertir ...

Compare eso con el uso de un cifrado fuerte probado y verdadero con una clave de descifrado larga para que solo usted sepa lo que es .

Es posible que su algoritmo sea tan seguro como el algoritmo probado y verdadero, pero también podría no serlo (y muy probablemente no lo sea). ¿Entonces, para qué molestarse? En ambos casos, usted debe mantener en secreto algo, de modo que no gane nada, salvo más riesgo.

Moraleja de la historia (ya que esto aparece tan a menudo):

  

Cuando tienes un neumático desinflado, puedes contratar a un tipo realmente fuerte para que levante   y sostenga el auto por usted mientras cambia la llanta, o puede usar un   gato neumático.

    
respondido por el TTT 15.06.2016 - 21:57
fuente
5

El algoritmo en tu ejemplo es básicamente un Cifrado César muy simple con una clave fija (1), y no eso definitivamente no es seguro Un atacante podría determinar qué algoritmo usó con bastante facilidad simplemente analizando el texto cifrado. Otros esquemas que podría crear podrían tener vulnerabilidades similares que permitirían a un criptoanalista realizar una ingeniería inversa del algoritmo del texto cifrado de manera similar.

Así que no, rodar su propio criptografía no es una buena idea, independientemente de las medidas que tome para mantener el algoritmo en secreto (incluido el borrado después de cada uso).

    
respondido por el Ajedi32 15.06.2016 - 21:55
fuente
1

No es un método de encriptación viable para personas con inclinaciones técnicas.

1) Todas las partes a las que proporcionará el texto cifrado deberán conocer los pasos de cifrado / descifrado. Esto ya garantiza que no solo usted sepa el algoritmo.

2) No lo harás a mano. Deberá convertir su algoritmo en un producto de software, que se distribuirá entre sus usuarios.

3) No tiene control sobre el paquete de software dado a los usuarios. Esto abre el riesgo del punto 1).

Resultado 2) No tienes forma de saber si alguien ha roto tu algoritmo.

    
respondido por el user4294507 15.06.2016 - 22:17
fuente
0

El uso de cifrado incorrecto e inestable para enviar mensajes secretos no es el único riesgo de este esquema.

Como cualquier otro programa de computadora, en un nivel su clave se convierte en un algoritmo que le dice a otra persona cómo computarlo. Incluso si pudieras encontrar un algoritmo tan bueno como AES (lo siento, no lo eres), necesitarías un lenguaje para expresarlo para poder compartirlo. Este idioma tendría que ser procesado por el receptor para descifrar mensajes. Y este lenguaje, que requiere la implementación de la lógica de bifurcación, sería Turing-complete, por lo que sería vulnerable a una nueva clase de ataques que no tendrían nada que ver con su esquema de cifrado.

Considere: Un atacante podría enviar una clave de descifrado falsa a una víctima, afirmando que sigue un mensaje legítimo. La víctima pone la clave falsa en su rutina de descifrado. El atacante envía el mensaje y la víctima intenta descifrarlo. La combinación de clave falsa y mensaje manipulado hace que su motor de descifrado ejecute suficientes reglas personalizadas para generar el código necesario para ejecutar un exploit, y luego entrega el código de shell para proporcionar una puerta trasera.

    
respondido por el John Deters 15.06.2016 - 22:34
fuente

Lea otras preguntas en las etiquetas