Programmazione avanzata Java e C. Crittografia

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmazione avanzata Java e C. Crittografia"

Transcript

1 Programmazione avanzata Java e C Crittografia

2 ü JCA o Java Cryptography Architecture è il framework java per la crittografia che fa parte della API di sicurezza di Java, ed è stato introdotto nei pacchetti java.security e java.crypto. JCA fornisce le principali funzionalità di crittografia quali: ü firma digitale; ü message digest (hash); ü certificati e convalida dei certificati; ü crittografia (simmetrica/blocco asimmetrico/cifrari a flusso); ü generazione e gestione di chiavi; ü generazione di numeri casuali e molto altro.

3 ü La chiave crittografica è una informazione che è utilizzata in un algoritmo di criptazione e decriptazione per generare un testo cifrato da uno in chiaro. ü Possono avere lunghezza variabile in funzione dell algoritmo utilizzato ed in generale si parla di chiavi simmetriche o asimmetriche. JCA offre le funzionalità per la generazione di entrambe le tipologie di chiavi. ü La classe KeyGenerator espone le funzionalità per la generazione di chiavi simmetriche. Per istanziarla possiamo invocare il metodo getinstance() specificando l algoritmo che si intende utilizzare.

4 Si noti che questa modalità di istanziare gli di oggetti in JCA è molto comune perché il framework è progettato in modo da demandare l implementazione degli algoritmi a provider esterni registrati. La stringa di input specifica l implementazione (ovvero algoritmo) richiesta e se non presente il metodo restituisce l eccezione NoSuchAlgorithmException.

5 Il codice seguente generare una chiave simmetrica. private static final String SYM_ALGORITHM = "AES"; private static final Integer SYM_KEY_SIZE = 128; public static Key generatesymmetrickey() throws NoSuchAlgorithmException { KeyGenerator generator = KeyGenerator.getInstance( SYM_ALGORITHM ); generator.init( SYM_KEY_SIZE ); SecretKey key = generator.generatekey(); return key; }

6 Gli algoritmi disponibili nel JCA, con le rispettive lunghezze in bit delle chiavi, sono i seguenti: ü AES (128) ü 1/7DES (56) ü DESede (168) ü HmacSHA1 ü HmacSHA256

7 Per la generazione di una coppia di chiavi asimmetriche (pubblica e privata) la classe del framework da utilizzare è KeyPairGenerator. La coppia di chiavi è restituita nel bean KeyPair caratterizzata da due sole proprietà in sola lettura: publickey e privatekey.

8 private static final String ASYM_ALGORITHM = "RSA"; private static final Integer ASYM_KEY_SIZE = 1024; public static KeyPair generateasymmetrickey() throws NoSuchAlgorithmException { KeyPairGenerator generator = KeyPairGenerator.getInstance( ASYM_ALGORITHM ); generator.initialize( ASYM_KEY_SIZE ); return generator.generatekeypair(); }.

9 Gli algoritmi supportati dal framework sono: ü DiffieHellman (1024) ü DSA (1024) ü RSA (1024, 2048)

10 La crittografia simmetrica o crittografia a chiave privata indica un metodo di cifratura molto semplice in cui la chiave utilizzata per cifrare il testo in chiaro è la stessa utilizzata per decifrarlo. La figura seguente mostra il processo appena descritto.

11 La classe che espone i servizi per la crittazione e decrittazione è java.crypto.cipher. Come già visto per ottenerne una istanza è necessario invocare il metodo getinstance() passando una stringa (transformation) cheindica il set di operazioni che devono essere eseguite sull input per ottenere l output richiesto. Tale stringa ha il formato algorithm/mode/padding dove: ü algorithm indica l algoritmo di crittazione desiderato; ü mode indica il metodo di crittazione che può essere a Blocchi di Cifre o a Flusso di Cifre; ü padding nel caso di cifratura a blocchi indica l algoritmo da utilizzare per riempire il blocco finale.

12 Il codice seguente mostra un esempio di cifratura simmetrica con algoritmo di cifratura a blocchi AES in modalità CBC. Il metodo CBC combina il blocco corrente con l esito della crittazione del blocco precedente, quindi necessita di un vettore di inizializzazione per cifrare il primo blocco.

