En casi cualquier sitio web que relaciona información sobre criptografía en general, existe la idea común de que casi todos los algoritmos de cifrado / descifrado deben usar una clave como una de sus entradas. La razón detrás de esto es que los algoritmos de cifrado que no usan una clave son técnicamente inútiles.
Por esto no puedo evitar preguntarme cómo llegaron a esa conclusión. ¿Por qué es que la tendencia común en la criptografía es mantener la clave de seguridad en secreto, pero permitir que los algoritmos de cifrado y descifrado sean públicos? ¿Qué pasaría si los algoritmos de cifrado y descifrado fueran el secreto? En ese caso, ya no habría necesidad de una clave y simplificaría mucho las cosas.
Por ejemplo: supongamos que soy un desarrollador de software que desea enviar mensajes de texto de una computadora a otra (y viceversa) para permitir la comunicación (una aplicación de chat simple). Supongamos que las computadoras se comunican entre sí a través de una red insegura con el protocolo TCP / IP. Supongamos que quiero asegurarles un poco de privacidad en su conversación y crear este algoritmo de "cifrado" muy básico en el que simplemente agrego 10 a cada código ASCII para cada letra en el texto sin formato antes de enviarlo como bytes en bruto a través de la red. Como un mensaje como "Hola, hermano!" sería interceptado por cualquier atacante como "Rovvy6 * l | y ~ ro | +".
¿Cómo puede alguien interceptar el mensaje reconstruir el texto sin formato original si no tenía conocimiento de los algoritmos de cifrado o descifrado? ¿Cuál sería el mejor enfoque para romper este criptosistema? ¿Es realmente tan fácil romper de alguna manera los esquemas de encriptación que no usan claves, que no son soluciones viables?
Finalmente, si quieres decir algo como "Bueno ... no necesitas un genio para descubrir que solo estás agregando 10 a cada byte del texto sin formato", lo hice por razones de simplicidad. Si desea que el mensaje sea aún más críptico, no dude en imaginar que la fórmula matemática es mucho más compleja (como sumar 7, restar 10 y luego multiplicar por 2).