Sicurezza su Reti a.a. 2001/2002 Sistemi di elaborazione delle informazioni: Sicurezza su reti...

103
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 Maria Grazia matr. 056/100040 Rago Sabina matr. 056/000999 Petito Simona matr.056/100597 Torre Vittorio matr.

Transcript of Sicurezza su Reti a.a. 2001/2002 Sistemi di elaborazione delle informazioni: Sicurezza su reti...

Page 1: 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.

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 Maria Grazia matr.

056/100040 Rago Sabina matr. 056/000999 Petito Simona matr.056/100597 Torre Vittorio matr.

Page 2: 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.

Sicurezza su Reti a.a. 2001/2002

ETOKEN USB: IMPIEGHI E SVILUPPO DI

APPLICAZIONI

Page 3: 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.

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

Page 4: 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.

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

Page 5: 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.

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

Page 6: 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.

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

Page 7: 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.

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 dell’utente sul

server Web

- autenticazione del server Web

Page 8: 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.

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.

Page 9: 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.

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.

Page 10: 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.

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.

Page 11: 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.

Sicurezza su Reti a.a. 2001/2002

Etoken R2

• Comprende il protocollo per l’autenticazione 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.

Page 12: 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.

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

Page 13: 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.

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 all’acqua.

• Fornito di memoria a 16K o 32 K.

Page 14: 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.

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 7816 1-4 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

Page 15: 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.

Sicurezza su Reti a.a. 2001/2002

Page 16: 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.

Sicurezza su Reti a.a. 2001/2002

CryptAcquireContext CryptGetProvParam CryptCreateHash CryptGenKey CryptHashSessionKey CryptDesrtoyHash CryptDestroyKey CryptEncrypt

Funzioni

Page 17: 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.

Sicurezza su Reti a.a. 2001/2002

o Usata per acquisire un handle di un particolare contenitore di chiavi all’interno di un particolare CSP.

o Restituisce l’handle che può essere usato per chiamare il CSP selezionato.

CryptAcquireContext

Page 18: 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.

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 dell’handle 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.

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.

Page 19: 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.

Sicurezza su Reti a.a. 2001/2002

Quando CryptAcquireContext è chiamato,molti CSP richiedono l’ input al proprio user prima di concedere l’accesso alle chiavi private nel contenitore delle chiavi.

Flags CRYPT_VERIFY_CONTEXT: Se settato allora l’applicazione non avrà

accesso alle chiavi private e il parametro pszContainer deve essere settato a NULL.

Page 20: 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.

Sicurezza su Reti a.a. 2001/2002

FlagsCRYPT_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.

Page 21: 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.

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

Page 22: 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.

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 dell’ultimo errore.

Eventuali errori possono essere ritrovati grazie alla funzioneGETLASTERROR.

FALSETRUE

Page 23: 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.

Sicurezza su Reti a.a. 2001/2002

CryptGetProvParamQuesta 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 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.

Page 24: 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.

Sicurezza su Reti a.a. 2001/2002

Numero del parametroPP_CONTAINER Nome 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_ENUMALGS Informazioni sull’algoritmo. Quando questo parametro è specificato, la funzione riempie il buffer puntato da pbData con le informazioni su uno degli algoritmi supportati da CSP.

PP_ENUMCONTAINR Nome 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_IMPTYPE Tipi di CSP implementati: CRYPT_IMPL_HARDWARE, CRYPT_IMPL_SOFTWARE, CRYPT_IMPL_MIXED, CRYPT_IMPL_UNKNOWN.

PP_NAME Nome del CSP. Quando questo parametro è specificato, la funzione riempie il buffer puntato da pbData con il nome del CSP.

PP_VERSION Numero della versione del CSP. Il buffer puntato da pbData conterrà un valore DWORD che indica il numero di versione del CSP.

Page 25: 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.

Sicurezza su Reti a.a. 2001/2002

Informazioni sull’algoritmoQuando 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 dell’algoritmo Numero di bits della chiave

usata dall’algoritmo Numero di caratteri del nome dell’algoritmo

Zero terminante il nome dell’algoritmo

Page 26: 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.

Sicurezza su Reti a.a. 2001/2002

La funzione CryptGetProvParam restituisce:

TRUE se ha successo FALSE altrimenti.

