Prévia do material em texto
1 Criptografia: 1.1 Conceitos básicos de criptografia; 1.2 Sistemas criptográficos simétricos e de chave pública; 1.3 Modos de operação de cifras; 1.4 Certificação digital; 1.5 Protocolos criptográficos; 1.6 Funções hash, MD5 e SHA1; 1.7 Esteganografia. Criptografia é o estudo da aplicação de técnicas para comunicação e armazenamento seguro de dados em sistemas computacionais (entre outros). Kryptós = oculto; Graphein = escrita. Criptografia = escrita oculta (ou secreta). Algoritmos de criptografia podem ser implementados em hardware; Termos-chave: Texto plano/puro: dados não-encriptados (totalmente legível); Texto cifrado: dados encriptados; Chave (key): dados utilizados para encriptar um texto plano, ou desencriptar um texto cifrado; Chave criptográfica é um termo que se refere a um parâmetro (ou conjunto de parâmetros) variável do algoritmo criptográfico que interfere diretamente no processo criptográfico. Para cada chave distinta (valor de chave), o algoritmo gera um criptograma diferente para uma mesma mensagem, que só poderá ser decifrado pelo usuário que conheça o valor em uso. Dessa forma, a segurança lógica é garantida, mesmo que o processo criptográfico se torne público, desde que a chave seja mantida secreta. Algoritmo de Criptografia (cifra): método matemático empregado para encriptar/desencriptar dados com o uso das chaves de criptografia. Encriptação: Conversão de dados legíveis para um formato ilegível (texto cifrado) por pessoas não- autorizadas, usando uma chave e um algoritmo criptográfico; Seu objetivo é proteger a privacidade ao armazenarmos dados ou trocarmos informações com outras pessoas; O receptor da mensagem encriptada pode decriptá-la e ler seu conteúdo, no formato original; Um arquivo criptografado não fica protegido contra contaminação por vírus. Desencriptação: Processo inverso da encriptação, ou seja, a transformação de dados encriptados (ilegíveis) em dados legíveis, usando uma chave e um algoritmo criptográfico. Criptoanálise: Processo de transformação de dados cifrados (encriptados) em dados legíveis (decriptados) sem que se conheça a chave de encriptação; Trata-se de quebrar a encriptação dos dados para obter acesso ao conteúdo das mensagens, porém com o intuito de descobrir falhas nos algoritmos para torná-los mais seguros, validá-los ou descartá-los. Exemplo: Criptografia WEP. Princípios fundamentais: Redundância: As mensagens devem conter alguma redundância; Redundância visa inserir dados que possibilitem o sistema anular ataques por geração aleatória de texto cifrado. Atualidade: Algum método é necessário para anular ataques de repetição; Atualidade visa garantir que a mensagem é uma mensagem atual válida, e não uma mensagem antiga, evitando assim replay attacks (ex: usar timestamp). Requerimentos de segurança em comunicações (x.800): Autenticação: Assegura que a mensagem foi realmente originada pelo remetente, e não por outra pessoa; Integridade: Diz respeito ao conteúdo das informações trocadas entre transmissor e receptor; Deve-se garantir que o conteúdo da mensagem chegue íntegro a seu destino, ou seja, que não seja alterado de nenhuma forma no meio do caminho. Confidencialidade: A informação não está disponível para pessoas e processos que não tenham autorização para acessá-la e utilizá-la; Somente o remetente e o destinatário devem receber o conteúdo de uma mensagem transmitida. Não-Repúdio: Deve-se evitar que uma mensagem, após ter sido enviada, seja repudiada pelo transmissor – ele não poderá negar que a transmitiu; Podemos utilizar, por exemplo, assinaturas digitais. Controle de acesso. Tipos de Criptografia: Criptografia de Chave Privada (Simétrica): Utiliza uma única chave; O emissor utiliza essa chave para encriptar a mensagem, e o receptor utiliza a mesma chave para decriptá-la (chave compartilhada – shared key); Por utilizar a mesma chave na encriptação e decriptação, trata-se de uma técnica de Criptografia Simétrica. Usada no modo stream; A vantagem da criptografia de chave simétrica, com relação à criptografia de chave pública, é a maior velocidade para criptografar a informação; Exemplos de algoritmos conhecidos: DES (40 e 56 bits), 3DES, Blowfish, AES, OTP (One-Time-Pad). Criptografia de Chave Pública (Assimétrica): Utiliza duas chaves distintas, de modo a obter comunicação segura através de canais de comunicação inseguros; Por utilizar um par de chaves diferentes, trata-se de uma técnica de Criptografia Assimétrica. Cada participante possui uma chave pública e uma chave privada; A chave privada é secreta, e só o proprietário a conhece, ao passo que a chave pública é compartilhada com todos que se comunicarão conosco. Transmissor e receptor possuem chaves diferentes, com tamanhos que variam entre 512 e 2048 bits; Usada em modo de bloco; Para se obter autenticidade, a chave privada do autor encripta (para assinar a mensagem) e chave pública descripta (para garantir o sigilo da mensagem assinada); Para se obter confidencialidade, é necessário utilizar a chave pública do destinatário para encriptar a mensagem, assim ele será o único a conseguir descriptografar a mensagem, pois é o único que possui o par de chave privada respectivo da chave pública usada (chave pública encripta e chave privada descripta); Exemplos de algoritmos conhecidos: DSA, RSA, GPG. A cifra RSA é um poderoso algoritmo de chave pública com cifra por bloco e que utiliza números primos. O protocolo TLS (Transport Layer Security) é composto de duas camadas: Protocolo de registro (Record): algoritmo de criptografia de chave simétrica; Protocolos de Handshaking: algoritmos de criptografia de chave assimétrica. O princípio de Kerckhoff estabelece que todos os algoritmos devem ser públicos e apenas as chaves devem ser secretas; Diffie-Hellman é baseado no problema do logaritmo discreto e é o criptosistema de chave pública; Funções de hash: A técnica de hash não utiliza uma chave, e sim um valor de hash (resumo) de tamanho fixo, o qual é computado sobre o texto plano; São usadas para verificar a integridade dos dados para garantir que não tenham sido inadvertidamente alterados; Verificações de senha podem usar funções de hash; Exemplos de funções hash: MD5, SHA1, SHA2. A operação XOR é reversível, o que a torna muito utilizada em algoritmos criptográficos; Cifras Simétricas: Um sistema de cifragem simétrico utiliza a mesma chave para encriptar e desencriptar os dados; Conhecido também como Criptografia de Chave Privada ou Chave Compartilhada; Pode utilizar cifragem de fluxo ou de bloco. Cifra: Uma cifra é definida sobre um par de algoritmos de encriptação (E) e desencriptação (D), onde: c = E(k,m) e; m = D(k,c). m = texto plano (mensagem); c = texto cifrado (encriptado); k = chave criptográfica; E = algoritmo de encriptação; D = algoritmo de desencriptação. Equação de Consistência: m = D(k,E(k,m)); O algoritmo E é frequentemente randomizado (não tem como prever o resultado), ao passo que o algoritmo D é sempre determinístico (possível prever o resultado). OTP (One-Time-Pad): É um algoritmo simétrico; A chave é uma string de bits aleatória, com pelo menos o mesmo tamanho da mensagem em si; c = E(k,m) = k XOR m Exemplo: m = 1000110 k = 1100011 k XOR m = 0100101 = c (texto encriptado) O algoritmo OTP é muito rápido, porém necessita de chaves muito longas (do tamanho da mensagem); Com o método de criptografia chave única, um texto fica imune a todos os ataques presentes e futuros, não importa quanta capacidade computacional haja. Cifras de Fluxo (Stream Ciphers): Trata-se de uma cifra de chave simétrica que combina os bits do texto plano com um fluxo de bitspseudo aleatórios, um a um; Assim, cada dígito da mensagem é encriptado pela combinação com um dígito do fluxo de bits, originando assim o texto encriptado. Uma cifra de fluxo processa os elementos da entrada continuamente, produzindo a saída de um elemento de cada vez, enquanto prossegue; As cifras de fluxo usam a ideia da cifra OTP (One-Time-Pad), a qual usa um fluxo de bits (keystream) de dígitos totalmente aleatórios; No entanto, uma cifra de fluxo usa uma chave de tamanho muito menor para alimentar um algoritmo PRNG (Pseudo Random Number Generator) e gerar o keystream, com 64 ou 128 bits; Essa chave é usada para gerar um keystream pseudo aleatório que será combinado com o texto plano para gerar o texto cifrado. Exemplos de cifras de fluxos: RC4, Salsa20, SEAL. Cifras de Bloco (Block Cipher): Opera sobre blocos de dados: o texto plano é dividido em blocos pelo algoritmo, o qual opera sobre cada bloco de forma independente. A cifra de bloco apresenta um problema: se o mesmo bloco de texto se repetir, o texto cifrado será igual, o que pode gerar um padrão de repetição, identificável por um invasor; Esse problema pode ser resolvido usando-se um Modo de Realimentação. CBC (Cipher Block Chaining): também chamado de Cifra de Blocos por Encadeamento, é um modo de realimentação comum a qual funciona fazendo XOR no bloco atual de texto plano com o bloco anterior de texto cifrado; Para o primeiro bloco (que não tem anterior), é feito XOR comum vetor de inicialização (IV – Initialization Vector). Exemplos de cifras de blocos: IDEA, RC5, RC6, AES, Blowfish, CAST, AES/Rijndael (128 a 256 bits), 3DES. Cifra de Substituição: A cifra de substituição tem função de substituir uma letra ou um grupo de letras por outras letras, preservando a ordem dos símbolos do texto simples, mas os disfarçando; Alguns algoritmos de criptografia são baseados na substituição, em que cada elemento do texto claro é mapeado em outro elemento. Cifra de Transposição: As cifras de transposição alteram a ordem dos símbolos, mas não os disfarçam (não os troca por outros). Procede à mudança de cada letra (ou outro qualquer símbolo) no texto a cifrar para outro (sendo a decifração efetuada simplesmente invertendo o processo). Ou seja, a ordem dos caracteres é mudada; Utilizam, comumente, a transposição de colunas. Cifra de Feistel: A maioria dos algoritmos de criptografia simétrica de bloco possuem uma estrutura descrita por Horst Feistel; As entradas do algoritmo são blocos de texto plano de comprimento 2x bits e uma chave K; O bloco de texto plano é dividido em duas metades (esquerda e direita), L(0) e R(0); Essas duas metades passam por n rodadas de processamento e então se combinam para produzir o bloco de texto cifrado. Cada rodada r (rmudança no texto original provoca uma mudança brutal no resultado computado do hash. MD5(Fábio) = ce71c959b85d3b76daa12a09c531a774 MD5(Fabio) = cdb4d5711d6bb261eb05108684d876aa A segurança do hash MD5 está fortemente comprometida; Ele é vulnerável a ataques de colisão (mesmo usando máquinas comuns com poder de processamento médio); Um ataque de colisão em um hash criptográfico é um tipo de ataque onde se tenta encontrar duas entradas que produzam o mesmo valor de hash na saída; Outro problema grave, relativo ao uso de hashes MD5 para armazenar senhas, é o uso de Rainbow Tables para reverter um hash e descobrir a string que o originou. Challenge Handshake Authentication Protocol (CHAP) é um protocolo de autenticação de desafio-resposta que usa o esquema de hash Message Digest 5 (MD5) padrão da indústria para criptografar a resposta. Hash SHA-1: É uma função de espalhamento unidirecional que gera um valor hash de 160 bits a partir de um tamanho arbitrário de mensagem. Mas há de 256, 384 e 512 bits tb (SHA256, SHA384...); Baseia-se na função de hash MD4. Ataques a hashes: As técnicas mais comuns são: Força Bruta; O ataque por força bruta a um sistema de criptografia envolve a tentativa de cada chave possível até que seja obtida uma tradução inteligível de texto cifrado para texto claro; Não é muito efetivo devido a imensa quantidade de valores que precisam ser testados, principalmente com senhas longas. Criptoanalítico: Um ataque criptoanalítico baseia-se na natureza do algoritmo mais o conhecimento das características gerais do texto claro e amostras plain-cipher; Dicionário; Colisão; Aniversário; Rainbow Tables: É uma espécie de tabela que contém milhões (ou bilhões) de hashes pré-calculados e as strings (senhas) que os originaram; É otimizada para armazenar hashes e senhas, permitindo pesquisar entradas de forma mais veloz; São usadas, basicamente, para quebrar hashes de senhas. Uma forma comum de proteger o hash de nossas senhas contra ataques de rainbow tables é o uso de uma técnica conhecida como Salt (“salgar a senha”); Um salt é uma informação aleatória adicionada à entrada da função de hash, tornando a saída da função única (e imune às rainbow tables). Função-Hash (Texto Plano + Salt). Certificação digital: Funciona como uma identidade virtual; Permite a identificação segura do autor de uma mensagem ou transação feita em meios eletrônicos; É gerado e assinado por uma terceira parte confiável (Autoridade Certificadora – CA); Associa uma entidade (pessoa, processo, servidor) a um par de chaves criptográficas; Infraestrutura de Chave Públicas Brasileira (ICP Brasil): único processo de certificação digital oficial instituído por lei e que dá validade jurídica às transações eletrônicas. ACT (Autoridade Certificadora do Tempo): responsável por emitir carimbos do tempo; Principais informações: Chave Pública do Titular; Dados do titular (nome, e-mail); Período de validade do certificado; Nome da Autoridade Certificadora; Número de série; Assinatura digital da AC. Tipos de certificados digitais: A1, A2, A3e A4 (assinatura digital); A1: armazenado em arquivo; A2, A3 e A4: smart card ou token. S1, S2, S3 e S4 (sigilo e criptografia); S1: armazenado em arquivo; S2, S3 e S4: smart card ou token. T3 e T4 (tempo). Certificado autoassinado: certificado digital no qual o dono e o emissor são a mesma entidade (organização, pessoa ou máquina); A assinatura digital pode ser verificada com chave pública presente no certificado. Certificado EV SSL: certificado de alta confiança e rigoroso para as empresas. Assinatura digital: Um esquema de assinatura digital é um esquema matemático utilizado para provar a autenticidade de uma mensagem ou documento digital; Podemos usar assinaturas digitais com qualquer tipo de documento, mesmo criptografados, assim o destinatário da mensagem pode ter a certeza da identidade do remetente e também confiar que a mensagem chegou ao destino intacta. Uma assinatura digital precisa ter as seguintes caraterísticas: Deve ser simples de produzir para o assinante; Verificável com facilidade; Extremamente difícil de ser falsificada; Quem a usa não pode negar que assinou o documento. A mensagem é criptografada com uma chave privada e enviada, e o destinatário só será capaz de decriptá-la com a chave pública do remetente (não com a dele nem de mais ninguém, provando a autenticidade da mensagem); Sendo assim, uma assinatura digital utiliza alguma forma de criptografia assimétrica para operar. Uma forma eficiente de obter esse mesmo resultado é criptografar um pequeno bloco de bits que seja uma função do documento, e não o documento inteiro; Este bloco é chamado de Autenticador (Autenticator) e possui a propriedade de que é impossível alterar um bit que seja no documento sem desfigurar totalmente o autenticador. Criptografamos então o autenticador com a chave privada do remetente, e ele servirá para verificar a autenticidade do documento todo; Podemos usar um hash como o SHA-1 para essa função. Como podemos garantir que um intruso não consiga gerar e assinar um documento em nome de outra pessoa? Podemos utilizar um Certificado Digital, que pode ser usado para atestar e verificar a validade de uma assinatura digital. Algoritmos de assinaturas digitais: RSA; DAS ElGamal; HMAC. Esteganografia: Consiste em esconder mensagens em arquivos, tornando-as ocultas; Steganos = protegido, oculto; Graphein = escrita Esteganografia = escrita protegida (ou oculta). Técnica para esconder uma mensagem secreta dentro de uma maior, de modo que outros não possam discernir a presença/conteúdo da mensagem oculta; Usa-se dois arquivos: a mensagem e o portador (carrier); Seu principal objetivo é que os dados ocultos não sejam percebidos por terceiros, ou seja, a presença de mensagens escondidas dentro de arquivos é simplesmente desconhecida; Somente o receptor da mensagem tem conhecimento de sua existência, assim como da maneira de como extraí-la. Criptografia: impede que terceiros saibam o conteúdo de uma mensagem; Esteganografia: impede que terceiros saibam da existência do conteúdo de uma mensagem. Técnicas de esteganografia: Ruído: técnica simples que consiste em substituir o ruído em uma imagem/arquivo de áudio pela informação que se deseja transmitir; Espalhamento: mecanismos mais sofisticados espalham a informação nos pixels de uma imagem ou em partes de arquivos de áudio; Ordenação: consiste em transmitir a informação através da ordem em que os elementos de uma lista são dispostos; Divisão: divide a mensagem em partes que seguem caminhos diferentes até o destino (algumas técnicas mais sofisticadas possibilitam, inclusive, que a informação seja reconstruída a partir de uma fração do total de pacotes em que a mensagem foi dividida. A combinação das técnicas acima permite níveis de segurança, gerando informações ocultas difíceis de serem decifradas. Uma imagem digital que se deseja transmitir secretamente, por exemplo, pode ser escondida em uma lista que, por sua vez, pode ser armazenada no ruído de um segundo arquivo, o qual pode ser transmitido de forma a ocultar a fonte da informação. Ferramentas de esteganografia: OpenPuff; Steghide; ImageSteganography; Crypture; rSteg; OpenStego; Hide & View.