Também chamada de criptografia de chave secreta ou única, utiliza uma mesma chave tanto para codificar como para decodificar informações, sendo usada principalmente para garantir a confidencialidade dos dados. Casos nos quais a informação é codificada e decodificada por uma mesma pessoa não há necessidade de compartilhamento da chave secreta. Entretanto, quando estas operações envolvem pessoas ou equipamentos diferentes, é necessário que a chave secreta seja previamente combinada por meio de um canal de comunicação seguro (para não comprometer a confidencialidade da chave). Exemplos de métodos criptográficos que usam chave simétrica são: AES, Blowfish, RC4, 3DES e IDEA.
A criptografia de chave simétrica, quando comparada com a de chaves assimétricas, é a mais indicada para garantir a confidencialidade de grandes volumes de dados, pois seu processamento é mais rápido. Todavia, quando usada para o compartilhamento de informações, se torna complexa e pouco escalável, em virtude da:
necessidade de um canal de comunicação seguro para promover o compartilhamento da chave secreta entre as partes (o que na Internet pode ser bastante complicado)
dificuldade de gerenciamento de grandes quantidades de chaves (imagine quantas chaves secretas seriam necessárias para você se comunicar com todos os seus amigos).
A criptografia de chaves assimétricas, apesar de possuir um processamento mais lento que a de chave simétrica, resolve estes problemas visto que facilita o gerenciamento (pois não requer que se mantenha uma chave secreta com cada um que desejar se comunicar) e dispensa a necessidade de um canal de comunicação seguro para o compartilhamento de chaves.
Para aproveitar as vantagens de cada um destes métodos, o ideal é o uso combinado de ambos, onde a criptografia de chave simétrica é usada para a codificação da informação e a criptografia de chaves assimétricas é utilizada para o compartilhamento da chave secreta (neste caso, também chamada de chave de sessão). Este uso combinado é o que é utilizado pelos navegadores Web e programas leitores de e-mails. Exemplos de uso deste método combinado são: SSL, PGP e S/MIME.
Uma função de resumo é um método criptográfico que, quando aplicado sobre uma informação, independente do tamanho que ela tenha, gera um resultado único e de tamanho fixo, chamado hash1.
Você pode utilizar hash para:
verificar a integridade de um arquivo armazenado em seu computador ou em seus backups;
verificar a integridade de um arquivo obtido da Internet (alguns sites, além do arquivo em si, também disponibilizam o hash correspondente, para que você possa verificar se o arquivo foi corretamente transmitido e gravado);
gerar assinaturas digitais,
Para verificar a integridade de um arquivo, por exemplo, você pode calcular o hash dele e, quando julgar necessário, gerar novamente este valor. Se os dois hashes forem iguais então você pode concluir que o arquivo não foi alterado. Caso contrário, este pode ser um forte indício de que o arquivo esteja corrompido ou que foi modificado. Exemplos de métodos de hash são: SHA-1, SHA-256 e MD5.
A assinatura digital permite comprovar a autenticidade e a integridade de uma informação, ou seja, que ela foi realmente gerada por quem diz ter feito isto e que ela não foi alterada.
A assinatura digital baseia-se no fato de que apenas o dono conhece a chave privada e que, se ela foi usada para codificar uma informação, então apenas seu dono poderia ter feito isto. A verificação da assinatura é feita com o uso da chave pública, pois se o texto foi codificado com a chave privada, somente a chave pública correspondente pode decodificá-lo.
Para contornar a baixa eficiência característica da criptografia de chaves assimétricas, a codificação é feita sobre o hash e não sobre o conteúdo em si, pois é mais rápido codificar o hash (que possui tamanho fixo e reduzido) do que a informação toda.
Como dito anteriormente, a chave púbica pode ser livremente divulgada. Entretanto, se não houver como comprovar a quem ela pertence, pode ocorrer de você se comunicar, de forma cifrada, diretamente com um impostor.
Um impostor pode criar uma chave pública falsa para um amigo seu e enviá-la para você ou disponibilizá-la em um repositório. Ao usá-la para codificar uma informação para o seu amigo, você estará, na verdade, codificando-a para o impostor, que possui a chave privada correspondente e conseguirá decodificar. Uma das formas de impedir que isto ocorra é pelo uso de certificados digitais.
O certificado digital é um registro eletrônico composto por um conjunto de dados que distingue uma entidade e associa a ela uma chave pública. Ele pode ser emitido para pessoas, empresas, equipamentos ou serviços na rede (por exemplo, um site Web) e pode ser homologado para diferentes usos, como confidencialidade e assinatura digital.
Um certificado digital pode ser comparado a um documento de identidade, por exemplo, o seu passaporte, no qual constam os seus dados pessoais e a identificação de quem o emitiu. No caso do passaporte, a entidade responsável pela emissão e pela veracidade dos dados é a Polícia Federal. No caso do certificado digital esta entidade é uma Autoridade Certificadora (AC).
Uma AC emissora é também responsável por publicar informações sobre certificados que não são mais confiáveis. Sempre que a AC descobre ou é informada que um certificado não é mais confiável, ela o inclui em uma "lista negra", chamada de "Lista de Certificados Revogados" (LCR) para que os usuários possam tomar conhecimento. A LCR é um arquivo eletrônico publicado periodicamente pela AC, contendo o número de série dos certificados que não são mais válidos e a data de revogação.
A Figura 9.1 ilustra como os certificados digitais são apresentados nos navegadores Web. Note que, embora os campos apresentados sejam padronizados, a representação gráfica pode variar entre diferentes navegadores e sistemas operacionais. De forma geral, os dados básicos que compõem um certificado digital são:
versão e número de série do certificado;
dados que identificam a AC que emitiu o certificado;
dados que identificam o dono do certificado (para quem ele foi emitido);
chave pública do dono do certificado;
validade do certificado (quando foi emitido e até quando é válido);
assinatura digital da AC emissora e dados para verificação da assinatura.
Atualmente, a criptografia moderna se baseia na premissa de que os algoritmos criptográficos são públicos e chaves criptográficas são protegidas. Quanto maior for a chave criptográfica, maior será o esforço computacional para sua quebra.
Por exemplo, se tivermos uma chave de 3 bits de comprimento, precisaremos resolver o “mistério” que é 23 – possibilidades da representação binária elevada à quantidade de bits. Nesse caso teremos 8 possibilidades: 000, 001, 010, 011, 100, 101, 110, 111. Assim sendo, a cada bit acrescentado ao expoente, dobra-se a quantidade de combinações possíveis e, consequentemente, esforço computacional e tempo requeridos para exaurimento das possibilidades.
Testar oito ou dezesseis possibilidades é algo trivial para um computador doméstico moderno, e isso ocorrerá numa fração de tempo tão curta que não dará tempo sequer de piscar os olhos.
A história nos ensina que a tecnologia em “estado da arte” de determinada época, torna-se popular e acessível às massas num futuro próximo. Para ilustrar essa afirmação, temos hoje em nossos smartphones uma tecnologia ordens de vezes mais avançada do que aquela que levou o homem à lua, menos de 50 anos depois.
Seguindo essa tendência, imaginemos que o computador mais rápido do planeta – Sunway TaihuLight, capaz de processar 93 quatrilhões de instruções por segundo, em breve esteja no bolso dos 7.5 bilhões de habitantes do planeta. Imaginemos também que todos esses habitantes se unam na tarefa de varrer todas as possibilidades de uma chave criptográfica simétrica com comprimento de 256 bits, já comum hoje em dia. Em quanto tempo varreremos todas as possibilidades de combinação de bits dessa chave?
Fazendo as contas: sete bilhões e quinhentos milhões de habitantes no planeta com poder computacional individual de calcular noventa e três quatrilhões de instruções por segundo. Isso resulta numa capacidade combinada de testar aproximadamente 22 milhões de bilhões de bilhões de bilhões de possibilidades por ano. Você não leu errado, não existem palavras duplicadas, se trata do numeral 22 seguido de trinta e três zeros.
Assim sendo, demoraríamos aproximadamente 5.2 milhões de bilhões de bilhões de bilhões de bilhões de anos para varrer todas as possibilidades de combinação dos 256 bits 0s e 1s. Considerando que o universo tem idade estimada em 13.3 bilhões de anos, demoraríamos muito mais tempo do que gostaríamos para conseguir tal façanha.