Projeto de Criptografia - PowerPoint PPT Presentation

About This Presentation
Title:

Projeto de Criptografia

Description:

Projeto de Criptografia Jorge Ferraz (jfof) Marcus Vinicius (mvgs) – PowerPoint PPT presentation

Number of Views:107
Avg rating:3.0/5.0
Slides: 21
Provided by: mvgs
Category:

less

Transcript and Presenter's Notes

Title: Projeto de Criptografia


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() gt 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/2100
  • 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 Providers 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.prov
    ider.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("MD5withRS
    A", "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("MD5wit
    hRSA", "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/de
    veloper/technicalArticles/Security/Crypto/
  • Endereço do provider gratuito http//www.bouncyca
    stle.org/
  • Notas de aula
  • Capítulo 8
  • Capítulo 12
Write a Comment
User Comments (0)
About PowerShow.com