13 public static byte [] encrypt( Key key, byte[] iv, byte[] plaintext ) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException { Cipher cipher = Cipher.getInstance( "AES/CBC/PKCS5Padding" ); cipher.init( Cipher.ENCRYPT_MODE, key, new IvParameterSpec( iv ) ); return cipher.dofinal( plaintext ); }

14 L oggetto Cipher può essere utilizzato sia per criptare che per decriptare. La selezione della modalità operativa si effettua passando il parametro mode al metodo init(), che nel nostro esempio assume il valore ENCRYPT_MODE. A tale metodo passiamo anche la chiave da utilizzare per l operazione ed il vettore di inizializzazione.

15 Per eseguire l operazione inversa di decriptazione il codice java sarà simile al precedente ma l operazione specificata nel metodo init() dovrà essere DECRYPT_MODE.

16 public static byte [] decrypt( Key key, byte[] iv, byte[] ciphertext ) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException { Cipher cipher = Cipher.getInstance( "AES/CBC/PKCS5Padding" ); cipher.init( Cipher.DECRYPT_MODE, key, new IvParameterSpec( iv ) ); return cipher.dofinal( ciphertext ); }

17 Si utilizza la classe SecureRandom che utilizza algoritmi per la generazione di numeri casuali non facilmente predicibile. public static byte [] generateinitvector() { SecureRandom random = new SecureRandom(); byte [] iv = new byte [ SYM_KEY_SIZE / 8 ]; random.nextbytes( iv ); return iv; }

18 La crittografia asimmetrica, conosciuta anche come crittografia a chiave pubblica/privata o solamente crittografia a chiave pubblica, è un metodo di criptazione in cui si utilizza una coppia di chiavi diverse, una pubblica ed una privata, in grado di funzionare solo l una con l altra. La chiave privata è utilizzabile solo dal legittimo possessore, mentre quella pubblica è resa nota a chiunque.

19 In pratica, ciò che viene cifrato da una chiave può essere decifrato solo con l altra chiave della coppia e viceversa. Sebbene più sicura, in quanto elimina il problema della condivisione della chiave tra mittente e destinatario, risulta computazionalmente più onerosa rispetto ad un algoritmo a chiave simmetrica.

20 Per questo motivo è generalmente utilizzato per cifrare solamente pochi blocchi di dati, come ad esempio la una chiave simmetrica. E poi la chiave simmetrica(detta anche chiave di sessione) che viene utilizzata per la criptazione del testo, come mostrato nell immagine seguente.

21 public static byte [] encrypt( PublicKey key, byte[] plaintext ) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { Cipher cipher = Cipher.getInstance( "RSA/ECB/NoPadding" ); cipher.init( Cipher.ENCRYPT_MODE, key ); return cipher.dofinal( plaintext ); }

22 public static byte [] decrypt( PrivateKey key, byte[] ciphertext ) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { Cipher cipher = Cipher.getInstance( key.getalgorithm() + "/ECB/NoPadding" ); cipher.init( Cipher.DECRYPT_MODE, key ); return cipher.dofinal( ciphertext ); }

23 Tutti i metodi di cifratura e decifratura che abbiamo visto ricevono in input e restituiscono in output un array di byte. Per poter persistere o trasferire tale array attraverso un media che tratta dati testuali è necessario convertirlo in Base 64. Questo per garantire che il dato rimanga intatto durante il trasporto.

24 private static final BASE64Encoder encoder = new BASE64Encoder(); private static final BASE64Decoder decoder = new BASE64Decoder(); public static String base64encode( byte[] array ) { return encoder.encode( array ); } public static byte[] base64decode( String buffer ) throws Exception { return decoder.decodebuffer( buffer ); }

25 In conclusione inserendo i metodi descritti sopra in una classe CryptoHelper le operazioni di criptazione e decriptazione avvengono nel modo seguente:

