Márcio Moreira, Rogério Mendes & Flamaryon Guerin [email protected]...

25
Algoritmo de Assinatura Digital por Curvas Elípticas ECDSA (Elliptic Curve Digital Signature Algorithm) Márcio Moreira, Rogério Mendes & Flamaryon Guerin [email protected] , [email protected] & [email protected] 6º CONTECSI - 3 a 5 de Junho de 2009 – USP – São Paulo – Brasil

Transcript of Márcio Moreira, Rogério Mendes & Flamaryon Guerin [email protected]...

Page 1: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Algoritmo de Assinatura Digital por Curvas Elípticas

ECDSA (Elliptic Curve Digital Signature Algorithm)

Márcio Moreira, Rogério Mendes & Flamaryon [email protected] , [email protected] & [email protected]

6º CONTECSI - 3 a 5 de Junho de 2009 – USP – São Paulo – Brasil

Page 2: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Agenda

Introdução

ECDSA

Aplicações

Implementação Java

Conclusões

Page 3: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

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

Page 4: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Tipos de algoritmos de assinatura

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

Destino

Origem

Destino

Árbitro

Page 5: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Assinatura digital Assinando uma mensagem:

Hash = resumo(texto plano) Assinatura = cifra(hash, chave privada

emissor) Mensagem = texto plano + assinatura

Máquina da Maria

FunçãoHash

FunçãoHash

textoplano

Hash

chave privada da Maria

Algoritmode cifrar

Algoritmode cifrar

AssinaturaDigital

Mensagem

Page 6: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Verificando uma assinatura digital Hash1 = resumo (texto plano) Hash2 = decifra(assinatura, chave pública

emissor)

Máquina do João

textoplano Assinatura

Digital

FunçãoHash

FunçãoHash

Hash1

Algoritmode decifrar

Algoritmode decifrar

chave públicada Maria

Hash2

Comparação

Page 7: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Agenda

Introdução

ECDSA

Aplicações

Implementação Java

Conclusões

Page 8: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

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:

Método Princípio Operações

RSA Logaritmo * & / de números

ECDSA Curvas Elípticas

+ & - de pontos

Page 9: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

DSA x ECDSA

Fase Algoritmo DSA Algoritmo ECDSA

Geração das chaves

Escolha p, q, x e q | p - 1, 1 x < q.Escolha h Zp

* e calcule:g = h(p-1)/q mod p até que g 1.y = gx mod pChave pública: (p, q, g, y)Chave privada: x

Escolha E sobre Zp,Escolha d, 1 d < n.Escolha G E(Zp) de ordem n.Q = d GChave pública: (E, n, G, Q)Chave privada: d

Assinatura

Escolha k, 1 k < q. Calcule:r = (gk mod p) mod qs = k-1( h(m) + xr) mod q(r, s) é a assinatura de m.

Escolha k, 1 k < n. Calcule:k G = (x1, y1) e r = x1 mod ns = k-1( h(m) + dr) mod n(r, s) é a assinatura de m.

Checagem da Assinatura

w = s-1 mod qu1 = h(m)w mod qu2 = rw mod qv = (gu1 yu2 mod p) mod qSe v = r então (r, s) está ok.

w = s-1 mod nu1 = h(m)w mod nu2 = rw mod nu1 G + u2 Q = (x2, y2), v = x2 mod nSe v = r então (r, s) está ok.

Page 10: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

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.

Page 11: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

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

Page 12: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Agenda

Introdução

ECDSA

Aplicações

Implementação Java

Conclusões

Page 13: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

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.

Page 14: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

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.

Page 15: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Agenda

Introdução

ECDSA

Aplicações

Implementação Java

Conclusões

Page 16: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Implementação Java

Biblioteca: java.security Provider:Bouncy Castle (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

Page 17: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Bibliotecas

4. Instalar a biblioteca bcprov-jdk15-133 apontando para este arquivo numa das pastas do item 2.

Bibliotecas: import java.security.*; import

org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.bouncycastle.jce.ECNamedCurveTable; import

org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;

Parametrização da curva: ECNamedCurveParameterSpec ECCparam =

ECNamedCurveTable.getParameterSpec("prime192v2");

Page 18: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Geração de chaves

Geração das chaves: KeyPairGenerator keyGen =

KeyPairGenerator.getInstance("ECDSA", "BC"); keyGen.initialize(ECCparam); keyPair = keyGen.generateKeyPair(); PublicKey pubKey = keyPair.getPublic(); PrivateKey prvKey = keyPair.getPrivate();

Publicação das chaves como string: jTACPrivada.setText(prvKey.toString()); jTACPublica.setText(pubKey.toString());

Page 19: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

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()); boolean sigok = ecdsa.verify(sig);

Page 20: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Tela da aplicação

Page 21: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Agenda

Introdução

ECDSA

Aplicações

Implementação Java

Conclusões

Page 22: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

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.

Page 23: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

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.

Page 24: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Referências

João N. Souza, Márcio A. R. Moreira e Ilmério R. Silva, A Multi-User Key and 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, The Elliptic Curve Digital Signature Algorithm (ECDSA), Certicom Corporation, 2001, disponível em http://www.certicom.com/index.php?action=forms,login2&mode=do&next_aid=27&qual=2&

Page 25: Márcio Moreira, Rogério Mendes & Flamaryon Guerin marcio.moreira@uniminas.br marcio.moreira@uniminas.br, rogerio@websec.com.br & flamaryon@uniminas.brrogerio@websec.com.br.

Algoritmo de Assinatura Digital por Curvas Elípticas

ECDSA (Elliptic Curve Digital Signature Algorithm)

Disponível em:www.geocities.com/marciomoreira

Márcio Moreira, Rogério Mendes & Flamaryon [email protected] , [email protected] & [email protected]

6º CONTECSI - 3 a 5 de Junho de 2009 – USP – São Paulo – Brasil

Obrigado! Dúvidas?