La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Sicurezza su Reti a.a. 2001/2002 Sistemi di elaborazione delle informazioni: Sicurezza su reti Seminario a cura di: Izzo Vincenzo matr. 056/100086 Roberto.

Presentazioni simili


Presentazione sul tema: "Sicurezza su Reti a.a. 2001/2002 Sistemi di elaborazione delle informazioni: Sicurezza su reti Seminario a cura di: Izzo Vincenzo matr. 056/100086 Roberto."— Transcript della presentazione:

1 Sicurezza su Reti a.a. 2001/2002 Sistemi di elaborazione delle informazioni: Sicurezza su reti Seminario a cura di: Izzo Vincenzo matr. 056/ Roberto Maria Grazia matr. 056/ Rago Sabina matr. 056/ Petito Simona matr.056/ Torre Vittorio matr.

2 Sicurezza su Reti a.a. 2001/2002 ETOKEN USB: IMPIEGHI E SVILUPPO DI APPLICAZIONI

3 Sicurezza su Reti a.a. 2001/2002 Sommario Cosè un Etoken? A cosa serve? E-Token R2 E-Token PRO Esempi applicativi Programmazione in VB e VBScript

4 Sicurezza su Reti a.a. 2001/2002 Etoken: cosè? EToken è il primo strumento USB per la sicurezza ed integrità dei dati e delle reti in ambiente Internet. Basandosi sulla facilità d'uso e sulla estrema funzionalità delle porte Universal Serial Bus (USB), eToken non richiede alcuna ulteriore apparecchiatura per il suo utilizzo. VANTAGGI - eliminazione costi - massimizzazione facilità d'uso - sicurezza

5 Sicurezza su Reti a.a. 2001/2002 Etoken: cosè? EToken si basa sulla pionieristica tecnologia della Aladdin, sviluppata fin dal 1988 per la protezione del sw per PC e MAC con chiavi USB, che ha permesso di usare con successo milioni di porte USB in PC, laptop, palmtop. Etoken - crittografa informazioni - custodisce in un dispositivo USB della dimensione di una chiave: chiavi private password certificati di firme digitali

6 Sicurezza su Reti a.a. 2001/2002 Etoken: a cosa serve? Etoken offre soluzioni per : Autenticazione utenti Web Access Control Applicazioni PKI portabili e salvataggio certificati digitali Sicurezza per accesso remoto

7 Sicurezza su Reti a.a. 2001/2002 Autenticazione utenti PRIMA : accessi "password based" che minavano la sicurezza aziendale ORA : logon sicuro alla rete basato su un doppio fattore di autenticazione. Etoken fornisce: - autenticazione dellutente sul server Web - autenticazione del server Web

8 Sicurezza su Reti a.a. 2001/2002 Web Access Control EToken offre un'elevata sicurezza hardware alle società che effettuano transazioni finanziarie, legali o commerciali tramite Internet e la cui integrità deve essere garantita.

9 Sicurezza su Reti a.a. 2001/2002 Applicazioni PKI EToken Enterprise offre la possibilità agli utenti di applicazioni PKI di: - salvare a bordo di eToken le credenziali private - creare un ambiente applicativo sicuro - facilitarne notevolmente l'utilizzo.

10 Sicurezza su Reti a.a. 2001/2002 Sicurezza per accesso remoto EToken Enterprise offre soluzioni "out of the box" per la protezione di Intranet ed Extranet. permette di eseguire un logon sicuro alla VPN di SecuRemote di Checkpoint. Bisogna ricordare solo una password SecuRemote e SecureClient estendono la sicurezza al desktop e laptop.Con SecuRemote e SecureClient i dati sono criptati prima che essi lascino il computer del client.

11 Sicurezza su Reti a.a. 2001/2002 Etoken R2 Comprende il protocollo per lautenticazione DESX a 120 bits. Combina grande sicurezza e semplice implementazione per autenticazione utente, access control, confidenzialità e integrità dei dati. Memorizza e cifra credenziali quali chiavi private, password, certificati digitali, (memoria 16 K o 32 K). Economico e facile da usare. DESX (DES eXtended) è un algoritmo di cifratura che estende il DES a una chiave di 120 bits aggiungendo due operazioni complesse che incrementano sicurezza ed efficienza. Decifrare un messaggio cifrato con il DESX significa trovare la giusta informazione in 2118 operazioni. E stato provato che ciò è matematicamente difficile.

12 Sicurezza su Reti a.a. 2001/2002 Operating systems Windows 98, Windows NT4.0, Windows 2000, Windows ME Certifications & standards PKCS#11 v2.01, CAPI (Microsoft Crypto API), Siemens/Infinion APDU commands PC/SC, X.509v3 certificates, SSLv3, IPSec/IKE PRO Models (by memory size) 16 k & 32k On board security algorithms / processors DES-X 120-bit * Chip security level Secured and encrypted EEPROM memory chip Dimensions 47 x 16 x 8 mm (1.85 x 0.63 x 0.31 inches) Weight 5g Power dissipation 120mW Operating temperature 0 C to 70 C (32 F to 158 F) Storage temperature -40 C to 85 C (-40 F to 185 F) Humidity rating 0-100% without condensation Water resistance certification IP X8 – IEC 529 Connector USB type A (Universal Serial Bus) Casing Hard molded plastic, tamper evident Memory data retention At least 10 years Memory cell rewrites At least 100,000

