Usługi kryptograficzneCryptographic Services

Sieci publicznych, takich jak Internet nie zapewniają środek bezpiecznej komunikacji między jednostkami.Public networks such as the Internet do not provide a means of secure communication between entities. Komunikacja za pośrednictwem tych sieci jest podatny na trwa odczytu lub nawet zmodyfikować nieautoryzowanym osobom trzecim.Communication over such networks is susceptible to being read or even modified by unauthorized third parties. Kryptografia pomaga chronić dane przed wyświetlaniem, udostępnia metody wykrywania, czy dane zostały zmodyfikowane, a także pomaga w zapewnieniu bezpiecznego oznacza, że komunikacji za pośrednictwem kanałów w przeciwnym razie niezabezpieczone.Cryptography helps protect data from being viewed, provides ways to detect whether data has been modified, and helps provide a secure means of communication over otherwise nonsecure channels. Na przykład danych można być szyfrowane przy użyciu algorytmu kryptograficznego, przekazywane w stanu zaszyfrowanego i później odszyfrować zamierzony innych firm.For example, data can be encrypted by using a cryptographic algorithm, transmitted in an encrypted state, and later decrypted by the intended party. Jeśli strona trzecia przechwytuje zaszyfrowane dane, będzie trudne do odszyfrowania.If a third party intercepts the encrypted data, it will be difficult to decipher.

W .NET Framework klas w System.Security.Cryptography przestrzeni nazw Zarządzanie wiele szczegółów kryptografii.In the .NET Framework, the classes in the System.Security.Cryptography namespace manage many details of cryptography for you. Niektóre są otoki dla niezarządzanych API kryptografii firmy Microsoft (CryptoAPI), a inne wyłącznie zarządzanej implementacji.Some are wrappers for the unmanaged Microsoft Cryptography API (CryptoAPI), while others are purely managed implementations. Nie musisz być ekspertem w kryptografii do użycia w ramach tych zajęć.You do not need to be an expert in cryptography to use these classes. Podczas tworzenia nowego wystąpienia jednego z szyfrowania klasy algorytm klucze są automatycznie generowane w celu ułatwienia i domyślne właściwości są tak bezpieczne i bezpieczne, jak to możliwe.When you create a new instance of one of the encryption algorithm classes, keys are autogenerated for ease of use, and default properties are as safe and secure as possible.

W tym omówieniu przedstawiono streszczenie metod szyfrowanie i rozwiązań obsługiwanych przez program .NET Framework, w tym manifesty ClickOnce, Suite B i pomocy technicznej Cryptography Next Generation (CNG) wprowadzone w programie .NET Framework 3.5.This overview provides a synopsis of the encryption methods and practices supported by the .NET Framework, including the ClickOnce manifests, Suite B, and Cryptography Next Generation (CNG) support introduced in the .NET Framework 3.5.

Ten przegląd zawiera następujące sekcje:This overview contains the following sections:

Aby uzyskać dodatkowe informacje o kryptografii i usług firmy Microsoft, składniki i narzędzia, które pozwalają zwiększyć bezpieczeństwo kryptograficzne dla poszczególnych aplikacji Zobacz Win32 i COM, rozwoju, sekcji Zabezpieczenia w niniejszej dokumentacji.For additional information about cryptography and about Microsoft services, components, and tools that enable you to add cryptographic security to your applications, see the Win32 and COM Development, Security section of this documentation.

Podstawowych usług kryptograficznychCryptographic Primitives

W typowej sytuacji kryptografii jest używane w sytuacji obie strony (Alice i Bob) komunikują się za pośrednictwem niezabezpieczonych kanału.In a typical situation where cryptography is used, two parties (Alice and Bob) communicate over a nonsecure channel. Alice i Bob chcesz zapewnić niezrozumiała każdy, kto może nasłuchiwać komunikacji.Alice and Bob want to ensure that their communication remains incomprehensible by anyone who might be listening. Ponadto ponieważ Alice i Bob znajdują się w lokalizacjach zdalnych, Alicja musisz upewnić się, że informacje, które otrzyma ona z Bob nie został zmodyfikowany przez dowolną osobę podczas transmisji.Furthermore, because Alice and Bob are in remote locations, Alice must make sure that the information she receives from Bob has not been modified by anyone during transmission. Ponadto ona musisz upewnić się, że informacje naprawdę pochodzą z niego, a nie z osobą, która personifikuje Bob.In addition, she must make sure that the information really does originate from Bob and not from someone who is impersonating Bob.

Kryptografia jest wykorzystywana do osiągnięcia następujących celów:Cryptography is used to achieve the following goals:

  • Poufność: Aby pomóc w ochronie tożsamości użytkownika lub danych z odczytu.Confidentiality: To help protect a user's identity or data from being read.

  • Integralność danych: Aby chronić dane przed zmianami.Data integrity: To help protect data from being changed.

  • Uwierzytelnianie: Aby upewnić się, że dane pochodzą z określoną stroną.Authentication: To ensure that data originates from a particular party.

  • Niemożność wyparcia się: Aby zapobiec konkretnej strony odmowy wysłał wiadomość.Non-repudiation: To prevent a particular party from denying that they sent a message.

Aby osiągnąć te cele, umożliwia kombinacji algorytmów i praktyk, znane jako podstawowych usług kryptograficznych tworzenie schematu kryptograficznego.To achieve these goals, you can use a combination of algorithms and practices known as cryptographic primitives to create a cryptographic scheme. W poniższej tabeli wymieniono prymitywów kryptograficznych i ich zastosowań.The following table lists the cryptographic primitives and their uses.

