servizi crittograficiCryptographic Services

Le reti pubbliche, ad esempio Internet, non offrono comunicazioni sicure tra entità.Public networks such as the Internet do not provide a means of secure communication between entities. Le comunicazioni su tali reti possono essere lette o addirittura modificate da terze parti non autorizzate.Communication over such networks is susceptible to being read or even modified by unauthorized third parties. La crittografia aiuta a proteggere i dati dalla visualizzazione, offre modalità per rilevare se i dati sono stati modificati e aiuta a offrire una modalità di comunicazione sicura su canali altrimenti non sicuri.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. Ad esempio, è possibile crittografare i dati usando un algoritmo di crittografia, trasmesso in stato crittografato e quindi decrittografato dal destinatario designato.For example, data can be encrypted by using a cryptographic algorithm, transmitted in an encrypted state, and later decrypted by the intended party. Se una terza parte intercetta i dati crittografati, la decrittografia risulterà difficile.If a third party intercepts the encrypted data, it will be difficult to decipher.

In .NET Framework le classi dello spazio dei nomi System.Security.Cryptography gestiscono automaticamente molti dettagli della crittografia.In the .NET Framework, the classes in the System.Security.Cryptography namespace manage many details of cryptography for you. In alcuni casi si tratta di wrapper presenti nelle CryptoAPI di Microsoft non gestite, in altri semplicemente di implementazioni gestite.Some are wrappers for the unmanaged Microsoft Cryptography API (CryptoAPI), while others are purely managed implementations. Non è necessario essere esperti di crittografia per usare queste classi.You do not need to be an expert in cryptography to use these classes. Quando si crea una nuova istanza di una delle classi dell'algoritmo di crittografia, le chiavi vengono generate automaticamente per semplificare l'uso e le proprietà predefinite offrono la maggiore sicurezza possibile.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.

Questa panoramica offre un riepilogo dei metodi e delle procedure di crittografia supportati da .NET Framework, inclusi i manifesti ClickOnce, Suite B e il supporto per Cryptography Next Generation (CNG) introdotto in .NET Framework 3.5.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.NET Framework 3.5.

In questa panoramica sono incluse le sezioni seguenti:This overview contains the following sections:

Per altre informazioni sulla crittografia e sui servizi, i componenti e gli strumenti Microsoft che permettono l'aggiunta di sicurezza crittografica alle applicazioni, vedere la sezione di questo documento relativa allo sviluppo e alla sicurezza Win32 e COM.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.

Primitive di crittografiaCryptographic Primitives

In una situazione tipica in cui si usa la crittografia, due parti (Alice e Bob) comunicano su un canale non sicuro.In a typical situation where cryptography is used, two parties (Alice and Bob) communicate over a nonsecure channel. Alice e Bob vogliono assicurare che le comunicazioni risultino incomprensibili a eventuali ascoltatori.Alice and Bob want to ensure that their communication remains incomprehensible by anyone who might be listening. Poiché, inoltre, Alice e Bob si trovano in posizioni remote, Alice deve assicurarsi che le informazioni ricevute da Bob non siano state modificate da altri durante la trasmissione.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. Deve inoltre assicurarsi che le informazioni provengano effettivamente da Bob e non da qualcuno che lo sta rappresentando.In addition, she must make sure that the information really does originate from Bob and not from someone who is impersonating Bob.

La crittografia permette di realizzare gli obiettivi seguenti:Cryptography is used to achieve the following goals:

  • Riservatezza: aiuta a proteggere l'identità o i dati di un utente dalla lettura.Confidentiality: To help protect a user's identity or data from being read.

  • Integrità dei dati: aiuta a proteggere i dati dalla modifica.Data integrity: To help protect data from being changed.

  • Autenticazione: assicura che i dati provengano da una parte specifica.Authentication: To ensure that data originates from a particular party.

  • Non ripudio: impedisce a una parte specifica di negare di avere inviato un messaggio.Non-repudiation: To prevent a particular party from denying that they sent a message.

Per realizzare questi obiettivi, è possibile usare una combinazione di algoritmi e procedure nota come primitive di crittografia per creare uno schema crittografico.To achieve these goals, you can use a combination of algorithms and practices known as cryptographic primitives to create a cryptographic scheme. La tabella seguente elenca le primitive di crittografia e il rispettivo uso.The following table lists the cryptographic primitives and their uses.

