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

RSA x ED25519 x OTP - Existe algum algoritmo realmente seguro para os próximos 100 anos?

Por eu não ser um expert no assunto, achei melhor expor minha dúvida aqui no Tabnews e, quem sabe, obter respostas que também serão úteis para outros leitores.


Dilema

Supondo que você necessita armazenar um backup de tamanho qualquer e por um período de 50 anos a partir de 2025. Escolhendo o algoritmo de encriptação adequado, pode até mesmo deixar o pacote encriptado em um repositório público sem se preocupar com vulnerabilidades do algoritmo adotado para cifrar o conteúdo, seja nesta era de computação pré-quântica e, quem sabe, na quântica e pós-quântica. Considerando que o algoritmo também é atualmente público, o conteúdo só será acessível caso a chave criptográfica também seja divulgada.

Quais seriam as opções mais viáveis, ressaltando-se os prós e contras?

Sugestões

Encontrei algumas sugestões de onde copio uma das tabelas:

table1

AES - Praticamente disponível em diferentes hardware modernos, logo, com baixo custo para sua computação. Pode estar sujeita a alguns tipos de ataques se mal implementada.

RSA 4096 - São chaves privadas longas quando comparadas às baseadas em curvas elípticas, contudo, não há notícias de quando será factível sua quebra nesta era pré-quântica. Entretanto fico com algumas dúvidas. Uma delas: caso o algoritmo matemático já tenha sido quebrado por hackers, o detentor do segredo não tiraria proveito do processo antes de sua divulgação? É uma dúvida natural em meio a uma éra em que os exploits e backdoors só vem a público após descobertos em pleno uso...

ED25519 - Geram chaves privadas relativamente curtas e seguras comparáveis à RSA 2048 ou RSA 4096. Foi uma das recomendações, por exemplo, em um dos vídeos do Akita ou mesmo alguns posts na internet. Desconheço todos os detalhes do funcionamento do algoritmo matemático.

Outro método - proposto futuramente em algum dos replies deste corrente post.

OTP - Chaves One Time Pad geralmente têm comprimento igual ao comprimento da mensagem sendo uma de suas desvantagens, mas produz uma cifra inquebrável em qualquer era, caso realizada de maneira correta. Entretanto, devido à possibilidade decriptação da mensagem cifrada para qualquer conteúdo legível, diferentes hashes públicos podem ser necessários para validá-la no futuro quando da divulgação da(s) chave(s).

Nota relativa ao OTP: Alguns posts trazem a a informação que OTP é extremamente segura se aplicada de maneira correta. Tanto a mensagem quanto a chave, esta aleatória e não pseudo-aleatória, assim que combinadas, dispersa todo conteúdo original em uma mensagem cifrada resultante. Não é possível um ataque determinístico a não ser por força bruta. Caso marcadores determinísticos na mensagem existam, podem estar sujeitos a ataques. Vantagem: Para mensagens curtas, pode ser totalmente implementada com "lápis e papel", independentemente de computação digital.

Solução adotada

Esta é uma resposta que ainda procuro construir para este post. Por não tê-la neste momento da publicação, apreciaria todos comentários e críticas não somente dos mais experientes no assunto, mas também dos entusiastas e curiosos. Logo, não o considero finalizado.


1714969425 - Esta postagem.
1715013427 - Não há acento diferencial na palavra era
...

3

Comparar algoritmo criptográficos sem antes averiguar a geração de chaves é como comparar carros modernos sem motor. Primeiros, temos que saber as diferenças de hashing e encriptação. Os algoritmos mostrados na tabela são apenas de encriptação/decriptação, os quais ainda dependem de um algoritmo de geração de chaves para funcionar.

Nesse post do meu blog eu explico o quão seguro é uma criptografia xor, o que muitos falam que é muito inseguro devido sua simplicidade no algoritmo mas ignoram o principal em uma operação criptográfica: o quão segura é sua chave.

Muitos sistemas não sabem o conceito de segurança criptográfica e dedicam toda sua segurança em um código copiado-e-colado que pegaram da internet. Configurar um algoritmo AES para encriptar/decriptar informação não é simples, é complexo, pode ter várias falhas se não fizer direito e cada situação é uma situação.

Além disso, tentar decriptar algo sem saber algoritmo usado, fluxo de criptografia (a forma que você aplicou o salt, chaves privadas e conteúdo), algoritmo usado para gerar a chave, o tamanho da chave, o vetor de inicialização da chave, e tudo o que é necessário para encriptar o seu conteúdo misterioso, fica quase impossível obter a decriptografia do mesmo.

Resumo: não dedique toda a segurança de uma operação criptográfica à um algoritmo. Existem muitos outros passos antes de tomar esse, o que nem computação quântica ou magia negra conseguirão quebrar, mas se tiverem acesso ao seu código fonte, talvez 95% do trabalho de quebrar a criptografia já esteja adiantado.

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