Fundamentos da Criptografia: Algoritmos e Segurança

Classificado em Computação

Escrito em em português com um tamanho de 25,91 KB

Cifras Simétricas

Algoritmos de chave simétrica são divididos em cifras de fluxo (RC4) e em cifras por bloco. As cifras de fluxo cifram os bits da mensagem um a um, enquanto que as cifras por bloco pegam um número de bits e cifram como uma única unidade. Tipicamente, são utilizados blocos de 64 bits; o algoritmo AES usa blocos de 128, 192 ou 256 bits e chaves de 128, 192 ou 256 bits.

Algoritmo Simétrico: DES

O DES (Data Encryption Standard) é um algoritmo de bloco simétrico desenvolvido pela IBM. Atualmente, é o algoritmo mais divulgado e utilizado em sistemas criptográficos no mercado mundial. A chave criptográfica do DES possui apenas 56 bits; assim, a segurança do DES é bastante questionada: o algoritmo pode ser quebrado por um ataque de força bruta, pois a chave secreta faz parte de um conjunto de 256 chaves (esse procedimento levaria 2000 anos de execução para descobrir a chave secreta se considerarmos que uma máquina realizasse uma criptografia DES em 1 microssegundo). Existe uma técnica para melhorar a segurança do algoritmo DES, utilizando uma criptografia tripla, conhecida como DES Triplo. Nesta técnica, cada mensagem passa por três processos criptográficos que reduzem a possibilidade de a segurança ser quebrada por ataques de força bruta. Isso equivale a, no mínimo, dobrar o tamanho da chave DES para 112 bits.

Algoritmo Assimétrico: RSA

O RSA (Rivest, Shamir e Adleman algorithm) é o algoritmo de chave pública mais popular, bem como o mais fácil de compreender e implementar. A segurança do RSA baseia-se na dificuldade de fatorar grandes números: as chaves são calculadas matematicamente combinando dois números primos de grande porte. Mesmo conhecendo o produto desses números primos (que faz parte da chave pública divulgada), a segurança do algoritmo é garantida pela complexidade de fatorar esse produto e obter os valores secretos. A grande desvantagem do RSA é, portanto, a lentidão do processo que envolve exponenciação modular (uma série de multiplicações modulares é realizada). Na criptografia simétrica, cada dupla de parceiros deve compartilhar entre si uma única informação confidencial; a cada novo parceiro de comunicação, uma nova informação confidencial deve ser intercambiada entre eles. Dependendo do número de parceiros envolvidos no processo de comunicação, a etapa de autenticação pode se tornar bastante complexa devido à quantidade de chaves confidenciais que serão necessárias para autenticar cada parceiro isoladamente. Na criptografia assimétrica, teremos um problema semelhante com o gerenciamento das chaves públicas que, apesar de não serem informações confidenciais como no caso anterior, ainda exigem uma diversidade de chaves (cada parceiro possui a sua própria chave pública). Baseado na complexidade do processo de autenticação em sistemas distribuídos, idealizou-se um serviço de autenticação utilizando um servidor dedicado: o Servidor de Autenticação (SA). Nesse protocolo, o usuário precisará ter conhecimento apenas da chave relacionada com o SA; por sua vez, o SA deverá ter conhecimento de todas as chaves dos usuários relacionados com o seu domínio de atuação. Esse tipo de protocolo é denominado protocolo de autenticação third-party por existir um terceiro parceiro que será encarregado de, com segurança, administrar os usuários e suas senhas, bem como autenticar usuários autorizados por sessão de comunicação.

Uso do RSA em Assinaturas Digitais

Além de ser utilizado para ciframento, o RSA também serve para fazer assinaturas, gerando chaves privadas e públicas. Ao assinar uma mensagem m, a assinatura s será: S = md mod n. Para verificar a assinatura, utiliza-se m' = se mod n. Se m = m', então a assinatura s deve ser considerada válida. Note que, para um inimigo forjar uma assinatura, ele precisa saber o valor de d, o que seria equivalente a quebrar o RSA (o que é tão difícil quanto fatorar n).