26 public static void main(string[] args) throws Exception { String msg = "Questo è il testo da proteggere"; // Cifratura con chiave simmetrica Key key = CryptoHelper.generateSymmetricKey(); byte[] iv = CryptoHelper.generateInitVector(); String encripted = CryptoHelper.base64Encode( CryptoHelper.encrypt( key, iv, msg.getbytes() ) ); System.out.println( encripted ); // // Invio messaggio cifrato // // Decifratura con chiave simmetrica String decripted = new String( CryptoHelper.decrypt( key, iv, CryptoHelper.base64Decode( encripted ) ) );

27 System.out.println( decripted ); // Cifratura con chiave simmetrica KeyPair keypair = CryptoHelper.generateAsymmetricKey(); encripted = CryptoHelper.base64Encode( CryptoHelper.encrypt( keypair.getpublic(), iv, msg.getbytes() ) ); System.out.println( encripted ); // // Invio messaggio cifrato // // Decifratura con chiave asimmetrica decripted = new String( CryptoHelper.decrypt( keypair.getprivate(), iv, CryptoHelper.base64Decode( encripted ) ) ); System.out.println( decripted ); }

Crittografia in Java

Crittografia in Java Crittografia in Java di Oreste Delitala Progetto di Computer Security 2013-2014 Introduzione La crittografia è un particolare processo grazie al quale, per mezzo di sofisticati algoritmi, è possibile trasformare

Dettagli

Crittografia & Java Cryptographic. Architecture (JCA) A cura di Franzin Michele. 29-30 Settembre 1 Ottobre 2006. Java User Group Padova

Crittografia & Java Cryptographic. Architecture (JCA) A cura di Franzin Michele. 29-30 Settembre 1 Ottobre 2006. Java User Group Padova Crittografia & Java Cryptographic 29-30 Settembre 1 Ottobre 2006 Architecture (JCA) A cura di Franzin Michele 1 Copyright Quest'opera è protetta dalla licenza Creative Commons Attribution-ShareAlike 2.5;

Dettagli

Java Security Extensions(J2SE)

Java Security Extensions(J2SE) Università degli Studi di Bologna IIª Facoltà di Ingegneria - Cesena Anno Accademico 2010/2011 OUTLINE Java Security Extensions(J2SE) Prof. Enrico Denti Dipartimento di Elettronica, Informatica e Sistemistica

Dettagli

Java Security Extensions Corso di Tecnologie per la Sicurezza LS Prof. R. Laschi. Java Security Extensions

Java Security Extensions Corso di Tecnologie per la Sicurezza LS Prof. R. Laschi. Java Security Extensions Corso di Laurea Specialistica in Ingegneria Informatica Facoltà di Ingegneria - A.A. 2003/04 Università degli studi di Bologna Java Security Extensions Corso di Tecnologie per la Sicurezza LS Prof. R.

Dettagli

Piattaforma AlmaChannel e laboratori virtuali

Piattaforma AlmaChannel e laboratori virtuali Piattaforma AlmaChannel e laboratori virtuali Tecnologie per la Sicurezza L-S AA 2005-2006 Anna Riccioni [email protected] Laboratori virtuali Supporto alla didattica tradizionale Simulatore come

Dettagli

Crittografia a chiave pubblica

Crittografia a chiave pubblica Crittografia a chiave pubblica Barbara Masucci Dipartimento di Informatica Università di Salerno [email protected] http://www.di.unisa.it/professori/masucci Cifrari simmetrici canale insicuro Bob 1 Distribuzione

Dettagli

Converte una chiave di al più 14 word a 32 bit (K-array) in un array di 18 sottochiavi a 32 bit (P-array) Genera 4 S-box, ognuna con 256 word a 32 bit

Converte una chiave di al più 14 word a 32 bit (K-array) in un array di 18 sottochiavi a 32 bit (P-array) Genera 4 S-box, ognuna con 256 word a 32 bit % RC2 [1989] IDEA (International Data Encryption Algorithm) [1990] Blowfish [1993]!"###"$ SAFER (Secure And Fast Encryption Routine) SAFER K-64 [1994], SAFER K-128 [1995] cifrario bit chiave bit testo

Dettagli

Esercitazione 03. Sommario. Gnu Privacy Guard (GPG) Chiavi GPG (1/2) Andrea Nuzzolese. Gnu Privacy Guard (GPG) Descrizione esercitazione

Esercitazione 03. Sommario. Gnu Privacy Guard (GPG) Chiavi GPG (1/2) Andrea Nuzzolese. Gnu Privacy Guard (GPG) Descrizione esercitazione Sommario Esercitazione 03 Andrea Nuzzolese Gnu Privacy Guard (GPG) Principali funzionalità Descrizione esercitazione Scopo Interazione con il sistema Credits: Angelo Di Iorio ALMA MATER STUDIORUM UNIVERSITA

Dettagli

Sicurezza nelle reti: protezione della comunicazione

Sicurezza nelle reti: protezione della comunicazione Sicurezza nelle reti: protezione della comunicazione Gaia Maselli [email protected] Queste slide sono un adattamento delle slide fornite dal libro di testo e pertanto protette da copyright. All material

Dettagli

RSA in OpenSSL. Alfredo De Santis. Marzo Dipartimento di Informatica Università di Salerno.

RSA in OpenSSL. Alfredo De Santis. Marzo Dipartimento di Informatica Università di Salerno. RSA in OpenSSL Alfredo De Santis Dipartimento di Informatica Università di Salerno [email protected] Marzo 2017 http://www.dia.unisa.it/professori/ads Rappresentazione e codifica dei dati Chiavi e parametri

Dettagli

Sicurezza dei Sistemi Informatici Esercitazioni OpenSSL

Sicurezza dei Sistemi Informatici Esercitazioni OpenSSL Sicurezza dei Sistemi Informatici Esercitazioni OpenSSL Marco Tiloca [email protected] 1 Sicurezza dei Sistemi Informatici Esercitazioni OpenSSL Cifratura chiave simmetrica (2 ore) Funzioni hash

Dettagli

Steganografia in un. Corso di Sicurezza dei sistemi informatici Michelangelo Rinelli Anno Accademico 2005/06

Steganografia in un. Corso di Sicurezza dei sistemi informatici Michelangelo Rinelli Anno Accademico 2005/06 Steganografia in un file di testo Corso di Sicurezza dei sistemi informatici Michelangelo Rinelli Anno Accademico 2005/06 Steganografia È l arte di nascondere un messaggio all interno di un altro messaggio

Dettagli

Elementi di crittografia

Elementi di crittografia Elementi di crittografia Francesca Merola a.a. 2010-11 informazioni orario: ma, (me), gio, 14-15.30, aula N1 ricevimento: su appuntamento ma, me, gio, 11.30-12.30 studio 300 dipartimento di matematica

Dettagli

Crittografia per la sicurezza dei dati

Crittografia per la sicurezza dei dati Crittografia per la sicurezza dei dati Esigenza di sicurezza in rete significa: -garanzia di riservatezza dei dati in rete (e-mail) -garanzia di transazioni sicure (e-commerce, home banking) La crittografia

Dettagli

CRITTOGRAFIA 2014/15 Appello del 13 gennaio Nome: Cognome: Matricola:

CRITTOGRAFIA 2014/15 Appello del 13 gennaio Nome: Cognome: Matricola: CRITTOGRAFIA 2014/15 Appello del 13 gennaio 2015 Esercizio 1 Crittografia ellittica [9 punti] 1. Descrivere l algoritmo di Koblitz per trasformare un messaggio m, codificato come numero intero, in un punto

Dettagli

Cifratura simmetrica

Cifratura simmetrica Cifratura Cifratura simmetrica Alice canale insicuro Bob 2 Cifratura simmetrica m Algoritmo di decifratura m Alice canale insicuro Algoritmo di cifratura Bob 3 Cifrari simmetrici chiave privata k chiave

Dettagli

idea della crittografia a chiave pubblica

idea della crittografia a chiave pubblica idea della crittografia a chiave pubblica sviluppare un crittosistema in cui data la funzione di cifratura e k sia computazionalmente difficile determinare d k Bob rende pubblica la sua funzione di cifratura

Dettagli

Laboratorio di Crittografia I - PGP/GPG

Laboratorio di Crittografia I - PGP/GPG Laboratorio di Crittografia I - PGP/GPG Stefano Cristalli 2 dicembre 2015 a.a. 2015/2016 Corso di Crittografia I Docente: dott. Andrea Visconti GNU Privacy Guard Risponde alla necessità di utilizzare la

Dettagli

Il Blowfish per la crittografia dei dati

Il Blowfish per la crittografia dei dati Il Blowfish per la crittografia dei dati In questo articolo si esamineranno le modalità di utilizzo dell algoritmo Blowfish per la protezione delle informazioni nei sistemi embedded Francesco Pentella

Dettagli

Cifrari a blocchi. Esercizi con OpenSSL. Alfredo De Santis. Marzo Dipartimento di Informatica Università di Salerno

Cifrari a blocchi. Esercizi con OpenSSL. Alfredo De Santis. Marzo Dipartimento di Informatica Università di Salerno Cifrari a blocchi Esercizi con OpenSSL Alfredo De Santis Dipartimento di Informatica Università di Salerno [email protected] http://www.dia.unisa.it/professori/ads Marzo 2017 Strumenti Necessari Per lo svolgimento

Dettagli

Cifratura Simmetrica con OpenSSL

Cifratura Simmetrica con OpenSSL Cifratura Simmetrica con OpenSSL Alfredo De Santis Dipartimento di Informatica Università di Salerno [email protected] http://www.dia.unisa.it/professori/ads Marzo 2017 Cifrari simmetrici Crittosistemi a chiave

Dettagli

Corso di Crittografia Prof. Dario Catalano. Firme Digitali

Corso di Crittografia Prof. Dario Catalano. Firme Digitali Corso di Crittografia Prof. Dario Catalano Firme Digitali Introduzione n Una firma digitale e l equivalente informatico di una firma convenzionale. n Molto simile a MA, solo che qui abbiamo una struttura

Dettagli

Crittografia e OpenSource

Crittografia e OpenSource Crittografia e OpenSource Matteo Carli [email protected] http://www.matteocarli.com http://www.lug-acros.org Chi sono Studente di Sicurezza dei sistemi e delle reti informatiche presso il polo di

Dettagli

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]