Eventuali errori possono essere ritrovati grazie alla funzioneGetLastError.

FALSETRUE

Page 27: 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.

Sicurezza su Reti a.a. 2001/2002

CryptCreateHash

• La funzione CryptCreateHash è usata per inizializzare l’hashing di un flusso di dati.

• Essa restituisce al chiamante un riferimento ad un aggetto hash CSP.

Page 28: 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.

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 dell’algoritmo di hashing

Se l’algoritmo per l’hashing utilizza una chiave, questa deve essere passata come parametro alla funzione.Se l’algoritmo 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.

Page 29: 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.

Sicurezza su Reti a.a. 2001/2002

La funzione CryptCreateHash restituisce:

TRUE se ha successo FALSE altrimenti.

Eventuali errori possono essere ritrovati grazie alla funzioneGetLastError..

FALSETRUE

Page 30: 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.

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 ospecificano un handle non valido. NTE_NO_MEMORY Il CSP lavora in uno spazio di memoria non suo.

GetLastError di CryptCreateHash

Page 31: 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.

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

Page 32: 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.

Sicurezza su Reti a.a. 2001/2002

hProv handle ottenibile tramite la funzione CryptAcquireContext;

Algid un identificativo per l’algoritmo 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

Page 33: 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.

Sicurezza su Reti a.a. 2001/2002

CryptGenKey: ParametrihProv handle ottenibile tramite la funzione CryptAquireContext;

Algid un identificativo per l’algoritmo 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_PREGENCryptExportKey

Page 34: 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.

Sicurezza su Reti a.a. 2001/2002

CryptGenKey: ParametrihProv handle ottenibile tramite la funzione CryptAquireContext;

Algid un identificativo per l’algoritmo 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_PREGENchiavi di sessione

chiavi private

chiavi pubbliche

Page 35: 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.

Sicurezza su Reti a.a. 2001/2002

CryptGenKey: ParametrihProv handle ottenibile tramite la funzione CryptAquireContext;

Algid un identificativo per l’algoritmo 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

Page 36: 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.

Sicurezza su Reti a.a. 2001/2002

CryptGenKey: ParametrihProv handle ottenibile tramite la funzione CryptAquireContext;

Algid un identificativo per l’algoritmo 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

Page 37: 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.

Sicurezza su Reti a.a. 2001/2002

CryptGenKey: ParametrihProv handle ottenibile tramite la funzione CryptAquireContext;

Algid un identificativo per l’algoritmo 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_PREGENsi sta tentando “questa azione” usando la chiave

Dialog box

Page 38: 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.

Sicurezza su Reti a.a. 2001/2002

CryptGenKey: ParametrihProv handle ottenibile tramite la funzione CryptAcquireContext;

Algid un identificativo per l’algoritmo 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

Page 39: 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.

Sicurezza su Reti a.a. 2001/2002

CryptGenKey: ParametriQuesta funzione prende un altro parametro

phKey è l’indirizzo nel quale la funzione copia l’handle 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 l’eventuale errore, basta chiamare la funzione GetLastError.

TRUE

FALSE

Page 40: 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.

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 l’handle con CryptAcquireContext

Esempio

Page 41: 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.

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;

}

Page 42: 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.

Sicurezza su Reti a.a. 2001/2002

Cifrare/decifrare un messaggio

// ora è possibile cifrare o decifrare un messaggio usando hkeydone:

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;

}

Page 43: 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.

Sicurezza su Reti a.a. 2001/2002

Distruggere la chiaveif(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 hkeydone:

Page 44: 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.

Sicurezza su Reti a.a. 2001/2002if(hProv != 0) CryptReleaseContext(hProv, 0);

Esempio

Rilasciare l’handle

// ora è possibile cifrare o decifrare un messaggio usando hkeydone:

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);

Page 45: 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.

Sicurezza su Reti a.a. 2001/2002

CryptHashSessionKey

Questa funzione è usata per computare l’hash crittografico su una chiave.

I parametri di questa funzione sono:

hHash indica un handle ad un oggetto hash;

hKey un handle all’oggetto key di cui si deve fare l’hash;

dwFlags i valori flags. Questo parametro è riservato ad usi futuri e dovrebbe sempre essere settato a 0.

Page 46: 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.

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 sull’eventuale errore verificatosi utilizza GetLastError.