DES (Data Encryption Standard)

É um tipo de cifra em bloco, ou seja, um algoritmo que toma uma string de tamanho fixo de um texto plano e a transforma, através de uma série de operações complexas, em um texto cifrado de mesmo tamanho. No caso do DES, o tamanho do bloco é de 64 bits. O DES também usa uma chave para personalizar a transformação, de modo que a descriptografia somente seria possível, teoricamente, por aqueles que conhecem a chave particular utilizada para criptografar. A chave consiste nominalmente de 64 bits; porém, somente 56 deles são realmente utilizados pelo algoritmo. Os oito bits restantes são utilizados para verificar a paridade e depois são descartados; portanto, o tamanho efetivo da chave é de 56 bits, e assim é citado o tamanho de sua chave.

AES (Advanced Encryption Standard)

O AES processa dados em blocos de 128 bits e uma chave com tamanho de 128, 192 ou 256 bits. É o novo padrão do NIST, substituindo o DES.

Função Hashing

Uma função é dita unidirecional ou de hash quando possui a característica de transformar um texto de qualquer tamanho em um texto ininteligível de tamanho fixo. Além disso, ela também se caracteriza por ser fácil de calcular e difícil de serem invertidas. A assinatura digital obtida através do uso da criptografia assimétrica ou de chave pública não pode ser empregada de forma isolada. Sua utilização como componente de assinaturas digitais se faz necessária devido à lentidão dos algoritmos assimétricos, em geral cerca de 1.000 vezes mais lentos do que os simétricos. Assim, na prática, é inviável e contraproducente utilizar puramente algoritmos de chave pública para assinaturas digitais, principalmente quando se deseja assinar grandes mensagens, que podem levar preciosos minutos ou mesmo horas para serem integralmente "cifradas" com a chave privada de alguém. Ao invés disso, é empregada uma função Hashing, que gera um valor pequeno, de tamanho fixo, derivado da mensagem que se pretende assinar, de qualquer tamanho. Assim, a função Hashing oferece agilidade nas assinaturas digitais, além de integridade confiável. Este valor serve, portanto, para garantir a integridade do conteúdo da mensagem que representa. Assim, após o valor hash de uma mensagem ter sido calculado através do emprego de uma função hashing, qualquer modificação em seu conteúdo (mesmo em apenas um bit da mensagem) será detectada, pois um novo cálculo do valor hash sobre o conteúdo modificado resultará em um valor hash bastante distinto.

Certificado Digital

Com um sistema de chave pública, o gerenciamento de chaves passa a ter dois novos aspectos:

  • Deve-se previamente localizar a chave pública de qualquer pessoa com quem se deseja comunicar;
  • Deve-se obter uma garantia de que a chave pública encontrada seja proveniente daquele Usuário B.

Sem essa garantia, um intruso pode convencer os interlocutores (usuários A e B) de que chaves públicas falsas pertencem a eles. Estabelecendo um processo de confiança entre os interlocutores, o intruso pode fazer-se passar por ambos. Desse modo, quando um interlocutor (usuário A) enviar uma mensagem ao outro (usuário B) solicitando sua chave pública, o intruso poderá interceptá-la e devolver-lhe uma chave pública forjada por ele. Ele também pode fazer o mesmo com o recebedor (usuário B), fazendo com que cada lado pense que está se comunicando com o outro, quando na verdade estão sendo interceptados pelo intruso. O intruso, então, pode decifrar todas as mensagens, cifrá-las novamente ou, se preferir, pode até substituí-las por outras mensagens. Através desse ataque, um intruso pode causar tantos danos ou até mais do que causaria se conseguisse quebrar o algoritmo de ciframento empregado pelos interlocutores. A garantia para evitar esse ataque é representada pelos certificados de chave pública. Tais certificados consistem em chaves públicas assinadas por uma pessoa de confiança. Servem para evitar tentativas de substituição de uma chave pública por outra. O certificado do usuário B contém algo mais do que sua chave pública: contém informações sobre ele (seu nome, endereço e outros dados pessoais) e é assinado por alguém em quem o usuário A deposita sua confiança: uma Autoridade de Certificação (CA) (Certification Authority), que funciona como um cartório eletrônico. Pela assinatura da chave pública e das informações sobre o usuário B, a CA garante que a informação sobre o usuário B está correta e que a chave pública em questão realmente pertence a ele. O usuário A, por sua vez, confere a assinatura da CA e então utiliza a chave pública em questão, seguro de que esta pertence ao usuário B e a ninguém mais. Certificados desempenham um importante papel em um grande número de protocolos e padrões utilizados na proteção de sistemas de comércio eletrônico.