Pierwotny kryptograficzneCryptographic primitive ZastosowanieUse
Klucz tajny szyfrowania (Kryptografia symetryczna)Secret-key encryption (symmetric cryptography) Wykonuje przekształcenie danych, aby zapobiec odczytywany przez osoby trzecie.Performs a transformation on data to keep it from being read by third parties. Ten typ szyfrowania używa pojedyncza, współdzielona, klucza tajnego szyfrowania i odszyfrowywania danych.This type of encryption uses a single shared, secret key to encrypt and decrypt data.
Szyfrowanie klucza publicznego (kryptografii asymetryczny)Public-key encryption (asymmetric cryptography) Wykonuje przekształcenie danych, aby zapobiec odczytywany przez osoby trzecie.Performs a transformation on data to keep it from being read by third parties. Ten typ szyfrowania do szyfrowania i odszyfrowywania danych korzysta z pary kluczy publiczny/prywatny.This type of encryption uses a public/private key pair to encrypt and decrypt data.
Podpisywanie kryptograficzneCryptographic signing Pomaga sprawdzić pochodzą dane z określonej innej firmy, tworząc podpis cyfrowy, który jest unikatowy dla tej strony.Helps verify that data originates from a specific party by creating a digital signature that is unique to that party. Ten proces jest również używa funkcji mieszania.This process also uses hash functions.
Skróty kryptograficzneCryptographic hashes Mapuje dane z dowolnej długości sekwencji bajtów o stałej długości.Maps data from any length to a fixed-length byte sequence. Skróty są statystycznie unikatowy. inną kombinację dwóch bajtów nie będzie skrótu na tę samą wartość.Hashes are statistically unique; a different two-byte sequence will not hash to the same value.

Powrót do początkuBack to top

Klucz tajny szyfrowaniaSecret-Key Encryption

Algorytmy szyfrowania klucz tajny użyć pojedynczego klucza tajnego do szyfrowania i odszyfrowywania danych.Secret-key encryption algorithms use a single secret key to encrypt and decrypt data. Należy zabezpieczyć klucza przed dostępem nieautoryzowanych agentów, ponieważ każda strona, która ma klucz służy do odszyfrowywania danych lub szyfrować dane, zgłaszanie się, że pochodzi ze strony użytkownika.You must secure the key from access by unauthorized agents, because any party that has the key can use it to decrypt your data or encrypt their own data, claiming it originated from you.

Klucz tajny szyfrowania jest również określany jako szyfrowania symetrycznego, ponieważ ten sam klucz służy do szyfrowania i odszyfrowywania.Secret-key encryption is also referred to as symmetric encryption because the same key is used for encryption and decryption. Algorytmy szyfrowania klucz tajny są bardzo szybko (w porównaniu z algorytmami klucz publiczny) i dobrze nadaje się do wykonywania przekształceniami kryptograficznymi dużych strumieni danych.Secret-key encryption algorithms are very fast (compared with public-key algorithms) and are well suited for performing cryptographic transformations on large streams of data. Szyfrowanie asymetryczne algorytmy, takie jak RSA są ograniczone ze sobą matematycznie w ilości danych można zaszyfrować.Asymmetric encryption algorithms such as RSA are limited mathematically in how much data they can encrypt. Algorytmy szyfrowania symetrycznego nie mają zazwyczaj tych problemów.Symmetric encryption algorithms do not generally have those problems.

Typ algorytmu klucz tajny o nazwie szyfrowania bloku jest używany do szyfrowania jeden blok danych w danym momencie.A type of secret-key algorithm called a block cipher is used to encrypt one block of data at a time. Blok szyfrów, takie jak Data Encryption Standard (DES), TripleDES, i Advanced Encryption Standard (AES) kryptograficznie przekształcania danych wejściowych blok n bajtów do bloku danych wyjściowych zaszyfrowanych bajtów.Block ciphers such as Data Encryption Standard (DES), TripleDES, and Advanced Encryption Standard (AES) cryptographically transform an input block of n bytes into an output block of encrypted bytes. Jeśli chcesz zaszyfrować lub odszyfrować sekwencji bajtów, trzeba go blok po bloku.If you want to encrypt or decrypt a sequence of bytes, you have to do it block by block. Ponieważ n jest mały (8 bajtów DES i TripleDES; 16-bajtowy [domyślnie], w bajtach 24 lub 32 bajty w przypadku standardu AES), wartości danych, które są większe niż n muszą być szyfrowane jednego bloku naraz.Because n is small (8 bytes for DES and TripleDES; 16 bytes [the default], 24 bytes, or 32 bytes for AES), data values that are larger than n have to be encrypted one block at a time. Wartości danych, które są mniejsze niż n trzeba można rozszerzyć, aby n w celu przetworzenia.Data values that are smaller than n have to be expanded to n in order to be processed.

