La diferencia crítica está en lo que se mantiene en secreto.
Tome RSA como ejemplo. El principio básico de RSA es la matemática simple. Cualquier persona con un poco de conocimiento matemático puede descubrir cómo funciona RSA funcionalmente (las matemáticas tienen casi medio milenio). Se necesita más imaginación y experiencia para descubrir cómo podría aprovechar eso por seguridad, pero se ha hecho de manera independiente al menos dos veces (por Rivest, Shamir y Adleman, y unos años antes por Clifford Cocks ). Si diseñas algo como RSA y lo mantienes en secreto, es muy probable que alguien más sea lo suficientemente inteligente como para averiguarlo.
Por otro lado, una clave privada se genera al azar. Cuando se realiza correctamente, la generación aleatoria garantiza que es imposible reconstruir el secreto con poder de cómputo humanamente disponible. Ninguna cantidad de inteligencia permitirá a nadie reconstruir una cadena secreta de bits aleatorios, porque esa cadena no tiene una estructura que intuir.
Los algoritmos criptográficos se inventan a partir de la inteligencia, con objetivos ampliamente compartidos (proteger algunos datos, implementar el algoritmo a bajo costo, ...). Hay una buena probabilidad de que las personas inteligentes converjan en el mismo algoritmo. Por otro lado, las cadenas aleatorias de bits secretos son abundantes y, por definición, las personas no crearán la misma cadena aleatoria¹. Entonces, si diseña su propio algoritmo, es muy probable que su vecino diseñe el mismo. Y si comparte su algoritmo con su amigo y luego quiere comunicarse en privado con él, necesitará un nuevo algoritmo. Pero si genera una clave secreta, será distinta de la de su vecino y la de su amigo. Definitivamente hay un valor potencial en mantener una clave aleatoria en secreto, lo cual no es el caso para mantener un algoritmo en secreto.
Un punto secundario sobre el secreto de la clave es que se puede medir. Con un buen generador aleatorio, si genera una cadena de n bits aleatoria y la mantiene en secreto, existe una probabilidad de 1/2 ^ de que alguien más la encuentre en un intento. Si diseña un algoritmo, no se puede medir el riesgo de que alguien más lo descubra.
Las claves privadas RSA no son una cadena aleatoria simple, tienen una estructura, son un par de números primos. Sin embargo, la cantidad de entropía (el número de claves RSA posibles de un tamaño determinado) es lo suficientemente grande como para que sea prácticamente imposible de adivinar. (En cuanto a que las claves RSA son prácticamente imposibles de reconstruir a partir de una clave pública y un montón de texto y texto cifrado, eso es algo que no podemos probar matemáticamente, pero creemos que es así porque muchas personas inteligentes lo han intentado y han fallado. otra historia.)
Por supuesto esto generaliza a cualquier algoritmo criptográfico. Mantenga las cadenas aleatorias en secreto. Publica diseños inteligentes.
Esto no quiere decir que todo se debe hacer público, excepto por la pequeña parte que es un conjunto aleatorio de bits. El principio de Kerckhoff no dice que - dice que la seguridad del diseño no debe depender del secreto de diseño. Si bien los algoritmos criptográficos se publican mejor (y debe esperar aproximadamente una década antes de usarlos para ver si suficientes personas no los han roto), hay otras medidas de seguridad que se mantienen mejor en secreto, en particular las medidas de seguridad que requieren un sondeo activo descifrar. Por ejemplo, algunas reglas de firewall pueden caer en esta categoría; sin embargo, un servidor de seguridad que no ofrece protección contra un atacante que sabe que las reglas sería inútil, ya que eventualmente alguien las resolverá.
¹ Si bien esto no es cierto matemáticamente, literalmente se puede apostar.