Upload
yoko-moran
View
28
Download
1
Embed Size (px)
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
Citation preview
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
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
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
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.
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);
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?