Assinaturas Digitais

Uma assinatura digital é um tipo específico de MAC que resulta de sistemas de criptografia assimétrica, como o RSA, por exemplo, e é usada para proteger a informação. Para assinar uma mensagem, uma função Message Digest (MD) é usada para processar o documento, produzindo um pequeno pedaço de dados, chamado de hash. Uma MD é uma função matemática que resume toda a informação de um arquivo em um único pedaço de dados de tamanho fixo. O motivo para se usar funções message digest está diretamente ligado ao tamanho do bloco de dados a ser criptografado para se obter a assinatura. De fato, criptografar mensagens longas pode durar muito tempo, enquanto criptografar hashes, que são blocos de dados pequenos e de tamanho fixo gerados pela MD, torna o processamento mais eficiente. A diferença é que a assinatura digital pode ser matematicamente verificada. Dado um documento e sua assinatura digital, pode-se facilmente verificar sua integridade e autenticidade. Primeiro, executa-se a função MD (usando o mesmo algoritmo MD que foi aplicado ao documento na origem), obtendo assim um hash para aquele documento e, posteriormente, decifra-se a assinatura digital com a chave pública do remetente. A assinatura digital decifrada deve produzir o mesmo hash gerado pela função MD executada anteriormente. Se esses valores são iguais, é determinado que o documento não foi modificado após a assinatura; caso contrário, o documento, a assinatura, ou ambos foram alterados. A assinatura digital pode dizer apenas que o documento foi modificado, mas não o que foi modificado nem o quanto foi modificado. Para que um documento ou uma assinatura adulterada não seja detectada, o atacante Trudy precisa ter acesso à chave privada de quem assinou esse documento. O que torna as assinaturas digitais diferentes de MACs é que, enquanto estes últimos requerem chaves privadas para verificação, assinaturas digitais podem ser verificadas usando chaves públicas.

A assinatura digital também é valiosa, pois pode-se assinar informações em um sistema de computador e depois provar sua autenticidade sem se preocupar com a segurança do sistema que as armazena.

Protocolo SSL/TLS

O protocolo SSL/TLS provê a privacidade e a integridade de dados entre duas aplicações que se comunicam pela internet. Isso ocorre através da autenticação das partes envolvidas e da cifragem dos dados transmitidos entre as partes. Esse protocolo ajuda a prevenir que intermediários entre as duas pontas da comunicação tenham acesso indevido ou falsifiquem os dados transmitidos. O servidor do site que está sendo acessado envia uma chave pública ao browser, usada por este para enviar uma chave secreta de sessão, criada aleatoriamente. Dessa forma, fica estabelecida a troca de dados criptografados entre dois computadores. O SSL opera de forma modular, possui design extensível e apresenta compatibilidade entre pares com versões diferentes do mesmo. O SSL permite a autenticação das duas partes envolvidas na comunicação (cliente e servidor) baseando-se em certificados digitais.

MAC (Message Authentication Code)

É um pequeno pedaço de informação usado para autenticar a mensagem. Um algoritmo MAC recebe como entrada uma chave secreta e uma mensagem de tamanho arbitrário para ser autenticada, e gera como saída um MAC. O valor do MAC protege tanto a integridade dos dados da mensagem quanto a sua autenticidade, permitindo aos verificadores (que também possuem a chave secreta) detectar quaisquer mudanças no conteúdo da mensagem.

HMAC (Hash-based Message Authentication Code)

