Firma digitale con RSA



Documenti analoghi
Cifratura chiave simmetrica

Creazione e Gestione Certificati

Directory. Le directory unix sono file.

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 4 Ing. Gian Enrico Conti Dott.

La gestione della memoria dinamica Heap

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Tecnologie per la Sicurezza L-S AA Anna Chiara Bellini

Creare connessioni cifrate con stunnel

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Lezione IX Gestione dinamica della memoria

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

L'applicazione integrata con il servizio My Fattura

Il linguaggio C. Puntatori e dintorni

Lezione IX Gestione dinamica della memoria

Certificati e PKI in OpenSSL

Corso di Informatica A.A

Laboratorio di Informatica I

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Lezione 6: Array e puntatori

Streams e disk files

Firme digitali con OpenSSL

Allocazione dinamica della memoria

Metel MIB2B Metel Invoice Business to Business La fattura B2B con Metel

programmazione distribuita Introduzione Introduzione alla programmazione distribuita

C++ funzioni Alberto Ferrari. Alberto Ferrari Programmazione di applicazioni SW

Gestione dinamica della memoria

L uso di Socket UDP. TCP vs. UDP UDP

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.

Fondamenti di Informatica L-A

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018

Sicurezza dei Sistemi Informatici Esercitazioni OpenSSL

Architettura di Reti

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {

Per richiedere il certificato l utente deve provvedere, nel proprio ambiente informatico, alla generazione della CSR (Certificate Sign Request).

Corso di Informatica A.A

Introduzione al C. Stream e disk file

Stringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10

Esercitazione 2 Certificati

Esercitazione 2 Certificati

&v restituisce l indirizzo della zona di memoria allocata per v.

Sistemi Operativi II. Thread: TSD, Attributi

C: panoramica. Violetta Lonati

L uso di Socket UDP. Usiamo le API Winsock incluse in <Winsock.h> A.A. 2005/06. Dott.ssa Valeria Carofiglio

Esercitazioni di Fondamenti di Informatica - Lez. 9 4/12/2018

Lezione 8: Stringhe ed array multidimensionali

Lezione X Definizione di vettori a run-time

Gestione dei file. File di testo e binari

Introduzione al linguaggio C Puntatori

ELEMENTI DI INFORMATICA. Linguaggio C

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

Introduzione al C. Unità Gestione Dinamica della Memoria

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

maurizio pizzonia sicurezza dei sistemi informatici e delle reti. esercizi su vulnerabilità del software e delle reti

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente

Tecnologie e applicazioni web JSON Web Token (JWT)

Fondamenti di Informatica II

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

Architetture dei Calcolatori

I Processi nel Sistema Operativo Unix

Esercitazione 1 Crittografia Simmetrica

REGIONE BASILICATA UFFICIO AMMINISTRAZIONE DIGITALE

LINUX: struttura generale

La funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre

Istruzioni di controllo del flusso

Rendicontazione dei progetti in cohemon

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Firma Remota Aruba --- Attivazione account di firma remota ed utilizzo ---

Scrivere un programma che salva in un file tutto quello che si scrive sulla tastiera.

Crypto Android. Trusted Execution Environment. TrustZone

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free

Input/Output su File

Corso di Reti di Calcolatori T

Laboratorio di Algoritmi e Strutture Dati. Esercizi

Conseguenze Algoritmiche del fenomeno small world

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.

ASC D.I.M. -Digital Invoice Management - per la Fatturazione Elettronica con SAP

Pagina 1 di 6. Client SOAP di test per i servizi del Sistema di Interscambio. Indice

REGIONE BASILICATA UFFICIO AMMINISTRAZIONE DIGITALE

Esercizio 1: funzione con valore di ritorno di tipo puntatore

I.I.S. G.B. PENTASUGLIA MATERA ISTITUTO TECNICO SETTORE TECNOLOGICO LICEO SCIENTIFICO SCIENZE APPLICATE. Classe: 5Ci

IMPLEMENTAZIONI DIDATTICHE DI ALGORITMI DI CIFRATURA PER SICUREZZA INFORMATICA

Applicazioni per l autenticazione Sicurezza nelle reti di TLC - Prof. Marco Listanti - A.A. 2008/2009

File. Unità 8. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

ALGORITMI E STRUTTURE DATI

Sicurezza: necessità. Roberto Cecchini Ottobre

La firma digitale, o firma elettronica qualificata, basata sulla tecnologia della crittografia a chiavi asimmetriche, è un sistema di autenticazione d

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 4

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Laboratorio di programmazione

Puntatori e array. Violetta Lonati

Generazione di certificati X.509 nell ambito dei test di interoperabilità dei Sistemi di Posta Elettronica Certificata (PEC)

valore 3 BUONO ACQUISTO Valido domenica 2 settembre Leggi il regolamento sul retro REGOLAMENTO

Programmazione C: Esercizi su vettori e funzioni. Titolo presentazione. sottotitolo. Milano, XX mese 20XX

PROCEDURA AGGIORNAMENTO LISTE MEDIANTE L INTERFACCIA WEB

Funzioni, Stack e Visibilità delle Variabili in C

costruttori e distruttori

Transcript:

Sicurezza dei Sistemi Informatici Esercitazioni OpenSSL Firma digitale con RSA Roberta Daidone roberta.daidone@iet.unipi.it 1

Obiettivo Il client invia il proprio certificato al server. Il server verifica il certificato del client e possiede il certificato della CA. Il client firma l hash del file con la propria chiave privata. Il server riceve il file e verifica la firma con la chiave pubblica del client. 2

Funzioni client/server #include <openssl/evp.h> #include <openssl/pem.h> Allocazione contesto char* alg= sha1 ; const EVP_MD* md = EVP_get_digestbyname(alg); OpenSSL_add_all_digests(); EVP_MD_CTX * ctx; ctx = malloc(sizeof(evp_md_ctx)); Deallocazione contesto EVP_MD_CTX_cleanup(ctx); free(ctx);

Preparazione contesto EVP_MD_CTX_init(ctx); EVP_SignInit(ctx, md); Funzioni client Allocazione di memoria per la chiave privata EVP_PKEY* priv_key; priv_key = (EVP_PKEY*) malloc(sizeof (EVP_PKEY)); Lettura della chiave privata per la firma EVP_PKEY* PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u) fp file contenente la chiave privata x buffer dove verrà posta la chiave privata letta cb funzione di callback per il recupero della password u parametri della funzione di callback (password) 4