13 Sicurezza su Reti a.a. 2001/2002 Etoken PRO Fornisce autenticazione doppia. Comprende un chip crittografico RSA in grado di generare la coppia di chiavi simmetriche; il chip Siemens SLE66C, è certificato ITSEC E4. Tiene traccia delle manomissioni ed è resistente allacqua. Fornito di memoria a 16K o 32 K.

14 Sicurezza su Reti a.a. 2001/2002 Operating systems Windows 98, Windows NT4.0, Windows 2000, Windows ME Certifications & standards PKCS#11 v2.01, CAPI (Microsoft Crypto API), Siemens/Infinion APDU commands PC/SC, X.509v3 certificates, SSLv3, IPSec/IKE PRO Models (by memory size) 16 k & 32k On board security algorithms / processors RSA 1024-bit, DES, 3DES (Triple DES), SHA1, (MD5 - optional) Smartcard chip security level Smartcard chip security level ITSEC LE4 Smart card security certification (infinion). Speed RSA 1024 Bit signature approx. 1.0 sec RSA 1024 Bit key generation approx.25 sec Dimensions 47 x 16 x 8 mm (1.85 x 0.63 x 0.31 inches) ISO specification support Support for ISO specifications. Weight 5g Power dissipation 120mW Operating temperature 0 C to 70 C (32 F to 158 F) Storage temperature -40 C to 85 C (-40 F to 185 F) Humidity rating 0-100% without condensation Water resistance certification IP X8 – IEC 529 Connector USB type A (Universal Serial Bus) Casing Hard molded plastic, tamper evident Memory data retention At least 10 years Memory cell rewrites At least 100,000

15 Sicurezza su Reti a.a. 2001/2002

16 CryptAcquireContext CryptGetProvParam CryptCreateHash CryptGenKey CryptHashSessionKey CryptDesrtoyHash CryptDestroyKey CryptEncrypt Funzioni

17 Sicurezza su Reti a.a. 2001/2002 oUsata per acquisire un handle di un particolare contenitore di chiavi allinterno di un particolare CSP.CSP. oRestituisce lhandle che può essere usato per chiamare il CSP selezionato. CryptAcquireContext

18 Sicurezza su Reti a.a. 2001/2002 Specifica i tipi di provider. PROV_RSA_FULL PROV_RSA_SIG PROV_DSS PROV_DSS_DH PROV_SSL Indirizzo della copia dellhandle del CSP CryptAcquireContext: Parametri BOOL WINAPI CryptAcquireContext( *phProv, pszContainer, pszProvider, dwProvType, DWORD dwFlags ); Questo parametro normalmente è settato a ZERO ma alcune applicazioni setteranno uno o più flags.flags. Specifica il servizio crittografico usato.Se il parametro è NULL si userà il provider di default. Nome del contenitore delle chiavi. Il nome è indipendente dal metodo usato per la memorizzazione delle chiavi. NULL se si usa il nome di default.

19 Sicurezza su Reti a.a. 2001/2002 Quando CryptAcquireContext è chiamato,molti CSP richiedono l input al proprio user prima di concedere laccesso alle chiavi private nel contenitore delle chiavi. Flags CRYPT_VERIFY_CONTEXT: Se settato allora lapplicazione non avrà accesso alle chiavi private e il parametro pszContainer deve essere settato a NULL.

20 Sicurezza su Reti a.a. 2001/2002 Flags CRYPT_NEW_KEYSET : Se settato allora un nuovo contenitore di chiavi sarà creato con il nome specificato da pszContainer. Se pszcontainer vale NULL allora il contenitore di chiavi creato avrà il nome di default. CRYPT_MACHINE_KEYSET: Per default le chiavi sono memorizzate nella porzione del registro Hkey_Current_User.Questo flag può essere combinato con tutti gli altri flag indicando che la locazione per la chiave è Hkey_Local_Machine. CRYPT_DELETE_KEYSET: Se settato allora il contenitore di chiavi specificato dalla funzione pszContainer è cancellato.

21 N.B N.B: Quando il contenitore di chiavi viene creato, molti CSP non creano automaticamente nessuna coppia di chiavi publica/privata.Queste chiavi dovranno essere create in un passo successivo con la funzione CryptGenKey.

22 Sicurezza su Reti a.a. 2001/2002 La funzione CryptAcquireContext restituisce: TRUE se ha successo FALSE altrimenti. Questa funzione non prende parametri e restituisce il codice dellultimo errore. Eventuali errori possono essere ritrovati grazie alla funzione GETLASTERROR. FALSE TRUE

23 Sicurezza su Reti a.a. 2001/2002 Cryptographic Service Provider (CSP) Il CSP fornisce una strada sicura per multiple applicazioni per laccesso a servizi crittografici e di firma. Per esempio alcuni CSP richiedono un PIN (Personal Identific Number) prima che una firma digitale è generata dalluser, mentre alcuni richiedono una smart card.

24 Sicurezza su Reti a.a. 2001/2002 CryptGetProvParam Questa funzione recupera i parametri che controllano le operazioni di un CSP. BOOL WINAPI CryptGetProvParam( HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD *pcbData, DWORD dwFlags ); Gestisce il CSP al quale si riferiscono i parametri Numero del parametroNumero del parametro. Può essere scelto tra diversi Puntatore a un buffer che riceve i dati del parametro specificato.La forma di questi dati cambia a seconda del numero di parametro scelto. Puntatore a una variadile che specifica la lunghezza in bytes del buffer puntato da pbData. Quando la funzione termina, la variabile puntata dal parametro pcbData contiene il numero di bytes memorizzati nel buffer. Valori dei flag. A seconda del numero del parametro specificato possono essere settati diversi flags.