Jeden prosty formularz szyfrem nosi nazwę trybu codebook elektronicznej (ECB).One simple form of block cipher is called the electronic codebook (ECB) mode. Tryb ECB jest uważana za niebezpieczną, ponieważ nie jest używane wektor inicjowania do inicjowania pierwszego bloku w postaci zwykłego tekstu.ECB mode is not considered secure, because it does not use an initialization vector to initialize the first plaintext block. Dla danego klucza tajnego k, cipher Prosty blok, który nie korzysta z wektor inicjowania spowoduje zaszyfrowanie tego samego bloku danych wejściowych zwykłego tekstu do tego samego bloku danych wyjściowych tekstu szyfrowanego.For a given secret key k, a simple block cipher that does not use an initialization vector will encrypt the same input block of plaintext into the same output block of ciphertext. W związku z tym jeśli masz zduplikowanych bloków w strumienia danych wejściowych w postaci zwykłego tekstu, konieczne będzie zduplikowanych bloków w danych wyjściowych strumienia tekstu szyfrowanego.Therefore, if you have duplicate blocks in your input plaintext stream, you will have duplicate blocks in your output ciphertext stream. Te bloki zduplikowany wyjściowy alertu nieautoryzowanym użytkownikom słabe szyfrowanie używane algorytmy, które może być zatrudnionych i możliwe tryby ataku.These duplicate output blocks alert unauthorized users to the weak encryption used the algorithms that might have been employed, and the possible modes of attack. Trybu szyfrowania ECB występuje w związku z tym dość analizy i ostatecznie kluczy odnajdywania.The ECB cipher mode is therefore quite vulnerable to analysis, and ultimately, key discovery.

Klasy szyfrowania bloku, które znajdują się w bibliotece klasy bazowej użyć domyślnego łańcucha tryb o nazwie szyfrowania bloku łańcucha (CBC), mimo że można zmienić to ustawienie domyślne, jeśli chcesz.The block cipher classes that are provided in the base class library use a default chaining mode called cipher-block chaining (CBC), although you can change this default if you want.

Szyfry CBC rozwiązywania problemów związanych z mechanizmów szyfrowania ECB przy użyciu wektor inicjowania (IV) do zaszyfrowania pierwszego bloku zwykłego tekstu.CBC ciphers overcome the problems associated with ECB ciphers by using an initialization vector (IV) to encrypt the first block of plaintext. Każdy blok kolejnych zwykłego tekstu ulega bitowe wykluczające OR (XOR) operację, używając poprzedniego bloku szyfrowany przed jest zaszyfrowany.Each subsequent block of plaintext undergoes a bitwise exclusive OR (XOR) operation with the previous ciphertext block before it is encrypted. Każdy blok tekstu szyfrowanego w związku z tym jest zależna od wszystkich poprzednich blokach.Each ciphertext block is therefore dependent on all previous blocks. Gdy ten system jest nagłówków wiadomości używane, wspólnego, które mogą być znane nieautoryzowanym użytkownikom nie może być używany do odtwarzanie klucza.When this system is used, common message headers that might be known to an unauthorized user cannot be used to reverse-engineer a key.

Jednym ze sposobów naruszyć bezpieczeństwo danych, które są szyfrowane za pomocą szyfrowania CBC jest przeprowadzenie kompleksowe przeszukiwanie co możliwe klucza.One way to compromise data that is encrypted with a CBC cipher is to perform an exhaustive search of every possible key. W zależności od rozmiaru klucza, który jest używany do szyfrowania tego rodzaju wyszukiwania jest bardzo czasochłonne, za pomocą nawet komputerów najszybszy i dlatego niewykonalne.Depending on the size of the key that is used to perform encryption, this kind of search is very time-consuming using even the fastest computers and is therefore infeasible. Większe rozmiary kluczy są trudniejsze do odszyfrowania.Larger key sizes are more difficult to decipher. Mimo że szyfrowania nie uniemożliwiają teoretycznie dla osoby atakującej pobierania zaszyfrowanych danych, jej podnieść koszt w ten sposób.Although encryption does not make it theoretically impossible for an adversary to retrieve the encrypted data, it does raise the cost of doing this. Jeśli zajmuje trzy miesiące, aby wykonać kompleksowe przeszukiwanie do pobierania danych, która ma znaczenie tylko przez kilka dni, metoda kompleksowe przeszukiwanie jest niepraktyczne.If it takes three months to perform an exhaustive search to retrieve data that is meaningful only for a few days, the exhaustive search method is impractical.

Wadą szyfrowania klucz tajny jest zakłada obie strony mają uzgodniono klucza i IV i przekazywane ich wartości.The disadvantage of secret-key encryption is that it presumes two parties have agreed on a key and IV, and communicated their values. IV nie jest uważany za wpisu tajnego i mogą być przesyłane w postaci zwykłego tekstu z komunikatem.The IV is not considered a secret and can be transmitted in plaintext with the message. Jednak klucz muszą być trzymane w tajemnicy przed nieautoryzowanymi użytkownikami.However, the key must be kept secret from unauthorized users. Z powodu problemów z tymi szyfrowania klucz tajny jest często używana razem z szyfrowania klucza publicznego do prywatnie komunikacji wartości klucza i IV.Because of these problems, secret-key encryption is often used together with public-key encryption to privately communicate the values of the key and IV.