É um padrão popular de MAC que resolve algumas falhas de segurança sutis. O HMAC envolve 4 passos principais:

  1. Concatena o segredo à frente da mensagem.
  2. A mensagem concatenada é submetida a uma função de hash.
  3. O segredo é concatenado novamente à frente do resultado do hash anterior.
  4. Cria-se um hash da combinação perfeita (o resultado final).

O processo passa duas vezes pela função de hash.

Perguntas e Respostas sobre Criptografia

a. Defina o que são sistemas criptográficos simétricos e assimétricos.

  • Em sistemas simétricos, existe apenas uma chave para cada par de entidades comunicantes. Ou seja, Alice e Bob possuem uma chave k que é usada para comunicação, e esta chave deve ser mantida secreta (ninguém, além de Alice e Bob, deve conhecê-la).
  • Em sistemas assimétricos, cada entidade comunicante possui um par de chaves (uma chave pública e uma chave privada). Ou seja, Alice possui uma chave pública e uma chave privada, e Bob possui uma chave pública e uma chave privada. A chave pública de Alice (e a de Bob) pode ser livremente divulgada, mas a chave privada de Alice (e a de Bob) deve ser mantida secreta, ou seja, conhecida somente por Alice (Bob).

b. Descreva suas diferenças mais relevantes.

Em sistemas simétricos, há uma chave única para cada par de entidades comunicantes. Quando Alice deseja criptografar uma mensagem m para Bob, ela utiliza a chave secreta que foi compartilhada com Bob. Em sistemas assimétricos, há um par de chaves para cada entidade comunicante. Quando Alice deseja criptografar uma mensagem m para Bob, ela utiliza a chave pública de Bob (ao invés de sua chave secreta). Neste tipo de sistema, a chave privada está relacionada à chave pública através de uma função de mão única sem atalho, ou seja, a chave privada é escolhida e então a chave pública é computada a partir da chave privada, utilizando-se uma função desse tipo.

c. Descreva as vantagens e desvantagens de cada um.

  • Distribuição de Chaves: Em sistemas simétricos, a chave (secreta) deve ser transmitida através de um canal seguro, enquanto em sistemas assimétricos não é necessário esse tipo de canal. Seja n o número de entidades comunicantes:
    • Em sistemas simétricos, cada par de entidades deve compartilhar uma chave secreta. Uma dada entidade deve compartilhar uma chave diferente com cada uma das outras n-1 entidades. Temos um total de n*(n-1)/2 chaves secretas. Quando n é grande, a quantidade de chaves que cada entidade deve manter em sigilo (n-1) é grande.
    • Já em sistemas assimétricos, há um par de chaves para cada entidade, totalizando 2n chaves no sistema. Cada entidade deve manter em sigilo somente 1 chave privada.
  • Desempenho: Sistemas simétricos, em geral, têm desempenho ordens de magnitude superior ao dos sistemas assimétricos, pois as operações realizadas por estes são mais custosas computacionalmente.
  • Autenticidade da Chave:
    • Em sistemas simétricos, o uso correto da chave secreta por uma entidade A para enviar uma mensagem criptografada para a entidade B garante a B que somente A (e B) conhece essa chave, supondo, obviamente, que A (e B) a mantém em sigilo. Ou seja, a autenticação da mensagem enviada é implícita.
    • Em sistemas assimétricos, a criptografia utiliza a chave pública do destinatário (Bob), de modo que qualquer entidade pode criptografar uma mensagem para o destinatário. Uma entidade maliciosa (Trudy) pode enviar uma mensagem criptografada para o destinatário dizendo que essa mensagem foi escrita por outra entidade (Alice), passando-se por Alice para tentar enganar Bob. Ou seja, Bob não consegue autenticar a mensagem recebida.

d. Descreva uma utilização típica combinando os dois.

Alice escolhe aleatoriamente uma chave secreta de sessão (Ks). Ela executa um algoritmo assimétrico de criptografia com a chave pública de Bob, usando Ks como a mensagem a ser criptografada. Envia o resultado (c) para Bob. Bob decifra c com a sua chave privada e então obtém Ks. Neste momento, Alice e Bob estabeleceram um par de chaves e, portanto, um canal seguro. Para trocar mensagens sobre este canal seguro, eles utilizam um algoritmo simétrico com a chave Ks.