Dettagli

Architettura JCA. Architettura JCA. Provider JCE. Factory pattern. Strategy pattern

Architettura JCA. Architettura JCA. Provider JCE. Factory pattern. Strategy pattern Laurea Specialistica in Ingegneria Informatica per la Gestione d Azienda Facoltà di Ingegneria Università di Pisa Crittografia in Java JCA e JCE Java Cryptography Architecture (JCA) JCA Reference Guide:

Dettagli

JCA e JCE. Crittografia in Java. Java Cryptography Architecture (JCA) Java Cryptography Extension (JCE)

JCA e JCE. Crittografia in Java. Java Cryptography Architecture (JCA) Java Cryptography Extension (JCE) Laurea Specialistica in Ingegneria Informatica per la Gestione d Azienda Facoltà di Ingegneria Università di Pisa Crittografia in Java JCA e JCE Java Cryptography Architecture (JCA) JCA Reference Guide:

Dettagli

Crittografia a chiave pubblica

Crittografia a chiave pubblica Crittografia a chiave pubblica Barbara Masucci Dipartimento di Informatica ed Applicazioni Università di Salerno [email protected] http://www.dia.unisa.it/professori/masucci Cifrari simmetrici canale

Dettagli

Data Encryption Standard. Data Encryption Standard DES. Struttura del DES. Lunghezza della Chiave. Permutazione Iniziale IP