Przy założeniu, że Alice i Bob znajdują się dwie strony, które mają do komunikacji za pośrednictwem niezabezpieczonych kanału, mogą użyć szyfrowania klucz tajny w następujący sposób: Alice i Bob zobowiązuje się do jednego określonego algorytmu (na przykład AES) za pomocą określonego klucza i IV.Assuming that Alice and Bob are two parties who want to communicate over a nonsecure channel, they might use secret-key encryption as follows: Alice and Bob agree to use one particular algorithm (AES, for example) with a particular key and IV. Alicja Redaguj komunikat i tworzy strumień sieci (być może nazwanego potoku lub sieci poczty e-mail), na którym chcesz wysłać wiadomość.Alice composes a message and creates a network stream (perhaps a named pipe or network email) on which to send the message. Następnie użytkownik szyfruje tekst przy użyciu klucza i IV i wysyła zaszyfrowanego komunikatu i IV do niego za pośrednictwem sieci intranet.Next, she encrypts the text using the key and IV, and sends the encrypted message and IV to Bob over the intranet. Robert otrzymuje zaszyfrowanego tekstu i odszyfrowuje ją przy użyciu IV i wcześniej uzgodnionych klucza.Bob receives the encrypted text and decrypts it by using the IV and previously agreed upon key. W przypadku przechwycenia transmisji interceptor nie można odzyskać oryginalnej wiadomości, ponieważ nie zna klucza.If the transmission is intercepted, the interceptor cannot recover the original message, because he does not know the key. W tym scenariuszu tylko klucz musi pozostać wpisu tajnego.In this scenario, only the key must remain secret. W rzeczywistym scenariuszu Alice i Bob generuje klucz tajny i przenieść klucz tajny (symetrycznego) do drugiej strony jest używane szyfrowanie (asymetrycznie) klucz publiczny.In a real world scenario, either Alice or Bob generates a secret key and uses public-key (asymmetric) encryption to transfer the secret (symmetric) key to the other party. Aby uzyskać więcej informacji o szyfrowaniu klucza publicznego zobacz następną sekcję.For more information about public-key encryption, see the next section.

Program .NET Framework zawiera następujące klasy, które implementują algorytmy szyfrowania klucz tajny:The .NET Framework provides the following classes that implement secret-key encryption algorithms:

Powrót do początkuBack to top

Public-Key EncryptionPublic-Key Encryption

Szyfrowanie klucza publicznego używa klucza prywatnego, które muszą być trzymane w tajemnicy przed nieautoryzowanymi użytkownikami i kluczem publicznym, które mogą być ujawniane nikomu.Public-key encryption uses a private key that must be kept secret from unauthorized users and a public key that can be made public to anyone. Klucz publiczny i klucz prywatny są ze sobą matematycznie powiązane; można odszyfrować danych, które są szyfrowane przy użyciu klucza publicznego tylko przy użyciu klucza prywatnego i danych, który jest podpisany przy użyciu klucza prywatnego, można sprawdzić tylko przy użyciu klucza publicznego.The public key and the private key are mathematically linked; data that is encrypted with the public key can be decrypted only with the private key, and data that is signed with the private key can be verified only with the public key. Klucz publiczny mogą być udostępniane osobom; Służy do szyfrowania danych do wysłania do hodowca klucza prywatnego.The public key can be made available to anyone; it is used for encrypting data to be sent to the keeper of the private key. Algorytmy kryptograficzne klucza publicznego są również nazywane asymetryczne algorytmy, ponieważ jeden klucz jest wymagany do szyfrowania danych, a inny klucz jest wymagany do odszyfrowania danych.Public-key cryptographic algorithms are also known as asymmetric algorithms because one key is required to encrypt data, and another key is required to decrypt data. Podstawową regułę kryptograficznych uniemożliwia ponowne użycie klucza, a oba klucze, powinien być unikatowy dla każdej sesji komunikacji.A basic cryptographic rule prohibits key reuse, and both keys should be unique for each communication session. Jednak w praktyce ogólnie długotrwałe są klucze asymetryczne.However, in practice, asymmetric keys are generally long-lived.

Obie strony (Alice i Bob) może używać szyfrowania klucza publicznego w następujący sposób: Po pierwsze Alicja generowana jest para kluczy publiczny/prywatny.Two parties (Alice and Bob) might use public-key encryption as follows: First, Alice generates a public/private key pair. Jeśli Bob chce, aby wysłać wiadomość zaszyfrowaną Alicja, zwróci się więc do jej dla swojego klucza publicznego.If Bob wants to send Alice an encrypted message, he asks her for her public key. Alicja wysyła Bob jej klucz publiczny za pośrednictwem niezabezpieczonej sieci, a Bob używa tego klucza szyfrowania wiadomości.Alice sends Bob her public key over a nonsecure network, and Bob uses this key to encrypt a message. Robert wysyła zaszyfrowanego komunikatu do Alicji, a ona odszyfrowuje je, używając swojego klucza prywatnego.Bob sends the encrypted message to Alice, and she decrypts it by using her private key. Jeśli Bob odebrane przez Alice klucz za pośrednictwem niezabezpieczonych kanału, takich jak sieć publiczną Bob jest otwarty na atak typu man-in--middle.If Bob received Alice's key over a nonsecure channel, such as a public network, Bob is open to a man-in-the-middle attack. W związku z tym Bob należy sprawdzić za pomocą Alicja, że ma on poprawny kopię jej klucz publiczny.Therefore, Bob must verify with Alice that he has a correct copy of her public key.

Podczas przekazywania klucza publicznego Alicji nieautoryzowany agent może przechwycić klucza.During the transmission of Alice's public key, an unauthorized agent might intercept the key. Ponadto ten sam agent może przechwycić zaszyfrowanego komunikatu z niego.Furthermore, the same agent might intercept the encrypted message from Bob. Jednak agent nie może odszyfrować wiadomości przy użyciu klucza publicznego.However, the agent cannot decrypt the message with the public key. Komunikat mogły być odszyfrowane tylko przy użyciu klucza prywatnego przez Alice, które nie zostały przekazane.The message can be decrypted only with Alice's private key, which has not been transmitted. Alicja nie używa swojego klucza prywatnego do zaszyfrowania komunikatu odpowiedzi do Boba, ponieważ każda osoba z kluczem publicznym można odszyfrować wiadomości.Alice does not use her private key to encrypt a reply message to Bob, because anyone with the public key could decrypt the message. Jeśli Alicja chce, aby wysłać wiadomość do Roberta, ona zadaje Bob dla swojego klucza publicznego, a następnie szyfruje jej wiadomości przy użyciu tego klucza publicznego.If Alice wants to send a message back to Bob, she asks Bob for his public key and encrypts her message using that public key. Bob odszyfrowuje wiadomości za pomocą jego skojarzonego klucza prywatnego.Bob then decrypts the message using his associated private key.

