Java Cryptography Architecture (JCA) Segurança e Privacidade em Sistemas de Armazenamento e...
Transcript of Java Cryptography Architecture (JCA) Segurança e Privacidade em Sistemas de Armazenamento e...
![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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/1.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/2.jpg)
Í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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/3.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/4.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/5.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/6.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/7.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/8.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/9.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/10.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/11.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/12.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/13.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/14.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/15.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/16.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/17.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/18.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/19.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/20.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/21.jpg)
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.](https://reader035.fdocumentos.com/reader035/viewer/2022062418/552fc11a497959413d8c97b0/html5/thumbnails/22.jpg)
Java Cryptography Architecture(JCA)
Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados
MSDPA-0607
Rui Manuel C. O. Afonseca