Ora parleremo di JCA, il framework di base per la crittografia, è costruito intorno alla J2SA(Java 2 Security Architecture).
Si basa sui principi della Criptography Service Provider Architecture:
- indipendenza dell'implementazione(Algorithm indipendences)
- interoperabilità
- estendibilità
In genere un'applicazione crittografica può richiedere genericamente un'implementazione di un dato algoritmo senza curarsi di quale provider lo fornisca, infatti una volta installati possono coesistere uno o più CSP anche di differenti produttori, il provider di default si chiama SUN ed è integrato nel JDK.
In Pratica:
- Engine class: definiscea crypto service in an absract class senza implementazione
- Service provider interface: provvede ad una crypto interface dell'applicazione via "engine"
Principali engine class:
- KEY: defisce le funzionalità condivise da chivi "opache"
- KEY SPEC:definisce una chiave di tipo trasparente
- KeyFactory:prende una chiave di tipo KEY "opaca" o "trasparente"
- KeyPairGenerator:genera una coppia di chiavi assimentriche
- AlgorithmParameters: gestisce i parametri di un algoritmo
- AlgorithmParametersGenerator:genera i set di parametri di un algoritmo
- MessageDigest:calcola l'hash di dati specifici
- SecureRandom:genera numeri causali o pseudo casuali
- Signature:appone e verifica la firma digitale
- CertificateFactory:crea e revoca certificati di chiavi pubbliche
- KeyStore:crea e gestisce un database(Keystore) di chiavi e certificati sicuri.
Le estensioni JCE(Java Cryptographic Extension) e JSSE(Java Secure Sockects extension) implementano ed estendono le tecniche crittografiche definite dalla JCA fornendo CSP alternativi a SUN.
Invece i restanti set di package offrono funzionalità di sicurezza aggiuntive e sono quindi complementari alla JCA.
- JAAS:servizi di autenticazione, amministrazione e autorizzazione
- CertPath:gestione dei certificati e catene di certificati
- JGSS:meccanismi di comunicazione generici e specifici per beyberos v5
JCE
Java Cryptographic Extension
La JCE ha il compito di fornire un'implementazione completa delle funzionalità di cifratura e decifratura dichiarate dalla JCA.
JCE offre supporto:
JCE offre supporto:
- cifrari simmetrici a blocco e a flusso
- cifrari asimmetrici
- cifrari con password
- Data
- I/O streams
- Serializable Object
- MAC(Message Authentication Code)
- KeyGenerator/KeyAgreement
JCA-Message Digest
Java Criptography Architecture offre la classe "engine" MessageDigest astratta che provvede a fare da design per offrire la funzionalità di cifratura di messaggi sicuri con algoritmo SHA-1 o MD5, questo messaggio criptato è detto: Message Digest o semplicemente indicato con MD.
Un message digest è un messaggio in chiaro di lunghezza variabile tradotto in un messaggio "sicuro" di lunghezza fissa.
Un MD ha due proprietà:
- se x->h(x), e y ed x sono diversi, non si può avere h(y)=h(x)
- non si possono avere collisioni
Le API Java sono:
- MessageDigest.getInstance("MD5") per ottenere un MD
- .update(plaintext) per calcolare MD con il testo in chiaro
- .digest() per leggere il message digest
JCA-Message Authentication Code(MAC)
MACs usa una chiave per preservare l'integrità del messaggio.JCA supporta gli algoritmi:
- HMAC/SHA-1
- HMAC/MD5
- KeyGenerator.getInstance("HMACMD5") e .generateKey() per generare la chiave
- Mac.getInstance("HMACMD5") crea un oggetto MAC
- .init(plaintext) e .doFinal() inizializza un MAC object
- .update(plaintext) e .doFinal() calcolano il MAC object con testo in chiaro
Nessun commento:
Posta un commento