Secreto clave vs secreto del algoritmo


8

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.


Respuestas:


4

Definición del problema

El objetivo de la criptografía es aproximar un proceso mediante el cual

crypt(x)

no transmite información sobre x pero existe una función decrypttal que

decrypt(crypt(x)) == x

Si descifrar y criptar solo se hicieran en la misma ejecución del mismo programa, podría implementar esto perfectamente usando el estado oculto:

var map = {};  // A hidden hashmap.

function crypt(x) {
  var k = unique_unforgeable_value();
  map[k] = x;
  return k;
}

function decrypt(k) { return map[k]; }

Sin embargo, en la práctica, crypty decryptson llamados por diferentes programas o diferentes ejecuciones del mismo programa, por lo que necesitamos aproximarnos cryptusando 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 .remiCrypagstCrypagst=yoreminortetyoty

Responder

Al elaborar un algoritmo compresible simple con un secreto incompresible

crypt = crypt_algo(secret)
decrypt = decrypt_algo(secret)

podemos aproximarnos a la meta anterior. crypty decrypttienen un alto contenido de información debido al alto contenido de información de secreto a pesar de que crypt_algoy decrypt_algotienen bajo contenido de información.

secretdebe 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

"La seguridad criptográfica debe basarse en una clave secreta en lugar de un algoritmo secreto".

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_algoson 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.


Creo que esta es la respuesta correcta, el algoritmo tiene estructura y la clave no, y esa es la clave =)
Hernan_eche

5

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.


Creo que esto merece un comentario. He leído su respuesta, y entiendo que su punto es correcto en algún momento, pero he seleccionado la respuesta de @Mike Samuel que sorprendentemente dice exactamente lo contrario. Es, que el algoritmo es menos complejo que la clave, porque el algoritmo tiene (y necesita) una estructura, pero la clave (no necesita tener una estructura). Estoy de acuerdo. En cambio, ha dicho: "La clave, por otro lado, es un concepto simple: son un montón de bits que deben ser aleatorios", de hecho, un simple "concepto" no es un simple "dato". ¡La complejidad de los datos 'aleatorios' es la máxima complejidad posible!
Hernan_eche

@Hernan_eche La clave tiene una alta complejidad de Kolmogorov con respecto a otras cadenas de bits de la misma longitud. Pero, conceptualmente, es solo una cadena aleatoria de bits y, como concepto, es mucho más fácil de entender que cualquier buen algoritmo criptográfico.
David Richerby

2

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.