W tym scenariuszu Alice i Bob szyfrowania klucza publicznego (asymetrycznie) do przekazania klucza tajnego klucza (symetrycznego) i klucz tajny szyfrowania w pozostałej części sesji.In this scenario, Alice and Bob use public-key (asymmetric) encryption to transfer a secret (symmetric) key and use secret-key encryption for the remainder of their session.

Poniższa lista zawiera porównanie klucz publiczny i klucz tajny algorytmów kryptograficznych:The following list offers comparisons between public-key and secret-key cryptographic algorithms:

  • Algorytmy kryptograficzne klucza publicznego używany rozmiar ustalony bufor, klucz tajny algorytmy kryptograficzne używane bufor o zmiennej długości.Public-key cryptographic algorithms use a fixed buffer size, whereas secret-key cryptographic algorithms use a variable-length buffer.

  • Algorytmy kluczy publicznych nie można użyć do łańcucha danych razem do strumieni sposób, w jaki można algorytmy klucz tajny, ponieważ tylko niewielkich ilości danych, które mogą być szyfrowane.Public-key algorithms cannot be used to chain data together into streams the way secret-key algorithms can, because only small amounts of data can be encrypted. W związku z tym asymetryczne operacje nie należy używać tego samego modelu przesyłania strumieniowego jako operacje symetryczne.Therefore, asymmetric operations do not use the same streaming model as symmetric operations.

  • Szyfrowanie klucza publicznego ma znacznie większych przestrzeń kluczy (zakres możliwych wartości dla klucza) niż klucz tajny szyfrowania.Public-key encryption has a much larger keyspace (range of possible values for the key) than secret-key encryption. Dlatego szyfrowanie klucza publicznego jest mniej podatny na ataki wyczerpująca, próbujących za każdy klucz możliwe.Therefore, public-key encryption is less susceptible to exhaustive attacks that try every possible key.

  • Klucze publiczne są łatwe do dystrybucji, ponieważ nie mają zostać zabezpieczone, pod warunkiem, że istnieje jakiś sposób, aby zweryfikować tożsamość nadawcy.Public keys are easy to distribute because they do not have to be secured, provided that some way exists to verify the identity of the sender.

  • Niektóre algorytmy klucza publicznego (np. RSA i DSA, ale nie Diffie-Hellman) może służyć do tworzenia podpisów cyfrowych, aby sprawdzić tożsamość nadawcy danych.Some public-key algorithms (such as RSA and DSA, but not Diffie-Hellman) can be used to create digital signatures to verify the identity of the sender of data.

  • Algorytmy klucza publicznego są bardzo wolne w porównaniu z algorytmami klucz tajny, a nie są przeznaczone do zaszyfrowania dużych ilości danych.Public-key algorithms are very slow compared with secret-key algorithms, and are not designed to encrypt large amounts of data. Algorytmy klucza publicznego są przydatne tylko w przypadku przesyłania bardzo małe ilości danych.Public-key algorithms are useful only for transferring very small amounts of data. Zazwyczaj szyfrowania klucza publicznego jest używany do szyfrowania klucza i IV, który będzie używany przez algorytm klucz tajny.Typically, public-key encryption is used to encrypt a key and IV to be used by a secret-key algorithm. Po przesłaniu klucza i IV szyfrowania klucz tajny jest używana w pozostałej części sesji.After the key and IV are transferred, secret-key encryption is used for the remainder of the session.

Program .NET Framework zawiera następujące klasy, które implementują algorytmy szyfrowania klucza publicznego:The .NET Framework provides the following classes that implement public-key encryption algorithms:

RSA umożliwia szyfrowania i podpisywania, ale DSA może służyć tylko do podpisywania, a Diffie'ego-Hellmana mogą służyć tylko do generowania kluczy.RSA allows both encryption and signing, but DSA can be used only for signing, and Diffie-Hellman can be used only for key generation. Ogólnie rzecz biorąc algorytmów klucza publicznego są bardziej ograniczone ich zastosowań niż algorytmów klucza prywatnego.In general, public-key algorithms are more limited in their uses than private-key algorithms.

Powrót do początkuBack to top

Podpisy cyfroweDigital Signatures