Primitiva di crittografiaCryptographic primitive UsaUse
Crittografia a chiave segreta (crittografia simmetrica)Secret-key encryption (symmetric cryptography) Esegue una trasformazione sui dati per impedirne la lettura da terze parti.Performs a transformation on data to keep it from being read by third parties. Questo tipo di crittografia usa una singola chiave segreta condivisa per crittografare e decrittografare i dati.This type of encryption uses a single shared, secret key to encrypt and decrypt data.
Crittografia a chiave pubblica (crittografia asimmetrica)Public-key encryption (asymmetric cryptography) Esegue una trasformazione sui dati per impedirne la lettura da terze parti.Performs a transformation on data to keep it from being read by third parties. Questo tipo di crittografia usa una coppia di chiavi pubblica/privata per crittografare e decrittografare i dati.This type of encryption uses a public/private key pair to encrypt and decrypt data.
Firme di crittografiaCryptographic signing Aiuta a verificare che i dati provengano da una parte specifica, tramite la creazione di una firma digitale univoca per tale parte.Helps verify that data originates from a specific party by creating a digital signature that is unique to that party. Questo processo usa anche funzioni hash.This process also uses hash functions.
Hash di crittografiaCryptographic hashes Mappa i dati di qualsiasi lunghezza a una sequenza di byte a lunghezza fissa.Maps data from any length to a fixed-length byte sequence. Gli hash sono statisticamente univoci. Una sequenza di due byte diversa non avrà come risultato hash con lo stesso valore.Hashes are statistically unique; a different two-byte sequence will not hash to the same value.

Torna all'inizioBack to top

Crittografia a chiave segretaSecret-Key Encryption

Gli algoritmi di crittografia a chiave segreta usano una singola chiave segreta per crittografare e decrittografare i dati.Secret-key encryption algorithms use a single secret key to encrypt and decrypt data. È necessario proteggere la chiave dall'accesso da parte di agenti non autorizzati, poiché chiunque sia in possesso della chiave la potrà usare per decrittografare i dati o crittografare i propri dati, affermando che sono stati originati dall'utente.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.

La crittografia a chiave segreta è definita anche crittografia simmetrica, poiché si usa la stessa chiave per la crittografia e la decrittografia.Secret-key encryption is also referred to as symmetric encryption because the same key is used for encryption and decryption. Gli algoritmi di crittografia a chiave segreta sono molto veloci, rispetto agli algoritmi a chiave pubblica e sono ottimali per l'esecuzione di trasformazioni crittografiche su grandi flussi di dati.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. Gli algoritmi di crittografia asimmetrica, ad esempio RSA, sono matematicamente limitati a livello di quantità di dati che sono in grado di crittografare.Asymmetric encryption algorithms such as RSA are limited mathematically in how much data they can encrypt. Gli algoritmi di crittografia simmetrica non presentano in genere questi problemi.Symmetric encryption algorithms do not generally have those problems.

Un tipo di algoritmo a chiave segreta, denominato crittografia a blocchi, viene usato per crittografare un blocco di dati alla volta.A type of secret-key algorithm called a block cipher is used to encrypt one block of data at a time. Tramite la crittografia a blocchi, come Data Encryption Standard (DES), TripleDES e Advanced Encryption Standard (AES), un blocco di input di n byte viene trasformato a livello di crittografia in un blocco di output di byte crittografati.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. Se si vuole crittografare o decrittografare una sequenza di byte, è necessario eseguire tale operazione blocco per blocco.If you want to encrypt or decrypt a sequence of bytes, you have to do it block by block. Poiché la dimensione di n è limitata (8 byte per DES e TripleDES, 16 byte come valore predefinito, 24 o 32 byte per AES), i valori di dati superiori a n devono essere crittografati un blocco alla volta.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. I valori di dati inferiori a n devono essere espansi a n per essere elaborati.Data values that are smaller than n have to be expanded to n in order to be processed.

Una forma semplice di crittografia a blocchi viene definita modalità ECB (Electronic Codebook).One simple form of block cipher is called the electronic codebook (ECB) mode. La modalità ECB non è considerata sicura, poiché non usa un vettore di inizializzazione per inizializzare il primo blocco di testo normale.ECB mode is not considered secure, because it does not use an initialization vector to initialize the first plaintext block. Per una determinata chiave segreta k, tramite una semplice crittografia a blocchi in cui non viene usato un vettore di inizializzazione lo stesso blocco di input di testo non crittografato verrà crittografato nello stesso blocco di output di testo crittografato.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. Se sono quindi presenti blocchi duplicati nel flusso di testo normale di input, saranno presenti blocchi duplicati nel flusso di testo crittografato di output.Therefore, if you have duplicate blocks in your input plaintext stream, you will have duplicate blocks in your output ciphertext stream. Questi blocchi di output duplicati segnalano agli utenti non autorizzati la crittografia debole usata, gli algoritmi usati e le possibili modalità di attacco.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. La modalità ECB è quindi abbastanza vulnerabile all'analisi e quindi all'individuazione delle chiavi.The ECB cipher mode is therefore quite vulnerable to analysis, and ultimately, key discovery.

