250 likes | 331 Views
Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br , rogerio@websec.com.br & flamaryon@uniminas.br 6º CONTECSI - 3 a 5 de Junho de 2009 – USP – São Paulo – Brasil.
E N D
Márcio Moreira, Rogério Mendes & FlamaryonGuerin marcio.moreira@uniminas.br , rogerio@websec.com.br & flamaryon@uniminas.br 6º CONTECSI - 3 a 5 de Junho de 2009 – USP – São Paulo – Brasil Algoritmo de Assinatura Digital por Curvas ElípticasECDSA (Elliptic Curve Digital Signature Algorithm)
Agenda • Introdução • ECDSA • Aplicações • Implementação Java • Conclusões
Introdução • A segurança é cada vez mais necessária: • A necessidade de assinar digitalmente documentos vem crescendo significativamente • As assinaturas digitais devem fornecer: • Autenticidade: • Garantir que o documento é autêntico • Não repúdio: • O autor não pode negar a assinatura • Integridade: • O documento assinado não pode ser alterado
Tipos de algoritmos de assinatura Origem Destino • Diretos: • O processo de assinatura envolvem somente a origem e o destino. • Normalmente utilizam algoritmos de criptografia simétricos. • Em caso de disputas, uma terceira parte precisa ter acesso à mensagem, à assinatura e à chave privada para fazer as verificações. • Arbitrados: • O documento assinado é enviado a um árbitro que checa as três características fundamentais da assinatura digital e envia o documento assinado ao destino. • Os métodos de criptografia normalmente envolvidos neste tipo de processo é o de chave pública. Origem Árbitro Destino
Assinatura digital • Assinando uma mensagem: • Hash = resumo(texto plano) • Assinatura = cifra(hash, chave privada emissor) • Mensagem = texto plano + assinatura Máquina da Maria chave privada da Maria Assinatura Digital Hash Função Hash Algoritmo de cifrar texto plano Mensagem
Verificando uma assinatura digital • Hash1 = resumo (texto plano) • Hash2 = decifra(assinatura, chave pública emissor) Máquina do João texto plano Assinatura Digital chave pública da Maria Função Hash Algoritmo de decifrar Hash1 Hash2 Comparação
Agenda • Introdução • ECDSA • Aplicações • Implementação Java • Conclusões
ECDSA • Porque curvas elípticas? • Consegue-se o mesmo nível de segurança do RSA com no mínimo 1/6 do esforço computacional • Algumas curvas:
Vantagens do ECDSA • Utiliza chaves menores. • Utiliza soma ao invés de multiplicações. • Utiliza multiplicações (soma cumulativa) ao invés de exponenciações. • É mais eficiente em termos de tempo de resposta. • Consome menos espaço de armazenamento. • É adequado para equipamentos com poucos recursos de hardware disponíveis.
Ataques ao ECDSA • Padrões: • Ataques contra as curvas elípticas e contra o problema dos logaritmos discretos que sustentam criptosistemas baseados nestas curvas. • Ataques à função hash utilizada (SHA-1). • Outros tipos de ataques. • Específicos: • Aplicação da força bruta para quebrar Q = d G. • Fatoração da ordem do grupo finito (n) em torno de G: redução da complexidade da fatoração de n utilizando o teorema chinês do resto. • Curvas definidas sobre grupos finitos pequenos. • Conclusão: • O importante é que, com os parâmetros propostos pela ANSI X9.62, uma máquina com 330 mil processadores precisaria de 32 dias para quebrar um ECC. Assim, o ECDSA é recomendado pelo NIST como um dos algoritmos mais seguros de assinatura digital. Fonte: NIST, http://csrc.nist.gov/groups/ST/toolkit/digital_signatures.html e www.ipa.go.jp/security/enc/CRYPTREC/fy15/doc/1051_ecdsa.pdf
Agenda • Introdução • ECDSA • Aplicações • Implementação Java • Conclusões
Aplicações do ECDSA • Assinatura irrefutável de e-mails. • Assinatura de pedidos em comércio eletrônico. • Identificação de sites, comprovando a autenticidade do endereço. • Acompanhamento e aditamento de processos judiciais ou administrativos. • Recepção do Diário Oficial Eletrônico da União. • Viabilizar a apresentação de projetos de lei diretamente pelos cidadãos.
Aplicações do ECDSA • Assinatura do Imposto de Renda e outros serviços da Receita Federal. • Enviar e receber documentos eletrônicos para cartórios. • Permitir transações seguras entre instituições financeiras, como por exemplo o SPB – Sistema de Pagamentos Brasileiro, em uso desde 2002. • Assinatura eletrônica de documentos em geral, em substituição ao enorme número de senhas que as pessoas passaram a ter que criar e gerir com o uso cada vez mais crescente da informática e dos problemas decorrentes de segurança.
Agenda • Introdução • ECDSA • Aplicações • Implementação Java • Conclusões
Implementação Java • Biblioteca: java.security • Provider: BouncyCastle (www.bouncycastle.org) • 1. Entrar no site http://www.bouncycastle.org/latest_releases.html e baixar o arquivo: bcprov-jdk15-133.jar ou mais recente. • 2. Copiar este arquivo para as pastas: • C:\Arquivos de programas\Java\jdk<r>\jre\lib • C:\Arquivos de programas\Java\jre<r>\lib • Onde: <r> = release = por exemplo: 1.5.0_07 • 3. Na seqüência de providers dos arquivos: • C:\Arquivos de programas\Java\jdk<r>\jre\lib\security\java.security • C:\Arquivos de programas\Java\jre<r>\lib\security\java.security • Acrescentar a linha: • security.provider.<n>=org.bouncycastle.jce.provider.BouncyCastleProvider • Onde: <n> = número do último provider instalado + 1
Bibliotecas • 4. Instalar a biblioteca bcprov-jdk15-133 apontando para este arquivo numa das pastas do item 2. • Bibliotecas: • importjava.security.*; • importorg.bouncycastle.crypto.params.ECPublicKeyParameters; • importorg.bouncycastle.jce.ECNamedCurveTable; • importorg.bouncycastle.jce.spec.ECNamedCurveParameterSpec; • Parametrização da curva: • ECNamedCurveParameterSpecECCparam = ECNamedCurveTable.getParameterSpec("prime192v2");
Geração de chaves • Geração das chaves: • KeyPairGeneratorkeyGen = KeyPairGenerator.getInstance("ECDSA", "BC"); • keyGen.initialize(ECCparam); • keyPair = keyGen.generateKeyPair(); • PublicKeypubKey = keyPair.getPublic(); • PrivateKeyprvKey = keyPair.getPrivate(); • Publicação das chaves como string: • jTACPrivada.setText(prvKey.toString()); • jTACPublica.setText(pubKey.toString());
Assinando e verificando um texto • Assinatura: • Signature ecdsa = Signature.getInstance("ECDSA", "BC"); • ecdsa.initSign(prvKey); • ecdsa.update(m.getBytes()); • byte[] sig = ecdsa.sign(); • jTFAssinatura.setText(sig.toString()); • Verificação da assinatura: • ecdsa.initVerify(pubKey); • ecdsa.update(m.getBytes()); • booleansigok = ecdsa.verify(sig);
Agenda • Introdução • ECDSA • Aplicações • Implementação Java • Conclusões
Conclusões • As curvas elípticas vêm ganhando cada vez mais espaço no mundo dos sistemas criptográficos: • Isto se deve à eficiência oferecida por elas em relação aos métodos tradicionais utilizados nos sistemas criptográficos. • O ECDSA pode ser utilizado com segurança como um método de assinatura digital, pois ele foi reconhecido por todas as instituições mais importantes de padronização e recomendação de padrões do mundo.
Contribuições do trabalho • O trabalho nos permitiu: • Fazer uma revisão teórica do conceito de assinatura digital, das curvas elípticas, dos algoritmos DSA e ECDSA. • Ver quão prática e simples é a implementação de métodos complexos quando utilizamos uma biblioteca reconhecidamente de boa qualidade e segura. • Acreditamos que o trabalho cumpriu seu propósito de trazer conceitos abstratos da criptografia para um ambiente concreto e prático.
Referências • João N. Souza, Márcio A. R. Moreira e Ilmério R. Silva, A Multi-UserKeyand Data Exchange Protocol to Manage a Secure Database, SBBD 2002 - XVII Simpósio Brasileiro de Banco de Dados, este artigo está disponível para download em: http://200.146.233.98/empresa/marcio/2002_10_sbbd.pdf • W. Stallings, Cryptography and Network Security: Principles and Practice, Prentice Hall, 1999. • Elliptic Curve, http://mathworld.wolfram.com/EllipticCurve.html • D. Johnson e A. Menezes, The Elliptic Curve Digital Signature Algorithm (ECDSA), http://citeseer.ist.psu.edu/cache/papers/cs/8755/http:zSzzSzcacr.math.uwaterloo.cazSz~ajmenezezSzpublicationszSzecdsa.pdf/johnson99elliptic.pdf • Don Johnson, Alfred Menezes e Scott Vanstone, TheElliptic Curve Digital Signature Algorithm (ECDSA), CerticomCorporation, 2001, disponível em http://www.certicom.com/index.php?action=forms,login2&mode=do&next_aid=27&qual=2&
Obrigado! Dúvidas? Disponível em: www.geocities.com/marciomoreira Márcio Moreira, Rogério Mendes & FlamaryonGuerin marcio.moreira@uniminas.br , rogerio@websec.com.br & flamaryon@uniminas.br 6º CONTECSI - 3 a 5 de Junho de 2009 – USP – São Paulo – Brasil Algoritmo de Assinatura Digital por Curvas ElípticasECDSA (Elliptic Curve Digital Signature Algorithm)