Data Encryption Standard. Data Encryption Standard DES. Struttura del DES. Lunghezza della Chiave. Permutazione Iniziale IP Data Encryption Standard Barbara Masucci Dipartimento di Informatica ed Applicazioni Università di Salerno [email protected] http://www.dia.unisa.it/masucci.dir Data Encryption Standard () 15 maggio

Dettagli

Lezione 6 programmazione in Java

Lezione 6 programmazione in Java Lezione 6 programmazione in Java Nicola Drago [email protected] Dipartimento di Informatica Università di Verona Anteprima Le costanti I vettori Cos è un vettore Come si usa I vari tipi di vettori Esempi

Dettagli

Crittografia con OpenSSL crittografia simmetrica

Crittografia con OpenSSL crittografia simmetrica Crittografia con OpenSSL crittografia simmetrica Laboratorio del corso Sicurezza dei sistemi informatici (03GSDOV) Politecnico di Torino AA 2016/17 Prof. Antonio Lioy preparata da: Cataldo Basile ([email protected])

Dettagli

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

RETI DI CALCOLATORI Linguaggio Java: Eccezioni Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione

Dettagli

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura: Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata

Dettagli

Firma digitale e PEC: aspetti crittografici e sicurezza

Firma digitale e PEC: aspetti crittografici e sicurezza Firma digitale e PEC: aspetti crittografici e sicurezza Prof. Massimiliano Sala Università degli Studi di Trento, Lab di Matematica Industriale e Crittografia Trento, 17 Febbraio 2012 M. Sala (Università

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

Dettagli

logaritmo discreto come funzione unidirezionale

logaritmo discreto come funzione unidirezionale logaritmo discreto come funzione unidirezionale in generale, lavoreremo con il gruppo U(Z p ) = Z p dati g generatore di Z p e x tale che 1 x p 1, calcolare y = g x è computazionalmente facile (y g x (mod

Dettagli