Le classi d crittografia a blocchi fornite nella libreria di classi base usano una modalità di concatenamento predefinita denominata CBC (Cipher-Block Chaining), ma se si vuole è possibile modificare questa impostazione predefinita.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.

La crittografia CBC supera i problemi associati alla crittografia ECB usando un vettore di inizializzazione per crittografare il primo blocco di testo normale.CBC ciphers overcome the problems associated with ECB ciphers by using an initialization vector (IV) to encrypt the first block of plaintext. Ogni blocco successivo di testo normale viene sottoposto a un'operazione Bitwise-OR esclusiva (XOR) con il blocco di testo crittografato precedente prima della crittografia.Each subsequent block of plaintext undergoes a bitwise exclusive OR (XOR) operation with the previous ciphertext block before it is encrypted. Ogni blocco di testo crittografato dipende prima da tutti i blocchi precedenti.Each ciphertext block is therefore dependent on all previous blocks. Quando viene usato questo sistema, le intestazioni di messaggio comuni che potrebbero essere note a un utente non autorizzato non potranno essere usate per decodificare una chiave.When this system is used, common message headers that might be known to an unauthorized user cannot be used to reverse-engineer a key.

Un modo per compromettere dati crittografati con la modalità CBC consiste nell'eseguire una ricerca completa di ogni chiave possibile.One way to compromise data that is encrypted with a CBC cipher is to perform an exhaustive search of every possible key. In base alle dimensioni della chiave usata per eseguire la crittografia, questo tipo di ricerca richiede molto tempo anche nei computer più veloci ed è quindi irrealizzabile.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. Le dimensioni di chiave più elevate sono più difficili da decifrare.Larger key sizes are more difficult to decipher. Benché la crittografia non renda teoricamente impossibile a un utente malintenzionato il recupero di dati crittografati, aumenta il costo di tale operazione.Although encryption does not make it theoretically impossible for an adversary to retrieve the encrypted data, it does raise the cost of doing this. Se sono necessari tre mesi per eseguire una ricerca completa per recuperare dati che risultano significativi solo per alcuni giorni, il metodo di ricerca completa risulta poco pratico.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.

Lo svantaggio della crittografia a chiave segreta consiste nel fatto che presuppone che le due parti si siano accordate su una chiave e un vettore di inizializzazione e che abbiano comunicato i rispettivi valori.The disadvantage of secret-key encryption is that it presumes two parties have agreed on a key and IV, and communicated their values. Il vettore di inizializzazione non è considerato segreto e può essere trasmesso in testo normale con il messaggio.The IV is not considered a secret and can be transmitted in plaintext with the message. La chiave deve essere tuttavia mantenuta segreta agli utenti non autorizzati.However, the key must be kept secret from unauthorized users. A causa di questi problemi, la crittografia a chiave segreta viene usata spesso insieme alla crittografia a chiave pubblica per comunicare in modo privato i valori della chiave e del vettore di inizializzazione.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.

Supponendo che Alice e Bob siano due parti che vogliono comunicare su un canale non sicuro, potranno usare la crittografia a chiave segreta nel modo seguente: Alice e Bob decidono di usare un algoritmo specifico, ad esempio AES, con una chiave e un vettore di inizializzazione specifici.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. Alice compone un messaggio e crea un flusso di rete (forse una named pipe o rete posta elettronica) a cui inviare il messaggio.Alice composes a message and creates a network stream (perhaps a named pipe or network email) on which to send the message. In seguito crittografa il testo usando la chiave e il vettore di inizializzazione e invia il messaggio crittografato e il vettore di inizializzazione a Bob tramite Intranet.Next, she encrypts the text using the key and IV, and sends the encrypted message and IV to Bob over the intranet. Bob riceve il testo crittografato e lo decrittografa usando il vettore di inizializzazione e la chiave precedentemente concordata.Bob receives the encrypted text and decrypts it by using the IV and previously agreed upon key. Se la trasmissione viene intercettata, l'intercettore non può recuperare il messaggio originale, poiché non conosce la chiave.If the transmission is intercepted, the interceptor cannot recover the original message, because he does not know the key. In questo scenario, solo la chiave deve rimanere segreta.In this scenario, only the key must remain secret. In uno scenario reale Alice o Bob genera una chiave segreta e usa la crittografia a chiave pubblica (asimmetrica) per trasferire la chiave segreta (simmetrica) all'altra parte.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. Per altre informazioni sulla crittografia a chiave pubblica, vedere la sezione successiva.For more information about public-key encryption, see the next section.

