Definição de problema
O objetivo da criptografia é aproximar um processo pelo qual
crypt(x)
não transmite informações sobre x, mas existe uma função decryptque
decrypt(crypt(x)) == x
Se a descriptografia e criptografia foram feitas apenas na mesma execução do mesmo programa, você pode implementar isso perfeitamente usando o 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]; }
Na prática, porém, crypte decryptsão chamados por programas diferentes ou execuções diferentes do mesmo programa, precisamos aproximar cryptusando uma função determinística cuja saída é indistinguível de bits aleatórios - ela deve ser incompressível (no sentido de codificação de Shannon) não há bits de estrutura extras que possam ser usados para coletar informações sobre x.
Os algoritmos são altamente estruturados, portanto, compressíveis. Portanto, o que precisamos é de uma maneira de obter aparente aleatoriedade, mantendo o determinismo necessário parade c r yp t ∘ c r yp t = i de n t i t y.
Responda
Currying um algoritmo compressível simples com um segredo incompressível
crypt = crypt_algo(secret)
decrypt = decrypt_algo(secret)
podemos aproximar o objetivo acima. crypte decryptter alto conteúdo de informações devido ao alto conteúdo de informações secretas crypt_algoe ainda decrypt_algoter baixo conteúdo de informações.
secretprecisa ser mantido longe dos atacantes para que isso funcione, pois caso contrário, um invasor pode simplesmente fazer o curry acima. O algoritmo não precisa ser mantido em segredo, pois fornece apenas uma pequena parte do conteúdo informativo da função em curry.
Embargo
"A segurança criptográfica deve confiar em uma chave secreta em vez de em um algoritmo secreto."
Eu discordo do em vez da parte.
Você pode obter alguma medida de defesa em profundidade mantendo os dois em segredo, mas o teste crypt_algoé difícil; portanto, historicamente, os algoritmos secretos desenvolvidos internamente por amadores tiveram um desempenho pior quando submetidos a ataques do que aqueles que foram cuidadosamente revisados por um grande número de pessoas. criptografadores profissionais. É por isso que a segurança pela obscuridade ganhou um nome merecidamente ruim. A "obscuridade" refere-se a tentativas de manter o algoritmo em segredo como um substituto para proteger adequadamente as chaves.