Funzioni client Firma EVP_SignUpdate(ctx, buffer, size); buffer contiene il file di cui si intende fare hash e firma; size specifica di quanti byte di buffer voglio fare l hashing. La funzione di update completa l hashing in più mandate EVP_SignFinal(ctx,sign_buffer, sign_buffer_size, priv_key); sign_buffer torna al chiamante l hash firmato; sign_buffer_size torna al chiamante la dimensione (in byte) della firma digitale. 5

#include <openssl/x509_vfy.h> #include <openssl/x509.h> #include <openssl/pem.h> #include <openssl/evp.h> Preparazione contesto EVP_MD_CTX_init(ctx); EVP_VerifyInit(ctx, md); Allocazione di memoria per la chiave pubblica EVP_PKEY* pub_key; pub_key = (EVP_PKEY*) malloc(sizeof (EVP_PKEY)); 6

Verifica del certificato del client e verifica della CA che lo ha emesso FILE* file; X509* cert; X509_STORE* store; X509_LOOKUP* lookup; X509_STORE_CTX* verify_ctx; cert struttura dati per il certificato del client; store gestisce una collezione di certificati (la chain of trust); lookup permette di fare lookup dei certificati della chain of trust; verify_ctx è il contesto di verifica della chain of trust fino al certificato dell utente. 7

Leggere il certificato inviato dal client cert = PEM_read_X509 (file, NULL, NULL, NULL); 2 parametro = certificato da leggere 3 parametro = funzione di callback per la password 4 parametro = argomenti della funzione di callback Creazione del cert store store = X509_STORE_new(); Leggere il certificato della CA e caricare la directory di riferimento della CA nel cert store X509_STORE_load_locations (store, ca_file, dir); dir =./exampleca ca_file = cacert.pem 8

Specificare che il path di ricerca dei certificati è quello specificato nel cert store X509_STORE_set_default_paths(store); In mancanza della chiamata precedente, il path di default è usr/local/ssl/certs. Caricare nel cert store il metodo di lookup dei certificati specificato dalla funzione X509_LOOKUP_file() lookup=x509_store_add_lookup(store,x509_lookup_file()) X509_LOOKUP_file() torna un puntatore al metodo di default che è x509_file_lookup definito dalle openssl. 9

Caricare la CRL X509_load_crl_file(lookup, CRLfile, X509_FILETYPE_PEM); CRLfile = CRLfile.pem Creazione di un verification context verify_ctx = X509_STORE_CTX_new(); Inizializzazione del verification context X509_STORE_CTX_init(verify_ctx, store, cert, NULL); Verificare il certificato del client X509_verify_cert(verify_ctx); Deallocazioni X509_free(cert); X509_STORE_free(store); X509_STORE_CTX_free(verify_ctx); 10

Recupero della chiave all'interno del certificato *pub_key = X509_get_pubkey(cert); Verifica della firma digitale EVP_VerifyUpdate(ctx, buffer, size); buffer contiene il file di cui voglio fare hash e verificare la firma size specifica di quanti byte di buffer voglio fare l hashing. La funzione di update completa l hashing per la verifica in più mandate 11

EVP_VerifyFinal(ctx,sign_buffer,sign_buffer_size,pub_key) sign_buffer contiene l hash firmato inviato dal client; sign_buffer_size contiene la dimensione (in byte) della firma digitale del client. La funzione confronta il contenuto di sign_buffer con l hashing contenuto in ctx, verificato con pub_key. Ritorna 1 se il confronto ha successo. 12

Esercizio Si consideri la firma digitale con RSA. Sfruttare le chiavi e i certificati generati la scorsa lezione. Il client ha il proprio certificato e la propria chiave privata Il server ha il certificato e la CRL della CA Il client invia al server il proprio certificato Il client: legge e invia il proprio certificato al server legge un file F, e invia al server il suo contenuto seguito dalla firma digitale. Il server: riceve e verifica il certificato del client grazie al certificato della CA che lo ha emesso recupera la chiave pubblica del client riceve il file del client, ne verifica la firma e lo salva su file. 13