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

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

Java Cryptography Architecture (JCA) Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados MSDPA-0607 Rui Manuel C. O. Afonseca.

Apresentações semelhantes


Apresentação em tema: "Java Cryptography Architecture (JCA) Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados MSDPA-0607 Rui Manuel C. O. Afonseca."— Transcrição da apresentação:

1 Java Cryptography Architecture (JCA) Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados MSDPA-0607 Rui Manuel C. O. Afonseca

2 Índice JCA Princípios Arquitectura Principais Objectos Exemplo Problema Resolução Conceptual (4 Camadas) Camada Criptográfica Detalhes de Implementação (JCA) Protocolos de Comunicação Certificados X.509 Conclusões

3 JCA - Princípios Independente da plataforma (Java) Fornece uma API para serviços criptográficos Independente da implementação Extensível

4 JCA - Arquitectura Engine Classes Define abstractamente um serviço criptográfico (sem implementação). Providers Packages que fornecem implementações de serviços criptográficos. Provider SUN Provider fornecido por omissão. Provider IAIK Mais completa e está integrada de forma elegante com a API para manipulação de estruturas de dados ASN.1 Java Cryptography Extension (JCE) Extensão à JCA que inclui técnicas criptográficas mais poderosas. (Opcional até a versão 1.4)

5 JCA / JCE– Principais Objectos JCA Signature X509Certificate KeyStore JCE Cipher KeyGenerator SealedObject

6 Exemplo Proposto pelo Professor Manuel Bernardo Barbosa, DI, U. Minho – Criptografia Aplicada 2003/2004 Implementação de uma aplicação de Chat Funcionalidades protegidas por técnicas criptográficas Identificação e anonimato dos utilizadores Estabelecimento de canais seguros de comunicação Com servidores Ligações ponto a ponto (peer-to-peer) Mensagens off-line etc.

7 Exemplo – Aplicação de Chat Sala de Conversação Conversação Privada

8 Entidades do Sistema Autoridade de Certificação Externa Autoridade de Certificação Dedicada Servidor de Chat Cliente de Chat

9 Ligações Seguras 1. Cliente – Servidor Envelope Digital 2. Cliente – Cliente Station-to-Station 3. Cliente – Chat CA Chave Publica 4. Servidor – Chat CA Chave Publica

10 Desenho Conceptual Camada de Interface Swing Awt Camada operacional Threads Camada criptográfica Security IAIK Camada de Rede Sockets 4 Camadas Interface Operacional Criptográfica Rede

11 Comunicações Seguras Envelope Digital Entidade A cria a chave simétrica K A cifra K com a chave publica de B A envia o criptograma para B B decifra o criptograma com a sua chave privada e obtém K

12 Comunicações Seguras (cont.) Station To Station A gera um número aleatório grande x A calcula X = g x (mod n) e envia-o ao B B gera um número aleatório grande y B calcula Y = g y (mod n) e envia-o ao A Ambos conseguem calcular K = X y (mod n) = Y x (mod n) Acordada a chave de sessão K, os agentes assinam digitalmente o par ordenado (X, Y) Estas assinaturas são trocadas entre os agentes, cifradas com a chave acordada Caso as assinaturas sejam recuperadas e verificadas com sucesso o protocolo terminou com sucesso DH Melhora- mento

13 StationToStation (Passo 1 de 3) AlgorithmParameterGenerator apg = AlgorithmParameterGenerator.getInstance("DH"); apg.init(512); AlgorithmParameters ap = apg.generateParameters(); DHParameterSpec dhsp = (DHParameterSpec) ap.getParameterSpec(DHParameterSpec.class); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); BigInteger x = new BigInteger(512, random); BigInteger gx = dhsp.getG().modPow(x, dhsp.getP()); oos.writeObject(gx); BigInteger gy = (BigInteger) ois.readObject(); BigInteger k = gy.modPow(x, dhsp.getP()); Determinar Chave K 512 bits = 64 B => [ ]

