Os mecanismos criptográficos elementares são: cifra simétrica, cifra assimétrica, resumo (digest), código de autenticação de mensagem (MAC), assinatura digital e geração de números aleatórios imprevisíveis.
A criptografia simétrica é também designada por criptografia de chave secreta. A mesma chave permite cifrar e decifrar os dados.
Os algoritmos são: DES, AES, IDEA, TripleDES, Blowfish, PBE, etc.
Os modos de cifra são: ECB, CBC, CFB, OFB, PCBC, etc. A cifra é feita bloco a bloco. O modo define como são combinados os blocos.
Os enchimentos (padding) são: PKCS5, OAEP, SSL3, etc. Permitem fazer o acerto quando o tamanho dos dados não é múltiplo do tamanho do bloco.
A criptografia assimétrica é também designado por criptografia de chave pública. Existe um par de chaves: pública e privada. A chave privada cifra os dados e a pública decifra-os (ou vice-versa).
É 100 a 1000 vezes mais lenta que criptografia simétrica!
Os algoritmos são: RSA – para assinatura digital e pequena cifra (blocos 117 bytes com PKCS1 Padding), DSA – apenas para assinatura digital, Diffie-Hellman (Key Agreement Algorithm).
As funções de resumo (digest) produzem um resultado, com tamanho constante, a partir de dados com tamanho variável. Produzem valores muito diferentes para entradas semelhantes.
São "não invertíveis" e oferecem resistência à descoberta de dados alternativos que tenham o mesmo resumo. Partindo dos dados e do seu resumo, é difícil encontrar outros dados que produzam o mesmo resumo.
Os algoritmos de resumo são: MD5, SHA-1, etc.
Os MAC (Message Authentication Codes) - códigos de autenticação de mensagens - são uma forma de assinatura digital baseada num segredo partilhado entre interlocutores (e.g., uma chave simétrica de sessão). Permitem garantir a integridade e autenticidade do conteúdo de uma mensagem trocada entre duas entidades que partilham um segredo.
Embora haja várias alternativas de MACs, uma solução muito eficiente e comum consiste em: concatenar a mensagem com a chave secreta, gerar um resumo (usando função de resumo criptográfica) do resultado dessa concateção.
Para verificar um MAC: concatenar a mensagem recebida com a chave secreta, gerar o resumo correspondente, comparar o resumo obtido com o resumo (HMAC) recebido pela rede. Se forem iguais a mensagem não foi modificada!
Se a chave secreta for apenas partilhada entre o emissor e o recetor, a validação com MAC permite ao recetor confirmar que i) a mensagem foi de facto emitida pelo emissor legítimo (autenticidade), e ii) que a mensagem não foi modificada durante a transmissão pela rede (integridade). No entanto, ao contrário das assinaturas digitais de chave pública, o MAC não assegura não repúdio da mensagem.
A assinatura digital de chave pública (ou, simplesmente, assinatura digital) permite garantir a autenticação do emissor e a integridade do conteúdo da mensagem.
Para fazer uma assinatura: gerar resumo de mensagem a enviar, cifrar resumo com a chave privada do emissor.
Para verificar uma assinatura: gerar novo resumo de mensagem recebida (a mensagem pode ter sido modificada), decifrar resumo com chave pública do emissor, comparar resumo decifrado com novo resumo. Se forem iguais a mensagem não foi modificada!
A geração de números aleatórios é importante, porque muitos mecanismos de segurança são derrotados por falta de verdadeira aleatoriedade.
Um erro comum é o uso de funções pseudo-aleatórias, que recebem uma semente (seed) e depois geram uma sequência de número determinística (a mesma semente gera sempre a mesma sequência). Nestes casos é possível adivinhar as chaves que vão ser geradas a seguir.
As soluções possíveis são recolher fontes de aleatoriedade na máquina - movimentos do rato do utilizador, número de processos, memória utilizada, etc - e combiná-las ou usar hardware específico que meça fenómenos físicos. O objectivo é a geração de números aleatórios de boa qualidade, que produzam valores equiprováveis e imprevisíveis.
© Docentes de Sistemas Distribuídos, DEI, IST, UL