Programmazione avanzata Java e C. Crittografia
|
|
|
- Clemente Milano
- 7 anni fa
- Visualizzazioni
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 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
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;
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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[]
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:
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:
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
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
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
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])
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
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
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à
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
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
