Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
- generazione e recupero di chiavi DSS
- generazione di firme DSS
- verifica di una firma DSS
- l'esportazione di chiavi DSS
Generazione e recupero di chiavi DSS
Le chiavi DSS possono essere generate da una chiamata alla funzione CryptGenKey. Per chiamare CryptGenKey è necessario passare AT_SIGNATURE o CALG_DSS_SIGN nell'argomento Algid. Questa chiamata genererà i valori P (modulo primo), Q (primo), G (generatore), X (esponente segreto) e Y (chiave pubblica) da zero e li rende persistenti in un BLOB della chiave nell'archiviazione locale.
Per generare una coppia di chiavi di firma DSS
- Chiamare la funzione CryptAcquireContext per ottenere un handle al provider di crittografia di Microsoft DSS.
- Chiamare CryptGenKey per generare le chiavi. È necessario passare AT_SIGNATURE o CALG_DSS_SIGN per l'argomento Algid e i 16 bit superiori dell'argomento dwFlags devono essere impostati sulle dimensioni della chiave desiderate. Se i 16 bit superiori sono zero, verranno usate le dimensioni predefinite della chiave di 1.024 bit. Nell'argomento hKey viene restituito un handle diHCRYPTKEY.
Per recuperare un puntatore alle chiavi di firma generate in precedenza
- Chiamare CryptAcquireContext per ottenere un handle al provider di crittografia DSS Microsoft.
- Chiamare la funzioneCryptGetUserKeycon l'argomento dwKeySpec impostato su AT_SIGNATURE o CALG_DSS_SIGN.
Per recuperare i valori P, Q e G
- Chiamare CryptAcquireContext per ottenere un handle al provider di crittografia DSS Microsoft.
- Chiamare CryptGetUserKey con l'argomento dwKeySpec impostato su AT_SIGNATURE o CALG_DSS_SIGN.
- Chiamare CryptGetKeyParam con l'argomento hKey impostato sul puntatore recuperato nel passaggio precedente. L'argomento dwParam deve essere impostato sul flag desiderato; KP_P, KP_Q o KP_G. Il valore viene restituito nell'argomento pbData e la lunghezza dei dati viene restituita nell'argomento pdwDataLen. Il valore viene restituito senza informazioni sull'intestazione e in formato little-endian.
Generazione di firme DSS
I dati da firmare devono prima essere con hash usando l'algoritmoSHA. Dopo l'hashing dei dati, viene generata una firma diDSSchiamando la funzioneCryptSignHash.
Per generare una firma DSS
- Chiamare CryptAcquireContext per ottenere un handle al provider di crittografia DSS Microsoft.
- Chiamare CryptCreateHash con l'argomento Algid impostato su CALG_SHA per ottenere un handle a un oggetto hash SHA.
- Chiamare CryptHashData con l'argomento hHash impostato sull'handle recuperato nel passaggio precedente. Viene creato un hash dei dati e viene restituito un handle all'hash nell'argomento phHash della chiamata di funzione CryptCreateHash.
- Chiamare CryptSignHash con l'argomento hHash impostato sull'handle recuperato nel passaggio precedente. È possibile passare AT_SIGNATURE o CALG_DSS_SIGN nel parametro dwKeySpec. La firma viene restituita all'indirizzo fornito nell'argomento pbSignature e la lunghezza della firma viene restituita all'indirizzo specificato nell'argomento pdwSigLen. Un puntatore NULL può essere passato nell'argomento pbSignature e, in questo caso, la firma non viene generata, ma la lunghezza della firma viene restituita all'indirizzo specificato nel parametro pdwSigLen.
Verifica di una firma DSS
Per verificare una firma DSS, è necessario importare la chiave pubblica DSS del firmatario, i dati firmati devono essere hash e quindi la firma può essere verificata.
Per verificare una firma DSS
Chiamare CryptAcquireContext per ottenere un handle al provider di crittografia DSS Microsoft.
Chiamare CryptImportKey per importare la chiave pubblica DSS del firmatario.
Chiamare CryptCreateHash con l'argomento Algid impostato su CALG_SHA per ottenere un handle a un oggetto hash SHA.
Chiamare CryptHashData con l'argomento hHash impostato sull'handle recuperato nel passaggio precedente e con pbData che punta ai dati firmati. Viene creato un hash dei dati e viene restituito un handle all'hash nell'argomento phHash della chiamata di funzione CryptCreateHash.
Chiamare CryptVerifySignature con le impostazioni seguenti:
hHash viene impostato sull'handle sull'hash eseguito nel passaggio precedente.
pbSignature punta alla firma da verificare.
dwSigLen è impostata sulla lunghezza della firma.
hPubKey viene impostato sull'handle della chiave pubblica importata nel passaggio 2.
dwFlags è impostato su zero.
Esportazione di chiavi DSS
Quando si inviano dati firmati a un utente in cui la firma dovrà essere verificata dal destinatario, la chiave pubblica del firmatario deve essere fornita al destinatario e in genere viene inviata insieme ai dati firmati. Pertanto, è necessario essere in grado di esportare le chiaviDSS in un formatoBLOB della chiave.
Per esportare la chiave pubblica DSS
- Chiamare CryptAcquireContext per ottenere un handle al provider di crittografia DSS Microsoft.
- Chiamare CryptGetUserKey con l'argomento dwKeySpec impostato su AT_SIGNATURE o CALG_DSS_SIGN.
- Chiamare CryptExportKey con hKey impostato sull'handle recuperato nel passaggio precedente, dwBlobType impostato su PUBLICKEYBLOB e dwFlags impostato su zero. LaBLOB della chiave pubblicaDSS viene restituita in pbDatae la lunghezza dell'BLOB della chiaveviene restituita in pdwDataLen. Un puntatore NULL può essere passato in pbDatae, in questo caso, verrà restituita solo la lunghezza del BLOB della chiave DSS. Il BLOB restituito quando si effettua la chiamata a CryptExportKey è nel formato descritto in BLOB della chiave del provider DSS.
Per esportare la chiave privata DSS
- Seguire la stessa procedura di esportazione di una chiave pubblica DSS, ad eccezione del fatto che quando si effettua la chiamata a CryptExportKey, dwBlobType è impostato su PRIVATEKEYBLOB. Il BLOB restituito quando si effettua la chiamata a CryptExportKey è nel formato descritto in BLOB della chiave del provider DSS.