Executando verificação de segurança...
1

Muito boas suas observações, cyp. Relatam detalhes que sequer lembrei-me da relevância. Valeu por destacá-los bem, de modo claro e objetivo. É verdade, existe o algoritmo criptográfico e o algoritmo gerador de chaves. A segurança por obscuridade, ocultando detalhes do algoritmo além da chave, dificulta um pouco mais o processo de reversão.

Vi o texto que publicou em seu blog a respeito da cifragem XOR. No código que lá apresenta, realça quão simples e seguro pode ser caso tal cifragem seja corretamente implementada.

Consideramos o pseudo-código abaixo:

byte[] inputBytes = ... // 1024 bytes
byte[] derivedBytes = Rfc2898DeriveBytes.Pbkdf2(
    key,
    salt,
    10000,
    HashAlgorithmName.SHA256,
    inputBytes.Length);
byte[] encryptedBytes = XOR(inputBytes, derivedBytes);

No código, a função Rfc2898DeriveBytes.Pbkdf2 é um Pseudo Random Noise Generator. Em vez de guardar toda chave aleatória, armazena-se apenas os parâmetros passados para a Rfc2898DeriveBytes.Pbkdf2. Lembro-me disto com certa vantagem quando usando OTP. Precisei armazenar toda chave aleatória gerada a partir de ruído atmosférico que, praticamente, não pode ser reproduzida, logo, a necessidade de armazená-la em outro local seguro. O armazenamento é custoso, pois não há algoritmo de compactação eficiente para os conteúdos aleatórios gerados (chave e cifra).