Graças à sua série sobre o AES, eu implementei em C um criptografador de arquivos usando AES no modo CBC, o único problema é que o vetor de inicialização que eu gero não satisfaz os requisitos estatísticos para um número pseudoaleatório. Dei uma pesquisada sobre algoritmos para este fim (CSPRNG), mas não consegui encontrar nenhuma informação de como implementá-los. Recomenda algum algoritmo para eu implementar no meu gerador? A propósito, que belíssima série! Muito obrigado pelo conhecimento.
Prezado Diego, no caso do AES em modo CBC o uso de um algoritmo CSPRNG ou PRNG não faz diferença do ponto de vista da segurança no que diz respeito a estrutura do vetor de inicialização. Por que? A resposta é simples: o vetor de inicialização em modo CBC diz respeito apenas ao primeiro bloco cifrado, tendo em vista que o segundo bloco está inicializado com um vetor que corresponde ao bloco cifrado no primeiro bloco que não depende diretamente do vetor de inicialização mas do bloco cifrado corrente. Desta forma, a segurança da cifra depende unicamente da segurança do AES e não de uma "melhor aleatoriedade", se podemos assim classificar, do vetor de inicialização inicial. Isto faria extrema diferença se vc estivesse falando de uma cifra puramente de fluxo, o que não é este caso. O vetor de inicialização tem o papel de fazer a diferença na cifra nos casos em que mensagens claras com início igual e cifradas com a mesma chave produzam criptogramas iguais. A diferença é, em certo contexto, sutil, mas imprescindível de ser devidamente separada por criptoanalistas com alguma experiência.
Graças à sua série sobre o AES, eu implementei em C um criptografador de arquivos usando AES no modo CBC, o único problema é que o vetor de inicialização que eu gero não satisfaz os requisitos estatísticos para um número pseudoaleatório. Dei uma pesquisada sobre algoritmos para este fim (CSPRNG), mas não consegui encontrar nenhuma informação de como implementá-los. Recomenda algum algoritmo para eu implementar no meu gerador?
A propósito, que belíssima série! Muito obrigado pelo conhecimento.
Prezado Diego, no caso do AES em modo CBC o uso de um algoritmo CSPRNG ou PRNG não faz diferença do ponto de vista da segurança no que diz respeito a estrutura do vetor de inicialização. Por que? A resposta é simples: o vetor de inicialização em modo CBC diz respeito apenas ao primeiro bloco cifrado, tendo em vista que o segundo bloco está inicializado com um vetor que corresponde ao bloco cifrado no primeiro bloco que não depende diretamente do vetor de inicialização mas do bloco cifrado corrente. Desta forma, a segurança da cifra depende unicamente da segurança do AES e não de uma "melhor aleatoriedade", se podemos assim classificar, do vetor de inicialização inicial. Isto faria extrema diferença se vc estivesse falando de uma cifra puramente de fluxo, o que não é este caso. O vetor de inicialização tem o papel de fazer a diferença na cifra nos casos em que mensagens claras com início igual e cifradas com a mesma chave produzam criptogramas iguais. A diferença é, em certo contexto, sutil, mas imprescindível de ser devidamente separada por criptoanalistas com alguma experiência.