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. Sicurezza su Reti a.a. 2001/2002 ETOKEN USB: IMPIEGHI E SVILUPPO DI APPLICAZIONI Sicurezza su Reti a.a. 2001/2002 • Cos’è un Etoken? • A cosa serve? • E-Token R2 • E-Token PRO • Funzioni in VB • Esempi applicativi • Programmazione in VB e VBScript Sommario 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. • Si basa sulla facilità d'uso e sulla estrema funzionalità delle porte Universal Serial Bus (USB). • Non richiede alcuna ulteriore apparecchiatura per il suo utilizzo. VANTAGGI - eliminazione costi - massimizzazione facilità d'uso - sicurezza Sicurezza su Reti a.a. 2001/2002 Etoken: cos’è? • 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. • Crittografa informazioni • Custodisce in un dispositivo USB della dimensione di una chiave: § chiavi private § password § certificati di firme digitali Sicurezza su Reti a.a. 2001/2002 Etoken: a cosa serve? Offre soluzioni per : Autenticazione utenti Web Access Control Applicazioni PKI portabili e salvataggio certificati digitali Sicurezza per accesso remoto
29
Embed
Sommario Etoken: cos’è?ads/corso-security/www/CORSO-0102/eTokenus… · • A cosa serve? • E-Token R2 • E-Token PRO • Funzioni in VB • Esempi applicativi • Programmazione
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
Sicurezza su Reti a.a. 2001/2002
Sistemi di elaborazione delle informazioni:Sicurezza su reti
Seminario a cura di:Izzo Vincenzo matr. 056/100086Roberto Maria Grazia matr. 056/100040Rago Sabina matr. 056/000999Petito Simona matr. 056/100597Torre Vittorio matr.
Sicurezza su Reti a.a. 2001/2002
ETOKEN USB: IMPIEGHI E SVILUPPO DI
APPLICAZIONI
Sicurezza su Reti a.a. 2001/2002
• Cos’è un Etoken?
• A cosa serve?
• E-Token R2
• E-Token PRO
• Funzioni in VB
• Esempi applicativi
• Programmazione in VB e VBScript
Sommario
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. • Si basa sulla facilità d'uso e sulla estrema
funzionalità delle porte Universal Serial Bus (USB).
• Non richiede alcuna ulteriore apparecchiatura per il suo utilizzo.
Etoken: cos’è?• 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.
• Crittografa informazioni• Custodisce in un dispositivo USB
della dimensione di una chiave: § chiavi private§ password § certificati di firme digitali
Sicurezza su Reti a.a. 2001/2002
Etoken: a cosa serve?
Offre soluzioni per :Ø Autenticazione utentiØ Web Access ControlØ Applicazioni PKI portabili e salvataggio certificati digitaliØ Sicurezza per accesso remoto
2
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:ü Qualcosa che l’utente conosce
(password o passphrase);ü Qualcosa che l’utente possiede
(eToken)
Sicurezza su Reti a.a. 2001/2002
Web Access Control
• Offre un'elevata sicurezza hardware alle società che effettuano transazioni finanziarie, legali o commerciali tramite Internet e la cui integrità deve essere garantita.
Sicurezza su Reti a.a. 2001/2002
Applicazioni PKI
• Gli utenti di applicazioni PKI possono: ü salvare a bordo di eToken le credenziali privateü creare un ambiente applicativo sicuro ü facilitarne notevolmente l'utilizzo.
Sicurezza su Reti a.a. 2001/2002
Sicurezza per accesso remotoOFFRE
soluzioni "out of the box" per la protezione di Intranet ed Extranet.
PERMETTEdi eseguire un logon sicuro alla VPN di SecuRemote di Checkpoint.
Bisogna ricordare solo una password
Sicurezza su Reti a.a. 2001/2002
Sicurezza per accesso remotoOFFRE
soluzioni "out of the box" per la protezione di Intranet ed Extranet.
PERMETTEdi 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.
Sicurezza su Reti a.a. 2001/2002
Etoken R2• Combina grande sicurezza e semplice implementazione per
autenticazione utente, access control, confidenzialità e integrità dei dati.
• Comprende il protocollo per l’autenticazione DESX a 120 bits.• Memorizza e cifra credenziali quali chiavi private, password,
certificati digitali. • Memoria 16 K o 32 K.• Economico e facile da usare.
3
Sicurezza su Reti a.a. 2001/2002
Etoken R2• Combina grande sicurezza e semplice implementazione per
autenticazione utente, access control, confidenzialità e integrità dei dati.
• Comprende il protocollo per l’autenticazione DESX a 120 bits.• 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 cif rato
con il DESX significa trovare la giusta informazione in 2118 ope razioni.
E’ stato provato che ciò è matematicamente difficile.
Sicurezza su Reti a.a. 2001/2002At least 100,000Memory cell rewrites
At least 10 yearsMemory data retention
Hard molded plastic, tamper evidentCasing
USB type A (Universal Serial Bus)Connector
IP X8 – IEC 529Water resistance certification
0-100% without condensationHumidity rating
-40 C to 85 C (-40 F to 185 F)Storage temperature
0 C to 70 C (32 F to 158 F)Operating temperature
120mWPower dissipation
5gWeight
47 x 16 x 8 mm (1.85 x 0.63 x 0.31 inches)Dimensions
Secured and encrypted EEPROM memory chipChip security level
Questo parametro normalmente è settato a ZERO ma alcune
applicazioni setteranno uno o più flags.
5
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.
FlagsCRYPT_VERIFY_CONTEXT : Se settato l’applicazione non avrà accesso alle chiavi private. Il parametro pszContainer deve essere settato a NULL.
Sicurezza su Reti a.a. 2001/2002
FlagsCRYPT_NEW_KEYSET : Se settato 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 il contenitore di chiavi specificato dalla funzione pszContainer sarà cancellato.
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.
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 funzione
GETLASTERROR
FALSETRUE
Sicurezza su Reti a.a. 2001/2002
• Moduli indipendenti che eseguono il reale lavoro crittografico.
• Scritti per essere completamente indipendenti da una particolare applicazione
• Una data applicazione potrà utilizzare una moltitudine di CSP.
Cryptographic Service Provider(CSP)
Sicurezza su Reti a.a. 2001/2002
CryptGetProvParam: Parametri
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
);
Handle al CSP al quale si riferiscono i
parametri
6
Sicurezza su Reti a.a. 2001/2002
CryptGetProvParam: Parametri
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
);
Numero del parametro. Può essere scelto tra diversi.
Sicurezza su Reti a.a. 2001/2002
CryptGetProvParam: Parametri
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
);
Puntatore a un buffer che riceve i dati del parametro specificato.La forma di
questi dati cambia a seconda del numero di parametro scelto.
Sicurezza su Reti a.a. 2001/2002
CryptGetProvParam: Parametri
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
);
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.
Sicurezza su Reti a.a. 2001/2002
CryptGetProvParam: Parametri
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
);
Valori dei flag. A seconda del numero del parametro specificato possono
essere settati diversi flags.
Sicurezza su Reti a.a. 2001/2002
Numero del parametro
Numero della versione del CSP. Il buffer puntato da pbData conterràun valore DWORD che indica il numero di versione del CSP.
PP_VERSION
Nome del CSP. Quando questo parametro è specificato, la funzione riempie il buffer puntato da pbData con il nome del CSP.
PP_NAME
Tipi di CSP implementati: CRYPT_IMPL_HARDWARE, CRYPT_IMPL_SOFTWARE, CRYPT_IMPL_MIXED, CRYPT_IMPL_UNKNOWN.
PP_IMPTYPE
Nomi dei contenitori 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_ENUMCONTAINER
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_ENUMALGS
Nome del contenitore della chiave.Quando questo parametro èspecificato, la funzione riempie il buffer puntato da pbData con il nome del contenitore corrente della chiave.
PP_CONTAINER
Sicurezza su Reti a.a. 2001/2002
Informazioni sull’algoritmoQuando chiamiamo CryptGetProvParam con il parametro PP_ENUMALGS i dati restituiti nel buffer puntato da pbDatasono nella seguente forma:
ALG_ID aiAlgid;
DWORD dwBits;
DWORD dwNameLen;
CHAR szName[dwNameLen];
Identificatoredell’algoritmo.Numero di bits della chiave usata dall’algoritmo.Numero di caratteri del nome dell’algoritmo.
Zero terminante il nome dell’algoritmo.
7
Sicurezza su Reti a.a. 2001/2002
Flags
CRYPT_FIRST
CRYPT_MACHINE_KEYSET
Viene restituito il primo valore della enumerazione.
Indica che la locazione della chiave è
Hkey_Local_Machine in luogo di
Hkey_Current_user.
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
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_MORE_DATA
• ERROR_NO_MORE_ITEMS
• NTE_BAD_FLAGS
• NTE_BAD_TYPE
• NTE_BAD_UID Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptGetProvParam
Uno dei parametri specifica un handle non
valido.
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_MORE_DATA
• ERROR_NO_MORE_ITEMS
• NTE_BAD_FLAGS
• NTE_BAD_TYPE
• NTE_BAD_UID Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptGetProvParam
Uno dei parametri contiene un valore non valido ( puntatore illegale ).
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_MORE_DATA
• ERROR_NO_MORE_ITEMS
• NTE_BAD_FLAGS
• NTE_BAD_TYPE
• NTE_BAD_UID Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptGetProvParam
Il Buffer non è abbastanza grande da
poter contenere tutti i dati restituiti dalla funzione.
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_MORE_DATA
• ERROR_NO_MORE_ITEMS
• NTE_BAD_FLAGS
• NTE_BAD_TYPE
• NTE_BAD_UID Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptGetProvParam
E’ stata raggiunta la fine dell’output.
Nessun dato valido è stato messo nel
buffer.
8
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_MORE_DATA
• ERROR_NO_MORE_ITEMS
• NTE_BAD_FLAGS
• NTE_BAD_TYPE
• NTE_BAD_UID Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptGetProvParam
Il parametro dwFlags non vale zero.
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_MORE_DATA
• ERROR_NO_MORE_ITEMS
• NTE_BAD_FLAGS
• NTE_BAD_TYPE
• NTE_BAD_UID Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptGetProvParam
Dwflags specifica un numero di parametro sconosciuto.
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_MORE_DATA
• ERROR_NO_MORE_ITEMS
• NTE_BAD_FLAGS
• NTE_BAD_TYPE
• NTE_BAD_UID Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptGetProvParam
Il parametro hProv non contiene un handle valido.
Sicurezza su Reti a.a. 2001/2002
CryptCreateHash
• La funzione CryptCreateHash è usata per inizializzarel’hashingdi un flusso di dati.
• Essa restituisce al chiamante un riferimento ad un aggetto hash CSP.
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.
Sicurezza su Reti a.a. 2001/2002
CryptCreateHash: Parametri
BOOL WINAPI CryptCreateHash(
HCRYPTPROV hProv,
ALG_ID Algid,
HCRYPTKEY hKey,
DWORD dwFlags,
HCRYPTHASH *phHash );
Identificatoredell’algoritmo di hashing.
9
Sicurezza su Reti a.a. 2001/2002
CryptCreateHash: Parametri
BOOL WINAPI CryptCreateHash(
HCRYPTPROV hProv,
ALG_ID Algid,
HCRYPTKEY hKey,
DWORD dwFlags,
HCRYPTHASH *phHash );
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.
Sicurezza su Reti a.a. 2001/2002
CryptCreateHash: Parametri
BOOL WINAPI CryptCreateHash(
HCRYPTPROV hProv,
ALG_ID Algid,
HCRYPTKEY hKey,
DWORD dwFlags,
HCRYPTHASH *phHash );
Valore del flag. Questo parametro è riservato
per usi futuri.
Sicurezza su Reti a.a. 2001/2002
CryptCreateHash: Parametri
BOOL WINAPI CryptCreateHash(
HCRYPTPROV hProv,
ALG_ID Algid,
HCRYPTKEY hKey,
DWORD dwFlags,
HCRYPTHASH *phHash );
Indirizzo al quale la funzione copia il riferimento al un nuovo oggetto
hash creato.
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
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_NOT_ENOUGH_MEMORY
• NTE_BAD_ALGID
• NTE_BAD_FLAGS
• NTE_BAD_KEY
• NTE_NO_MEMORY Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptCreateHash
Uno dei parametri specifica un handle non
valido.
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_NOT_ENOUGH_MEMORY
• NTE_BAD_ALGID
• NTE_BAD_FLAGS
• NTE_BAD_KEY
• NTE_NO_MEMORY Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptCreateHash
Uno dei parametri contiene un valore non valido ( puntatore illegale ).
10
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_NOT_ENOUGH_MEMORY
• NTE_BAD_ALGID
• NTE_BAD_FLAGS
• NTE_BAD_KEY
• NTE_NO_MEMORY Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptCreateHash
Il Sistema Operativo lavora in uno spazio di
memoria che non è il suo.
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_NOT_ENOUGH_MEMORY
• NTE_BAD_ALGID
• NTE_BAD_FLAGS
• NTE_BAD_KEY
• NTE_NO_MEMORYGli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptCreateHash
Il parametro Algidspecifica un algoritmo che non è supportato dal CSP
usato.
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_NOT_ENOUGH_MEMORY
• NTE_BAD_ALGID
• NTE_BAD_FLAGS
• NTE_BAD_KEY
• NTE_NO_MEMORYGli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptCreateHash
Il parametro dwFlags non vale zero.
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_NOT_ENOUGH_MEMORY
• NTE_BAD_ALGID
• NTE_BAD_FLAGS
• NTE_BAD_KEY
• NTE_NO_MEMORYGli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptCreateHash
Un algoritmo di hashing che usa una chiave è specificato da pararmetri
Algid e hKey che sono entrambi zero o specificano un handle non valido.
Sicurezza su Reti a.a. 2001/2002
Questi sono gli errori più comuni restituiti da questa funzione:
• ERROR_INVALID_HANDLE
• ERROR_INVALID_PARAMETER
• ERROR_NOT_ENOUGH_MEMORY
• NTE_BAD_ALGID
• NTE_BAD_FLAGS
• NTE_BAD_KEY
• NTE_NO_MEMORYGli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptCreateHash
Il CSP lavora in uno spazio di memoria non suo.
Sicurezza su Reti a.a. 2001/2002
CryptGenKey
Questa funzione genera chiavi crittografiche random per usarle con il modulo CSP.
Viene restituito un handle della chiave che può essere usato per altre funzioni CryptoAPI che lo richiedono.
CryptGenKey
11
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
BOOL WINAPI CryptGenKey(
HCRYPTPROV hProv,
ALG_ID Algid,
DWORD dwFlags,
HCRYPTHASH *phHash );
Handle ottenibile tramite la funzione CryptAcquireContext .
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
BOOL WINAPI CryptGenKey(
HCRYPTPROV hProv,
ALG_ID Algid,
DWORD dwFlags,
HCRYPTHASH *phHash );
Identificativo per l’algoritmo con il quale la chiave che si sta
generando dovrà essere usata. I valori validi variano a seconda
del CSP usato.
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
BOOL WINAPI CryptGenKey(
HCRYPTPROV hProv,
ALG_ID Algid,
DWORD dwFlags,
HCRYPTHASH *phHash );
Tipo di chiave che si va a generare. Il valore può essere 0 oppure si possono
settare uno o più flag(in XOR).
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
BOOL WINAPI CryptGenKey(
HCRYPTPROV hProv,
ALG_ID Algid,
DWORD dwFlags,
HCRYPTHASH *phHash );
Indirizzo nel quale la funzione copia l’handle della chiave che
si sta generando.
Sicurezza su Reti a.a. 2001/2002
Flags
CRYPT_EXPORTABLE
CRYPT_CREATE_SALT
CRYPT_NO_SALT
CRYPT_USER_PROTECTED
CRYPT_PREGEN
CryptExportKey
Sicurezza su Reti a.a. 2001/2002
Flags
CRYPT_EXPORTABLE
CRYPT_CREATE_SALT
CRYPT_NO_SALT
CRYPT_USER_PROTECTED
CRYPT_PREGEN
chiavi di sessione
chiavi private
chiavi pubbliche
12
Sicurezza su Reti a.a. 2001/2002
Flags
CRYPT_EXPORTABLE
CRYPT_CREATE_SALT
CRYPT_NO_SALT
CRYPT_USER_PROTECTED
CRYPT_PREGEN
Sicurezza su Reti a.a. 2001/2002
Flags
CRYPT_EXPORTABLE
CRYPT_CREATE_SALT
CRYPT_NO_SALT
CRYPT_USER_PROTECTED
CRYPT_PREGEN si sta tentando “questa azione” usando la chiave
Dialog box
Sicurezza su Reti a.a. 2001/2002
Flags
CRYPT_EXPORTABLE
CRYPT_CREATE_SALT
CRYPT_NO_SALT
CRYPT_USER_PROTECTED
CRYPT_PREGEN
Sicurezza su Reti a.a. 2001/2002
La funzione CryptGenKey restituisce:
TRUE se ha successo
FALSE altrimenti.
Eventuali errori possono essere ritrovati grazie alla funzioneGetLastError..
FALSETRUE
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
• NTE_FAIL
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.
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
• NTE_FAIL
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.
13
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
• NTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDestroyHash
Il contesto CSP specificato alla creazione dell’oggetto
hash non può essere trovato.
Sicurezza su Reti a.a. 2001/2002
o Quando un oggetto hash è distrutto, la maggior parte dei 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
17
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
Sicurezza su Reti a.a. 2001/2002
CryptDestroyKey: Parametri
BOOL WINAPI CryptDestroyKey (
HCRYPTKEY hKey
);
… e chiaramente …
Sicurezza su Reti a.a. 2001/2002
La funzione CryptDestroyKey restituisce:
TRUE se ha successo
FALSE altrimenti.
Eventuali errori possono essere ritrovati grazie alla funzioneGetLastError..
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDestroyKey
Il contesto CSP specificato alla creazione dell’oggetto
hash non può essere trovato.
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt
Ø Usata per codificare dati.
Ø L'algoritmo usato è designato dalla chiave tenuta dal modulo di CSP il cui riferimento è il parametro hKey.
Ø Importanti cambi sono stati fatti alle CryptoAPI per sostenere l’ interoperabilità di e-mail di S/MIME.
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt: ParametriBOOL WINAPI CryptEncrypt(
HCRYPTKEY hKey,
HCRYPTHASH hHash,
BOOL Final,
DWORD dwFlags,
BYTE *pbData,
DWORD *pcbData,
DWORD cbBuffer
);
Handle alla chiave da usare per lacifratura. Si ottiene usando la
funzione CryptGenKey. Questa chiave specifica l'algoritmo di
cifratura usato.
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt: ParametriBOOL WINAPI CryptEncrypt(
HCRYPTKEY hKey,
HCRYPTHASH hHash,
BOOL Final,
DWORD dwFlags,
BYTE *pbData,
DWORD *pcbData,
DWORD cbBuffer
);
Handle a un oggetto di tipo Hash. Se nessun pasticcio sarà fatto,
questo parametro deve essere zero.
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt: ParametriBOOL WINAPI CryptEncrypt(
HCRYPTKEY hKey,
HCRYPTHASH hHash,
BOOL Final,
DWORD dwFlags,
BYTE *pbData,
DWORD *pcbData,
DWORD cbBuffer
);
Valore booleano:•TRUE se questa è l’ultima sezione da cifrare,•FALSE altrimenti.
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt: ParametriBOOL WINAPI CryptEncrypt(
HCRYPTKEY hKey,
HCRYPTHASH hHash,
BOOL Final,
DWORD dwFlags,
BYTE *pbData,
DWORD *pcbData,
DWORD cbBuffer
);
Riservato per un uso futuro. Dovrebbe essere sempre zero.
.
19
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt: ParametriBOOL WINAPI CryptEncrypt(
HCRYPTKEY hKey,
HCRYPTHASH hHash,
BOOL Final,
DWORD dwFlags,
BYTE *pbData,
DWORD *pcbData,
DWORD cbBuffer
);
Puntatore ad un buffer che contiene i dati da codificare. I dati codificati saranno
messi in questo stesso buffer.
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt: ParametriBOOL WINAPI CryptEncrypt(
HCRYPTKEY hKey,
HCRYPTHASH hHash,
BOOL Final,
DWORD dwFlags,
BYTE *pbData,
DWORD *pcbData,
DWORD cbBuffer
);
Indirizzo della lunghezza dei dati
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt: ParametriBOOL WINAPI CryptEncrypt(
HCRYPTKEY hKey,
HCRYPTHASH hHash,
BOOL Final,
DWORD dwFlags,
BYTE *pbData,
DWORD *pcbData,
DWORD cbBuffer
);
Contiene il numero di byte nel buffer pbData.
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt
• 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 dicifratura può finire il processo di cifratura.
Sicurezza su Reti a.a. 2001/2002
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.
Eventuali errori possono essere ritrovati grazie alla funzioneGetLastError..
FALSETRUE
Sicurezza su Reti a.a. 2001/2002
GetLastError di CryptReleaseContextQui di seguito sono elencati i codici di errore più comunemente restituiti dalla funzione GetLastError.
§ ERROR_BUSY
§ ERROR_INVALID_HANDLE
§ ERROR_INVALID_PARAMETER
§ NTE_BAD_FLAGS
§ NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
Il CSP specificato dal parametro hProv è al
momento usato da altri processi.
Sicurezza su Reti a.a. 2001/2002
GetLastError di CryptReleaseContextQui di seguito sono elencati i codici di errore più comunemente restituiti dalla funzione GetLastError.
§ ERROR_BUSY
§ ERROR_INVALID_HANDLE
§ ERROR_INVALID_PARAMETER
§ NTE_BAD_FLAGS
§ NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
Uno dei parametri specifica unhandle non valido.
Sicurezza su Reti a.a. 2001/2002
GetLastError di CryptReleaseContextQui di seguito sono elencati i codici di errore più comunemente restituiti dalla funzione GetLastError.
§ ERROR_BUSY
§ ERROR_INVALID_HANDLE
§ ERROR_INVALID_PARAMETER
§ NTE_BAD_FLAGS
§ NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
Uno dei parametri contiene un valore non valido ( un puntatore
illegale ).
Sicurezza su Reti a.a. 2001/2002
GetLastError di CryptReleaseContextQui di seguito sono elencati i codici di errore più comunemente restituiti dalla funzione GetLastError.
§ ERROR_BUSY
§ ERROR_INVALID_HANDLE
§ ERROR_INVALID_PARAMETER
§ NTE_BAD_FLAGS
§ NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
Il parametro dwFlags non vale zero.
21
Sicurezza su Reti a.a. 2001/2002
GetLastError di CryptReleaseContextQui di seguito sono elencati i codici di errore più comunemente restituiti dalla funzione GetLastError.
§ ERROR_BUSY
§ ERROR_INVALID_HANDLE
§ ERROR_INVALID_PARAMETER
§ NTE_BAD_FLAGS
§ NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
Il parametro hProv non contiene un handle valido.
Sicurezza su Reti a.a. 2001/2002
CryptReleaseContext
• Dopo che questa funzione è stata chiamata, la sessione è finita, 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 e CryptDestroyHash )prima che la funzione CryptReleaseContext venga chiamata.
Sicurezza su Reti a.a. 2001/2002
CryptDecrypt
• Tale funzione è usata per decodificare dati che erano stati precedentemente criptati usando la funzione CryptEncrypt.
• Importanti cambiamenti sono stati fatti alle CryptoAPI per supportare l’S/MIME, che concerne il trattamento dell’impacchettamento dei messaggi.
• 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.
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
Errore inaspettato.
Sicurezza su Reti a.a. 2001/2002
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.
Sicurezza su Reti a.a. 2001/2002
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ò:a. ottenere il valore hash dell’oggetto attraverso CryptGetHashParam,b. firmarlo attraverso CryptSignHashc. utilizzarlo per verificare una firma digitale attraverso
CryptVerifySignature.
Ø La decifratura di un gran numero di dati può avvenire in sezionichiamando ripetutamente la funzione CryptDecrypt.
Sicurezza su Reti a.a. 2001/2002
25
Sicurezza su Reti a.a. 2001/2002
Esempio ApplicativoL’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)
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
• If CryptCreateHash(phProv, CALG_MD5, 0, 0, phHash) = 1Then• sResult = " - An empty hash object has been created"• Else• sResult = " - Error during CryptBeginHash"• End If• txtProgress.Text = txtProgress.Text + "CryptAcquireContext()" +
sResult + CRLF + CRLF
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) = 1Then• sResult = " - Session key has been hashed"• Else• sResult = " - Error during CryptHashSessionKey"• End If
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()" +