.NET Framework.NET Framework fornisce le classi seguenti che implementano algoritmi di crittografia a chiave segreta:The .NET Framework.NET Framework provides the following classes that implement secret-key encryption algorithms:

Torna all'inizioBack to top

Crittografia a chiave pubblicaPublic-Key Encryption

a crittografia a chiave pubblica usa una chiave privata che deve essere tenuta segreta agli utenti non autorizzati e una chiave pubblica che può essere resa pubblica a tutti.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. La chiave pubblica e la chiave privata sono collegate matematicamente. I dati crittografati con la chiave pubblica possono essere decrittografati solo con la chiave privata e i dati firmati con la chiave privata possono essere verificati solo con la chiave pubblica.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. La chiave pubblica può essere distribuita a tutti in quanto viene usata per crittografare i dati da inviare a chi detiene la chiave privata.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. Gli algoritmi di crittografia a chiave pubblica sono noti anche come algoritmi asimmetrici, poiché per crittografare e successivamente decrittografare i dati è necessario usare due chiavi diverse.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. Una regola di crittografia di base proibisce il riutilizzo di chiavi ed entrambe le chiavi devono essere univoche per ogni sessione di comunicazione.A basic cryptographic rule prohibits key reuse, and both keys should be unique for each communication session. In pratica, tuttavia, le chiavi asimmetriche sono in genere di lunga durata.However, in practice, asymmetric keys are generally long-lived.

Le due parti, Alice e Bob, possono usare la crittografia a chiave pubblica come illustrato di seguito. Alice genera prima di tutto una coppia di chiavi pubblica/privata.Two parties (Alice and Bob) might use public-key encryption as follows: First, Alice generates a public/private key pair. Se Bob vuole inviare ad Alice un messaggio crittografato, le chiede la chiave pubblica.If Bob wants to send Alice an encrypted message, he asks her for her public key. Alice invia a Bob la chiave pubblica su una rete non sicura e Bob la usa per crittografare un messaggio.Alice sends Bob her public key over a nonsecure network, and Bob uses this key to encrypt a message. Bob invia il messaggio crittografato ad Alice, che lo decrittografa usando la sua chiave privata.Bob sends the encrypted message to Alice, and she decrypts it by using her private key. Se Bob ha ricevuto la chiave di Alice su un canale non sicuro, ad esempio una rete pubblica, sarà esposto a un attacco di tipo man-in-the-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. Bob deve quindi verificare con Alice che la copia a sua disposizione della chiave pubblica sia corretta.Therefore, Bob must verify with Alice that he has a correct copy of her public key.

Durante la trasmissione della chiave pubblica di Alice, una persona non autorizzata potrebbe intercettare la chiave.During the transmission of Alice's public key, an unauthorized agent might intercept the key. La stessa persona potrebbe intercettare anche il messaggio crittografato da Bob.Furthermore, the same agent might intercept the encrypted message from Bob. Tale persona, tuttavia, non potrà decrittografare il messaggio con la chiave pubblica.However, the agent cannot decrypt the message with the public key. Il messaggio può essere decrittografato solo con la chiave privata di Alice che non è stata trasmessa.The message can be decrypted only with Alice's private key, which has not been transmitted. Alice non usa la propria chiave privata per crittografare un messaggio di risposta a Bob, poiché chiunque sia in possesso della chiave pubblica potrebbe decrittografare il messaggio.Alice does not use her private key to encrypt a reply message to Bob, because anyone with the public key could decrypt the message. Se Alice vuole inviare un messaggio a Bob, gli chiede la chiave pubblica e crittografa il suo messaggio usando quella chiave.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 decrittografa quindi il messaggio usando la sua chiave privata associata.Bob then decrypts the message using his associated private key.

In questo scenario Alice e Bob usano la crittografia a chiave pubblica (asimmetrica) per trasferire una chiave segreta (simmetrica) e usano la crittografia a chiave segreta per il resto della sessione.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.

