Criptografia OpenPGP
No OpenPGP, a mensagem não é diretamente criptografada com a frase secreta. Em vez disso, uma chave de sessão aleatória é gerada como chave para a criptografia simétrica da mensagem.
Esta chave de sessão agora é criptografada usando a frase secreta. Ao aplicar essa abordagem de duas etapas, é possível criptografar a mensagem uma vez, mas permitir a descriptografia usando diferentes chaves privadas ou senhas adicionando uma cópia criptografada da chave de sessão uma vez. Para entender melhor como as mensagens do OpenPGP são construídas, dê uma olhada em RFC 4880, OpenPGP e a saída de gpg --list-packets
e pgpdump
para a mensagem criptografada (ambos imprimem informações nos pacotes OpenPGP).
Além disso, cada mensagem é preenchida com alguns bytes aleatórios, resultando também em mensagens completamente diferentes. Por fim, a mensagem criptografada armazena o registro de data e hora da criptografia, que obviamente será diferente, a menos que você criptografe duas vezes exatamente no mesmo segundo.
Ter uma saída diferente ao criptografar a mesma mensagem duas vezes pode ser muito importante: as informações de que duas mensagens realmente são a mesma mensagem geralmente já são um problema. Por ter teclas de sessão aleatórias e preenchimento, um invasor não pode fazer nenhuma suposição sobre o conteúdo da mensagem, pois ele recebe várias mensagens.
Restrição Única na Saída Criptografada
Se você precisar ter uma restrição exclusiva na mensagem, calcule uma soma de hash criptográfico (por exemplo, SHA-256) na mensagem e armazene-a adicionalmente (e calcule a restrição exclusiva na soma de hash, em vez da criptografada mensagem).