Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouAdriana Pacheco Fortunato Alterado mais de 8 anos atrás
1
Projeto de Criptografia Jorge Ferraz (jfof) Marcus Vinicius (mvgs)
2
Dois Projetos Implementação de um esquema de assinatura digital utilizando-se das classes comuns de java (pacote java.math) Implementação do esquema de assinatura digital, usando classes alto nível (pacote java.security);
3
Primeiro java.math: classe BigInteger: Representação Binária; Operações comuns sobre inteiros; Operações sobre bits; Operações de aritmética modular; Geração de números primos;
4
Primeiro Algoritmo RSA Rivest, Shamir, Adleman Sistema de Chaves Assimétricas Resistente (difícil de quebrar) Exponenciação e aritmética modular
5
Algoritmo RSA a) Um número p, primo; b) Um número q, igualmente primo; c) Um número N (módulo), tal que N = p * q; d) Um número e (expoente); e e) Um número d (expoente), tais que e * d mod[(p-1)(q-1)] = 1
6
RSA – classe java public RSA(int bitlen) { SecureRandom r = new SecureRandom(); p = new BigInteger(bitlen / 2, 100, r); q = new BigInteger(bitlen / 2, 100, r); n = p.multiply(q); BigInteger m = (p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE)); e = new BigInteger("3"); while(m.gcd(e).intValue() > 1) e = e.add(new BigInteger("2")); d = e.modInverse(m); }
7
Considerações sobre a classe acima O problema de geração de números primos – resolvido pela classe BigInteger de java. O construtor utilizado produz um número primo do tamanho desejado com uma probabilidade de 1 – 1/2 100 Igualmente, as demais funções da classe – GCD (Máximo Divisor Comum) e operadores de aritmética modular – tornam simples a geração dos demais números.
8
Assinatura Digital Problema da autenticidade Autenticação (o destinatário deve ser capaz de checar a assinatura) Integridade (a assinatura deve ser não- falsificável) Não-Repúdio (o remetente não pode negar sua autenticidade)
9
Dois paradigmas implementados Trapdoor (utilização direta do algoritmo RSA) Hash Then Invert (utilização de uma função Hash nos algoritmos de assinatura e verificação)
10
TrapDoor Extremamente Vulnerável Consegue-se produzir falsificações com grande facilidade
11
Solução: Hash-Then-Invert Utilização de uma Função Hash antes da aplicação do RSA
12
Na Implementação... Foi utilizada uma implementação da função SHA1 Freenet by Ian Clarke (02-02-2000) public class SHA1 {... public String doHash(String s); }
13
No final das contas Percebemos que a utilização da Função Hash garante uma melhoria enorme do sistema. Os Forgers que quebravam o TrapDoor passam a não mais quebrar o Hash- Then-Invert Ao mesmo tempo, a mesma não acarreta um overhead computacional muito grande
14
Segundo Utilizando package java.security; Define uma maneira simples de utilizar os algoritmos de segurança; Porém não fornece uma implementação dos mesmo – necessidade de utilizar Provider’s de terceiros; A utilização dos algoritmos – dado que eles estão prontos – é feita em poucas linhas de código.
15
Segundo Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); KeyPairGenerator kpg; KeyPair kp; kpg = KeyPairGenerator.getInstance("RSA", "BC"); kpg.initialize(512); kp = kpg.genKeyPair();
16
Segundo ASSINATURA public byte[] Assinatura(){ Signature sig = Signature.getInstance("MD5withRSA", "BC"); /* Initialize for signing */ sig.initSign(kp.getPrivate()); /* Process the document */ sig.update(mensagemchar); /* Sign it */ return sig.sign(); }
17
Segundo VERIFICAÇÃO public boolean Verificar() { /* Get Signature object */ Signature sig = Signature.getInstance("MD5withRSA", "BC"); /* Initialize for verifying */ sig.initVerify(kp.getPublic()); /* Process the document */ sig.update(mensagemchar); /* Verify authenticity */ return sig.verify(assinatura); }
18
Segundo Fizemos uma pequena simulação:
19
Segundo Problemas: Conversões de String para byte[]; É necessário conhecer muito bem a linguagem para poder garantir as propriedades de segurança da aplicação; A partir do que foi exercitado, fica simples adicionar segurança a uma aplicação java.
20
Referências Artigo sobre java.security: http://java.sun.com/developer/tech nicalArticles/Security/Crypto/ http://java.sun.com/developer/tech nicalArticles/Security/Crypto/ Endereço do provider gratuito: http://www.bouncycastle.org/ http://www.bouncycastle.org/ Notas de aula Capítulo 8 Capítulo 12
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.