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

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

Embed Size (px)

Citation preview

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

Java Cryptography Architecture(JCA)

Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados

MSDPA-0607

Rui Manuel C. O. Afonseca

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

Í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

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

JCA - Princípios

Independente da plataforma (Java) Fornece uma API para serviços

criptográficos Independente da implementação Extensível

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

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)

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

JCA / JCE– Principais Objectos

JCA Signature X509Certificate KeyStore

JCE Cipher KeyGenerator SealedObject

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

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.

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

Exemplo – Aplicação de Chat

Sala de Conversação

Conversação Privada

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

Entidades do Sistema

Autoridade de Certificação Externa Autoridade de Certificação Dedicada Servidor de Chat Cliente de Chat

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

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

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

Desenho Conceptual

Camada de Interface Swing Awt

Camada operacional Thread’s

Camada criptográfica Security IAIK

Camada de Rede Socket’s

4 Camadas

Interface

Operacional

CriptográficaRede

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

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

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

Comunicações Seguras (cont.)

Station To Station “A” gera um número aleatório grande x “A” calcula X = gx (mod n) e envia-o ao “B” “B” gera um número aleatório grande y “B” calcula Y = gy (mod n) e envia-o ao “A” Ambos conseguem calcular K = Xy (mod n) = Yx (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

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

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 => [99999999999999999999999999999999999999999999999999999999999999]

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

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

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

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

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

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)

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

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

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

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

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

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

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

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.)

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

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

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

Java Cryptography Architecture(JCA)

Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados

MSDPA-0607

Rui Manuel C. O. Afonseca