25 Sicurezza su Reti a.a. 2001/2002 Numero del parametro PP_CONTAINERNome del contenitore della chiave.Quando questo parametro è specificato, la funzione riempie il buffer puntato da pbData con il nome del contenitore della chiave corrente. PP_ENUMALGSInformazioni sullalgoritmo. Quando questo parametro è specificato, la funzione riempie il buffer puntato da pbData con le informazioni su uno degli algoritmi supportati da CSP. PP_ENUMCONTAINRNome del contenitore della chiave.Quando questo parametro è specificato, la funzione riempie il buffer puntato da pbData con il nome di uno dei contenitori della chiave mantenuto dal CSP. PP_IMPTYPETipi di CSP implementati: CRYPT_IMPL_HARDWARE, CRYPT_IMPL_SOFTWARE, CRYPT_IMPL_MIXED, CRYPT_IMPL_UNKNOWN. PP_NAMENome del CSP. Quando questo parametro è specificato, la funzione riempie il buffer puntato da pbData con il nome del CSP. PP_VERSIONNumero della versione del CSP. Il buffer puntato da pbData conterrà un valore DWORD che indica il numero di versione del CSP.

26 Sicurezza su Reti a.a. 2001/2002 Informazioni sullalgoritmo Quando chiamiamo CryptGetProvParam con il parametro PP_ENUMALGS i dati restituiti nel buffer puntato da pbData sono nella seguente forma: ALG_ID aiAlgid; DWORD dwBits; DWORD dwNameLen; CHAR szName[dwNameLen]; Identificatore dellalgoritmo Numero di bits della chiave usata dallalgoritmo Numero di caratteri del nome dellalgoritmo Zero terminante il nome dellalgoritmo

27 Sicurezza su Reti a.a. 2001/2002 La funzione CryptGetProvParam restituisce: TRUE se ha successo FALSE altrimenti. Eventuali errori possono essere ritrovati grazie alla funzione GetLastError. FALSE TRUE

28 Sicurezza su Reti a.a. 2001/2002 CryptCreateHash La funzione CryptCreateHash è usata per inizializzare lhashing di un flusso di dati. Essa restituisce al chiamante un riferimento ad un aggetto hash CSP.

29 Sicurezza su Reti a.a. 2001/2002 CryptCreateHash: Parametri BOOL WINAPI CryptCreateHash( HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash ); Handle al CSP ottenuto chiamando la funzione CryptAcquireContext. Identificatore dellalgoritmo di hashing Se lalgoritmo per lhashing utilizza una chiave, questa deve essere passata come parametro alla funzione.Se lalgoritmo non richiede una chiave allora questo parametro deve essere zero. Valore del flag. Questo parametro è riservato per usi futuri. Indirizzo al quale la funzione copia il riferimento al un nuovo oggetto hash creato.

30 Sicurezza su Reti a.a. 2001/2002 La funzione CryptCreateHash restituisce: TRUE se ha successo FALSE altrimenti. Eventuali errori possono essere ritrovati grazie alla funzione GetLastError... FALSE TRUE

31 Sicurezza su Reti a.a. 2001/2002 ERROR_INVALID_HANDLE Uno dei parametri specifica un handle non valido. ERROR_INVALID_PARAMETER Uno dei parametri contiene un valore non valido ( puntatore illegale ). ERROR_NOT_ENOUGH_MEMORY Il Sistema Operativo lavora in uno spazio di memoria che non è il suo. NTE_BAD_ALGID Il parametro Algid specifica un algoritmo che non è supportato dal CSP usato. NTE_BAD_FLAGS Il parametro dwFlags non vale zero. NTE_BAD_KEY Un algoritmo su chiave hash (come CALG_MAC) è specificato da pararmetri Algid e hKey che sono entrambi zero o specificano un handle non valido. NTE_NO_MEMORY Il CSP lavora in uno spazio di memoria non suo. GetLastError di CryptCreateHash

32 Sicurezza su Reti a.a. 2001/2002 CryptGenKey Questa funzione genera chiavi crittografiche random per usarle con il modulo CSP. Viene ritornato un handle della chiave che può essere usato per altre funzioni CryptoAPI che lo richiedono. CryptGenKey

33 Sicurezza su Reti a.a. 2001/2002 hProv handle ottenibile tramite la funzione CryptAcquireContext; Algid un identificativo per lalgoritmo con il quale la chiave che si sta generando dovrà essere usata. I valori validi variano a seconda del CSP che si usa; dwFlags indica il tipo di chiave che si va a generare. Il valore può essere 0 oppure si possono settare uno o più (in XOR) dei seguenti flags: CRYPT_EXPORTABLE CRYPT_CREATE_SALT CRYPT_NO_SALT CRYPT_USER_PROTECTED CRYPT_PREGEN CryptGenKey: Parametri

34 Sicurezza su Reti a.a. 2001/2002 CryptGenKey: Parametri hProv handle ottenibile tramite la funzione CryptAquireContext; Algid un identificativo per lalgoritmo con il quale la chiave che si sta generando dovrà essere usata. I valori validi variano a seconda del CSP che si usa; dwFlags indica il tipo di chiave che si va a generare. Il valore può essere 0 oppure si possono settare uno o più (in XOR) dei seguenti flags: CRYPT_EXPORTABLE CRYPT_CREATE_SALT CRYPT_NO_SALT CRYPT_USER_PROTECTED CRYPT_PREGEN CryptExportKey

