Es una declaración bien conocida que
"La seguridad criptográfica debe basarse en una clave secreta en lugar de un algoritmo secreto ".
Me gustaría preguntar sobre algunos detalles al respecto. ¿Y cuáles son sus diferencias?
Veo lo obvio que para un sistema multiusuario, generar una clave es abrumadoramente más fácil que generar un algoritmo distinto para cada par de usuarios (e incluso para un solo par de usuarios, uno podría argumentar que actualizar la clave es más fácil)
Pero, ¿es el único argumento?
Quiero decir, si definimos
AlgorithmA = AlgorithmX + key A
AlgorithmB = AlgorithmX + key B
Entonces, un cambio en la clave no es diferente de un cambio en el algoritmo.
Lo único diferente que veo es que para un nuevo par de usuarios / claves
La mayor parte de la estructura del algoritmo permanece constante en el caso de la clave secreta,
La mayor parte de la estructura del algoritmo debe cambiar en el caso del algoritmo secreto
¿Pero dónde está el límite? "la mayoría de" significado?
Me gustaría tener más puntos de vista y pistas para entender por qué se suele mencionar esta distinción.
fuente
Respuestas:
Definición del problema
El objetivo de la criptografía es aproximar un proceso mediante el cual
no transmite información sobre x pero existe una función
decrypt
tal queSi descifrar y criptar solo se hicieran en la misma ejecución del mismo programa, podría implementar esto perfectamente usando el estado oculto:
Sin embargo, en la práctica,
crypt
ydecrypt
son llamados por diferentes programas o diferentes ejecuciones del mismo programa, por lo que necesitamos aproximarnoscrypt
usando una función determinista cuya salida no se puede distinguir de los bits aleatorios; tiene que ser incompresible (en el sentido de codificación de Shannon) no hay bits de estructura adicionales que puedan usarse para obtener información sobre x.Los algoritmos son altamente estructurados, por lo tanto, comprimibles Entonces, lo que necesitamos es una forma de obtener una aleatoriedad aparente mientras se conserva el determinismo que se requiere para .ree c r yp t ∘ c r yp t = i de n t i t y
Responder
Al elaborar un algoritmo compresible simple con un secreto incompresible
podemos aproximarnos a la meta anterior.
crypt
ydecrypt
tienen un alto contenido de información debido al alto contenido de información de secreto a pesar de quecrypt_algo
ydecrypt_algo
tienen bajo contenido de información.secret
debe evitarse de los atacantes para que esto funcione, ya que de lo contrario un atacante podría simplemente hacer el curry anterior. El algoritmo no necesita mantenerse en secreto, ya que solo proporciona una pequeña porción del contenido de información de la función currificada.Consideración
No estoy de acuerdo con la parte en lugar de .
Puede obtener cierta medida de defensa en profundidad al mantener ambos en secreto, pero las pruebas
crypt_algo
son difíciles, por lo que históricamente, los algoritmos secretos desarrollados internamente por los aficionados han tenido peores resultados al ser atacados que aquellos que han sido cuidadosamente revisados por un gran número de criptógrafos profesionales Es por eso que la seguridad por oscuridad ha tenido un mal nombre merecido. La "oscuridad" allí se refiere a los intentos de mantener el algoritmo en secreto como un sustituto para proteger adecuadamente las claves.fuente
La distinción que desea hacer entre la clave y el algoritmo adecuado no se basa en si la mayor parte de la operación está contenida en una u otra, sino en dónde radica la complejidad. No estoy hablando de la complejidad algorítmica aquí, sino de la complejidad en su significado cotidiano: dificultad para comprender y razonar.
El algoritmo adecuado es complejo y difícil de razonar. En general, realiza un montón de manipulaciones de bits de apariencia arbitraria, operaciones lógicas y aritméticas, y la combinación general de los datos. Es muy difícil para un laico o incluso para un criptógrafo saber cuánta privacidad le compran realmente esas manipulaciones y a qué tipo de criptoanálisis podría ser vulnerable. Por lo tanto, la mejor manera de confiar en la seguridad del algoritmo es publicarlo y hacer que los expertos lo revisen lo más ampliamente posible. HAZLO PÚBLICO.
La clave, por otro lado, es un concepto simple: es un montón de bits que deben ser aleatorios. No es necesario revisar la clave para asegurar la corrección de la criptografía. Se supone que cualquier clave es tan fuerte como cualquier otra clave (y si esto no es cierto, en principio se puede descubrir mediante la revisión del algoritmo, no la clave). Sabemos que la calidad de la aleatoriedad que está disponible para generar claves es menos que perfecta, por lo que en la práctica algunas claves pueden ser débiles debido a la falta de aleatoriedad, pero al menos todo el mundo puede saber sin necesidad de ser un criptógrafo experto y sin necesidad de hacer Un análisis difícil de la clave de que una buena aleatoriedad LLEVARÁ a una buena clave. Entonces, use la mejor aleatoriedad que tenga disponible, entonces no necesita (¡NO DEBE!) Compartir la clave con todos para tener confianza en su criptografía.
fuente
Hace unos años hice la misma pregunta a uno de los conocidos expertos en criptografía.
El punto más interesante aquí es que puedes pensar en la clave para contener el código del algoritmo y que el algoritmo sea una simple Máquina Universal de Turing (UTM). Recuerde que lo que queremos hacer es tener un algoritmo fijo para la tarea criptográfica que no cambie de una ejecución del algoritmo a otra ejecución, si considera que la clave es parte del algoritmo, entonces el algoritmo debe cambiar cada vez para Asegúrate de que sea seguro. Con un algoritmo fijo más una clave elegida al azar, no tenemos ese problema.
La diferencia original es más clara si piensas en la criptografía premoderna. Si el adversario conociera el algoritmo, todo estaba perdido, sería inútil, mantener el algoritmo era esencial. Si en un caso particular se conociera el algoritmo, todo se perdería para todos los usos futuros. En la criptografía moderna, la clave no es parte del algoritmo , se elige al azar , revelando que el algoritmo criptográfico (e incluso las claves utilizadas anteriormente) no compromete la seguridad de sus usos futuros, ya que en el futuro la clave será solo otra cadena elegida al azar y que garantizaría la seguridad, las claves utilizadas anteriormente no son de ayuda para romper la nueva ejecución.
Entonces, ¿qué sucede si consideramos UTM más una clave aleatoria? A menos que la clave tenga una estructura agradable , no puede probar que el algoritmo será seguro, por ejemplo, una clave elegida al azar de la distribución uniforme no funcionará. La clave debería ser "esencialmente" un algoritmo fijo más una cadena aleatoria, en cuyo caso no es realmente diferente de mover la parte del algoritmo fijo de la clave a UTM, no está cambiando de una ejecución a otra.
fuente