14 StationToStation (Passo 2 de 3) DESKeySpec sks = new DESKeySpec(k.toByteArray()); SecretKeyFactory skf = SecretKeyFactory.getInstance("DES"); SecretKey sk = skf.generateSecret(sks); Cipher enc = Cipher.getInstance("DES/ECB/PKCS5Padding","IAIK") enc.init(Cipher.ENCRYPT_MODE, sk); Cipher dec = Cipher.getInstance("DES/ECB/PKCS5Padding"); dec.init(Cipher.DECRYPT_MODE, sk); Signature sig = Signature.getInstance("SHA1withRSA"); sig.initSign(mypri); sig.update(gx.toByteArray()); sig.update(gy.toByteArray()); byte[] assinaturaXY = sig.sign(); SealedObject sigXY = new SealedObject(assinaturaXY, enc); oos.writeObject(sigXY); Inicialização Assinar Cifrar Enviar

15 StationToStation (Passo 3 de 3) SealedObject sigXY2 = (SealedObject) ois.readObject(); byte[] assinaturaXY2 = (byte[]) sigXY2.getObject(dec); sig.initVerify(pub); sig.update(gx.toByteArray()); sig.update(gy.toByteArray()); if( sig.verify(assinaturaXY2) ) { return true; } else { return false; } Ler o criptograma Decifrar – Obter a assinatura Verificar assinatura

16 Certificados X.509 Autoridades de Certificação Emitem certificados Revogam certificados (CRL / OCSP) Clientes Criam pedidos de certificado Verificam validade de certificados Assinam mensagens (chave privada) Cifram mensagens (chave publica)

17 Criar Certificado (Passo 1 de 2) KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); kpg.initialize(1024,sr); KeyPair clikp = kpg.generateKeyPair(); PrivateKey cliPri = clikp.getPrivate(); PublicKey cliPub = clikp.getPublic(); X509Certificate x509cert = new X509Certificate(); GregorianCalendar date = (GregorianCalendar)Calendar.getInstance(); x509cert.setValidNotBefore(date.getTime()); date.add(Calendar.MONTH, p_duracao); x509cert.setValidNotAfter(date.getTime()); Gerar par de chaves Definir data de validade Instanciar

18 Criar Certificado (Passo 2 de 2) x509cert.setIssuerDN(p_certCA.getSubjectDN()); Name subject = new Name(); subject.addRDN(ObjectID.country, p_pais); subject.addRDN(ObjectID.organization, p_organization); subject.addRDN(ObjectID.organizationalUnit, p_organizationUnit); subject.addRDN(ObjectID.commonName, p_nome); x509cert.setSubjectDN(subject); x509cert.setSerialNumber(p_serial); x509cert.setPublicKey(cliPub); x509cert.sign(AlgorithmID.sha1WithRSAEncryption, p_mypri); Informação sobre o titular do certificado Assinar o certificado Quem assina o certificado Nº série Chave publica

19 Validar Certificado 1. Validar cadeia de certificados 2. Verificar que não está na CRL 3. Verificar o resultado do pedido OCSP Good Revoked Unknown

20 Validar cadeia de certificados … //Construir o ramo de certificados p_Array_cert … SimpleChainVerifier scv = new SimpleChainVerifier(); scv.addTrustedCertificate( p_trusted_cert ); if (scv.verifyChain( p_Array_cert ) ) { { return true; } else { return false; } Instanciar Definir os certificados de confiança Verificar a cadeia de certificados (Datas, assinaturas, etc.)

21 Conclusões Permite a escolha das implementações mais convenientes As principais técnicas criptográficas estão contempladas, permitindo criar qualquer tipo de aplicação segura Necessário perceber como funcionam algumas técnicas criptográficas Nível de detalhe Permite grande controlo Pode originar falhas de segurança graves

22 Java Cryptography Architecture (JCA) Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados MSDPA-0607 Rui Manuel C. O. Afonseca


Carregar ppt "Java Cryptography Architecture (JCA) Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados MSDPA-0607 Rui Manuel C. O. Afonseca."

Apresentações semelhantes


Anúncios Google