Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
- générer et récupérer des clés DSS
- génération de signatures DSS
- vérification d’une de signature DSS
- l’exportation de clés DSS
Génération et récupération de clés DSS
Les clés DSS peuvent être générées par un appel à la fonction CryptGenKey. L’appel à CryptGenKey nécessite que AT_SIGNATURE ou CALG_DSS_SIGN être transmis dans l’argument Algid. Cet appel génère les valeurs P (modulus premiers), Q (prime), G (générateur), X (exposant secret) et Y (clé publique) à partir de zéro et les conserve dans un objet BLOB de clé au stockage local.
Pour générer une paire de clés de signature DSS
- Appelez la fonction CryptAcquireContext pour obtenir un handle au fournisseur de chiffrement Microsoft DSS.
- Appelez CryptGenKey pour générer les clés. AT_SIGNATURE ou CALG_DSS_SIGN doivent ê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 zéro, la taille de clé par défaut de 1 024 bits sera utilisée. Un handleHCRYPTKEY est retourné dans l’argument hKey.
Pour récupérer un pointeur vers des clés de signature générées précédemment
- Appelez CryptAcquireContext pour obtenir un handle au fournisseur de chiffrement Microsoft DSS.
- Appelez la fonction CryptGetUserKey avec l’argument dwKeySpec défini sur AT_SIGNATURE ou CALG_DSS_SIGN.
Pour récupérer les valeurs P, Q et G
- Appelez CryptAcquireContext pour obtenir un handle au fournisseur de chiffrement Microsoft DSS.
- Appelez CryptGetUserKey avec l’argument dwKeySpec défini sur AT_SIGNATURE ou CALG_DSS_SIGN.
- 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 little-endian.
Génération de signatures DSS
Les données à signer doivent d’abord être hachage à l’aide de l’algorithme sha. Une fois ces données hachées, une signatureDSSest générée en appelant la fonction CryptSignHash.
Pour générer une signature DSS
- Appelez CryptAcquireContext pour obtenir un handle au fournisseur de chiffrement Microsoft DSS.
- Appelez CryptCreateHash avec l’argument Algid défini sur CALG_SHA pour obtenir un handle sur 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 handle 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. AT_SIGNATURE ou CALG_DSS_SIGN peuvent être passés 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 transmis 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, la données signées doit être hachée, puis la signature peut être vérifiée.
Pour vérifier une signature DSS
Appelez CryptAcquireContext pour obtenir un handle au fournisseur de chiffrement Microsoft DSS.
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 sur 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 handle 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 handle sur le 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 handle de la clé publique importée à l’étape 2.
dwFlags a la valeur zéro.
Exportation de clés DSS
Lorsque vous envoyez 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 deDSSdans un format deblob de clé.
Pour exporter la clé publique DSS
- Appelez CryptAcquireContext pour obtenir un handle au fournisseur de chiffrement Microsoft DSS.
- Appelez CryptGetUserKey avec l’argument dwKeySpec défini sur AT_SIGNATURE ou CALG_DSS_SIGN.
- Appelez CryptExportKey avec 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. Leblob de clé publiqueDSS est retourné dans pbData, et la longueur dublob de cléest retournée dans pdwDataLen. Un pointeur de NULL peut être transmis dans pbDataet, dans ce cas, seule la longueur de l’objet BLOB de clé DSS est retournée. L’objet BLOB retourné lors de l’appel à CryptExportKey est au format décrit dans objets blob de clé de fournisseur DSS.
Pour exporter la clé privée DSS
- Suivez la même procédure que pour exporter une clé publique DSS, sauf que lors de 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é de fournisseur DSS.