TRUE

FALSE

Page 47: 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.

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

L’handle hHash specifica un algoritmo che il corrente CSP non supporta

Il parametro dwFlags è DIVERSO da 0

L’oggetto hash specificato dal parametro hHash non è valido

Page 48: 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.

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 l’hash della chiave ma la chiave di sessione non è più valida

Il contesto CSP specificato alla creazione dell’oggetto hash non può essere trovato

Page 49: 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.

Sicurezza su Reti a.a. 2001/2002

o Elimina l’oggetto hash puntato da un handle

o Tutti gli oggetti hash dovrebbero essere distrutti alla fine del programma.

CryptDestroyHash

Page 50: 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.

Sicurezza su Reti a.a. 2001/2002

CryptDestroyHash: Parametri

#include <wincrypt.h>

BOOL WINAPI CryptDestroyHash (

HCRYPTHASH hHash // in

);

Tipo di dato predefinito che rappresenta un puntatore all’ oggetto hash.

Puntatore all’ oggetto hash da distruggere.

Page 51: 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.

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 funzioneGETLASTERROR.

Questa funzione non prende parametri e restituisce il codice dell’ultimo errore.

TRUE

FALSE

Page 52: 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.

Sicurezza su Reti a.a. 2001/2002

o Quando un oggetto hash è distrutto, la maggior parte degli CSPs puliranno la memoria nel CSP dove l’oggetto hash era contenuto.

o Ci dovrebbe essere una corrispondenza uno-a-uno tra chiamate a CryptCreateHash e CryptDestroyHash.

CryptDestroyHash

Page 53: 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.

Sicurezza su Reti a.a. 2001/2002

o Rilascia l’handle riferito dal parametro hKey

o Se l’handle 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.

o Se l’handle si riferisce ad una coppia chiave pubblica / privata (ottenuta da CryptGetUserKey ), la coppia non è distrutta da questa funzione. – Solo l’handle !!!

CryptDestroyKey

Page 54: 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.

Sicurezza su Reti a.a. 2001/2002

CryptDestroyKey: Parametri

#include <wincrypt.h>

BOOL WINAPI CryptDestroyKey (

HCRYPTKEY hKey // in

);typedef unsigned long HCRYPTKEY;

Tipo di dato predefinito che rappresenta un puntatore alla

chiave.

… e chiaramente …

Page 55: 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.

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

Page 56: 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.

Sicurezza su Reti a.a. 2001/2002

…In questo caso i codici d’errore possibili sono:

( I codici d’errore 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

Page 57: 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.

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 e-mail 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

);

Page 58: 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.

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.

Page 59: 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.

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.

Page 60: 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.

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 dovrebberoessere 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 deveessere un multiplo della taglia del blocco,se questa non è la sezione finaledi dati che devono essere codificati e il flag Final è Vero.

Page 61: 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.

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 deveessere un multiplo della taglia del blocco,se questa non è la sezione finaledi dati che devono essere codificati e il flag Final è Vero.

Page 62: 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.

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.

Page 63: 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.

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 l’applicazione ha finito di usare il CSP. Dopo che questa funzione è chiamata, l’handle 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 <wincrypt.h>BOOL WINAPI CryptReleaseContext (HCRYPTPROVhProv,DWORD

dwflags);

Page 64: 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.

Sicurezza su Reti a.a. 2001/2002

CryptReleaseContext: Parametri

• hProv :

Questo indica l’handle che l’applicazione ottiene usando la funzione CryptAcquireContext <capifunc_0wvo.htm>

• dwFlags :

Tale parametro contiene valori flags. Esso normalmente è settato a ZERO.

Page 65: 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.

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 funzioneGetLastError.

TRUE

FALSE

Page 66: 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.

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

Page 67: 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.

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 l’handle hProv, diventano non validi.

• In pratica tali oggetti dovrebbero essere distrutti

( con le funzioni CryptDestroyKey <capifunc_22ih.htm> e CryptDestroyHash <capifunc_5960.htm> )

prima che la funzione CryptReleaseContext venga chiamata.

Page 68: 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.

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 <capifunc_9tdg.htm> .

• Importanti cambiamenti sono stati fatti al CryptoAPI per supportare l’S/MIME, che concerne il trattamento dell’impacchettamento 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 l’errore NTE_PERM.

