Márcio Moreira, Rogério Mendes & Flamaryon Guerin

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

description

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. - PowerPoint PPT Presentation

Transcript of Márcio Moreira, Rogério Mendes & Flamaryon Guerin

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

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

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

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

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

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:

Método Princípio Operações

RSA Logaritmo * & / de números

ECDSA Curvas Elípticas

+ & - de pontos

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.

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: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

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");

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());

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);

Tela da aplicação

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-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&

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?