Delen via


Ondertekende gegevens coderen

Gegevens die ondertekend zijn, bestaan uit inhoud van elk type en versleutelde berichten, waarbij hashes van de inhoud gemaakt zijn door nul of meer ondertekenaars. De resulterende hash kan bevestigen dat het oorspronkelijke bericht niet is gewijzigd sinds ondertekening en dat bepaalde personen of entiteiten de gegevens hebben ondertekend.

In de volgende afbeelding ziet u de procedure voor het coderen van een ondertekend bericht. In de lijst na de afbeelding worden de stappen beschreven.

Een bericht heeft mogelijk meerdere ondertekenaars, hash-algoritmen en certificaten. Hoewel in de afbeelding alleen certificaten worden weergegeven, kunnen CRL'sen CTL's hetzelfde proces gebruiken. Ze passen in de afbeelding waar certificaten worden weergegeven.

een ondertekend bericht coderen

Het algemene proces voor het coderen van ondertekende gegevens is als volgt.

Ondertekende gegevens coderen

  1. De gegevens worden indien nodig gemaakt, en er wordt een verwijzing ernaar opgehaald.
  2. Er wordt een certificaatopslag geopend dat het certificaat van de ondertekenaar bevat.
  3. De persoonlijke sleutel voor het certificaat wordt opgehaald. Er zijn twee eigenschappen die op het certificaat moeten worden ingesteld voordat u het gebruikt. Om een certificaat aan een bepaalde CSP te koppelen en, binnen die CSP, aan een specifieke persoonlijke sleutelcontainer , wordt er een methode gebruikt. De andere wordt gebruikt om aan te geven welk hash-algoritme moet worden gebruikt wanneer een hash- bewerking wordt aangeroepen. Deze hoeven slechts eenmaal te worden ingesteld.
  4. De eigenschap van een certificaat bepaalt het hash-algoritme.
  5. Er wordt een hash van de gegevens gemaakt door de gegevens te verzenden via de hashfunctie.
  6. De handtekening wordt gemaakt door de hash te versleutelen met behulp van de persoonlijke sleutel, verkregen via een eigenschap op het certificaat.
  7. De volgende gegevens zijn opgenomen in het voltooide, ondertekende bericht:
    • De oorspronkelijke te ondertekenen gegevens
    • De hash-algoritmen
    • De handtekeningen
    • De informatiestructuren voor ondertekenaar, die de ondertekenaar-id (certificaatverlener en serienummer) bevat
    • De certificaten van de ondertekenaar (optioneel)

Deze procedure illustreert een eenvoudig geval. Complexere gevallen hebben betrekking op geverifieerde kenmerken die zijn opgenomen in het bericht. Wanneer het inhoudstype iets anders is dan een BYTE tekenreeks, of als er ten minste één geverifieerd kenmerk samen met elk gegevenstype is, zijn er twee standaard geverifieerde kenmerken vereist: het inhoudstype (gegevens) en de hash van de inhoud. Onder deze omstandigheden biedt de CryptoAPI- automatisch deze twee vereiste kenmerken. De berichtfuncties op laag niveau hashen de geverifieerde kenmerken, versleutelen de hash met de privésleutel en leveren dit als de handtekening.

Gebruik de berichtenfuncties op laag niveau om de zojuist vermelde taken uit te voeren met behulp van de volgende procedure.

Een ondertekend bericht coderen

  1. Maak of haal de inhoud op.

  2. Haal een cryptografische provider op.

  3. Haal de ondertekenaarcertificaten op.

  4. Initialiseer de CMSG_SIGNER_ENCODE_INFO structuur.

  5. Initialiseer de CMSG_SIGNED_ENCODE_INFO structuur.

  6. Roep CryptMsgCalculateEncodedLength- aan om de grootte van de gecodeerde bericht-BLOB op te halen. Wijs er geheugen voor toe.

  7. Roep CryptMsgOpenToEncodeaan, geef CMSG_SIGNED door voor dwMsgType en een pointer naar CMSG_SIGNED_ENCODE_INFO voor pvMsgEncodeInfo om een handle naar het geopende bericht te verkrijgen.

  8. Roep CryptMsgUpdateaan, waarbij het handvat dat werd verkregen in stap 7 wordt doorgegeven, en een pointer naar de gegevens die moeten worden ondertekend en gecodeerd. Deze functie kan zo vaak worden aangeroepen als nodig is om het coderingsproces te voltooien.

  9. Roep CryptMsgGetParam-aan, waarbij de ingang die in stap 7 is opgehaald en de juiste parametertypen worden doorgegeven om toegang te krijgen tot de gewenste, gecodeerde gegevens. Geef bijvoorbeeld CMSG_CONTENT_PARAM door om een aanwijzer op te halen naar het hele PKCS #7 bericht.

    Als het resultaat van deze codering moet worden gebruikt als de binnenste gegevens voor een ander gecodeerd bericht, zoals een bericht met enveloppen, moet de parameter CMSG_BARE_CONTENT_PARAM worden doorgegeven. Zie Alternatieve code voor het coderen van een bericht met enveloppenvoor een voorbeeld hiervan.

  10. Sluit het bericht door CryptMsgClose-aan te roepen.

Het resultaat van deze procedure is een gecodeerd bericht met de oorspronkelijke gegevens, de versleutelde hash van die gegevens (handtekening) en de ondertekenaargegevens. Er is ook een pointer naar de gewenste, geëncodeerde BLOB.

Zie voorbeeld van het C-programma: ondertekening, codering, decoderen en verifiëren van een berichtvoor meer informatie over C-codering.