Page 69: 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.

Sicurezza su Reti a.a. 2001/2002

CryptDecrypt: Codice

#include <wincrypt.h>

BOOLWINAPI CryptDecrypt( HCRYPTKEYhKey,

HCRYPTHASH hHash,

BOOL Final,

DWORD dwFlags,

BYTE *pbData,

DWORD *pcbData );

in

In/out

in

inin

In/out

Page 70: 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.

Sicurezza su Reti a.a. 2001/2002

CryptDecrypt: Parametri• hKey

– Un handle per la chiave da usare per la decifratura. Un’applicazione ottiene questo handle usando una di queste due funzioni: CryptGenKey <capifunc_4ptl.htm> o CryptImportKey <capifunc_5np5.htm> .

– Questa chiave specifica l’algoritmo di decifratura usato.• hHash

– Un handle ad un oggetto hash.– Tale parametro è usato solo se l’hash di un dato è computato.– Se non si ha nessun hash, il parametro vale zero.

• Final – Valore Booleano che vale:

TRUE se questa è l’ultima sezione da decifrare

FALSE altrimenti

Page 71: 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.

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

– L’indirizzo 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.

Page 72: 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.

Sicurezza su Reti a.a. 2001/2002

CryptDecrypt

La funzione CryptrDecrypt ritorna:

TRUE

TRUE se ha successoFALSE

FALSE altrimenti.

Eventuali errori possono essere ritrovati grazie alla funzione

GetLastError.

Page 73: 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.

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.

Page 74: 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.

Sicurezza su Reti a.a. 2001/2002

NTE_DOUBLE_ENCRYPT: L’applicazione 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.

Page 75: 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.

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 all’oggetto 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.

Page 76: 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.

Sicurezza su Reti a.a. 2001/2002

GetLastError di CryptDecrypt

• Prima di chiamare la funzione CryptDecrypt, l’applicazione deve ottenere un handle per l’oggetto hash chiamando la funzione CryptCreateHash

• Dopo che la decifratura è completata, si può:– ottenere il valore hash dell’oggetto 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.

Page 77: 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.

Sicurezza su Reti a.a. 2001/2002

GetLastError di CryptDecrypt

Il parametro Final deve essere settato a TRUE solo all’ultima 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.

Page 78: 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.

Sicurezza su Reti a.a. 2001/2002

Page 79: 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.

Sicurezza su Reti a.a. 2001/2002

Esempio Applicativo

L’esempio 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)

Page 80: 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.

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

• End If

Page 81: 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.

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

Page 82: 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.

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

Page 83: 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.

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

Page 84: 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.

Sicurezza su Reti a.a. 2001/2002

Page 85: 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.

Sicurezza su Reti a.a. 2001/2002

CONFIGURAZIONE

<HTML><HEAD><META NAME="GENERATOR" Content="Microsoft Developer

Studio"><META HTTP-EQUIV="Content-Type" content="text/html;"><TITLE>Document Title</TITLE></HEAD><BODY><h2> eTocx Configuration VBScript sample for eToken Pro</h2> <SCRIPT LANGUAGE="VBScript"> <!-- Dim tokenDim conf

Page 86: 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.

Sicurezza su Reti a.a. 2001/2002

CONFIGURAZIONEOn Error Resume Next set token =CreateObject("eTocx.eTokenPro") document.write "<br>Attaching to reader <b>AKS ifdh 0</b>"token.attach "AKS ifdh 0" If Err.Number = 0 Then document.write "<br>Locking token..." token.lock  If Err.Number = 0 Then document.write "<br>Getting configuration..." set conf = token.getconf 

Questo codice avvia l'applicazione creando l'oggetto Token PRO. È quindi possibile fare riferimento all'oggetto nel codice utilizzando la variabile oggetto definita. Nell'esempio seguente, la variabile oggetto viene utilizzata per accedere alle proprietà e ai metodi del nuovo oggetto Token PRO.

Rappresenta la pagina corrente nell'Editor HTML.

Collega l’oggetto token alla porta USB.

Setta la variabile conf alla configurazione dell’ e-Token

In tal modo si prende possesso della risorsa e-Token

Page 87: 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.

Sicurezza su Reti a.a. 2001/2002

