Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Versleutelde gegevens bestaan uit versleutelde inhoud van elk type en inhoud-versleuteling sessiesleutels voor een of meer ontvangers. Berichten met enveloppen behouden de inhoud van het berichtgeheim en staan alleen opgegeven personen of entiteiten toe om de inhoud op te halen.
Cryptografische berichtsyntaxis (CMS) kan worden gebruikt om berichten in enveloppen te coderen. CMS ondersteunt drie technieken voor sleutelbeheer: sleuteltransport, sleutelovereenkomst en eerder gedistribueerde symmetrische sleutelversleutelingssleutels (KEK). Voorheen gedistribueerde symmetrische KEK wordt ook wel distributie van adressenlijstensleutels genoemd.
In elk van deze drie technieken wordt één sessiesleutel gegenereerd om het bericht in de envelop te versleutelen. Problemen met sleutelbeheer hebben betrekking op de manier waarop de sessiesleutel wordt versleuteld door de afzender en ontsleuteld door een ontvanger. Eén versleuteld bericht kan worden gedistribueerd naar veel geadresseerden met behulp van een combinatie van de belangrijkste beheertechnieken.
Het beheer van sleuteltransport gebruikt de openbare sleutel van een beoogde ontvanger om de sessiesleutel te versleutelen. De ontvanger ontsleutelt de sessiesleutel met behulp van de persoonlijke sleutel die is gekoppeld aan de openbare sleutel die is gebruikt om te versleutelen. De ontvanger gebruikt vervolgens de ontsleutelde sessiesleutel om de gegevens in de envelop te ontsleutelen. Wanneer sleuteltransport wordt gebruikt, heeft de ontvanger geen informatie over de identiteit van de afzender bevestigd.
In sleutelovereenkomstbeheer wordt een tijdelijke, tijdelijke Diffie-Hellman persoonlijke sleutel gegenereerd en gebruikt om de sessiesleutel te versleutelen. De openbare sleutel die overeenkomt met de tijdelijke persoonlijke sleutel wordt opgenomen als onderdeel van de gegevens van de geadresseerde van het bericht. De ontvanger ontsleutelt de sessiesleutel met behulp van de ontvangen kortstondige sleutel en gebruikt deze ontsleutelde sessiesleutel om het bericht in de envelop te ontsleutelen. Door tijdelijke sleutelovereenkomst te gebruiken in combinatie met de persoonlijke sleutel van de ontvanger, beschikt de ontvanger over bevestigde informatie over de identiteit van de afzender.
Voor sleutelbeheer met behulp van eerder gedistribueerde symmetrische sleutelsbevat elk bericht de inhoudsversleutelingssleutel die is versleuteld met een eerder gedistribueerde sleutelversleutelingssleutel. Ontvangers gebruiken de eerder gedistribueerde sleutelversleutelingssleutel om de versleutelingssleutel voor inhoud te ontsleutelen en vervolgens de ontsleutelde sleutel voor inhoudsversleuteling te gebruiken om het bericht in de envelop te ontsleutelen.
In de volgende afbeelding ziet u een typische CMS-reeks gebeurtenissen voor het coderen van gehulde gegevens.
- Er wordt een pointer opgehaald naar het bericht zonder opmaak .
- Er wordt een symmetrische sleutel (sessie) gegenereerd.
- De symmetrische sleutel en het opgegeven versleutelingsalgoritmen worden gebruikt om de berichtgegevens te versleutelen.
- Er wordt een certificaatopslag geopend.
- Het certificaat van de ontvanger wordt opgehaald uit de opslag.
- De openbare sleutel wordt opgehaald uit het certificaat van de ontvanger.
- Met behulp van de openbare sleutel van de ontvanger wordt de symmetrische sleutel versleuteld.
- Vanuit het certificaat van de ontvanger wordt de id van de ontvanger opgehaald.
- De volgende informatie wordt opgenomen in het digitaal enveloppenbericht: het algoritme voor gegevensversleuteling, de versleutelde gegevens, de versleutelde symmetrische sleutel en de informatiestructuur van de ontvanger.
Gebruik de volgende procedure om berichtenfuncties op laag niveau te gebruiken om de zojuist vermelde typische taken uit te voeren.
Een bericht met enveloppen coderen
Maak of haal de inhoud op.
Haal een cryptografische provider op.
Haal een ontvangercertificaat op.
Initialiseer de CMSG_ENVELOPED_ENCODE_INFO structuur.
Roep CryptMsgCalculateEncodedLength- aan om de grootte van de gecodeerde bericht-BLOB op te halen. Wijs er geheugen voor toe.
Roep CryptMsgOpenToEncodeaan, geef CMSG_ENVELOPED door voor dwMsgType en een pointer naar CMSG_ENVELOPED_ENCODE_INFO voor pvMsgEncodeInfo. Als gevolg van deze aanroep krijgt u een referentie naar het geopende bericht.
Roep CryptMsgUpdateaan, waarbij de ingang wordt doorgegeven die in stap 6 is opgehaald en een aanwijzer naar de gegevens die moeten worden versleuteld, gehuld en gecodeerd. Deze functie kan zo vaak worden aangeroepen als nodig is om het coderingsproces te voltooien.
Roep CryptMsgGetParamaan, waarbij de ingang die in stap 6 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.
Sluit het bericht door CryptMsgClose-aan te roepen.
Het resultaat van deze procedure is een gecodeerd bericht dat de versleutelde gegevens bevat, de symmetrische sleutel die is versleuteld met de openbare sleutels van de ontvanger en de gegevensstructuren van de ontvanger. De combinatie van versleutelde inhoud en een versleutelde symmetrische sleutel voor een geadresseerde is een digitale envelop voor die ontvanger. Elke soort inhoud kan worden verzonden naar meerdere geadresseerden.
Verwante onderwerpen