Algorytmy kluczy publicznych może służyć również do tworzenia podpisów cyfrowych.Public-key algorithms can also be used to form digital signatures. Podpisy cyfrowe uwierzytelnianie tożsamości nadawcy (Jeśli ufasz nadawcy klucz publiczny) oraz pomóc je zabezpieczyć integralności danych.Digital signatures authenticate the identity of a sender (if you trust the sender's public key) and help protect the integrity of data. Za pomocą klucza publicznego, generowane przez Alice, Odbiorca danych Alicji można sprawdzić, że Alicja wysyłane go przez porównanie podpis cyfrowy do Alicji danych i klucza publicznego Alicji.Using a public key generated by Alice, the recipient of Alice's data can verify that Alice sent it by comparing the digital signature to Alice's data and Alice's public key.

Aby używać kryptografii klucza publicznego do cyfrowego podpisywania wiadomości, Alicja najpierw dotyczy algorytmu wyznaczania wartości skrótu wiadomości, aby utworzyć skrót wiadomości.To use public-key cryptography to digitally sign a message, Alice first applies a hash algorithm to the message to create a message digest. Skrót wiadomości jest zwarty i unikatowy reprezentacja danych.The message digest is a compact and unique representation of data. Alicja następnie szyfruje skrót wiadomości przy użyciu swojego klucza prywatnego do utworzenia jej podpisu.Alice then encrypts the message digest with her private key to create her personal signature. Po odebraniu wiadomości i podpisie, Robert odszyfrowuje podpisu przy użyciu klucza publicznego Alicji do odzyskania skrót wiadomości i skróty wiadomości za pomocą tego samego algorytmu wyznaczania wartości skrótu, używanym przez Alice.Upon receiving the message and signature, Bob decrypts the signature using Alice's public key to recover the message digest and hashes the message using the same hash algorithm that Alice used. Skrót wiadomości, że Bob oblicza dokładnie odpowiada skrót wiadomości otrzymanych od Alicji, Roberta ma pewność, że wiadomość pochodzi z inicjator klucz prywatny oraz czy dane nie zostały zmodyfikowane.If the message digest that Bob computes exactly matches the message digest received from Alice, Bob is assured that the message came from the possessor of the private key and that the data has not been modified. Bob zaufania, że Alicja jest inicjator klucza prywatnego, zna się, że wiadomość pochodzi od Alicji.If Bob trusts that Alice is the possessor of the private key, he knows that the message came from Alice.

Uwaga

Podpis można sprawdzić przez nikogo, ponieważ klucz publiczny nadawcy jest popularną wiedzę i najczęściej przygotowywanych do uwzględnienia w formacie podpisu cyfrowego.A signature can be verified by anyone because the sender's public key is common knowledge and is typically included in the digital signature format. Ta metoda nie zachowuje poufność wiadomości; wiadomości tajne go musi również być szyfrowana.This method does not retain the secrecy of the message; for the message to be secret, it must also be encrypted.

Program .NET Framework zawiera następujące klasy, które implementują algorytmy podpis cyfrowy:The .NET Framework provides the following classes that implement digital signature algorithms:

Powrót do początkuBack to top

Wartości skrótówHash Values

Algorytmy wyznaczania wartości skrótu wartości binarnych o dowolnej długości są mapowane na mniejsze wartości binarnych o stałej długości, znane jako wartości skrótu.Hash algorithms map binary values of an arbitrary length to smaller binary values of a fixed length, known as hash values. Wartość skrótu jest numeryczna reprezentacja elementu danych.A hash value is a numerical representation of a piece of data. Wyznaczania wartości skrótu akapitu zwykłego tekstu i zmień nawet jednej litery akapitu, kolejne wyznaczania wartości skrótu powoduje wygenerowanie inną wartość.If you hash a paragraph of plaintext and change even one letter of the paragraph, a subsequent hash will produce a different value. Jeśli wartość skrótu jest kryptograficznie silnej, jego wartość znacznie się zmieni.If the hash is cryptographically strong, its value will change significantly. Na przykład jeśli pojedynczy bit wiadomości zostanie zmieniony, funkcję silne mieszania może powodować danych wyjściowych, który różni się o 50%.For example, if a single bit of a message is changed, a strong hash function may produce an output that differs by 50 percent. Wiele wartości wejściowe mogą skrótu na tę samą wartość w danych wyjściowych.Many input values may hash to the same output value. Jednak go jest praktycznie niemożliwe Znajdź skrót do tej samej wartości dwóch różnych danych wejściowych.However, it is computationally infeasible to find two distinct inputs that hash to the same value.

Obie strony (Alice i Bob) można używać funkcji skrótu do zapewnienia integralności komunikatu.Two parties (Alice and Bob) could use a hash function to ensure message integrity. Użytkownik może wybrać algorytm wyznaczania wartości skrótu, aby zarejestrować swoje wiadomości.They would select a hash algorithm to sign their messages. Alicja będzie zapisać komunikat, a następnie utwórz skrót tego komunikatu przy użyciu wybranego algorytmu.Alice would write a message, and then create a hash of that message by using the selected algorithm. One będą następnie wykonaj jedną z następujących metod:They would then follow one of the following methods:

  • Alicja wysyła wiadomości w postaci zwykłego tekstu i skrótu wiadomości (podpis cyfrowy) do niego.Alice sends the plaintext message and the hashed message (digital signature) to Bob. Robert otrzymuje wyznacza wartość skrótu wiadomości i porównuje jego wartość skrótu, aby wartość skrótu, który on otrzymany od Alice.Bob receives and hashes the message and compares his hash value to the hash value that he received from Alice. Jeśli wartości skrótu są identyczne, wiadomość nie została zmieniona.If the hash values are identical, the message was not altered. Jeśli wartości nie są identyczne, komunikat zostało zmienione po jego autorem, Alicji.If the values are not identical, the message was altered after Alice wrote it.

    Niestety ta metoda nie można ustalić autentyczności nadawcy.Unfortunately, this method does not establish the authenticity of the sender. Każdy może spersonifikować Alicja i wysłać wiadomość do niego.Anyone can impersonate Alice and send a message to Bob. Używają tego samego algorytmu wyznaczania wartości skrótu do podpisania wiadomości, a wszystko, co można określić Bob to, czy komunikat odpowiada jego podpisu.They can use the same hash algorithm to sign their message, and all Bob can determine is that the message matches its signature. Jest to jeden formularz atak typu man-in--middle.This is one form of a man-in-the-middle attack. Aby uzyskać więcej informacji, zobacz przykład komunikacji Secure Cryptography Next Generation (CNG).For more information, see Cryptography Next Generation (CNG) Secure Communication Example.

  • Alicja wysyła wiadomości w postaci zwykłego tekstu do niego za pośrednictwem niezabezpieczonych kanału publicznych.Alice sends the plaintext message to Bob over a nonsecure public channel. Wysyła skrótu wiadomości do niego za pośrednictwem bezpiecznego kanału prywatnych.She sends the hashed message to Bob over a secure private channel. Robert otrzymuje komunikat w postaci zwykłego tekstu, skróty go i porównuje skrót do prywatnie wymiana skrótu.Bob receives the plaintext message, hashes it, and compares the hash to the privately exchanged hash. Jeśli skróty są zgodne, Robert wie, dwie rzeczy:If the hashes match, Bob knows two things:

    • Wiadomość nie została zmodyfikowana.The message was not altered.

    • Nadawca wiadomości (Alice) jest autentyczny.The sender of the message (Alice) is authentic.

    Dla tego systemu do pracy Alicja należy ukryć swojej oryginalnej wartości skrótu od wszystkich stron z wyjątkiem sytuacji Bob.For this system to work, Alice must hide her original hash value from all parties except Bob.

  • Alicja wysyła wiadomości w postaci zwykłego tekstu do niego za pośrednictwem niezabezpieczonych kanału publicznych i umieszcza skrótu wiadomości w publicznie dostępnej witrynę sieci Web.Alice sends the plaintext message to Bob over a nonsecure public channel and places the hashed message on her publicly viewable Web site.

    Ta metoda zapobiega, komunikat o naruszeniu, uniemożliwiając każdy przy użyciu wartości skrótu.This method prevents message tampering by preventing anyone from modifying the hash value. Mimo, że komunikat i jego skrót mogą być odczytywane przez nikogo, można zmienić tylko przez Alice wartość skrótu.Although the message and its hash can be read by anyone, the hash value can be changed only by Alice. Osoba atakująca, która chce, aby dokonać personifikacji Alicja będzie wymagać dostępu do witryny sieci Web Alicji.An attacker who wants to impersonate Alice would require access to Alice's Web site.

Żaden z poprzednich metod uniemożliwi ktoś odczytywania komunikatów przez Alice, ponieważ są one przekazywane w postaci zwykłego tekstu.None of the previous methods will prevent someone from reading Alice's messages, because they are transmitted in plaintext. Pełne zabezpieczenia zwykle wymaga (podpisywanie komunikatów) podpisów cyfrowych i szyfrowania.Full security typically requires digital signatures (message signing) and encryption.

Program .NET Framework zawiera następujące klasy, które implementują algorytmy wyznaczania wartości skrótu:The .NET Framework provides the following classes that implement hashing algorithms:

Uwaga

Wady projektowe MD5 zostały odnalezione w 1996 roku i SHA-1 został zalecony, zamiast tego.MD5 design flaws were discovered in 1996, and SHA-1 was recommended instead. W 2004 r. dodatkowe wady zostały odnalezione, a algorytm MD5 przestaje być uważany za bezpieczny.In 2004, additional flaws were discovered, and the MD5 algorithm is no longer considered secure. Również wykryto algorytm SHA-1 jako niebezpieczne i SHA-2 jest teraz zalecane zamiast tego.The SHA-1 algorithm has also been found to be insecure, and SHA-2 is now recommended instead.

Powrót do początkuBack to top

Generowanie liczby losowejRandom Number Generation

Generowanie liczby losowej jest integralną częścią wielu operacji kryptograficznych.Random number generation is integral to many cryptographic operations. Na przykład klucze kryptograficzne muszą być jako losowych, jak to możliwe, aby była możliwość ich odtworzenia.For example, cryptographic keys need to be as random as possible so that it is infeasible to reproduce them. Kryptograficznych generatorów liczb losowych, należy wygenerować dane wyjściowe, który jest praktycznie niemożliwe do prognozowania z prawdopodobieństwem, który jest lepsze niż połowy.Cryptographic random number generators must generate output that is computationally infeasible to predict with a probability that is better than one half. W związku z tym każda metoda przewidywania dalej bitu danych wyjściowych nie musi wykonywać lepiej niż zgadywania losowych.Therefore, any method of predicting the next output bit must not perform better than random guessing. Klasy w .NET Framework Użyj generatorów liczb losowych do wygenerowania kluczy kryptograficznych.The classes in the .NET Framework use random number generators to generate cryptographic keys.

RNGCryptoServiceProvider Klasa jest implementacją algorytm generator liczb losowych.The RNGCryptoServiceProvider class is an implementation of a random number generator algorithm.

Powrót do początkuBack to top

Manifesty ClickOnceClickOnce Manifests

W .NET Framework 3.5 następujące klasy kryptografii umożliwiają uzyskanie i sprawdź informacje dotyczące manifestu podpisów dla aplikacji, które są wdrażane przy użyciu technologii ClickOnce:In the .NET Framework 3.5, the following cryptography classes let you obtain and verify information about manifest signatures for applications that are deployed using ClickOnce technology:

Ponadto następujące klasy zawierają informacje o określonej sygnaturze:In addition, the following classes provide specific signature information:

Powrót do początkuBack to top

Obsługa pakietu Suite BSuite B Support

.NET Framework 3.5 obsługuje zestaw Suite B algorytmów kryptograficznych opublikowane przez National Security Agency (NSA).The .NET Framework 3.5 supports the Suite B set of cryptographic algorithms published by the National Security Agency (NSA). Aby uzyskać więcej informacji na temat pakietu Suite B, zobacz NSA pakiet B kryptografii zestawieniem.For more information about Suite B, see the NSA Suite B Cryptography Fact Sheet.

Uwzględnione są następujące algorytmy:The following algorithms are included:

  • Advanced Encryption Standard (AES) algorytmu klucza rozmiarach 128, 192 i 256 bitów na potrzeby szyfrowania.Advanced Encryption Standard (AES) algorithm with key sizes of 128, 192, , and 256 bits for encryption.

  • Bezpieczne algorytmy wyznaczania wartości skrótu SHA-1, SHA-256, SHA-384 i SHA-512, tworzenia skrótuSecure Hash Algorithms SHA-1, SHA-256, SHA-384, and SHA-512 for hashing. (Ostatnie trzy ogólnie zgrupowanych razem i nazywany SHA-2.)(The last three are generally grouped together and referred to as SHA-2.)

  • Elliptic krzywej cyfrowego Signature Algorithm (ECDSA), za pomocą krzywych 256-bitowego, 384-bitowy i 521-bitowy moduli prime do podpisywania.Elliptic Curve Digital Signature Algorithm (ECDSA), using curves of 256-bit, 384-bit, and 521-bit prime moduli for signing. Dokumentacja NSA specjalnie definiuje te krzywe i je wywołuje p-256, p-384 i p-521.The NSA documentation specifically defines these curves, and calls them P-256, P-384, and P-521. Ten algorytm jest świadczona przez ECDsaCng klasy.This algorithm is provided by the ECDsaCng class. Pozwala ona zalogowania się przy użyciu klucza prywatnego i zweryfikować podpisu przy użyciu klucza publicznego.It enables you to sign with a private key and verify the signature with a public key.

  • Elliptic algorytmu Diffie-Hellman krzywej (ECDH), przy użyciu krzywych 256-bitowego, 384-bitowy i 521-bitowy moduli prime wymiany klucza i wpisu tajnego umowy.Elliptic Curve Diffie-Hellman (ECDH) algorithm, using curves of 256-bit, 384-bit, and 521-bit prime moduli for the key exchange and secret agreement. Ten algorytm jest świadczona przez ECDiffieHellmanCng klasy.This algorithm is provided by the ECDiffieHellmanCng class.

Kod zarządzany otok dla informacji o przetwarzaniu Standard FIPS (Federal) certyfikowane implementacje AES, SHA-256, SHA-384 i SHA-512 implementacje są dostępne w nowym AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvider, i SHA512CryptoServiceProvider klasy.Managed code wrappers for the Federal Information Processing Standard (FIPS) certified implementations of the AES, SHA-256, SHA-384, and SHA-512 implementations are available in the new AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvider, and SHA512CryptoServiceProvider classes.

Powrót do początkuBack to top

Kryptografia następnej generacji (CNG) klasyCryptography Next Generation (CNG) Classes

Klasy Cryptography Next Generation (CNG) zapewniają zarządzanych otokę funkcji natywnych CNG.The Cryptography Next Generation (CNG) classes provide a managed wrapper around the native CNG functions. (CNG jest zamiennikiem CryptoAPI). Te klasy mają "Cng" w ramach ich nazw.(CNG is the replacement for CryptoAPI.) These classes have "Cng" as part of their names. Centralnej do klas otoki CNG jest CngKey klucza klasy kontenera, która przenosi magazyn i korzystanie z kluczami CNG.Central to the CNG wrapper classes is the CngKey key container class, which abstracts the storage and use of CNG keys. Ta klasa pozwala bezpiecznie przechowywać pary kluczy lub klucz publiczny i odwoływać się do niego za pomocą nazwy ciągu proste.This class lets you store a key pair or a public key securely and refer to it by using a simple string name. Eliptyczne opartej na krzywej ECDsaCng Klasa podpisu i ECDiffieHellmanCng klasy szyfrowania można używać CngKey obiektów.The elliptic curve-based ECDsaCng signature class and the ECDiffieHellmanCng encryption class can use CngKey objects.

CngKey Klasa jest używana dla różnych dodatkowe operacje, w tym otwierania, tworzenie i eksportowanie kluczy.The CngKey class is used for a variety of additional operations, including opening, creating, deleting, and exporting keys. Umożliwia także dostęp do podstawowego dojścia klucza do użycia podczas wywoływania funkcji natywnych bezpośrednio.It also provides access to the underlying key handle to use when calling native functions directly.

.NET Framework 3.5 zawiera także szereg Obsługa klasy CNG, takie jak następujące:The .NET Framework 3.5 also includes a variety of supporting CNG classes, such as the following:

Powrót do początkuBack to top

TytułTitle OpisDescription
Model kryptografiiCryptography Model W tym artykule opisano, jak kryptografii jest zaimplementowane w bibliotece klas podstawowych.Describes how cryptography is implemented in the base class library.
Przewodnik: Tworzenie aplikacji kryptograficznejWalkthrough: Creating a Cryptographic Application Pokazuje podstawowe zadania szyfrowania i odszyfrowywania.Demonstrates basic encryption and decryption tasks.
Konfigurowanie klas kryptografiiConfiguring Cryptography Classes W tym artykule opisano sposób mapowania nazwy algorytmu kryptograficznego klasy i mapowanie identyfikatorów obiektów na algorytm kryptograficzny.Describes how to map algorithm names to cryptographic classes and map object identifiers to a cryptographic algorithm.