A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Projeto de Criptografia Jorge Ferraz (jfof) Marcus Vinicius (mvgs)

Apresentações semelhantes


Apresentação em tema: "Projeto de Criptografia Jorge Ferraz (jfof) Marcus Vinicius (mvgs)"— Transcrição da apresentação:

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


Carregar ppt "Projeto de Criptografia Jorge Ferraz (jfof) Marcus Vinicius (mvgs)"

Apresentações semelhantes


Anúncios Google