CONFIGURAZIONE

If Err.Number = 0 Then document.write "<br>Token ID..." document.write conf.tokenId  document.write "<br>Token color..." document.write conf.color End If  document.write "<br>Unlocking token..." token.unlock End If  document.write "<br>Detaching from token..." token.detachEnd If

Stampa a video nella pagina HTML l’id dell’ e-Token

Stampa a video il colore dell’e-Token.

Rilascia la risorsa e-Token.

Chiude definitivamente l’ e-Token

Page 88: 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.

Sicurezza su Reti a.a. 2001/2002

CONFIGURAZIONE' Error HandlingIf Err.Number <> 0 Then MsgBox "Error occured (0x" & Hex(Err.Number) & ") description: " &

Err.Description, vbOKOnly + vbExclamation, "Runtime Error" Err.Clear ' Clear the error.End If set token = Nothingset conf = Nothing--></SCRIPT> <BR><BR><a href = etoken.htm>Back to eToken Samples main menu</a> </BODY></HTML>

In questa parte di codice vengono gestiti eventuali errori

Page 89: 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.

Sicurezza su Reti a.a. 2001/2002

CONFIGURAZIONE PASSWORD

<HTML>

<HEAD>

<META NAME="GENERATOR" Content="Microsoft Developer Studio">

<META HTTP-EQUIV="Content-Type" content="text/html;">

<TITLE>Document Title</TITLE>

</HEAD>

<BODY>

<h2> eTocx Login Logout VBScript sample for eToken Pro</h2>

 

<SCRIPT LANGUAGE="VBScript">

<!--

Dim ba

Dim token

Page 90: 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.

Sicurezza su Reti a.a. 2001/2002

CONFIGURAZIONE PASSWORD

On Error Resume Next set ba = CreateObject("eTocx.ByteArray")set token =CreateObject("eTocx.eTokenPro") document.write "<br>Attaching to reader <b>AKS ifdh 0</b>"token.attach "AKS ifdh 0" If Err.Number = 0 Then document.write "<br>Locking token..." token.lock  If Err.Number = 0 Then document.write "<br>Logging in with password 1234567890..." ba.create_bstr "1234567890" token.login ba 

Si creano due oggetti: un e_Token PRO un array di byte

Si inserisce la stringa 1234567890 nella variabile ba.

Si effettua un login nell’e-Token con la stringa contenuta in ba.

Page 91: 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.

Sicurezza su Reti a.a. 2001/2002

CONFIGURAZIONE PASSWORD

If Err.Number = 0 Then document.write "<br>Changing password to 1111..." ba.create_bstr "1111" token.changePassword ba  If Err.Number = 0 Then document.write "<br>Logging in with password 1111..." ba.create_bstr "1111" token.login ba  If Err.Number = 0 Then document.write "<br>Changing password back to 1234567890..." ba.create_bstr "1234567890" End If 

Cambia la password dell’e-Token con quella contenuta in ba.

Page 92: 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.

Sicurezza su Reti a.a. 2001/2002

CONFIGURAZIONE PASSWORD

token.changePassword ba End If  document.write "<br>Logging out..." token.logout End If  document.write "<br>Unlocking token..." token.unlock End If  document.write "<br>Detaching from token..." token.detachEnd If

Effettua il logout dell’ e-Token.

Page 93: 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.

Sicurezza su Reti a.a. 2001/2002

CONFIGURAZIONE PASSWORD

' Error HandlingIf Err.Number <> 0 Then MsgBox "Error occured (0x" & Hex(Err.Number) & ") description: " &

Err.Description, vbOKOnly + vbExclamation, "Runtime Error" Err.Clear ' Clear the error.End If set token = Nothingset ba = Nothing--></SCRIPT> <BR><BR><a href = etoken.htm>Back to eToken Samples main menu</a> </BODY></HTML>

Page 94: 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.

Sicurezza su Reti a.a. 2001/2002

MANIPOLAZIONE FILE BINARI

<HTML>

<HEAD>

<META NAME="GENERATOR" Content="Microsoft Developer Studio">

<META HTTP-EQUIV="Content-Type" content="text/html;">

<TITLE>Document Title</TITLE>

</HEAD>

<BODY>

<h2> eTocx File manipulation VBScript sample for eToken Pro</h2>

 

