Sommario Etoken: cos’è?ads/corso-security/www/CORSO-0102/eTokenus… · • A cosa serve? •...
Transcript of Sommario Etoken: cos’è?ads/corso-security/www/CORSO-0102/eTokenus… · • A cosa serve? •...
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.
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
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
DES-X 120-bit *On board security algorithms / processors
16 k & 32kModels (by memory size)
PKCS#11 v2.01, CAPI (Microsoft Crypto API), Siemens/Infinion APDU commands PC/SC, X.509v3 certificates, SSLv3, IPSec/IKE PRO
Certifications & standards
Windows 98, Windows NT4.0, Windows 2000, Windows MEOperating systems
Sicurezza su Reti a.a. 2001/2002
Etoken PRO
• Fornisce autenticazione doppia.• Non ripudio.• 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.
Sicurezza su Reti a.a. 2001/2002
Hard molded plastic, tamper evidentCasing
At least 10 yearsMemory data retention
At least 100,000Memory cell rewrites
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
Support for ISO 7816 1-4 specifications.ISO specification support
47 x 16 x 8 mm (1.85 x 0.63 x 0.31 inches)Dimensions
RSA 1024 Bit signature approx. 1.0 sec RSA 1024 Bit key generation approx.25 sec
Speed
Smartcard chip security level ITSEC LE4 Smart card security certification (infinion).
Smartcard chip security level
RSA 1024-bit, DES, 3DES (Triple DES) , SHA1, (MD5 - optional)On board security algorithms / processors
16 k & 32kModels (by memory size)
PKCS#11 v2.01, CAPI (Microsoft Crypto API), Siemens/Infinion APDU commands PC/SC, X.509v3 certificates, SSLv3, IPSec/IKE PRO
Certifications & standards
Windows 98, Windows NT4.0, Windows 2000, Windows MEOperating systems
Sicurezza su Reti a.a. 2001/2002 Sicurezza su Reti a.a. 2001/2002
Ø CryptAcquireContextØ CryptGetProvParamØ CryptCreateHashØ CryptGenKeyØ CryptHashSessionKeyØ CryptDestroyHashØ CryptDestroyKeyØ CryptEncrypt Ø CryptDecrypt
Funzioni
4
Sicurezza su Reti a.a. 2001/2002
o Usata per acquisire un handle di un particolare contenitore dichiavi all’interno di un particolare CSP.
o Restituisce l’handle che può essere usato per chiamare il CSP selezionato.
CryptAcquireContext
Sicurezza su Reti a.a. 2001/2002
BOOL WINAPI CryptAcquireContext(
*phProv ,
pszContainer,
pszProvider,
dwProvType,
DWORD dwFlags
);
CryptAcquireContext: ParametriIndirizzo della copia
dell’handle del CSP.
Sicurezza su Reti a.a. 2001/2002
BOOL WINAPI CryptAcquireContext(
*phProv ,
pszContainer,
pszProvider,
dwProvType,
DWORD dwFlags
);
CryptAcquireContext: Parametri
Nome del contenitore delle chiavi. Il nome è indipendente dal metodo usato per la memorizzazione delle chiavi. NULL se si usa il nome di default.
Sicurezza su Reti a.a. 2001/2002
BOOL WINAPI CryptAcquireContext(
*phProv ,
pszContainer,
pszProvider,
dwProvType,
DWORD dwFlags
);
CryptAcquireContext: ParametriSpecifica il servizio crittografico usato.Se il parametro è NULL si userà il provider di default.
Sicurezza su Reti a.a. 2001/2002
BOOL WINAPI CryptAcquireContext(
*phProv ,
pszContainer,
pszProvider,
dwProvType,
DWORD dwFlags
);
CryptAcquireContext: ParametriSpecifica i tipi di provider.
• PROV_RSA_FULL• PROV_RSA_SIG• PROV_DSS• PROV_DSS_DH• PROV_SSL
Sicurezza su Reti a.a. 2001/2002
BOOL WINAPI CryptAcquireContext(
*phProv ,
pszContainer,
pszProvider,
dwProvType,
DWORD dwFlags
);
CryptAcquireContext: Parametri
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.
Il parametro hProv non contiene un handle valido.
Errore inaspettato.
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
Sicurezza su Reti a.a. 2001/2002
if(!CryptGenKey( hprov, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) {
printf(“error duringCryptGenKey!\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;
}
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 duringCryptGenKey!\n”, GetLastError());
goto done;
}
if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) {
printf(“error during CryptAcquireContext!\n”, GetLastError());
goto done;
}
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 duringCryptGenKey!\n”, GetLastError());
goto done;
}// ora è possibile cifrare o decifrare un messaggio usando hkeydone:
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 duringCryptGenKey!\n”, GetLastError());
goto done;
}
if(hKey != 0) CryptDestroyKey(hKey);
14
Sicurezza su Reti a.a. 2001/2002
CryptHashSessionKey: Parametri Questa funzione è usata per computare l’hash crittografico su una chiave.
BOOL WINAPICryptHashSessionKey(
HCRYPTHASH hHash,
HCRYPTKEY hKey,
DWORD dwFlags
);
Handle ad un oggetto hash.
Sicurezza su Reti a.a. 2001/2002
CryptHashSessionKey: Parametri Questa funzione è usata per computare l’hash crittografico su una chiave.
BOOL WINAPICryptHashSessionKey(
HCRYPTHASH hHash,
HCRYPTKEY hKey,
DWORD dwFlags
);
Handle all’oggettokey di cui si deve
fare l’hash.
Sicurezza su Reti a.a. 2001/2002
CryptHashSessionKey: Parametri Questa funzione è usata per computare l’hash crittografico su una chiave.
BOOL WINAPICryptHashSessionKey(
HCRYPTHASH hHash,
HCRYPTKEY hKey,
DWORD dwFlags
);
Questo parametro è riservato ad usi futuri e dovrebbe sempre essere
settato a 0.
Sicurezza su Reti a.a. 2001/2002
La funzione CryptHashSessionKey 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 CryptHashSessionKeyGli 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_FAILGli 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 CryptHashSessionKeyGli 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_FAILGli errori con il prefisso NTE sono generati dal particolare CSP usato.
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.
15
Sicurezza su Reti a.a. 2001/2002
GetLastError di CryptHashSessionKeyGli 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_FAILGli errori con il prefisso NTE sono generati dal particolare CSP usato.
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.
Sicurezza su Reti a.a. 2001/2002
GetLastError di CryptHashSessionKeyGli 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_FAILGli errori con il prefisso NTE sono generati dal particolare CSP usato.
Errore inaspettato.
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
Sicurezza su Reti a.a. 2001/2002
CryptDestroyHash: Parametri
BOOL WINAPI CryptDestroyHash (
HCRYPTHASH hHash
);
Puntatore all’ oggetto hash da distruggere.
Sicurezza su Reti a.a. 2001/2002
La funzione CryptDestroyHash restituisce:
TRUE se ha successo
FALSE altrimenti.
Eventuali errori possono essere ritrovati grazie alla funzioneGetLastError..
FALSETRUE
Sicurezza su Reti a.a. 2001/2002
Codici d’errore più comuni:
ERROR_BUSYERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_HASH NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDestroyHash
Il CSP specificato dal parametro hProv è al
momento usato da altri processi.
16
Sicurezza su Reti a.a. 2001/2002
Codici d’errore più comuni:
ERROR_BUSYERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_HASH NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDestroyHash
Uno dei parametri specifica unhandle non valido.
Sicurezza su Reti a.a. 2001/2002
Codici d’errore più comuni:
ERROR_BUSYERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_HASH NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDestroyHash
Uno dei parametri contiene un valore non valido ( un puntatore
illegale ).
Sicurezza su Reti a.a. 2001/2002
Codici d’errore più comuni:
ERROR_BUSYERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_HASH NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDestroyHash
L’handle hHash specifica un algoritmo che il corrente
CSP non supporta.
Sicurezza su Reti a.a. 2001/2002
Codici d’errore più comuni:
ERROR_BUSYERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_HASH NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDestroyHash
L’oggetto hash specificato dal parametro hHash non è
valido
L’oggetto hash specificato dal parametro hHash non è
valido.
Sicurezza su Reti a.a. 2001/2002
Codici d’errore più comuni:
ERROR_BUSYERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_HASH NTE_BAD_UID
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..
FALSETRUE
Sicurezza su Reti a.a. 2001/2002
In questo caso i codici d’errore possibili sono:
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_HASH NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDestroyKey
Uno dei parametri specifica unhandle non valido.
Sicurezza su Reti a.a. 2001/2002
In questo caso i codici d’errore possibili sono:
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_HASH NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDestroyKey
Uno dei parametri contiene un valore non valido ( un puntatore
illegale ).
Sicurezza su Reti a.a. 2001/2002
In questo caso i codici d’errore possibili sono:
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_HASH NTE_BAD_UID
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDestroyKey
L’oggetto hash specificato dal parametro hHash non è
valido.
18
Sicurezza su Reti a.a. 2001/2002
In questo caso i codici d’errore possibili sono:
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_HASH NTE_BAD_UID
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.
Sicurezza su Reti a.a. 2001/2002
CryptReleaseContext: Parametri
BOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags
);
Handle che l’applicazione ottiene usando la funzione
CryptAcquireContext.
20
Sicurezza su Reti a.a. 2001/2002
CryptReleaseContext: Parametri
BOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags
);
Flags normalmente settati a ZERO.
Sicurezza su Reti a.a. 2001/2002
La funzione CryptReleaseContext 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 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.
Sicurezza su Reti a.a. 2001/2002
CryptDecrypt: Parametri
BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pcbData
);
Handle per la chiave da usare nella decifratura.
Si ottiene da CryptGenKey o
CryptImportKey. Questa chiave specifica
l’algoritmo di decifratura usato.
Sicurezza su Reti a.a. 2001/2002
CryptDecrypt: Parametri
BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pcbData
);
Handle ad un oggetto hash. E’usato solo se l’hash di un dato ècomputato. Se non si ha nessun
hash, il parametro vale zero.
Sicurezza su Reti a.a. 2001/2002
CryptDecrypt: Parametri
BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pcbData
);
Valore booleano:•TRUE se questa è l’ultima sezione da decifrare•FALSE altrimenti
22
Sicurezza su Reti a.a. 2001/2002
CryptDecrypt: Parametri
BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pcbData
);
Flags normalmente settati a zero.
Sicurezza su Reti a.a. 2001/2002
CryptDecrypt: Parametri
BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pcbData
);
Buffer che contiene i dati da decifrare.Dopo la decifratura il testo in chiaro è contenuto
in questo stesso buffer.
Sicurezza su Reti a.a. 2001/2002
CryptDecrypt: Parametri
BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pcbData
);
Indirizzo della lunghezza dei dati
Sicurezza su Reti a.a. 2001/2002
La funzione CryptDecrypt restituisce:
TRUE se ha successo
FALSE altrimenti.
Eventuali errori possono essere ritrovati grazie alla funzioneGetLastError..
FALSETRUE
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
Uno dei parametri specifica unhandle non valido.
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
Uno dei parametri contiene un valore non valido ( un puntatore
illegale ).
23
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
L’handle hHash specifica un algoritmo che il corrente
CSP non supporta.
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
Il dato da decifrare non è valido.
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
Il parametro dwFlags non vale zero.
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
L’oggetto hash specificato dal parametro hHash non è
valido.
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
Il parametro hKey non contiene un handle valido per una
chiave.
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
La dimensione del buffer di output ètroppo piccola per contenere il testo
in chiaro generato.
24
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
Il parametro hProv non contiene un handle valido
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
Gli errori con il prefisso NTE sono generati dal particolare CSP usato.
GetLastError di CryptDecrypt
L’applicazione cerca di decifrare lo stesso
dato due volte.
Sicurezza su Reti a.a. 2001/2002
Qui di seguito sono elencati i codici degli errori più comunemente restituiti dalla funzione GetLastError.
ERROR_INVALID_HANDLEERROR_INVALID_PARAMETERNTE_BAD_ALGID NTE_BAD_DATANTE_BAD_FLAGSNTE_BAD_HASHNTE_BAD_KEYNTE_BAD_LEN NTE_BAD_UIDNTE_DOUBLE_ENCRYPTNTE_FAIL
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
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) = 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()" +
sResult + CRLF + CRLF• sResult = " - Release the CSP"• txtProgress.Text = txtProgress.Text + "CryptReleaseContext()" +
sResult + CRLF + CRLF
• End SubSicurezza su Reti a.a. 2001/2002
26
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
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 Thendocument.write "<br>Locking token..."token.lock
If Err.Number = 0 Thendocument.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
Sicurezza su Reti a.a. 2001/2002
ConfigurazioneIf 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.detach
End 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-TokenSicurezza su Reti a.a. 2001/2002
Configurazione' Error Handling
If Err.Number <> 0 ThenMsgBox "Error occured (0x" & Hex(Err.Number) & ") description: " & Err.Description,
vbOKOnly + vbExclamation, "Runtime Error"Err.Clear ' Clear the error.
End Ifset 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
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 baDim token
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 Thendocument.write "<br>Locking token..."token.lock
If Err.Number = 0 Thendocument.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.
27
Sicurezza su Reti a.a. 2001/2002
Configurazione password
If Err.Number = 0 Thendocument.write "<br>Changing password to 1111..."ba.create_bstr "1111"token.changePassword ba
If Err.Number = 0 Thendocument.write "<br>Logging in with password 1111..."ba.create_bstr "1111"token.login ba
If Err.Number = 0 Thendocument.write "<br>Changing password back to 1234567890..."ba.create_bstr "1234567890"
End If
Cambia la password dell’e-Token con quella contenuta in ba.
Sicurezza su Reti a.a. 2001/2002
Configurazione passwordtoken.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.detach
End If
Effettua il logout dell’ e-Token.
Sicurezza su Reti a.a. 2001/2002
Configurazione password' Error HandlingIf Err.Number <> 0 ThenMsgBox "Error occured (0x" & Hex(Err.Number) & ") description: " & Err.Description,
vbOKOnly + vbExclamation, "Runtime Error"Err.Clear ' Clear the error.
End Ifset token = Nothingset ba = Nothing--></SCRIPT><BR><BR><a href = etoken.htm>Back to eToken Samples main menu</a>
</BODY></HTML>
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> eTocxFile manipulation VBScript sample for eTokenPro</h2>
<SCRIPT LANGUAGE="VBScript"> <!--
Sicurezza su Reti a.a. 2001/2002
Manipolazione file binari' Print an arraysub printarray(a)
For i = 0 To a.length - 1document.write a.get(i)," "
Nextend subsub printarrayStr(a)
For i = 0 To a.length - 1Dim xx = 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()
Sicurezza su Reti a.a. 2001/2002
Manipolazione file binariOn 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 "AKSifdh 0"
If Err.Number = 0 Thendocument.write "<br>Locking token..."token.lock
If Err.Number = 0 Thendocument.write "<br>Logging in with password 1234567890..."ba.create_bstr "1234567890"token.login ba
28
Sicurezza su Reti a.a. 2001/2002
Manipolazione file binari
If Err.Number = 0 Thendocument.write "<br>Checking if file 3f00/6666/0001 exists..."if token.isFileExist ("3f0066660001") Thendocument.write "<br>Deleting file 3f00/6666/0001..."token.del "3f0066660001"
End If
If Err.Number = 0 Thendocument.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……….
Sicurezza su Reti a.a. 2001/2002
Manipolazione file binari
If Err.Number = 0 Thendocument.write "<br>Getting directory contents ..."Dim childrenset children = token.dir("3f006666")
If Err.Number = 0 ThenDo
Dim mm = children.nextif m <> "" Thendocument.write "<BR>", m
End IfLoop Until m = ""document.write "<BR>"
Crea una directory con il nome indicato tra “”.
Sicurezza su Reti a.a. 2001/2002
Manipolazione file binaridocument.write "<br>Writing the file..."
ba.create_bstr"1234567890123456789012345678901234567890123456789012345678"
token.writeBinaryFile "3f0066660001",0,ba
If Err.Number = 0 Thendocument.write "<br>Reading the file..."document.write"<br> data: "set dataRead = token.readBinaryFile ("3f0066660001", 0, 30)
If Err.Number = 0 ThenprintarrayStr dataRead
End IfEnd If
End If
Si effetua una scrittura nel file binario della variabile ba.
Si effettua una lettura nel file binario.
Sicurezza su Reti a.a. 2001/2002
Manipolazione file binaridocument.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.detach
End If
Sicurezza su Reti a.a. 2001/2002
Manipolazione file binari
' Error HandlingIf Err.Number <> 0 ThenMsgBox "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>
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>
29
Sicurezza su Reti a.a. 2001/2002