Kodowanie danych kopertowych
Dane kopertowe składają się z zaszyfrowanej zawartości dowolnego typu i zaszyfrowanych kluczy sesji szyfrowania zawartości dla jednego lub więcej adresatów. Zaszyfrowane wiadomości utrzymują zawartość tajną i pozwalają na dostęp tylko określonym osobom lub podmiotom.
Składnia komunikatów kryptograficznych (CMS) może służyć do kodowania komunikatów kopertowych. Usługa CMS obsługuje trzy kluczowe techniki zarządzania: transport kluczy, umowa klucza i wcześniej rozproszone klucze szyfrowania kluczy symetrycznych (KEK). Poprzednio dystrybuowany symetryczny klucz KEK znany jest także jako dystrybucja kluczy listy wysyłkowej.
W każdej z tych trzech technik generowany jest pojedynczy klucz sesji w celu zaszyfrowania wiadomości opakowanej. Problemy z zarządzaniem kluczami dotyczą sposobu szyfrowania klucza sesji przez nadawcę i odszyfrowywania przez odbiorcę. Pojedyncza zaszyfrowana wiadomość może być dystrybuowana do wielu adresatów przy użyciu kombinacji technik zarządzania kluczami.
Zarządzanie kluczami transportowymi korzysta z klucza publicznego docelowego odbiorcy w celu szyfrowania klucza sesji. Odbiorca odszyfrowuje klucz sesji przy użyciu klucza prywatnego skojarzonego z kluczem publicznym, który został użyty do szyfrowania. Następnie odbiorca używa odszyfrowanego klucza sesji do odszyfrowania zaszyfrowanych danych. W przypadku użycia transportu klucza odbiorca nie potwierdził informacji o tożsamości nadawcy.
W zarządzaniu umowami kluczowymi jest generowany tymczasowy, efemeryczny Diffie-Hellman klucz prywatny i używany do szyfrowania klucza sesji. Klucz publiczny odpowiadający efemerycznemu kluczowi prywatnemu jest dołączany jako część informacji adresata wiadomości. Odbiorca odszyfrowuje klucz sesji przy użyciu odebranego klucza efemerycznego i używa tego odszyfrowanego klucza sesji do odszyfrowania komunikatu z kopertą. Korzystając z umowy klucza efemerycznego w połączeniu z kluczem prywatnym odbiorcy, odbiorca komunikatu ma potwierdzone informacje na temat tożsamości nadawcy.
W przypadku zarządzania kluczami przy użyciu wcześniej rozproszonych kluczy symetrycznychkażdy komunikat zawiera klucz szyfrowania zawartości, który został zaszyfrowany przy użyciu wcześniej rozproszonego klucza szyfrowania kluczy. Odbiorcy używają wcześniej rozproszonego klucza szyfrowania kluczy do odszyfrowania klucza szyfrowania zawartości, a następnie używają odszyfrowanego klucza do odszyfrowania zaszyfrowanej wiadomości.
Na poniższej ilustracji przedstawiono typową sekwencję zdarzeń CMS dla kodowania danych kopertowych.
- Pobierany jest wskaźnik do wiadomości tekstu jawnego .
- Jest generowany klucz symetryczny (sesji).
- Klucz symetryczny i określony algorytm szyfrowania są używane do szyfrowania danych komunikatów.
- Zostanie otwarty magazyn certyfikatów.
- Certyfikat odbiorcy jest pobierany z magazynu.
- Klucz publiczny jest pobierany z certyfikatu odbiorcy.
- Przy użyciu klucza publicznego odbiorcy klucz symetryczny jest szyfrowany.
- Z certyfikatu odbiorcy pobierany jest identyfikator odbiorcy.
- Następujące informacje są zawarte w wiadomości z kopertą cyfrową: algorytm szyfrowania danych, zaszyfrowane dane, zaszyfrowany klucz symetryczny i struktura informacji adresata.
Aby użyć funkcji komunikatów niskiego poziomu do wykonania typowych zadań wymienionych właśnie, użyj poniższej procedury.
Aby zakodować zaszyfrowaną wiadomość
Utwórz lub pobierz zawartość.
Pobierz dostawcę usług kryptograficznych.
Uzyskiwanie certyfikatu adresata.
Zainicjuj strukturę CMSG_ENVELOPED_ENCODE_INFO.
Wywołaj CryptMsgCalculateEncodedLength, aby określić wielkość zaszyfrowanego komunikatu BLOB. Przydziel pamięć dla niego.
Wywołaj CryptMsgOpenToEncode, przekazując CMSG_ENVELOPED dla dwMsgType i wskaźnik CMSG_ENVELOPED_ENCODE_INFO dla pvMsgEncodeInfo. W wyniku tego wywołania otrzymasz dojście do otwartego komunikatu.
Wywołaj CryptMsgUpdate, przekazując dojście pobrane w kroku 6 i wskaźnik do danych, które mają być szyfrowane, otoczone i zakodowane. Ta funkcja może być wywoływana tyle razy, ile jest to konieczne do ukończenia procesu kodowania.
Wywołaj CryptMsgGetParam, przekazując dojście pobrane w kroku 6 i odpowiednie typy parametrów, aby uzyskać dostęp do żądanych, zakodowanych danych. Na przykład przekaż CMSG_CONTENT_PARAM, aby uzyskać wskaźnik do kompletnego komunikatu PKCS #7.
Jeśli wynikiem tego kodowania jest użycie jako danych wewnętrznych dla innego zakodowanego komunikatu, takiego jak komunikat z kopertą, należy przekazać parametr CMSG_BARE_CONTENT_PARAM. Aby zapoznać się z przykładem, zobacz alternatywny kod do kodowania zaszyfrowanej wiadomości.
Zamknij komunikat, wywołując CryptMsgClose.
Wynikiem tej procedury jest zakodowany komunikat zawierający zaszyfrowane dane, klucz symetryczny zaszyfrowany przy użyciu kluczy publicznych odbiorcy oraz struktury danych informacji adresata. Kombinacja zaszyfrowanej zawartości i zaszyfrowanego klucza symetrycznego dla odbiorcy jest kopertą cyfrową dla tego odbiorcy. Każdy typ zawartości może być kopertowany dla wielu adresatów.