35 Sicurezza su Reti a.a. 2001/2002 CryptGenKey: Parametri hProv handle ottenibile tramite la funzione CryptAquireContext; Algid un identificativo per lalgoritmo con il quale la chiave che si sta generando dovrà essere usata. I valori validi variano a seconda del CSP che si usa; dwFlags indica il tipo di chiave che si va a generare. Il valore può essere 0 oppure si possono settare uno o più (in XOR) dei seguenti flags: CRYPT_EXPORTABLE CRYPT_CREATE_SALT CRYPT_NO_SALT CRYPT_USER_PROTECTED CRYPT_PREGEN chiavi di sessione chiavi private chiavi pubbliche

36 Sicurezza su Reti a.a. 2001/2002 CryptGenKey: Parametri hProv handle ottenibile tramite la funzione CryptAquireContext; Algid un identificativo per lalgoritmo con il quale la chiave che si sta generando dovrà essere usata. I valori validi variano a seconda del CSP che si usa; dwFlags indica il tipo di chiave che si va a generare. Il valore può essere 0 oppure si possono settare uno o più (in XOR) dei seguenti flags: CRYPT_EXPORTABLE CRYPT_CREATE_SALT CRYPT_NO_SALT CRYPT_USER_PROTECTED CRYPT_PREGEN

37 Sicurezza su Reti a.a. 2001/2002 CryptGenKey: Parametri hProv handle ottenibile tramite la funzione CryptAquireContext; Algid un identificativo per lalgoritmo con il quale la chiave che si sta generando dovrà essere usata. I valori validi variano a seconda del CSP che si usa; dwFlags indica il tipo di chiave che si va a generare. Il valore può essere 0 oppure si possono settare uno o più (in XOR) dei seguenti flags: CRYPT_EXPORTABLE CRYPT_CREATE_SALT CRYPT_NO_SALT CRYPT_USER_PROTECTED CRYPT_PREGEN + info

38 Sicurezza su Reti a.a. 2001/2002 CryptGenKey: Parametri hProv handle ottenibile tramite la funzione CryptAquireContext; Algid un identificativo per lalgoritmo con il quale la chiave che si sta generando dovrà essere usata. I valori validi variano a seconda del CSP che si usa; dwFlags indica il tipo di chiave che si va a generare. Il valore può essere 0 oppure si possono settare uno o più (in XOR) dei seguenti flags: CRYPT_EXPORTABLE CRYPT_CREATE_SALT CRYPT_NO_SALT CRYPT_USER_PROTECTED CRYPT_PREGEN si sta tentando questa azione usando la chiave Dialog box

39 Sicurezza su Reti a.a. 2001/2002 CryptGenKey: Parametri hProv handle ottenibile tramite la funzione CryptAcquireContext; Algid un identificativo per lalgoritmo con il quale la chiave che si sta generando dovrà essere usata. I valori validi variano a seconda del CSP che si usa; dwFlags indica il tipo di chiave che si va a generare. Il valore può essere 0 oppure si possono settare uno o più (in XOR) dei seguenti flags: CRYPT_EXPORTABLE CRYPT_CREATE_SALT CRYPT_NO_SALT CRYPT_USER_PROTECTED CRYPT_PREGEN

40 Sicurezza su Reti a.a. 2001/2002 CryptGenKey: Parametri Questa funzione prende un altro parametro phKey è lindirizzo nel quale la funzione copia lhandle della chiave che si sta generando. Se la funzione ha successo, il valore booleano ritornato da CryptGenKey è TRUE; Se la funzione fallisce, il valore ritornato è FALSE. Per avere ulteriori informazioni riguardo leventuale errore, basta chiamare la funzione GetLastError. TRUE FALSE

41 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptGenKey Questi sono gli errori più comuni restituiti da questa funzione ERROR_INVALID_HANDLE ERROR_INVALID_PARAMETER NTE_BAD_ALGID NTE_BAD_FLAGS NTE_BAD_UID NET_FAIL Nota: gli errori con il prefisso NTE sono generati dal particolare CSP usato. Uno dei parametri specifica un handle non valido Uno dei parametri contiene un valore non valido; spesso indica un puntatore illegale

42 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptGenKey Questi sono gli errori più comuni ritornati da questa funzione ERROR_INVALID_HANDLE ERROR_INVALID_PARAMETER NTE_BAD_ALGID NTE_BAD_FLAGS NTE_BAD_UID NET_FAIL Nota: gli errori con il prefisso NTE sono generati dal particolare CSP usato. Il parametro Algid specifica un algoritmo che il CSP in uso non supporta Il parametro dwFlags contiene un valore non valido

43 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptGenKey Questi sono gli errori più comuni ritornati da questa funzione ERROR_INVALID_HANDLE ERROR_INVALID_PARAMETER NTE_BAD_ALGID NTE_BAD_FLAGS NTE_BAD_UID NET_FAIL Nota: gli errori con il prefisso NTE sono generati dal particolare CSP usato. Il parametro hProv non contiene un handle valido Errore inaspettato

