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 decrypt
tal 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, crypt
y decrypt
son llamados por diferentes programas o diferentes ejecuciones del mismo programa, por lo que necesitamos aproximarnos crypt
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
crypt = crypt_algo(secret)
decrypt = decrypt_algo(secret)
podemos aproximarnos a la meta anterior. crypt
y decrypt
tienen un alto contenido de información debido al alto contenido de información de secreto a pesar de que crypt_algo
y decrypt_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
"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_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.