e. Cite pelo menos um exemplo de cada sistema.

  • Simétricos: DES, 3DES, AES, Serpent.
  • Assimétricos: RSA, ElGamal.

Comparativo: Criptografia Simétrica vs. Assimétrica

Criptografia Simétrica:

  • Rápida.
  • Gerência e distribuição das chaves é complexa.
  • Não oferece assinatura digital.

Criptografia Assimétrica:

  • Lenta.
  • Gerência e distribuição simples.
  • Oferece assinatura digital.

Criptografia Simétrica X Criptografia Assimétrica:

Analisando os dois métodos, podemos observar que a criptografia por chave pública tem vantagem sobre a chave privada no sentido de viabilizar a comunicação segura entre pessoas comuns. Com a chave pública, também acaba o problema da distribuição de chaves existente na criptografia por chave secreta, pois não há necessidade do compartilhamento de uma mesma chave, nem de um pré-acordo entre as partes interessadas. Com isso, o nível de segurança é maior. A principal vantagem da criptografia por chave secreta está na velocidade dos processos de criptografar/descriptografar, pois estes tendem a ser mais rápidos que os de chave pública.

Requisitos de Segurança em Criptografia

  • Disponibilidade: Garante que uma informação estará disponível para acesso no momento desejado.
  • Integridade: Garante que o conteúdo da mensagem não foi alterado.
  • Controle de Acesso: Garante que o conteúdo da mensagem somente será acessado por pessoas autorizadas.
  • Autenticidade da Origem: Garante a identidade de quem está enviando a mensagem.
  • Não-Repúdio: Previne que alguém negue o envio e/ou recebimento de uma mensagem.
  • Privacidade (Confidencialidade ou Sigilo): Impede que pessoas não autorizadas tenham acesso ao conteúdo da mensagem, garantindo apenas que origem e destino tenham conhecimento.

Exemplo: Compra pela Internet

  • A informação que permite a transação (valor e descrição do produto adquirido) precisa estar disponível no dia e na hora que o cliente desejar efetuá-la (Disponibilidade).
  • O valor da transação não pode ser alterado (Integridade).
  • Somente o cliente que está comprando e o comerciante devem ter acesso à transação (Controle de Acesso).
  • O cliente que está comprando deve ser quem diz ser (Autenticidade da Origem).
  • O cliente tem como provar o pagamento e o comerciante não tem como negar o recebimento (Não-Repúdio).
  • O conhecimento do conteúdo da transação fica restrito aos envolvidos (Privacidade).

Questões Adicionais sobre Criptografia

1. Diferenças na Distribuição de Chaves (Simétrica vs. Pública)

Em sistemas simétricos, a chave (secreta) deve ser transmitida através de um canal seguro, enquanto em sistemas assimétricos não é necessário esse tipo de canal. Seja n o número de entidades comunicantes. Em sistemas simétricos, cada par de entidades deve compartilhar uma chave secreta. Uma dada entidade deve compartilhar uma chave diferente com cada uma das outras n-1 entidades. Temos um total de n*(n-1)/2 chaves secretas. Quando n é grande, a quantidade de chaves que cada entidade deve manter em sigilo (n-1) é grande. Já em sistemas assimétricos, há um par de chaves para cada entidade, totalizando 2n chaves no sistema. Cada entidade deve manter em sigilo somente 1 chave privada.

2. Por que a criptografia de chave pública não deve ser usada isoladamente?