<SCRIPT LANGUAGE="VBScript">

<!--

Page 95: 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.

Sicurezza su Reti a.a. 2001/2002

MANIPOLAZIONE FILE BINARI' Print an arraysub printarray(a)

For i = 0 To a.length - 1 document.write a.get(i)," "Next

end sub sub printarrayStr(a)

For i = 0 To a.length - 1 Dim x x = Chr(a.get(i))

document.write x, " "Next

end sub Dim baDim tokenDim dataRead

Questa funzione,tramite un ciclo for, stampa a video il contenuto dell’array a.

Questa funzione,tramite un ciclo for, stampa a video il contenuto dell’array a trasformandolo in una stringa di caratteri utilizzando la funzione Chr()

Page 96: 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.

Sicurezza su Reti a.a. 2001/2002

MANIPOLAZIONE FILE BINARI

On Error Resume Nextset ba = CreateObject("eTocx.ByteArray")set token = CreateObject("eTocx.eTokenPro") document.write "<br>Attaching to reader <b>AKS ifdh 0</b>"token.attach "AKS ifdh 0"

If Err.Number = 0 Then document.write "<br>Locking token..." token.lock  If Err.Number = 0 Then document.write "<br>Logging in with password 1234567890..." ba.create_bstr "1234567890" token.login ba

Page 97: 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.

Sicurezza su Reti a.a. 2001/2002

MANIPOLAZIONE FILE BINARI

If Err.Number = 0 Then

document.write "<br>Checking if file 3f00/6666/0001 exists..."

if token.isFileExist("3f0066660001") Then

document.write "<br>Deleting file 3f00/6666/0001..."

token.del "3f0066660001"

End If

 

If Err.Number = 0 Then

document.write "<br>Creating a public binary EF file 3f00/6666/0001..."

token.createBinaryFile "3f0066660001", 100, 0

 

Il file con il nome indicato tra “” viene cancellato.

Effettua un controllo sull’esistenza di un file nell’e-Token.

Crea un file binario con il nome indicato tra apici……….

Page 98: 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.

Sicurezza su Reti a.a. 2001/2002

MANIPOLAZIONE FILE BINARI

If Err.Number = 0 Then document.write "<br>Getting directory contents..." Dim children set children = token.dir("3f006666")

If Err.Number = 0 Then Do Dim m m = children.next if m <> "" Then document.write "<BR>", m End If Loop Until m = "" document.write "<BR>" 

Crea una directory con il nome indicato tra “”.

Page 99: 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.

Sicurezza su Reti a.a. 2001/2002

MANIPOLAZIONE FILE BINARI

document.write "<br>Writing the file..." ba.create_bstr

"1234567890123456789012345678901234567890123456789012345678" token.writeBinaryFile "3f0066660001",0,ba

If Err.Number = 0 Then document.write "<br>Reading the file..." document.write"<br> data: " set dataRead = token.readBinaryFile ("3f0066660001", 0, 30)  If Err.Number = 0 Then printarrayStr dataRead End If End If End If

Si effetua una scrittura nel file binario della variabile ba.

Si effettua una lettura nel file binario.

Page 100: 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.

Sicurezza su Reti a.a. 2001/2002

MANIPOLAZIONE FILE BINARI

document.write "<br>Deleting file..." token.del "3f0066660001" End If End If  document.write "<br>Logging out..." token.logout End If  document.write "<br>Unlocking token..." token.unlock End If  document.write "<br>Detaching from token..." token.detachEnd If

Page 101: 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.

Sicurezza su Reti a.a. 2001/2002

MANIPOLAZIONE FILE BINARI

' Error Handling

If Err.Number <> 0 Then

MsgBox "Error occured (0x" & Hex(Err.Number) & ") description: " & Err.Description, vbOKOnly + vbExclamation, "Runtime Error"

Err.Clear ' Clear the error.

End If

 

set token = Nothing

set ba = Nothing

-->

</SCRIPT>

 

Page 102: 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.

Sicurezza su Reti a.a. 2001/2002

MANIPOLAZIONE FILE BINARI

<BR><BR>

<a href = etoken.htm>Back to eToken Samples main menu</a>

 

</BODY>

</HTML>

Page 103: 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.

Sicurezza su Reti a.a. 2001/2002