L'elenco seguente offre un confronto tra algoritmi di crittografia a chiave pubblica e a chiave segreta:The following list offers comparisons between public-key and secret-key cryptographic algorithms:

  • Gli algoritmi di crittografia a chiave pubblica usano una dimensione fissa del buffer, mentre gli algoritmi di crittografia a chiave segreta usano un buffer a lunghezza variabile.Public-key cryptographic algorithms use a fixed buffer size, whereas secret-key cryptographic algorithms use a variable-length buffer.

  • Gli algoritmi di crittografia a chiave pubblica non possono essere usati per il concatenamento di dati in flussi come gli algoritmi di crittografia a chiave segreta, poiché è possibile crittografare solo piccole quantità di dati.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. Le operazioni asimmetriche non usano quindi lo stesso modello di streaming delle operazioni simmetriche.Therefore, asymmetric operations do not use the same streaming model as symmetric operations.

  • La crittografia a chiave pubblica ha uno spazio delle chiavi (intervallo dei valori possibili) molto più ampio rispetto alla crittografia a chiave segreta,Public-key encryption has a much larger keyspace (range of possible values for the key) than secret-key encryption. pertanto è meno esposta a tecniche esaustive per scoprire la chiave.Therefore, public-key encryption is less susceptible to exhaustive attacks that try every possible key.

  • Le chiavi pubbliche possono essere distribuite in modo semplice poiché non è necessario proteggerle, purché sia possibile verificare l'identità del mittente.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.

  • Alcuni algoritmi a chiave pubblica, ad esempio RSA e DSA, ma non Diffie-Hellman, possono essere usati per creare firme digitali per la verifica dell'identità del mittente dei dati.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.

  • Gli algoritmi a chiave pubblica sono molto lenti rispetto a quelli a chiave segreta e non sono destinati alla crittografia di grandi quantità di dati.Public-key algorithms are very slow compared with secret-key algorithms, and are not designed to encrypt large amounts of data. Risultano utili solo per il trasferimento di piccole quantità di dati.Public-key algorithms are useful only for transferring very small amounts of data. Generalmente la crittografia a chiave pubblica viene usata per crittografare una chiave e un vettore di inizializzazione utilizzabili da un algoritmo a chiave segreta.Typically, public-key encryption is used to encrypt a key and IV to be used by a secret-key algorithm. Dopo il trasferimento della chiave e del vettore di inizializzazione, la crittografia a chiave segreta viene usata per il resto della sessione.After the key and IV are transferred, secret-key encryption is used for the remainder of the session.

.NET Framework.NET Framework offre le classi seguenti che implementano gli algoritmi della crittografia a chiave pubblica:The .NET Framework.NET Framework provides the following classes that implement public-key encryption algorithms:

RSA consente sia la crittografia sia la firma, mentre DSA può essere usato solo per la firma e Diffie-Hellman solo per la generazione di chiavi.RSA allows both encryption and signing, but DSA can be used only for signing, and Diffie-Hellman can be used only for key generation. In genere, gli algoritmi a chiave pubblica sono più limitati nell'utilizzo rispetto a quelli a chiave privata.In general, public-key algorithms are more limited in their uses than private-key algorithms.

Torna all'inizioBack to top

firme digitaliDigital Signatures

