Assinaturas digitais Introdução • A autenticidade de muitos documentos legais é determinada pela presença da assinatura manual autorizada. • Tornou-se necessário encontrar um método que permita assinar documentos eletrônicos, garantindo sua autenticidade. • Uma assinatura digital é um mecanismo de autenticação que permite ao criador de uma mensagem, anexar um código que atue como uma assinatura. – A assinatura é formada criando um hash da mensagem a ser assinada e criptografando-a com a chave do criador. Requisitos a) Que o receptor consiga verificar a identidade alegada pelo transmissor. b) Que o transmissor não consiga posteriormente, repudiar o conteúdo da mensagem. c) O receptor não tenha a possibilidade de inventar, ele mesmo, a mensagem. Exemplo • Suponha que o computador de um cliente solicite ao de um banco, que compre uma tonelada de ouro. a) O banco precisa autenticar o cliente garantindo que o computador que fez a requisição pertence de fato à empresa que será debitada. b) Suponha que logo a seguir, o preço do ouro caia bruscamente. Um cliente desonesto poderia afirmar que não foi ele quem fez a requisição. (repúdio). c) Suponha agora, que o preço do ouro dispare e o banco afirme que o cliente solicitou a compra de uma barra de ouro ao invés de uma tonelada. Assinatura digital com uso da criptografia de chave simétrica • Uma estratégia é ter uma Autoridade Central: Uma instituição em que todos confiem. • Cada usuário escolhe uma chave secreta e a leva pessoalmente ao escritório da Autoridade Central. • Somente o próprio usuário e a Autoridade Central conhecem cada chave. • Exemplos de notações: – KA (chave de Alice). – KAC (chave da Autoridade Central). Procedimento (1) • Quando deseja enviar uma mensagem assinada para Bob, Alice gera KA (B, RA, t, P), onde: – B é a identidade de Bob. – RA é um número aleatório escolhido por Alice. – t é um registro de tempo para garantir a atualidade da mensagem. – KA (B, RA, t, P) é a mensagem criptografada com a chave de Alice. Procedimento (2) • Alice envia a mensagem para a Autoridade Central que a descriptografa comprovando que ela partiu de Alice. • A Autoridade Central envia a mensagem para Bob. – A mensagem contém o texto claro e a mensagem assinada. – KAC KA (B, RA, t, P) . Registro de tempo • Trudy pode repetir uma das mensagens que Alice enviou para a AC. • Todas as mensagens recebidas são verificadas para ver se RA (o número aleatório) foi usada em alguma delas. Assinatura digital com uso da criptografia de chave assimétrica • Problemas estruturais devido ao uso de chave simétrica para assinatura digital: – Todos tem de confiar na autoridade central. – A AC tem de ler todas as mensagens assinadas. • O ideal seria se o ato da assinatura digital não exigisse a presença de uma autoridade confiável. Propriedades desejáveis • D (E(P)) = P • E (D(P)) = P • O RSA tem essas propriedades. • Logo, Alice pode enviar uma mensagem de texto claro assinada, P, para Bob transmitindo EB (DA (P)). • Isso é possível porque: – Alice conhece a sua própria chave privada. – Alice conhece a chave pública de Bob. Procedimentos • Ao receber a mensagem, Bob a transforma usando sua chave privada e produz DA (P). • Ele guarda esse texto em local seguro e depois aplica EA para obter o texto claro original. Assinatura digital com chaves assimétricas Não repúdio • Alice nega ter enviado a mensagem. – AC somente aceita uma mensagem se ela tiver sido criptografada com a chave do usuário, no caso Alice, que lhe foi entregue pela própria. • KA. – Não há possibilidade de Trudy ter enviado a mensagem a AC sem que esta tivesse percebido. • Bob possui a prova : KAC (A, t, P). • A AC pode descriptografar a mensagem comprovando que esta foi enviada por Alice. • Um juiz poderá confirmar que Bob, de fato, possui uma mensagem válida criptografada por DA simplesmente aplicando EA à mensagem. Considerações ao não repúdio • Bob só poderá provar que a mensagem de fato partiu de Alice, enquanto DA permanecer secreta. – Se Alice revelar sua chave secreta, o argumento deixará de existir, pois qualquer um poderia ter enviado a mensagem, inclusive Bob. Sumário de mensagens • Uma crítica aos métodos de assinatura digital é que eles frequentemente reúnem duas funções distintas: – Autenticação. – Sigilo. – Consome muito processamento pois exige que a mensagem inteira seja encriptada. • Em geral, a autenticação é necessária, mas o sigilo não. • Veremos agora um esquema de autenticação que não exige a criptografia da mensagem inteira. Função de Hash • Esse esquema se baseia na ideia de uma função de hash. • A função extrai um trecho qualquer do texto claro e a partir dele calcula uma sequência de bits relacionada de tamanho fixo. – MD (Message Digest). Propriedades • Se P for fornecido, o cálculo de MD(P) será muito fácil. • Se MD(P) for fornecido, será efetivamente impossível achar P. • Uma mudança na entrada de um único bit produz uma saída totalmente diferente. Vantagem • Calcular um sumário da mensagem a partir de um trecho do texto claro é muito mais rápido. • Os hashes são usados, entre outras finalidades, para agilizar os algoritmos de assinatura digital. Procedimentos gerais • O assinante gera um resumo criptográfico da mensagem. • O assinante cifra o resumo com sua chave privada. • Este resumo criptográfico cifrado é a assinatura digital que deve ser encaminhada a Autoridade Central ou ao destinatário junto com a mensagem. Verificando a assinatura • Utilizando a chave pública do remetente, o destinatário decifra a assinatura, obtendo o resumo. • Como o destinatário tem a mensagem, ele gera novamente, de maneira independente, o resumo criptográfico da mensagem. • O destinatário compara os resumos obtidos: – Se ambos forem iguais, a assinatura é válida. Assinatura digital utilizando sumário de mensagens • Ao invés de assinar P com KAC (A, t, P), agora AC calcula o sumário da mensagem aplicando MD a P, produzindo MD(P). • Em seguida, A AC inclui KCA (A, t, MD(P)) como o quinto item da lista enviada a Bob, ao invés de KAC (A, t, P). SHA-1 e SHA-2 • Diversas funções para sumários foram propostas. • Uma das mais utilizadas é a SHA-1 (Secure Hash Algorithm), NIST, 1993. – Trata os bits do sumário de forma que cada bit de saída seja afetado por cada um dos bits da entrada. • Desenvolvido pela NSA e ratificado pelo NIST. • Processa blocos de 512 bits e gera um sumário de 160 bits. SHA e RSA para assinatura de mensagens não secretas MD5 • Outro sumário muito popular. • Rivest, 1992. • Após uma década de uso, os pontos fracos no MD5 tem aumentado a probabilidade de encontrar duas mensagens com o mesmo hash. – 263 mensagens para encontrar uma que combinasse com o hash da mensagem interceptada. Padrão de Assinatura Digital • Em 1991, o Nacional Institute of Standards and Technology (NIST) publicou o Federal Information Processing Standard (FIPS 186), conhecido como padrão de assinatura digital (DSS). – O NIST propôs a utilização de uma variante do algoritmo El Gamal como o seu novo padrão para assinaturas digitais. • O El Gamal não utiliza a fatoração de números extensos e sim a dificuldade de calcular logaritmos discretos. Padrão de Assinatura Digital (DSS) • O DSS utiliza um algoritmo que foi projetado apenas para assinaturas digitais. – Ele não pode ser usado para criptografia ou para troca de chaves. – Apesar disso, é uma técnica de chave pública. Diferenças entre o RSA e o DSS • RSA (emissor). – A mensagem a ser assinada é inserida em uma função de hash que produz um código de hash seguro, de tamanho fixo. – Esse código é, então, criptografado usando a chave privada do emissor para formar a assinatura. – Tanto a mensagem, quanto a assinatura são então transmitidas. Diferenças entre o RSA e o DSS • RSA (receptor). – O destinatário pega a mensagem e produz um código de hash. – O destinatário também assina, usando a chave pública do emissor. – Se as saídas combinarem, a assinatura é aceita como válida. • Como somente o emissor conhece a chave privada, somente ele poderia ter produzido uma assinatura válida. Diferenças entre o RSA e o DSS • DSS (emissor). – A técnica do DSS também usa uma função de hash. – O código de hash é fornecido como entrada para uma função de assinatura, com um número aleatório k, gerado para essa assinatura em particular. – A função de assinatura também depende da chave privada do emissor (Pra) e de um conjunto de parâmetros conhecidos por ambos os lados. • Podemos considerar esse conjunto como uma chave pública global (Pug). – O resultado é uma assinatura que consiste em dois componentes rotulados como s e r. Diferenças entre o RSA e o DSS • DSS (receptor). – Na ponta receptora, o código de hash da mensagem que chega é gerado. – A saída, junto com a assinatura é inserida em uma função de verificação. • A função de verificação também depende da chave pública global, além da chave pública do emissor. – Correspondente da chave privada do emissor. Resumo da aula • A assinatura digital é um método que se assemelha as assinaturas feitas em papel. • Gera uma prova de quem é o autor da mensagem. • Provê também: – Autenticidade. – Integridade. – Irretratabilidade. Resumo da aula (2) • Pode fazer uso de duas chaves (criptografia assimétrica). • Pode fazer uso também, da função resumo ou de hash. – O método consiste em gerar o resumo da mensagem e cifra-lo com a chave privada do emissor. – Para a verificação de uma assinatura digital, o receptor refaz o hash e cifra-o com a chave pública do emissor. As saídas tem de ser iguais. Assinando um documento • Inicialmente, crie um diretório com o seu nome. mkdir <seu nome> • Entre em seu diretório. cd <seu nome> Assinando um documento (2) • Gere a chave privada RSA de 2048 bits. openssl genrsa –out chave_seu_nome.prv 2048 • Extraia a chave pública. openssl rsa –in chave_seu_nome.prv –pubout –out chave_seu_nome.pub Assinando um documento (3) • Crie um arquivo de texto com uma mensagem qualquer. echo “Mensagem desejada” > mensagem_seu_nome.txt • Agora, gere um resumo SHA-1 do arquivo texto. openssl dgst –sha1 –out hash_seu_nome.txt mensagem_seu_nome Assinando um documento (4) • Assine o hash com a chave privada. openssl rsautl –sign –in hash_seu_nome.txt –inkey chave_seu_nome.prv –out assinatura_seu_nome • Entregue os arquivos abaixo para o aluno ao seu lado. – mensagem_seu_nome.txt, – assinatura_seu_nome – chave_seu_nome.pub Verificando a assinatura • Desencripte a assinatura do aluno ao seu lado utilizando a chave pública dele. openssl rsautl –verify –pubin –inkey chave_aluno_ao_seu_lado.pub –in assinatura_aluno_ao_seu_lado • Na tela será exibido o hash SHA-1 decifrado • Gere o hash SHA-1 e verifique se são iguais. openssl dgst –sha1 mensagem_aluno_ao_seu_lado.txt