Clés DSS
- Génération et récupération des clés DSS
- Génération de signatures DSS
- Vérification d’une signature DSS
- Exportation des clés DSS
Génération et récupération des clés DSS
Les clés DSS peuvent être générées par un appel à la fonction CryptGenKey . L’appel à CryptGenKey requiert que soit au niveau de la signature, soit le _ _ signe CALG DSS _ soit passé dans l’argument algid . Cet appel va générer les valeurs P (premier module), Q (prime), G (générateur), X (exposant secret) et Y (clé publique) à partir de zéro et les conserver dans un objet blob de clé dans un stockage local.
Pour générer une paire de clés de signature DSS
- Appelez la fonction CryptAcquireContext pour obtenir un handle pour le fournisseur de services de chiffrement DSS Microsoft.
- Appelez CryptGenKey pour générer les clés. Au niveau de la _ signature ou _ du CALG DSS _ doit être transmis pour l’argument algid et les 16 bits supérieurs de l’argument dwFlags doivent être définis sur la taille de clé souhaitée. Si les 16 bits supérieurs sont nuls, la taille de clé par défaut de 1 024 bits est utilisée. Un descripteur HCRYPTKEY est retourné dans l’argument HKEY .
Pour récupérer un pointeur vers des clés de signature précédemment générées
- Appelez CryptAcquireContext pour obtenir un descripteur du fournisseur de services de chiffrement DSS Microsoft.
- Appelez la fonction CryptGetUserKey avec l’argument dwKeySpec défini sur _ signature ou sur signe CALG _ DSS _ .
Pour récupérer les valeurs P, Q et G
- Appelez CryptAcquireContext pour obtenir un descripteur du fournisseur de services de chiffrement DSS Microsoft.
- Appelez CryptGetUserKey avec l’argument dwKeySpec défini sur la _ signature ou le signe CALG _ DSS _ .
- Appelez CryptGetKeyParam avec l’argument HKEY défini sur le pointeur récupéré à l’étape précédente. L’argument dwParam doit être défini sur l’indicateur souhaité. KP _ P, KP _ Q ou KP _ G. La valeur est retournée dans l’argument pbData , et la longueur des données est retournée dans l’argument pdwDataLen . La valeur est retournée sans informations d’en-tête et au format avec primauté des octets de poids faible .
Génération de signatures DSS
Les données à signer doivent d’abord être hachées à l’aide de l’algorithme SHA . Une fois que ces données ont été hachées, une signature DSS est générée en appelant la fonction CryptSignHash .
Pour générer une signature DSS
- Appelez CryptAcquireContext pour obtenir un descripteur du fournisseur de services de chiffrement DSS Microsoft.
- Appelez CryptCreateHash avec l’argument ALGID défini sur CALG _ SHA pour obtenir un handle vers un objet de hachage SHA.
- Appelez CryptHashData avec l’argument hHash défini sur le handle récupéré à l’étape précédente. Cela crée un hachage des données et retourne un descripteur au hachage dans l’argument phHash de l’appel de fonction CryptCreateHash .
- Appelez CryptSignHash avec l’argument hHash défini sur le handle récupéré à l’étape précédente. Au niveau de _ la signature ou _ du CALG DSS, _ le signe peut être transmis dans le paramètre dwKeySpec . La signature est retournée à l’adresse fournie dans l’argument pbSignature , et la longueur de la signature est retournée à l’adresse fournie dans l’argument pdwSigLen . Un pointeur null peut être passé dans l’argument pbSignature et, dans ce cas, la signature n’est pas générée, mais la longueur de la signature est retournée à l’adresse fournie dans le paramètre pdwSigLen .
Vérification d’une signature DSS
Pour vérifier une signature DSS, la clé publique DSS du signataire doit être importée, les données signées doivent être hachées, puis la signature peut être vérifiée.
Pour vérifier une signature DSS
Appelez CryptAcquireContext pour obtenir un descripteur du fournisseur de services de chiffrement DSS Microsoft.
Appelez CryptImportKey pour importer la clé publique DSS du signataire.
Appelez CryptCreateHash avec l’argument ALGID défini sur CALG _ SHA pour obtenir un handle vers un objet de hachage SHA.
Appelez CryptHashData avec l’argument hHash défini sur le handle récupéré à l’étape précédente et avec pbData pointant vers les données signées. Cela crée un hachage des données et retourne un descripteur au hachage dans l’argument phHash de l’appel de fonction CryptCreateHash .
Appelez CryptVerifySignature avec les paramètres suivants :
hHash est défini sur le descripteur du hachage effectué à l’étape précédente.
pbSignature pointe vers la signature à vérifier.
dwSigLen est défini sur la longueur de la signature.
hPubKey est défini sur le descripteur de la clé publique importée à l’étape 2.
dwFlags a la valeur zéro.
Exportation des clés DSS
Lorsque vous envoyez des données signées à une personne où la signature doit être vérifiée par le destinataire, la clé publique du signataire doit être fournie au destinataire et est généralement envoyée avec les données signées. Par conséquent, il est nécessaire de pouvoir exporter les clés DSS dans un format blob de clé .
Pour exporter la clé publique DSS
- Appelez CryptAcquireContext pour obtenir un descripteur du fournisseur de services de chiffrement DSS Microsoft.
- Appelez CryptGetUserKey avec l’argument dwKeySpec défini sur la _ signature ou le signe CALG _ DSS _ .
- Appelez CryptExportKey avec HKEY défini sur le handle récupéré à l’étape précédente, DwBlobType défini sur PublicKeyBlob et dwFlags défini sur zéro. L' objet blob de clé publique DSS est retourné dans pbData, et la longueur de l' objet blob de clé est retournée dans pdwDataLen. Un pointeur null peut être passé dans pbData et, dans ce cas, seule la longueur de l’objet blob de clé DSS sera retournée. L’objet BLOB retourné lors de l’appel à CryptExportKey est au format décrit dans objets BLOB de clé du fournisseur DSS.
Pour exporter la clé privée DSS
- Suivez la même procédure que pour l’exportation d’une clé publique DSS, sauf que lorsque vous effectuez l’appel à CryptExportKey, dwBlobType est défini sur PRIVATEKEYBLOB. L’objet BLOB retourné lors de l’appel à CryptExportKey est au format décrit dans objets BLOB de clé du fournisseur DSS.