Gli algoritmi a chiave pubblica possono essere usati per formare firme digitali,Public-key algorithms can also be used to form digital signatures. il cui obiettivo è l'autenticazione dell'identità di un mittente, se la chiave pubblica di quest'ultimo viene considerata attendibile, e la protezione dell'integrità dei dati.Digital signatures authenticate the identity of a sender (if you trust the sender's public key) and help protect the integrity of data. Attraverso una chiave pubblica generata da Alice, il destinatario dei suoi dati può verificare che siano stati inviati effettivamente da lei confrontando la firma digitale sui dati e la chiave pubblica di Alice.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.

Per apporre una firma digitale a un messaggio usando la crittografia a chiave pubblica, Alice applica prima di tutto un algoritmo hash al messaggio per creare un digest del messaggio.To use public-key cryptography to digitally sign a message, Alice first applies a hash algorithm to the message to create a message digest. Il digest è una rappresentazione dei dati compatta e univoca.The message digest is a compact and unique representation of data. Alice quindi crittografa il digest del messaggio con la sua chiave privata per creare la sua firma personale.Alice then encrypts the message digest with her private key to create her personal signature. Alla ricezione del messaggio e della firma, Bob decrittografa la firma con la chiave pubblica di Alice per recuperare il digest del messaggio e genera un hash mediante lo stesso algoritmo hash inviato da 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. Se il digest del messaggio calcolato da Bob corrisponde esattamente al digest del messaggio ricevuto da Alice, Bob ha la certezza che il messaggio provenga dal possessore della chiave privata e che i dati non siano stati modificati.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. Se Bob ha la certezza che Alice sia il possessore della chiave privata, saprà che il messaggio proviene solo da Alice.If Bob trusts that Alice is the possessor of the private key, he knows that the message came from Alice.

Nota

Chiunque può verificare una firma, poiché la chiave pubblica del mittente è di pubblico dominio e generalmente viene inclusa nel formato della firma digitale.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. Questo metodo non mantiene la segretezza del messaggio. Perché possa essere segreto, anche il messaggio deve essere crittografato.This method does not retain the secrecy of the message; for the message to be secret, it must also be encrypted.

.NET Framework.NET Framework offre le classi seguenti che implementano gli algoritmi della firma digitale:The .NET Framework.NET Framework provides the following classes that implement digital signature algorithms:

Torna all'inizioBack to top

Valore hashHash Values

Gli algoritmi hash associano valori binari di lunghezza arbitraria a piccoli valori binari di lunghezza fissa, noti come valori hash.Hash algorithms map binary values of an arbitrary length to smaller binary values of a fixed length, known as hash values. Per valore hash si intende una rappresentazione numerica di una porzione di dati.A hash value is a numerical representation of a piece of data. Se si inserisce un hash in un paragrafo di testo non crittografato e si modifica anche una sola lettera del paragrafo, un hash successivo produrrà un valore diverso.If you hash a paragraph of plaintext and change even one letter of the paragraph, a subsequent hash will produce a different value. Se l'hash è basato su una crittografia avanzata, il relativo valore verrà modificato in modo significativo.If the hash is cryptographically strong, its value will change significantly. Se ad esempio viene modificato un singolo bit di un messaggio, una funzione hash sicura può produrre un output che si differenzia del 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. Molti valori di input possono avere hash dello stesso valore di output.Many input values may hash to the same output value. Dal punto di vista del calcolo, tuttavia, è impossibile trovare due input di versi che forniscono come risultato un hash con lo stesso valore.However, it is computationally infeasible to find two distinct inputs that hash to the same value.

Due parti (Alice e Bob) sono riuscite a usare una funzione hash per garantire l'integrità del messaggio.Two parties (Alice and Bob) could use a hash function to ensure message integrity. Hanno selezionato un algoritmo di hash per firmare i messaggi.They would select a hash algorithm to sign their messages. Alice ha scritto un messaggio, quindi ha creato un hash di tale messaggio tramite l'algoritmo selezionato.Alice would write a message, and then create a hash of that message by using the selected algorithm. Hanno quindi seguito uno dei metodi seguenti:They would then follow one of the following methods:

  • Alice invia il messaggio come testo normale e il messaggio con hash (firma digitale) a Bob.Alice sends the plaintext message and the hashed message (digital signature) to Bob. Bob riceve il messaggio, ne esegue l'hashing, quindi confronta il proprio valore hash con quello che ha ricevuto da Alice.Bob receives and hashes the message and compares his hash value to the hash value that he received from Alice. Se i valori hash corrispondono, il messaggio non è stato alterato.If the hash values are identical, the message was not altered. Se invece i valori non corrispondono, il messaggio è stato alterato dopo essere stato scritto da Alice.If the values are not identical, the message was altered after Alice wrote it.

    Purtroppo, questo metodo non consente di stabilire l'autenticità del mittente.Unfortunately, this method does not establish the authenticity of the sender. Chiunque può rappresentare Alice e inviare un messaggio a Bob.Anyone can impersonate Alice and send a message to Bob. Possono usare lo stesso algoritmo hash per firmare il messaggio e tutto ciò che Bob è in grado di determinare è che il messaggio corrisponde alla relativa firma.They can use the same hash algorithm to sign their message, and all Bob can determine is that the message matches its signature. Si tratta di una forma di attacco di tipo man-in-the-middle.This is one form of a man-in-the-middle attack. Vedere NIB: esempio di comunicazioni protette Cryptography Next Generation (CNG) per ulteriori informazioni.See NIB: Cryptography Next Generation (CNG) Secure Communication Example for more information.

  • Alice invia il messaggio come testo normale a Bob tramite un canale pubblico non protetto.Alice sends the plaintext message to Bob over a nonsecure public channel. Invia il messaggio con hash a Bob su un canale privato protetto.She sends the hashed message to Bob over a secure private channel. Bob riceve il messaggio in testo normale, ne esegue l'hashing, quindi confronta il valore hash con quello scambiato privatamente.Bob receives the plaintext message, hashes it, and compares the hash to the privately exchanged hash. Se i valori corrispondono, Bob può accertare quanto segue:If the hashes match, Bob knows two things:

    • Il messaggio non è stato modificato.The message was not altered.

    • Il mittente del messaggio (Alice) è autentico.The sender of the message (Alice) is authentic.

    Perché il sistema funzioni, Alice deve nascondere il valore hash originale a tutte le parti ad eccezione di Bob.For this system to work, Alice must hide her original hash value from all parties except Bob.

  • Alice invia il messaggio in testo normale a Bob tramite un canale pubblico non protetto e inserisce il messaggio con hash sul proprio sito Web pubblico.Alice sends the plaintext message to Bob over a nonsecure public channel and places the hashed message on her publicly viewable Web site.

    Questo metodo consente di evitare la manomissione del messaggio impedendo a chiunque di modificare il valore hash.This method prevents message tampering by preventing anyone from modifying the hash value. Anche se chiunque può leggere il messaggio e il relativo hash, il valore hash può essere modificato solo da Alice.Although the message and its hash can be read by anyone, the hash value can be changed only by Alice. Un utente non autorizzato che vuole rappresentare Alice necessita di accesso al sito Web di Alice.An attacker who wants to impersonate Alice would require access to Alice's Web site.

Nessuno dei metodi precedenti impedisce la lettura dei messaggi di Alice, perché vengono trasmessi come testo normale.None of the previous methods will prevent someone from reading Alice's messages, because they are transmitted in plaintext. Una soluzione di sicurezza completa richiede le firme digitali (firma dei messaggi) e la crittografia.Full security typically requires digital signatures (message signing) and encryption.

.NET Framework.NET Framework offre le classi seguenti che implementano che implementano gli algoritmi di hash:The .NET Framework.NET Framework provides the following classes that implement hashing algorithms:

Nota

I difetti di progettazione di MD5 sono stati individuati nel 1996 e SHA-1 è stato consigliato in sostituzione.MD5 design flaws were discovered in 1996, and SHA-1 was recommended instead. Nel 2004 sono stati individuati altri difetti e l'algoritmo MD5 non è più considerato sicuro.In 2004, additional flaws were discovered, and the MD5 algorithm is no longer considered secure. Anche l'algoritmo SHA-1 si è rivelato non sicuro e attualmente è consigliato l'algoritmo SHA-2.The SHA-1 algorithm has also been found to be insecure, and SHA-2 is now recommended instead.

Torna all'inizioBack to top

generazione casuale di numeriRandom Number Generation

La generazione di numeri casuali è integrata in molte operazioni di crittografia.Random number generation is integral to many cryptographic operations. Le chiavi di crittografia, ad esempio, devono essere il più casuali possibile in modo che non sia possibile riprodurle.For example, cryptographic keys need to be as random as possible so that it is infeasible to reproduce them. I generatori di numeri casuali di crittografia devono generare output che sia impossibile da prevedere con una probabilità superiore al 50%.Cryptographic random number generators must generate output that is computationally infeasible to predict with a probability that is better than one half. Pertanto, qualsiasi metodo di previsione del bit di output successivo non deve avere una prestazione migliore della previsione casuale.Therefore, any method of predicting the next output bit must not perform better than random guessing. Le classi in .NET Framework.NET Framework usano i generatori di numeri casuali per generare chiavi di crittografia.The classes in the .NET Framework.NET Framework use random number generators to generate cryptographic keys.

La classe RNGCryptoServiceProvider è un'implementazione di un algoritmo di generazione di numeri casuali.The RNGCryptoServiceProvider class is an implementation of a random number generator algorithm.

Torna all'inizioBack to top

Manifesti ClickOnceClickOnce Manifests

In .NET Framework 3.5.NET Framework 3.5sono disponibili le classi di crittografia seguenti che consentono di ottenere e verificare informazioni sulle firme del manifesto per applicazioni distribuite con la tecnologia ClickOnce:In the .NET Framework 3.5.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:

Le classi seguenti forniscono inoltre informazioni specifiche sulla firma:In addition, the following classes provide specific signature information:

Torna all'inizioBack to top

Supporto per Suite BSuite B Support

.NET Framework 3.5.NET Framework 3.5 supporta l'insieme di algoritmi di crittografia Suite B pubblicati da National Security Agency (NSA).The .NET Framework 3.5.NET Framework 3.5 supports the Suite B set of cryptographic algorithms published by the National Security Agency (NSA). Per ulteriori informazioni su Suite B, vedere il B crittografia Suite fatti NSA.For more information about Suite B, see the NSA Suite B Cryptography Fact Sheet.

Sono inclusi gli algoritmi seguenti:The following algorithms are included:

  • Algoritmo AES (Advanced Encryption Standard) con dimensioni della chiave di 128, 192 e 256 bit per la crittografia.Advanced Encryption Standard (AES) algorithm with key sizes of 128, 192, , and 256 bits for encryption.

  • Algoritmi SHA-1, SHA-256, SHA-384 e SHA-512 (Secure Hash Algorithm) per l'hashing.Secure Hash Algorithms SHA-1, SHA-256, SHA-384, and SHA-512 for hashing. Gli ultimi tre sono in genere raggruppati e noti come SHA-2.(The last three are generally grouped together and referred to as SHA-2.)

  • Algoritmo ECDSA (Elliptic Curve Digital Signature Algorithm) che usa curve di coefficienti di numeri primi di 256, 384 e 521 bit per la generazione della firma.Elliptic Curve Digital Signature Algorithm (ECDSA), using curves of 256-bit, 384-bit, and 521-bit prime moduli for signing. La documentazione NSA definisce in modo specifico queste curve e le chiama P-256, P-384 e P-521.The NSA documentation specifically defines these curves, and calls them P-256, P-384, and P-521. Questo algoritmo viene fornito dalla classe ECDsaCng .This algorithm is provided by the ECDsaCng class. e consente di firmare con una chiave privata e verificare la firma con una chiave pubblica.It enables you to sign with a private key and verify the signature with a public key.

  • Algoritmo ECDH (Elliptic Curve Diffie-Hellman) che usa curve di coefficienti di numeri primi di 256, 384 e 521 bit per lo scambio di chiave e la generazione della chiave privata.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. Questo algoritmo viene fornito dalla classe ECDiffieHellmanCng .This algorithm is provided by the ECDiffieHellmanCng class.

Nelle nuove classi AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvidere SHA512CryptoServiceProvider sono disponibili wrapper del codice gestito per le implementazioni certificate da FIPS (Federal Information Processing Standard) delle implementazioni AES, SHA-256, SHA-384 e SHA-512.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.

Torna all'inizioBack to top

Classi Cryptography Next Generation (CNG)Cryptography Next Generation (CNG) Classes

Le classi Cryptography Next Generation (CNG) forniscono un wrapper gestito intorno alle funzioni CNG native.The Cryptography Next Generation (CNG) classes provide a managed wrapper around the native CNG functions. CNG sostituisce CryptoAPI. Il nome di queste classi contiene "Cng".(CNG is the replacement for CryptoAPI.) These classes have "Cng" as part of their names. Elemento centrale delle classi wrapper CNG è la classe del contenitore di chiavi CngKey che astrae l'archiviazione e l'utilizzo delle chiavi CNG.Central to the CNG wrapper classes is the CngKey key container class, which abstracts the storage and use of CNG keys. Questa classe consente di archiviare in modo sicuro una coppia di chiavi o una chiave pubblica e fare riferimento a tale chiave usando un semplice nome di stringa.This class lets you store a key pair or a public key securely and refer to it by using a simple string name. La classe di firma basata su curva ellittica ECDsaCng e la classe di crittografia ECDiffieHellmanCng possono usare oggetti CngKey .The elliptic curve-based ECDsaCng signature class and the ECDiffieHellmanCng encryption class can use CngKey objects.

La classe CngKey viene usata per una varietà di operazioni aggiuntive, incluse l'apertura, la creazione, l'eliminazione e l'esportazione di chiavi.The CngKey class is used for a variety of additional operations, including opening, creating, deleting, and exporting keys. Fornisce inoltre l'accesso all'handle di chiave sottostante da usare quando le funzioni native vengono chiamate direttamente.It also provides access to the underlying key handle to use when calling native functions directly.

.NET Framework 3.5.NET Framework 3.5 include anche varie classi CNG di supporto, quali le seguenti:The .NET Framework 3.5.NET Framework 3.5 also includes a variety of supporting CNG classes, such as the following:

Torna all'inizioBack to top

TitoloTitle DescrizioneDescription
Modello di crittografiaCryptography Model Illustra il modo in cui la crittografia viene implementata nella libreria delle classi base.Describes how cryptography is implemented in the base class library.
Procedura dettagliata: Creazione di un'applicazione di crittografiaWalkthrough: Creating a Cryptographic Application Illustra le attività di base di crittografia e decrittografia.Demonstrates basic encryption and decryption tasks.
Configurazione di classi di crittografiaConfiguring Cryptography Classes Illustra come associare i nomi degli algoritmi a classi di crittografia e come associare identificatori di oggetti a un algoritmo di crittografia.Describes how to map algorithm names to cryptographic classes and map object identifiers to a cryptographic algorithm.