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
Sommario
• Cos’è un Etoken?
• A cosa serve?
• E-Token R2
• E-Token PRO
• Esempi applicativi
• Programmazione in VB e VBScript
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
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
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
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
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.
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.
Sicurezza su Reti a.a. 2001/2002
Sicurezza per accesso remoto
• EToken Enterprise
Bisogna ricordare solo una password
offre
SecuRemote e SecureClient estendono la
soluzionisicurezza
"out of althe
box" eper
desktop
laptop.Con
la protezione
di Intranet
ed
SecuRemote
e SecureClient
i dati sono
Extranet.criptati prima che essi lascino il computer
del client.
permette
di eseguire un logon sicuro
alla VPN di SecuRemote di
Checkpoint.
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.
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
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.
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
Sicurezza
At least
100,000su Reti a.a. 2001/2002
Sicurezza su Reti a.a. 2001/2002
Funzioni








CryptAcquireContext
CryptGetProvParam
CryptCreateHash
CryptGenKey
CryptHashSessionKey
CryptDesrtoyHash
CryptDestroyKey
CryptEncrypt
Sicurezza su Reti a.a. 2001/2002
CryptAcquireContext
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.
Sicurezza su Reti a.a. 2001/2002
CryptAcquireContext: Parametri
Indirizzo della copia
dell’handle
delprovider.
CSP
Specifica
i tipi di
BOOL WINAPI
Specifica
il servizio
Nome
del
contenitore
•
PROV_RSA_FULL
CryptAcquireContext(
crittografico
usato.Se
il è
delle
chiavi.
Il
nome
• PROV_RSA_SIG
parametro
è NULL
userà
indipendente
dalsimetodo
*phProv ,
• parametro
PROV_DSS
il provider
di la
default.
Questo
usato
per
è settatodelle
a
• PROV_DSS_DH
memorizzazione
pszContainer, normalmente
ZEROchiavi.
alcune
•ma
PROV_SSL
NULL se si usa il
setteranno
pszProvider, applicazioni
nome di
default. uno
o più flags.
dwProvType,
DWORD
dwFlags
);
Sicurezza su Reti a.a. 2001/2002
Flags
CRYPT_VERIFY_CONTEXT: Se settato allora l’applicazione non avrà
accesso alle chiavi private e il parametro pszContainer deve essere
settato a NULL.
Quando CryptAcquireContext è chiamato,molti CSP
richiedono l’ input al proprio user prima di concedere
l’accesso alle chiavi private nel contenitore delle chiavi.
Sicurezza su Reti a.a. 2001/2002
Flags
CRYPT_NEW_KEYSET : Se settato allora un nuovo contenitore di chiavi sarà
creato con il nome specificato da pszContainer. Se pszcontainer vale NULL allora
il contenitore di chiavi creato avrà il nome di default.
CRYPT_MACHINE_KEYSET: Per default le chiavi sono memorizzate nella
porzione del registro Hkey_Current_User.Questo flag può essere combinato con
tutti gli altri flag indicando che la locazione per la chiave è Hkey_Local_Machine.
CRYPT_DELETE_KEYSET: Se settato allora il contenitore di chiavi specificato
dalla funzione pszContainer è cancellato.
Sicurezza su Reti a.a. 2001/2002
N.B: Quando il contenitore di chiavi viene
creato, molti CSP non creano
automaticamente nessuna coppia di chiavi
publica/privata.Queste chiavi dovranno
essere create in un passo successivo con la
funzione CryptGenKey.
La funzione CryptAcquireContext restituisce:
TRUE
TRUE
se ha successo
FALSE
FALSE altrimenti.
Eventuali errori possono essere ritrovati grazie alla funzione
GETLASTERROR.
Questa funzione non prende parametri e restituisce il
codice dell’ultimo errore.
Sicurezza su Reti a.a. 2001/2002
CryptGetProvParam
Questa funzione recupera i parametri che controllano
le operazioni di un CSP.
Gestisce il CSP al
quale si riferiscono i
parametri
BOOL WINAPI
Numero
del parametro. Può
CryptGetProvParam(
essere scelto tra diversi
HCRYPTPROV hProv,
DWORD dwParam,
BYTE *pbData,
DWORD *pcbData,
DWORD dwFlags
Puntatoreaauna
un buffer
cheche
riceve
i dati la
Puntatore
variadile
specifica
del parametro
specificato.La
forma dida
lunghezza
in bytes
del buffer puntato
Valori dei
flag.
A Quando
seconda
numero
questi
dati cambia
a seconda
del la
pbData.
ladel
funzione
termina,
del parametro
specificato
numero
di parametro
scelto.
variabile
puntata
dalpossono
parametro
pcbData
essere settati
diversi
flags. di bytes
contiene
il numero
memorizzati nel buffer.
);
Sicurezza su Reti a.a. 2001/2002
Numero del parametro
PP_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.
Sicurezza su Reti a.a. 2001/2002
Informazioni sull’algoritmo
Quando chiamiamo CryptGetProvParam con il parametro
PP_ENUMALGS i dati restituiti nel buffer puntato da pbData sono
nella seguente forma:
Identificatore
ALG_ID aiAlgid;
dell’algoritmo
Numero
di bits della chiave
DWORD dwBits;
usata dall’algoritmo
Numero di caratteri del
DWORD dwNameLen;
nome dell’algoritmo
Zero terminante il
CHAR szName[dwNameLen];
nome dell’algoritmo
Sicurezza su Reti a.a. 2001/2002
La funzione CryptGetProvParam restituisce:
TRUE
TRUE
se ha successo
FALSE
FALSE altrimenti.
Eventuali errori possono essere ritrovati grazie alla funzione
GetLastError.
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.
Sicurezza su Reti a.a. 2001/2002
CryptCreateHash: Parametri
Handle al CSP
BOOL WINAPI CryptCreateHash(
HCRYPTPROV hProv,
ALG_ID Algid,
HCRYPTKEY hKey,
DWORD dwFlags,
ottenuto
chiamando la funzione
Identificatore
CryptAcquireContext.
dell’algoritmo di hashing
Se l’algoritmo per l’hashing utilizza
una chiave, questa deve essere
parametro alla
Valorepassata
del flag.come
Questo
funzione.Se
l’algoritmo non richiede
parametro
è riservato
allora
questo
parametro
Indirizzo
quale
la funzione
peruna
usi chiave
futuri. al
deve esserealzero.
copia il riferimento
un
nuovo oggetto hash creato.
HCRYPTHASH *phHash
);
Sicurezza su Reti a.a. 2001/2002
La funzione CryptCreateHash restituisce:
TRUE
TRUE
se ha successo
FALSE
FALSE altrimenti.
Eventuali errori possono essere ritrovati grazie alla funzione
GetLastError..
Sicurezza su Reti a.a. 2001/2002
GetLastError di CryptCreateHash
ERROR_INVALID_HANDLE Uno dei parametri specifica un handle
non valido.
ERROR_INVALID_PARAMETER Uno dei parametri contiene un
valore non valido ( puntatore illegale ).
ERROR_NOT_ENOUGH_MEMORY Il Sistema Operativo lavora in
uno spazio di memoria che non è il suo.
NTE_BAD_ALGID Il parametro Algid specifica un algoritmo che non è
supportato dal CSP usato.
NTE_BAD_FLAGS Il parametro dwFlags non vale zero.
NTE_BAD_KEY Un algoritmo su chiave hash (come CALG_MAC) è
specificato da pararmetri Algid e hKey che sono entrambi zero o
specificano un handle non valido.
NTE_NO_MEMORY Il CSP lavora in uno spazio di memoria non suo.
Sicurezza su Reti a.a. 2001/2002
CryptGenKey
Questa funzione genera chiavi crittografiche random
per usarle con il modulo CSP.
CryptGenKey
Viene ritornato un handle della chiave che può essere
usato per altre funzioni CryptoAPI che lo richiedono.
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
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
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
hProv 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
CryptExportKey
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
hProv 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
chiavi di sessione
chiavi private
chiavi pubbliche
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
hProv 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
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
hProv 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
+
info
CRYPT_PREGEN
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
hProv 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
si sta tentando “questa
azione” usando la chiave
Dialog box
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
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
Sicurezza su Reti a.a. 2001/2002
CryptGenKey: Parametri
Questa funzione prende un altro parametro
phKey è l’indirizzo nel quale la funzione copia l’handle della chiave
che si sta generando.
TRUE
Se la funzione ha successo, il valore booleano ritornato da
CryptGenKey è TRUE;
FALSE
Se la funzione fallisce, il valore ritornato è FALSE.
Per avere ulteriori informazioni riguardo l’eventuale errore, basta
chiamare la funzione GetLastError.
Sicurezza su Reti a.a. 2001/2002
Esempio
if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) {
printf(“error during CryptAcquireContext!\n”, GetLastError());
Ottenere l’handle con CryptAcquireContext
goto done;
}
Sicurezza su Reti a.a. 2001/2002
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());
Generare la chiave di sessione
goto done;
}
Sicurezza su Reti a.a. 2001/2002
Esempio
if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) {
printf(“error during CryptAcquireContext!\n”, GetLastError());
goto done;
}
if(!CryptGenKey(hprov, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) {
printf(“error during CryptGenKey!\n”, GetLastError());
goto done;
}
// ora è possibile cifrare o decifrare un messaggio usando hkey
Cifrare/decifrare un messaggio
done:
Sicurezza su Reti a.a. 2001/2002
Esempio
if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) {
printf(“error during CryptAcquireContext!\n”, GetLastError());
goto done;
}
if(!CryptGenKey(hprov, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) {
printf(“error during CryptGenKey!\n”, GetLastError());
goto done;
}
// ora è possibile cifrare o decifrare un messaggio usando hkey
done:
if(hKey != 0) CryptDestroyKey(hKey);
Distruggere
la chiave
Sicurezza su Reti a.a. 2001/2002
Esempio
if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) {
printf(“error during CryptAcquireContext!\n”, GetLastError());
goto done;
}
if(!CryptGenKey(hprov, CALG_RC2, CRYPT_EXPORTABLE, &hKey)) {
printf(“error during CryptGenKey!\n”, GetLastError());
goto done;
}
// ora è possibile cifrare o decifrare un messaggio usando hkey
done:
if(hKey != 0) CryptDestroyKey(hKey);
if(hProv != 0) CryptReleaseContext(hProv, 0);
Rilasciare
l’handle
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.
Sicurezza su Reti a.a. 2001/2002
CryptHashSessionKey
La funzione CryptHashSessionKey restituisce un valore booleano :
TRUE
TRUE
se la funzione ha successo
FALSE
FALSE
altrimenti
Anche in questo caso la funzione per ottenere informazioni
sull’eventuale errore verificatosi utilizza GetLastError.
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
L’handle hHash specifica un
algoritmo che il corrente CSP
non supporta
Il parametro dwFlags è
DIVERSO da 0
NTE_BAD_HASH
NTE_BAD_HASH_STATE
L’oggetto hash specificato dal
parametro hHash non è valido
NTE_KEY
NTE_BAD_UID
NTE_FAIL
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
E’ stato fatto un tentativo per
aggiungere dati ad un oggetto
hash che è già “finito”
NTE_BAD_FLAGS
NTE_BAD_HASH
E’ stato usato un algoritmo per
fare l’hash della chiave ma la
chiave di sessione non è più valida
NTE_BAD_HASH_STATE
NTE_KEY
NTE_BAD_UID
NTE_FAIL
Il contesto CSP specificato alla
creazione dell’oggetto hash non può
essere trovato
Sicurezza su Reti a.a. 2001/2002
CryptDestroyHash
o Elimina l’oggetto hash puntato da un handle
o Tutti gli oggetti hash dovrebbero essere distrutti alla fine del
programma.
Sicurezza su Reti a.a. 2001/2002
CryptDestroyHash: Parametri
Puntatore all’ oggetto
hash da distruggere.
#include <wincrypt.h>
BOOL WINAPI CryptDestroyHash (
HCRYPTHASH hHash
// in
);
Tipo di dato predefinito che
rappresenta un puntatore
all’ oggetto hash.
Sicurezza su Reti a.a. 2001/2002
Analogamente alle altre, la funzione CryptDestroyHash restituisce:
TRUE
TRUE
se ha successo
FALSE
FALSE altrimenti.
Eventuali errori possono essere ritrovati grazie alla funzione
GETLASTERROR.
Questa funzione non prende parametri e restituisce il
codice dell’ultimo errore.
Sicurezza su Reti a.a. 2001/2002
CryptDestroyHash
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.
Sicurezza su Reti a.a. 2001/2002
CryptDestroyKey
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 !!!
Sicurezza su Reti a.a. 2001/2002
CryptDestroyKey: Parametri
… e chiaramente …
#include <wincrypt.h>
BOOL WINAPI CryptDestroyKey (
HCRYPTKEY hKey
);
// in
typedef unsigned long HCRYPTKEY;
Tipo di dato predefinito che
rappresenta un puntatore alla chiave.
Sicurezza su Reti a.a. 2001/2002
Analogamente alle altre, la funzione CryptDestroyKey restituisce:
TRUE
TRUE
se ha successo
FALSE
FALSE altrimenti.
Ancora una volta, eventuali errori possono essere ritrovati grazie alla
funzione
GETLASTERROR.
MA…
Sicurezza su Reti a.a. 2001/2002
GetLastError di CryptDestroyKey
…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
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
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.
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.
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt:Parametri
• pcbData
E’ l' indirizzo della lunghezza dei dati.Prima di chiamare questa funzione,
il chiamante deve settare tale parametro al numero di byte che dovrebbero
essere codificati. Esso conterrà il numero di byte dei dati codificati.
Se il buffer specificato da pcbData non è grande abbastanza per tenere i
dati, la funzione ritorna il codice di errore di ERROR_MORE_DATA
(attraverso GetLastError) e memorizza la taglia di buffer richiesta, in byte,
nella variabile puntata da pcbData.
Quando una cifrario a blocco è usato, questa lunghezza di dati deve
essere un multiplo della taglia del blocco,se questa non è la sezione finale
di dati che devono essere codificati e il flag Final è Vero.
Sicurezza su Reti a.a. 2001/2002
CryptEncrypt:Parametri
Se pcbData è Nullo,nessun errore è ritornato, e la funzione immagazzina
la taglia dei dati, in byte,nella variabile puntata da pcbData.
Questo lascia all’ applicazione determinare inequivocabilmente la taglia
di buffer corretta.
Quando una cifrario a blocco è usato, questa lunghezza di dati deve
essere un multiplo della taglia del blocco,se questa non è la sezione finale
di dati che devono essere codificati e il flag Final è Vero.
• cbBuffer
• Contiene il numero di byte nel buffer di pbData.
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.
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);
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.
Sicurezza su Reti a.a. 2001/2002
CryptReleaseContext
La funzione CryptrReleaseContext ritorna:
TRUE
TRUE
se ha successo
FALSE
FALSE altrimenti.
Eventuali errori possono essere ritrovati grazie alla funzione
GetLastError.
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
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.
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.
Sicurezza su Reti a.a. 2001/2002
CryptDecrypt: Codice
in
#include <wincrypt.h>
BOOLWINAPI CryptDecrypt( HCRYPTKEYhKey,
HCRYPTHASH hHash,
in
in
BOOL Final,
in
DWORD dwFlags,
In/out
BYTE *pbData,
In/out
DWORD *pcbData );
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
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.
Prima di chiamare questa funzione, il
chiamante
questo parametro
al
– Il numero di byte cifrati in questo
buffer setterà
è specificato
da pcbData.
numero di bytes da decifrare.Poi ritorna
• pcbData
questo indirizzo contenente il numero di
bytes del testo in chiaro.
– 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.
Sicurezza su Reti a.a. 2001/2002
CryptDecrypt
La funzione CryptrDecrypt ritorna:
TRUE
TRUE
se ha successo
FALSE
FALSE altrimenti.
Eventuali errori possono essere ritrovati grazie alla funzione
GetLastError.
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.
Sicurezza su Reti a.a. 2001/2002
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.
NTE_DOUBLE_ENCRYPT: L’applicazione cerca di decifrare lo
stesso dato due volte.
NTE_FAIL: La funzione fallisce in modo inaspettato.
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.
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.
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.
Sicurezza su Reti a.a. 2001/2002
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)
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)
= 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
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
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
Sicurezza su Reti a.a. 2001/2002
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 token
Dim conf
Sicurezza su Reti a.a. 2001/2002
CONFIGURAZIONE
On Error Resume Next
set token =CreateObject("eTocx.eTokenPro")
document.write "<br>Attaching to reader <b>AKS
token.attach "AKS ifdh 0"
Rappresenta la pagina
corrente nell'Editor HTML.
Collega l’oggetto
If Err.Number
= 0 Then
token alla porta
document.write
"<br>Locking token..."
USB.
token.lock
Questo codice avvia
l'applicazione creando
l'oggetto Token PRO. È
quindi possibile fare
riferimento all'oggetto nel
ifdhcodice
0</b>"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.
In tal modo si prende
possesso della risorsa e-Token
If Err.Number = 0 Then
document.write "<br>Getting configuration..."
set conf = token.getconf
Setta la variabile conf alla
configurazione dell’ e-Token
Sicurezza su Reti a.a. 2001/2002
CONFIGURAZIONE
If Err.Number = 0 Then
document.write "<br>Token ID..."
document.write conf.tokenId
Stampa a video nella pagina HTML l’id dell’ e-Token
document.write "<br>Token color..."
document.write conf.color
Stampa a video il colore dell’e-Token.
End If
document.write "<br>Unlocking token..."
token.unlock
Rilascia la risorsa e-Token.
End If
document.write "<br>Detaching from token..."
token.detach
Chiude definitivamente l’ e-Token
End If
Sicurezza su Reti a.a. 2001/2002
CONFIGURAZIONE
' 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
In questa parte di codice vengono gestiti
set conf = Nothing
eventuali errori
-->
</SCRIPT>
<BR><BR>
<a href = etoken.htm>Back to eToken Samples main menu</a>
</BODY>
</HTML>
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
Sicurezza su Reti a.a. 2001/2002
CONFIGURAZIONE PASSWORD
On Error Resume Next
set ba = CreateObject("eTocx.ByteArray")
set token =CreateObject("eTocx.eTokenPro")
Si creano due oggetti:
un e_Token PRO
un array di byte
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
Si effettuaSiuninserisce
login nell’ela stringa
Token con 1234567890
la stringa nella
contenuta variabile
in ba. ba.
If Err.Number = 0 Then
document.write "<br>Logging in with password 1234567890..."
ba.create_bstr "1234567890"
Sicurezza su Reti a.a. 2001/2002
token.login ba
CONFIGURAZIONE PASSWORD
If Err.Number = 0 Then
document.write "<br>Changing password to 1111..."
ba.create_bstr "1111"
token.changePassword ba
Cambia la password dell’e-Token con
quella contenuta in 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
Sicurezza su Reti a.a. 2001/2002
CONFIGURAZIONE PASSWORD
token.changePassword ba
End If
document.write "<br>Logging out..."
token.logout
Effettua il logout dell’ e-Token.
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
CONFIGURAZIONE PASSWORD
' 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>
<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> eTocx File manipulation VBScript sample for eToken Pro</h2>
<SCRIPT LANGUAGE="VBScript">
<!--
Sicurezza su Reti a.a. 2001/2002
MANIPOLAZIONE FILE BINARI
' Print an array
sub 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 ba
Dim token
Dim 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 BINARI
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
Sicurezza su Reti a.a. 2001/2002
MANIPOLAZIONE FILE BINARI
Effettua un controllo sull’esistenza di
un file nell’e-Token.
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..."
Il file con il nome indicato tra “”
token.del "3f0066660001"
viene cancellato.
End If
If Err.Number = 0 Then
document.write "<br>Creating a public binary EF file 3f00/6666/0001..."
token.createBinaryFile "3f0066660001", 100, 0
Crea un file binario con il nome
indicato tra apici……….
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 “”.
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
Si effetua una scrittura nel file
binario della variabile 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
Sicurezza su Reti
Si effettua una lettura nel file
binario.
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.detach
End If
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>
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>
Sicurezza su Reti a.a. 2001/2002
Sicurezza su Reti a.a. 2001/2002
Scarica

GetLastError