44 Sicurezza su Reti a.a. 2001/2002 if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { printf(error during CryptAcquireContext!\n, GetLastError()); goto done; } Ottenere lhandle con CryptAcquireContext Esempio

45 Sicurezza su Reti a.a. 2001/2002 if(!CryptGenKey(hprov, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) { printf(error during CryptGenKey!\n, GetLastError()); goto done; } Generare la chiave di sessione Esempio if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { printf(error during CryptAcquireContext!\n, GetLastError()); goto done; }

46 Sicurezza su Reti a.a. 2001/2002 Cifrare/decifrare un messaggio // ora è possibile cifrare o decifrare un messaggio usando hkey done: Esempio if(!CryptGenKey(hprov, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) { printf(error during CryptGenKey!\n, GetLastError()); goto done; } if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { printf(error during CryptAcquireContext!\n, GetLastError()); goto done; }

47 Sicurezza su Reti a.a. 2001/2002 Distruggere la chiave if(hKey != 0) CryptDestroyKey(hKey); Esempio if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { printf(error during CryptAcquireContext!\n, GetLastError()); goto done; } if(!CryptGenKey(hprov, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) { printf(error during CryptGenKey!\n, GetLastError()); goto done; } // ora è possibile cifrare o decifrare un messaggio usando hkey done:

48 Sicurezza su Reti a.a. 2001/2002 if(hProv != 0) CryptReleaseContext(hProv, 0); Esempio Rilasciare lhandle // ora è possibile cifrare o decifrare un messaggio usando hkey done: if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { printf(error during CryptAcquireContext!\n, GetLastError()); goto done; } if(!CryptGenKey(hprov, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) { printf(error during CryptGenKey!\n, GetLastError()); goto done; } if(hKey != 0) CryptDestroyKey(hKey);

49 Sicurezza su Reti a.a. 2001/2002 CryptHashSessionKey Questa funzione è usata per computare lhash crittografico su una chiave. I parametri di questa funzione sono: hHash indica un handle ad un oggetto hash; hKey un handle alloggetto key di cui si deve fare lhash; dwFlags i valori flags. Questo parametro è riservato ad usi futuri e dovrebbe sempre essere settato a 0.

50 Sicurezza su Reti a.a. 2001/2002 CryptHashSessionKey La funzione CryptHashSessionKey restituisce un valore booleano : TRUE se la funzione ha successo FALSE altrimenti Anche in questo caso la funzione per ottenere informazioni sulleventuale errore verificatosi utilizza GetLastError. TRUE FALSE

51 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptHashSessionKey Gli errori che si verificano più comunemente sono: ERROR_INVALID_HANDLE ERROR_INVALID_PARAMETER NTE_BAD_ALGID NTE_BAD_FLAGS NTE_BAD_HASH NTE_BAD_HASH_STATE NTE_KEY NTE_BAD_UID NTE_FAIL Lhandle hHash specifica un algoritmo che il corrente CSP non supporta Il parametro dwFlags è DIVERSO da 0 Loggetto hash specificato dal parametro hHash non è valido

52 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptHashSessionKey Gli errori che si verificano più comunemente sono: ERROR_INVALID_HANDLE ERROR_INVALID_PARAMETER NTE_BAD_ALGID NTE_BAD_FLAGS NTE_BAD_HASH NTE_BAD_HASH_STATE NTE_KEY NTE_BAD_UID NTE_FAIL E stato fatto un tentativo per aggiungere dati ad un oggetto hash che è già finito E stato usato un algoritmo per fare lhash della chiave ma la chiave di sessione non è più valida Il contesto CSP specificato alla creazione delloggetto hash non può essere trovato

53 Sicurezza su Reti a.a. 2001/2002 oElimina loggetto hash puntato da un handle oTutti gli oggetti hash dovrebbero essere distrutti alla fine del programma. CryptDestroyHash

54 Sicurezza su Reti a.a. 2001/2002 CryptDestroyHash: Parametri #include BOOL WINAPI CryptDestroyHash ( HCRYPTHASH hHash // in ); Tipo di dato predefinito che rappresenta un puntatore all oggetto hash. Puntatore all oggetto hash da distruggere.

55 Sicurezza su Reti a.a. 2001/2002 Analogamente alle altre, la funzione CryptDestroyHash restituisce: TRUE se ha successo FALSE altrimenti. Eventuali errori possono essere ritrovati grazie alla funzione GETLASTERROR. Questa funzione non prende parametri e restituisce il codice dellultimo errore. TRUE FALSE

56 Sicurezza su Reti a.a. 2001/2002 Codici derrore più comuni: ( I codici derrore preceduti da "NTE" sono generati dal particolare CSP in uso. ) ERROR_BUSY ERROR_INVALID_HANDLE ERROR_INVALID_PARAMETER NTE_BAD_ALGID NTE_BAD_HASH NTE_BAD_UID GetLastError di CryptDestroyHash

57 Sicurezza su Reti a.a. 2001/2002 oQuando un oggetto hash è distrutto, la maggior parte degli CSPs puliranno la memoria nel CSP dove loggetto hash era contenuto. oCi dovrebbe essere una corrispondenza uno-a-uno tra chiamate a CryptCreateHash e CryptDestroyHash. CryptDestroyHash

58 Sicurezza su Reti a.a. 2001/2002 oRilascia lhandle riferito dal parametro hKey oSe lhandle si riferisce ad una chiave di sessione, o a una chiave pubblica che era stata importata nel CSP tramite CryptImportKey, questa funzione distrugge la chiave e libera la memoria che la chiave occupava. oSe lhandle si riferisce ad una coppia chiave pubblica / privata (ottenuta da CryptGetUserKey ), la coppia non è distrutta da questa funzione. – Solo lhandle !!! CryptDestroyKey

59 Sicurezza su Reti a.a. 2001/2002 CryptDestroyKey: Parametri #include BOOL WINAPI CryptDestroyKey ( HCRYPTKEY hKey // in ); typedef unsigned long HCRYPTKEY; Tipo di dato predefinito che rappresenta un puntatore alla chiave. … e chiaramente …

60 Sicurezza su Reti a.a. 2001/2002 Analogamente alle altre, la funzione CryptDestroyKey restituisce: TRUE se ha successo FALSE altrimenti. Ancora una volta, eventuali errori possono essere ritrovati grazie alla funzione GETLASTERROR. MA… TRUE FALSE

61 Sicurezza su Reti a.a. 2001/2002 …In questo caso i codici derrore possibili sono: ( I codici derrore preceduti da "NTE" sono generati dal particolare CSP in uso. ) ERROR_INVALID_HANDLE ERROR_INVALID_PARAMETER NTE_BAD_HASH NTE_BAD_UID GetLastError di CryptDestroyKey

62 Sicurezza su Reti a.a. 2001/2002 CryptEncrypt La funzione di CryptEncrypt è usata per codificare dati. L'algoritmo usato per codificare i dati è designato dalla chiave tenuta dal modulo di CSP il cui riferimento è il parametro di hKey. Importanti cambi sono stati fatti al CryptoAPI per sostenere l interoperabilità di di S/MIME. BOOL WINAPI CryptEncrypt ( HKey di HCRYPTKEY, / / in HHash di HCRYPTHASH, / / in BOOL Final, / / in DwFlags di DWORD, / / in Byte * il pbData, / / in/out DWORD * il pcbData, / / in/out CbBuffer di DWORD / / in );

63 Sicurezza su Reti a.a. 2001/2002 CryptEncrypt: Parametri hKey E una maniglia alla chiave da usare per la cifratura. Si ottiene usando la funzione CryptGenKey. Questa chiave specifica l'algoritmo di cifratura che è usato. hHash E una maniglia a un oggetto di tipo Hash. Se nessun pasticcio sarà fatto, questo parametro deve essere zero. Final Valore Booleano che specifica se questa è l'ultima sezione in una serie che è codificata. VERO se questa è l'ultima serie oppure è solamente bloccata FALSO altrimenti.

64 Sicurezza su Reti a.a. 2001/2002 CryptEncrypt:Parametri dwFlags Questo parametro è riservato per uso futuro e dovrebbe essere sempre zero. pbData Buffer che tiene i dati che verranno codificati. Dopo che la cifratura è stata compiuta, i dati codificati sono messi in questo stesso buffer. La taglia di questo buffer è specificata da cbBuffer. Il numero di byte di dati per essere codificato è specificato da pcbData. Questo parametro può essere Nullo se tutti hanno determinato il numero di byte richiesto per i dati di ritorno.

65 Sicurezza su Reti a.a. 2001/2002 CryptEncrypt:Parametri pcbData E l' indirizzo della lunghezza dei dati.Prima di chiamare questa funzione, il chiamante deve settare tale parametro al numero di byte che dovrebbero essere codificati. Esso conterrà il numero di byte dei dati codificati. Se il buffer specificato da pcbData non è grande abbastanza per tenere i dati, la funzione ritorna il codice di errore di ERROR_MORE_DATA (attraverso GetLastError) e memorizza la taglia di buffer richiesta, in byte, nella variabile puntata da pcbData. Quando una cifrario a blocco è usato, questa lunghezza di dati deve essere un multiplo della taglia del blocco,se questa non è la sezione finale di dati che devono essere codificati e il flag Final è Vero.

66 Sicurezza su Reti a.a. 2001/2002 CryptEncrypt:Parametri cbBuffer Contiene il numero di byte nel buffer di pbData. Se pcbData è Nullo,nessun errore è ritornato, e la funzione immagazzina la taglia dei dati, in byte,nella variabile puntata da pcbData. Questo lascia all applicazione determinare inequivocabilmente la taglia di buffer corretta. Quando una cifrario a blocco è usato, questa lunghezza di dati deve essere un multiplo della taglia del blocco,se questa non è la sezione finale di dati che devono essere codificati e il flag Final è Vero.

67 Sicurezza su Reti a.a. 2001/2002 CryptEncrypt: Parametri Quando un grande ammontare di dati deve essere codificato, può essere fatto in sezioni. Questo viene fatto chiamando ripetutamente CryptEncrypt. Il parametro Final dovrebbe essere messo a Vero sull'ultima chiamata di CryptEncrypt, così il motore di cifratura può finire il processo di cifratura.

68 Sicurezza su Reti a.a. 2001/2002 CryptReleaseContext La funzione CryptReleaseContext è usata per il rilascio di un handle e di un contenitore di chiave da parte di un CSP. Questa potrebbe essere eseguita quando lapplicazione ha finito di usare il CSP. Dopo che questa funzione è chiamata, lhandle CSP specificato dal parametro hProv non sarà valido a lungo. Nè il contenitore di chiave nè alcuna coppia di chiavi sono distrutti da questa funzione. #include BOOL WINAPI CryptReleaseContext (HCRYPTPROVhProv,DWORD dwflags);

69 Sicurezza su Reti a.a. 2001/2002 CryptReleaseContext: Parametri hProv : Questo indica lhandle che lapplicazione ottiene usando la funzione CryptAcquireContext dwFlags : Tale parametro contiene valori flags. Esso normalmente è settato a ZERO.

70 Sicurezza su Reti a.a. 2001/2002 CryptReleaseContext La funzione CryptrReleaseContext ritorna: TRUE se ha successo FALSE altrimenti. Eventuali errori possono essere ritrovati grazie alla funzione GetLastError. TRUE FALSE

71 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptReleaseContext Qui di seguito vi sono elencati i codici degli errori più comunemente ritornati dalla funzione GetLastError. I codici errore introdotti da "NTE" sono generati dal particolare CSP che si sta usando. ERROR_BUSY: Il CSP specificato dal parametro hProv è al momento usato da altri processi. ERROR_INVALID_HANDLE: Uno dei parametri specifica un handle non valido. ERROR_INVALID_PARAMETER: Uno dei parametri contiene un valore non valido ( un puntatore illegale ). NTE_BAD_FLAGS: Il parametro dwFlags non vale zero. NTE_BAD_UID: Il parametro hProv non contiene un handle valido

72 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptReleaseContext Dopo che questa funzione è stata chiamata, la sessione è finita, e tutte le chiavi di sessione e tutti gli oggetti hash, che erano stati creati usando lhandle hProv, diventano non validi. In pratica tali oggetti dovrebbero essere distrutti ( con le funzioni CryptDestroyKey e CryptDestroyHash ) prima che la funzione CryptReleaseContext venga chiamata.

73 Sicurezza su Reti a.a. 2001/2002 CryptDecrypt Tale funzione è usata per decodificare o decriptare dati che erano stati precedentemente criptati usando la funzione CryptEncrypt. Importanti cambiamenti sono stati fatti al CryptoAPI per supportare lS/MIME, che concerne il trattamento dellimpacchettamento dei messaggi. N.B: A causa di alcune importanti leggi francesi, i Microsoft CSPs non possono codificare dati quando il sistema operativo Microsoft® Windows NT® è usato in Francia. Quindi questa funzione fallirà con lerrore NTE_PERM.

74 Sicurezza su Reti a.a. 2001/2002 CryptDecrypt: Codice #include BOOLWINAPI CryptDecrypt( HCRYPTKEYhKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pcbData ); in In/out in In/out

75 Sicurezza su Reti a.a. 2001/2002 CryptDecrypt: Parametri hKey –Un handle per la chiave da usare per la decifratura. Unapplicazione ottiene questo handle usando una di queste due funzioni: CryptGenKey o CryptImportKey. –Questa chiave specifica lalgoritmo di decifratura usato. hHash –Un handle ad un oggetto hash. –Tale parametro è usato solo se lhash di un dato è computato. –Se non si ha nessun hash, il parametro vale zero. Final –Valore Booleano che vale: TRUE se questa è lultima sezione da decifrare FALSE altrimenti

76 Sicurezza su Reti a.a. 2001/2002 CryptDecrypt: Parametri dwFlags –Valori flags.Esso è normalmente settato a zero. pbData –Buffer di mantenimento del dato da decifrare.Dopo che la decifratura è stata eseguita il testo in chiaro è posizionato dietro in questo stesso buffer. –Il numero di byte cifrati in questo buffer è specificato da pcbData. pcbData –Lindirizzo di lunghezza del dato. Quando un cifrario a blocchi è usato,la lunghezza di questo dato deve essere un multiplo della dimensione del blocco,se questa non è la sezione finale del dato da decifrare e il flag Final è TRUE. Prima di chiamare questa funzione, il chiamante setterà questo parametro al numero di bytes da decifrare.Poi ritorna questo indirizzo contenente il numero di bytes del testo in chiaro.

77 Sicurezza su Reti a.a. 2001/2002 CryptDecrypt La funzione CryptrDecrypt ritorna: TRUE TRUE se ha successo FALSE FALSE altrimenti. Eventuali errori possono essere ritrovati grazie alla funzione GetLastError.

78 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptDecrypt Qui di seguito vi sono elencati i codici degli errori più comunemente ritornati dalla funzione GetLastError. I codici errore introdotti da "NTE" sono generati dal particolare CSP che si sta usando. ERROR_INVALID_HANDLE: Uno dei parametri specifica un handle non valido. ERROR_INVALID_PARAMETER: Uno dei parametri contiene un valore non valido(puntatore illegale). NTE_BAD_ALGID: L hKey specifica un algoritmo che questo CSP non supporta. NTE_BAD_DATA: Il dato da decifrare non è valido.

79 Sicurezza su Reti a.a. 2001/2002 NTE_DOUBLE_ENCRYPT: Lapplicazione cerca di decifrare lo stesso dato due volte. NTE_FAIL: La funzione fallisce in modo inaspettato. GetLastError di CryptDecrypt NTE_BAD_FLAGS: Il parametro dwflag non èzero. NTE_BAD_HASH: Il parametro hHash contiene un handle non valido. NTE_BAD_KEY: Il parametro hKey non contiene un handle valido per una chiave. NTE_BAD_LEN: La dimensione del buffer di output è troppo piccola per contenere il testo in chiaro generato. NTE_BAD_UID: Il CSP che era stato specificato quando la chiave è stata creata non può essere trovato.

80 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptDecrypt Se il dato è stato decifrato e simultaneamente ne è stato calcolato il valore hash, un handle alloggetto hash può essere passato nel parametro hHash. Il valore hash sarà aggiornato con il testo in chiaro decifrato. Questa opzione è utile quando si decifra e si verifica la firma contemporaneamente.

81 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptDecrypt Prima di chiamare la funzione CryptDecrypt, lapplicazione deve ottenere un handle per loggetto hash chiamando la funzione CryptCreateHash Dopo che la decifratura è completata, si può: – ottenere il valore hash delloggetto attraverso la CryptGetHashParam, – firmarlo attraverso la CryptSignHash – utilizzarlo per verificare una firma digitale attraverso la CryptVerifySignature. La decifratura di un gran numero di dati può avvenire in sezioni chiamando ripetutamente la funzione CryptDecrypt.

82 Sicurezza su Reti a.a. 2001/2002 GetLastError di CryptDecrypt Il parametro Final deve essere settato a TRUE solo allultima invocazione della CryptDecrypt, cosicchè il processo di decifratura può terminare. Le seguenti azioni sono effettuate quando Final vale TRUE: Se la chiave è un block chiper, il dato sarà esteso a un multiplo della dimensione del blocco del chiper.Per trovare la dimensione del blocco di un chiper si usa CryptGetKeyParam ottenendo il parametro KP_BLOCKLEN della chiave. Se il chiper sta operando in un dato modo, la successiva operazione di CryptDecrypt resetterà il registro feedback del chiper al valore KP_Iv della chiave. Se il chiper è un flusso, la successiva chiamata alla CryptDecrypt resetterà il cipher al suo stato iniziale.

83 Sicurezza su Reti a.a. 2001/2002

84 Esempio Applicativo Lesempio mostrato nelle slide successive ci da dimostrazione di come utilizzare le funzioni analizzate finora. Option Explicit Private Sub cmdRun_Click() Dim ret As Long Dim phProv, phHash, phKey As Long Dim sResult As String ret = CryptAcquireContext(phProv, "eToken Sample", "eToken Base Cryptographic Provider", PROV_RSA_FULL, 0)

85 Sicurezza su Reti a.a. 2001/2002 Esempio Applicativo If ret <> 0 Then sResult = " - Creating a session key and setting the eToken as the provider" Else ret = CryptAcquireContext(phProv, "eToken Sample", "eToken Base Cryptographic Provider", PROV_RSA_FULL, CRYPT_NEWKEYSET) sResult = " - Creating a new key" If ret = 0 Then sResult = " - Acquisition of context failed" End If

86 Sicurezza su Reti a.a. 2001/2002 Esempio Applicativo txtProgress.Text = txtProgress.Text + "CryptAcquireContext()" + sResult + CRLF + CRLF If CryptCreateHash(phProv, CALG_MD5, 0, 0, phHash) = 1 Then sResult = " - An empty hash object has been created" Else sResult = " - Error during CryptBeginHash" End If txtProgress.Text = txtProgress.Text + "CryptAcquireContext()" + sResult + CRLF + CRLF

87 Sicurezza su Reti a.a. 2001/2002 Esempio Applicativo If CryptGenKey(phProv, CALG_DES, CRYPT_EXPORTABLE, phKey) = 1 Then sResult = " - A random session key has been created" Else sResult = " - Error during CryptGenKey" End If txtProgress.Text = txtProgress.Text + "CryptGenKey()" + sResult + CRLF + CRLF If CryptHashSessionKey(phHash, phKey, 0) = 1 Then sResult = " - Session key has been hashed" Else sResult = " - Error during CryptHashSessionKey" End If

88 Sicurezza su Reti a.a. 2001/2002 Esempio Applicativo txtProgress.Text = txtProgress.Text + "CryptHashSessionKey()" + sResult + CRLF + CRLF sResult = " - Hash object has been destroy" txtProgress.Text = txtProgress.Text + "CryptDestroyHash()" + sResult + CRLF + CRLF sResult = " - key object has been destroy" txtProgress.Text = txtProgress.Text + "CryptDestroyKey()" + sResult + CRLF + CRLF sResult = " - Release the CSP" txtProgress.Text = txtProgress.Text + "CryptReleaseContext()" + sResult + CRLF + CRLF End Sub

89 Sicurezza su Reti a.a. 2001/2002

90 CONFIGURAZIONE Document Title eTocx Configuration VBScript sample for eToken Pro Back to eToken Samples main menu In questa parte di codice vengono gestiti eventuali errori

94 Sicurezza su Reti a.a. 2001/2002 CONFIGURAZIONE PASSWORD Document Title eTocx Login Logout VBScript sample for eToken Pro Back to eToken Samples main menu

99 Sicurezza su Reti a.a. 2001/2002 MANIPOLAZIONE FILE BINARI Document Title eTocx File manipulation VBScript sample for eToken Pro

107 Sicurezza su Reti a.a. 2001/2002 MANIPOLAZIONE FILE BINARI Back to eToken Samples main menu

108 Sicurezza su Reti a.a. 2001/2002


Scaricare ppt "Sicurezza su Reti a.a. 2001/2002 Sistemi di elaborazione delle informazioni: Sicurezza su reti Seminario a cura di: Izzo Vincenzo matr. 056/100086 Roberto."

Presentazioni simili


Annunci Google