A criptografia de chave pública não deve ser utilizada isoladamente para obter confidencialidade na transmissão de mensagens em geral, pois apresenta duas preocupações principais. Primeiramente, o conhecimento público da chave e do algoritmo de criptografia permite que um intruso, ao interceptar a mensagem cifrada de Alice, veja apenas os dados criptografados, mas conheça tanto a chave pública quanto o algoritmo que Alice usou. Assim, um intruso pode montar um ataque ao texto aberto utilizando o algoritmo criptográfico conhecido e a chave pública de Bob para codificar a mensagem que quiser. Para que a criptografia de chaves públicas funcione de forma eficaz, a escolha de chaves e de códigos deve ser feita de tal maneira que seja impossível para um intruso determinar a chave privada de Bob ou conseguir decifrar ou adivinhar a mensagem de Alice para Bob. Em segundo lugar, o envio da mensagem cifrada é problemático: como a chave criptográfica de Bob é pública, qualquer um pode enviar uma mensagem cifrada a Bob, incluindo Alice ou alguém se passando por Alice. No caso de uma única chave secreta compartilhada, o fato de o remetente conhecer a chave secreta identifica implicitamente o remetente para o destinatário. No caso da criptografia de chave pública, contudo, isso não acontece, já que qualquer um pode enviar uma mensagem cifrada a Bob usando a chave dele, que está publicamente disponível a todos. É preciso, então, de uma assinatura digital para vincular um remetente à mensagem. Para resolver esse problema de confiabilidade e garantir que somente o remetente e o destinatário entendam o conteúdo da mensagem transmitida, utiliza-se uma chave de sessão, seguindo as seguintes etapas:

  1. Alice escolhe aleatoriamente uma chave simétrica, Ks.
  2. Criptografa sua mensagem m com a chave simétrica Ks.
  3. Criptografa a chave simétrica Ks com a chave pública de Bob, K+b.
  4. Concatena a mensagem criptografada e a chave simétrica criptografada de modo que formem um pacote e envia para Bob.
  5. Quando Bob receber o pacote, ele usará sua chave privada K-b para obter a chave simétrica Ks, e utilizará a chave simétrica Ks para decodificar a mensagem m.

3. Autenticação Implícita em Chaves Simétricas

A frase "o uso de chaves simétricas provê, implicitamente, a autenticação dos usuários em comunicação" significa que existe apenas uma chave para cada par de entidades comunicantes. Isso acontece porque ambos os lados (Alice e Bob) possuem uma chave k que é usada para comunicação, e esta chave deve ser mantida em segredo, ou seja, conhecida somente pelas duas partes. Se uma mensagem é recebida e pode ser decifrada com sucesso usando essa chave secreta compartilhada, o destinatário pode ter certeza de que a mensagem veio do parceiro legítimo que também conhece a chave, pois ninguém mais deveria ter acesso a ela. Isso estabelece uma autenticação inerente à própria posse e uso da chave secreta.

4. Camadas de Segurança na Pilha de Protocolos

As diversas camadas de mecanismos de segurança na pilha de protocolos (aplicação, transporte, rede, etc.) não são necessariamente redundantes; pelo contrário, pode ser muito interessante ter todos os mecanismos agindo simultaneamente. Isso ocorre porque cada camada opera em um nível diferente e protege contra tipos específicos de ameaças ou oferece garantias distintas. Por exemplo:

  • Camada de Aplicação: Mecanismos como criptografia de e-mail (PGP) ou assinaturas digitais em documentos garantem a segurança do conteúdo específico da aplicação, independentemente de como ele é transportado.
  • Camada de Transporte (ex: SSL/TLS): Garante a privacidade, integridade e autenticação fim a fim entre duas aplicações. Protege a sessão de comunicação, mesmo que os dados passem por redes não seguras.
  • Camada de Rede (ex: IPsec): Provê segurança para pacotes IP, garantindo autenticação, integridade e confidencialidade no nível da rede. É útil para criar VPNs, protegendo todo o tráfego IP entre dois pontos, independentemente da aplicação.

Ter múltiplas camadas de segurança cria uma defesa em profundidade. Se uma camada falhar ou for comprometida, outras camadas ainda podem fornecer proteção. Por exemplo, mesmo que o IPsec proteja o túnel de rede, uma aplicação ainda pode usar SSL/TLS para garantir que a comunicação seja segura até o ponto final da aplicação, protegendo contra ataques que possam ocorrer após o tráfego sair do túnel IPsec ou dentro da rede local do destinatário. Isso aumenta a robustez geral do sistema contra uma variedade maior de ataques.

Entradas relacionadas: