servicios criptográficosCryptographic Services

Las redes públicas como Internet no proporcionan un medio de comunicación segura entre entidades.Public networks such as the Internet do not provide a means of secure communication between entities. La comunicación en esas redes es susceptible de que terceras personas, sin autorización, tengan acceso a ella o la modifiquen.Communication over such networks is susceptible to being read or even modified by unauthorized third parties. La criptografía ayuda a proteger los datos para que no puedan ser vistos, proporciona mecanismos para la detección de datos modificados y facilita un medio de comunicación seguro en canales que, de otra forma, no serían seguros.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. Por ejemplo, los datos pueden cifrarse con un algoritmo criptográfico y transmitirse en un estado cifrado a una tercera persona, que posteriormente los descifrará.For example, data can be encrypted by using a cryptographic algorithm, transmitted in an encrypted state, and later decrypted by the intended party. Si un tercero intercepta los datos cifrados, le resultará difícil descifrarlos.If a third party intercepts the encrypted data, it will be difficult to decipher.

En .NET Framework, las clases del espacio de nombres System.Security.Cryptography se ocupan de administrar muchos de los detalles de criptografía.In the .NET Framework, the classes in the System.Security.Cryptography namespace manage many details of cryptography for you. Algunas son contenedores de la interfaz de programación de aplicaciones criptográficas (CryptoAPI) no administrada de Microsoft, mientras que otras son meramente implementaciones administradas.Some are wrappers for the unmanaged Microsoft Cryptography API (CryptoAPI), while others are purely managed implementations. No necesita ser un experto en criptografía para utilizar estas clases.You do not need to be an expert in cryptography to use these classes. Cuando crea una nueva instancia de una de las clases de algoritmos de cifrado, se generan automáticamente claves para facilitar el uso y las propiedades predeterminadas son lo más seguras posible.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.

Este tema proporciona una sinopsis de los métodos de cifrado y prácticas compatibles con .NET Framework, incluidos los manifiestos de ClickOnce, Suite B y soporte técnico de Cryptography Next Generation (CNG) que se introdujo en .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.

Esta información general contiene las siguientes secciones:This overview contains the following sections:

Para obtener más información sobre la criptografía y sobre los servicios, componentes y herramientas de Microsoft que permiten agregar seguridad criptográfica a las aplicaciones, vea la sección Seguridad de Desarrollo para Win32 y COM de esta documentación.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.

Primitivos criptográficosCryptographic Primitives

En una situación típica donde se usa la criptografía, dos partes (Alicia y Roberto) se comunican a través de un canal que no es seguro.In a typical situation where cryptography is used, two parties (Alice and Bob) communicate over a nonsecure channel. Ambos desean garantizar que su comunicación no la comprenda nadie que pueda estar escuchando.Alice and Bob want to ensure that their communication remains incomprehensible by anyone who might be listening. Además, como Alicia y Roberto se encuentran en ubicaciones remotas, Alicia quiere asegurarse de que la información que recibe de Roberto no la modificó nadie durante la transmisión.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. Por último, debe asegurarse también de que la información proviene realmente de Roberto y no de alguien que lo suplanta.In addition, she must make sure that the information really does originate from Bob and not from someone who is impersonating Bob.

La criptografía se utiliza para lograr los objetivos siguientes:Cryptography is used to achieve the following goals:

  • Confidencialidad: Para ayudar a proteger la identidad o datos de un usuario en que se va a leer.Confidentiality: To help protect a user's identity or data from being read.

  • Integridad de los datos: Para ayudar a proteger los datos de la que se está cambiando.Data integrity: To help protect data from being changed.

  • Autenticación: Para garantizar que los datos procede de una entidad determinada.Authentication: To ensure that data originates from a particular party.

  • Sin rechazo: Para impedir que una determinada parte niegue que envió un mensaje.Non-repudiation: To prevent a particular party from denying that they sent a message.

Para alcanzar estos objetivos, se puede usar una combinación de algoritmos y prácticas conocidas como primitivas criptográficas para crear un esquema criptográfico.To achieve these goals, you can use a combination of algorithms and practices known as cryptographic primitives to create a cryptographic scheme. En la tabla siguiente se enumeran las primitivas criptográficas y su uso.The following table lists the cryptographic primitives and their uses.

Primitiva criptográficaCryptographic primitive UsarUse
Cifrado de clave secreta (criptografía simétrica)Secret-key encryption (symmetric cryptography) Realiza la transformación de los datos para impedir que terceros los lean.Performs a transformation on data to keep it from being read by third parties. Este tipo de cifrado utiliza una clave secreta compartida para cifrar y descifrar los datos.This type of encryption uses a single shared, secret key to encrypt and decrypt data.
Cifrado de clave pública (criptografía asimétrica)Public-key encryption (asymmetric cryptography) Realiza la transformación de los datos para impedir que terceros los lean.Performs a transformation on data to keep it from being read by third parties. Este tipo de cifrado utiliza un par de claves pública y privada para cifrar y descifrar los datos.This type of encryption uses a public/private key pair to encrypt and decrypt data.
Firmas criptográficasCryptographic signing Ayuda a comprobar que los datos se originan en una parte específica mediante la creación de una firma digital única para esa parte.Helps verify that data originates from a specific party by creating a digital signature that is unique to that party. En este proceso también se usan funciones hash.This process also uses hash functions.
Valores hash criptográficosCryptographic hashes Asigna datos de cualquier longitud a una secuencia de bytes de longitud fija.Maps data from any length to a fixed-length byte sequence. Los valores hash son únicos estadísticamente; el valor hash de una secuencia de dos bytes distinta no será el mismo.Hashes are statistically unique; a different two-byte sequence will not hash to the same value.

Volver al principioBack to top

Cifrado de clave secretaSecret-Key Encryption

Los algoritmos de cifrado de clave secreta utilizan una clave secreta única para cifrar y descifrar datos.Secret-key encryption algorithms use a single secret key to encrypt and decrypt data. Debe asegurarse de que agentes no autorizados no obtienen acceso a la clave, ya que cualquier persona que tenga la clave podría utilizarla para descifrar los datos o cifrar sus propios datos y alegar que provienen de usted.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.

El cifrado de clave secreta también se denomina cifrado simétrico puesto que se utiliza la misma clave para el cifrado y el descifrado.Secret-key encryption is also referred to as symmetric encryption because the same key is used for encryption and decryption. Los algoritmos de cifrado de clave secreta son muy rápidos (comparados con los de clave pública) y resultan adecuados para realizar transformaciones criptográficas en grandes flujos de datos.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. Los algoritmos de cifrado asimétricos, como RSA, están limitados matemáticamente respecto al volumen de datos que pueden cifrar.Asymmetric encryption algorithms such as RSA are limited mathematically in how much data they can encrypt. Los algoritmos de cifrado simétricos no suelen tener estos problemas.Symmetric encryption algorithms do not generally have those problems.

El tipo de algoritmo de clave secreta denominado cifrado de bloques se utiliza para cifrar un bloque de datos cada vez.A type of secret-key algorithm called a block cipher is used to encrypt one block of data at a time. Los cifrados de bloques, como Estándar de cifrado de datos (DES), TripleDES y Estándar de cifrado avanzado (CA), transforman criptográficamente un bloque de entrada de n bytes en un bloque de salida de bytes cifrados.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. Si desea cifrar o descifrar una secuencia de bytes, debe hacerlo bloque a bloque.If you want to encrypt or decrypt a sequence of bytes, you have to do it block by block. Dado que n es pequeño (8 bytes para DES y TripleDES y 16 bytes [valor predeterminado], 24 bytes o 32 bytes para AES), los valores mayores que n deben cifrarse bloque a bloque.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. Los valores que son menores que n tienen que ampliarse hasta n para que se puedan procesar.Data values that are smaller than n have to be expanded to n in order to be processed.

Una forma sencilla de cifrado de bloques es el modo Electronic Codebook (ECB).One simple form of block cipher is called the electronic codebook (ECB) mode. El modo ECB no se considera un modo seguro porque no utiliza un vector de inicialización para iniciar el primer bloque de texto simple.ECB mode is not considered secure, because it does not use an initialization vector to initialize the first plaintext block. Para una clave secreta kdeterminada, un cifrado de bloques simple que no utiliza un vector de inicialización codificará el mismo bloque de entrada de texto simple en el mismo bloque de salida de texto cifrado.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. Por tanto, si hay bloques duplicados dentro la secuencia de texto simple de entrada, habrá bloques duplicados en la secuencia de texto cifrado de salida.Therefore, if you have duplicate blocks in your input plaintext stream, you will have duplicate blocks in your output ciphertext stream. Estos bloques de salida duplicados podrían alertar a los usuarios sin autorización sobre la posibilidad de que se haya utilizado un cifrado débil en los algoritmos y los posibles modos de ataque.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. El modo de cifrado ECB es por tanto bastante vulnerable al análisis, y en última instancia, a la detección de claves.The ECB cipher mode is therefore quite vulnerable to analysis, and ultimately, key discovery.

Las clases de cifrado de bloques que se proporcionan en la biblioteca de clases base utilizan un modo de encadenamiento predeterminado denominado encadenamiento de bloques de cifrado (CBC), aunque este valor puede cambiarse, si así se desea.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.

El cifrado CBC subsana los problemas asociados con el cifrado ECB utilizando un vector de inicialización (IV) para cifrar el primer bloque de texto simple.CBC ciphers overcome the problems associated with ECB ciphers by using an initialization vector (IV) to encrypt the first block of plaintext. Cada uno de los bloques de texto simple siguientes se somete a una operación OR exclusiva bit a bit (XOR) con el bloque de texto cifrado anterior antes de cifrarse.Each subsequent block of plaintext undergoes a bitwise exclusive OR (XOR) operation with the previous ciphertext block before it is encrypted. Cada bloque de texto cifrado depende por tanto de todos los bloques anteriores.Each ciphertext block is therefore dependent on all previous blocks. Cuando se utiliza este sistema, los encabezados de los mensajes comunes que un usuario no autorizado podría conocer no pueden utilizarse para aplicar técnicas de ingeniería inversa en una clave.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 de comprometer los datos cifrados con un cifrado CBC consiste en realizar una búsqueda exhaustiva de todas las claves posibles.One way to compromise data that is encrypted with a CBC cipher is to perform an exhaustive search of every possible key. En función del tamaño de la clave utilizada para realizar el cifrado, este tipo de búsqueda llevará mucho tiempo aunque se utilicen los equipos más rápidos, y, por lo tanto, no es factible.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. Los tamaños de clave mayores son más difíciles de descifrar.Larger key sizes are more difficult to decipher. Aunque el cifrado no garantiza totalmente que un adversario no recupere los datos cifrados, aumenta considerablemente la dificultad.Although encryption does not make it theoretically impossible for an adversary to retrieve the encrypted data, it does raise the cost of doing this. Si se tardan tres meses en realizar una búsqueda exhaustiva para recuperar datos que solo son relevantes durante varios días, este método de búsqueda resulta poco práctico.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.

La desventaja del cifrado de clave secreta es que presupone que dos partes acuerdan una clave y un vector de inicialización, y que se comunican sus valores.The disadvantage of secret-key encryption is that it presumes two parties have agreed on a key and IV, and communicated their values. El vector de inicialización no se considera secreto y se transmite como texto simple con el mensaje.The IV is not considered a secret and can be transmitted in plaintext with the message. Sin embargo, la clave debe mantenerse en secreto a salvo de usuarios no autorizados.However, the key must be kept secret from unauthorized users. Debido a estos problemas, el cifrado de clave secreta a menudo se utiliza junto con el cifrado de clave pública para comunicar en privado los valores de la clave y el vector de inicialización.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.

Suponiendo que Alicia y Roberto es dos personas que desean comunicarse a través de un canal no seguro, es posible que usan cifrado de clave secreta como sigue: Alice y Bob acuerdan usar un algoritmo determinado (por ejemplo, AES) con una clave determinada y un 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. Alicia escribe un mensaje y crea una secuencia de red (quizás una con nombre canalización o red correo electrónico) en el que se va a enviar el mensaje.Alice composes a message and creates a network stream (perhaps a named pipe or network email) on which to send the message. A continuación, cifra el texto utilizando la clave y el vector de inicialización y envía el mensaje cifrado y el vector de inicialización a Roberto a través de intranet.Next, she encrypts the text using the key and IV, and sends the encrypted message and IV to Bob over the intranet. Roberto recibe el texto cifrado y lo descifra utilizando el vector de inicialización y la clave acordada anteriormente.Bob receives the encrypted text and decrypts it by using the IV and previously agreed upon key. Si se intercepta la transmisión, el interceptor no podrá recuperar el mensaje original porque no conoce la clave.If the transmission is intercepted, the interceptor cannot recover the original message, because he does not know the key. En este caso, solo debe mantenerse en secreto la clave.In this scenario, only the key must remain secret. En un ejemplo real, Alicia o Roberto genera una clave secreta y utiliza el cifrado (asimétrico) de clave pública para transferir la clave (simétrica) secreta a la otra 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. Para obtener más información sobre el cifrado de clave pública, vea la sección siguiente.For more information about public-key encryption, see the next section.

.NET Framework proporciona las siguientes clases que implementan algoritmos de cifrado de clave secreta:The .NET Framework provides the following classes that implement secret-key encryption algorithms:

Volver al principioBack to top

Cifrado de clave públicaPublic-Key Encryption

El cifrado de clave pública utiliza una clave privada que debe mantenerse en secreto y a salvo de los usuarios no autorizados, así como una clave pública que puede comunicarse.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 clave pública y la clave privada están vinculadas matemáticamente; los datos cifrados con la clave pública solo pueden descifrarse con la clave privada y los datos firmados con la clave privada solo pueden comprobarse con la clave pública.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 clave pública está a disposición de cualquier persona y se utiliza para cifrar los datos que se envían a quien guarda la clave privada.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. Los algoritmos criptográficos de clave pública también se conocen como algoritmos asimétricos porque se necesita una clave para cifrar los datos y otra para descifrarlos.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 regla criptográfica básica prohíbe la reutilización de claves; además, las dos claves deben ser únicas en cada sesión de comunicación.A basic cryptographic rule prohibits key reuse, and both keys should be unique for each communication session. Sin embargo, en la práctica, las claves asimétricas suelen durar bastante tiempo.However, in practice, asymmetric keys are generally long-lived.

Dos partes (Alicia y Roberto) podrían utilizar el cifrado de clave pública como sigue: En primer lugar, Alicia podría generar un par de claves pública y privada.Two parties (Alice and Bob) might use public-key encryption as follows: First, Alice generates a public/private key pair. Si Roberto desea enviar a Alicia un mensaje cifrado, le pide la clave pública.If Bob wants to send Alice an encrypted message, he asks her for her public key. Alicia envía a Roberto su clave pública a través de una red que no es segura y Roberto utiliza esta clave para cifrar un mensaje.Alice sends Bob her public key over a nonsecure network, and Bob uses this key to encrypt a message. Roberto envía el mensaje cifrado a Alicia y ésta lo descifra utilizando su clave privada.Bob sends the encrypted message to Alice, and she decrypts it by using her private key. Si Roberto recibiera la clave de Alicia a través de un canal que no es seguro, como una red pública, Roberto estaría expuesto a un ataque del 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. Por consiguiente, Roberto debe comprobar con Alicia que tiene una copia correcta de su clave pública.Therefore, Bob must verify with Alice that he has a correct copy of her public key.

Durante la transmisión de la clave pública de Alicia, un agente no autorizado podría interceptarla.During the transmission of Alice's public key, an unauthorized agent might intercept the key. Además, el mismo agente podría interceptar el mensaje cifrado de Roberto.Furthermore, the same agent might intercept the encrypted message from Bob. No obstante, el agente no puede descifrar el mensaje con la clave pública.However, the agent cannot decrypt the message with the public key. El mensaje solo puede descifrarse con la clave privada de Alicia, que no se ha transmitido.The message can be decrypted only with Alice's private key, which has not been transmitted. Alicia no utiliza su clave privada para cifrar un mensaje de respuesta a Roberto, porque cualquiera que tenga la clave pública podría descifrarlo.Alice does not use her private key to encrypt a reply message to Bob, because anyone with the public key could decrypt the message. Si Alicia desea enviar un mensaje a Roberto, le pide su clave pública y cifra su mensaje con ella.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. Seguidamente, Roberto descifra el mensaje utilizando su clave privada asociada.Bob then decrypts the message using his associated private key.

En este escenario, Alicia y Roberto utilizan un cifrado de clave pública (asimétrica) para transferir una clave secreta (simétrica) y utilizan el cifrado de clave secreta para el resto de la sesión.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.

En la lista siguiente se incluyen comparaciones entre algoritmos criptográficos de clave pública y de clave secreta:The following list offers comparisons between public-key and secret-key cryptographic algorithms:

  • Los algoritmos criptográficos de clave pública utilizan un tamaño de búfer fijo mientras que los de clave secreta usan un búfer de longitud variable.Public-key cryptographic algorithms use a fixed buffer size, whereas secret-key cryptographic algorithms use a variable-length buffer.

  • Los algoritmos de clave pública no se pueden usar para encadenar datos juntos en secuencias como sucede con los de clave secreta, ya que solo pueden cifrarse pequeñas cantidades de datos.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. Por lo tanto, las operaciones asimétricas no utilizan el mismo modelo de streaming que las simétricas.Therefore, asymmetric operations do not use the same streaming model as symmetric operations.

  • El cifrado de claves públicas tiene un espacio de claves (el intervalo de valores posibles de la clave) mucho mayor que el cifrado de claves secretas.Public-key encryption has a much larger keyspace (range of possible values for the key) than secret-key encryption. Por tanto, el cifrado de claves públicas es menos vulnerable a los ataques exhaustivos que prueban cada clave posible.Therefore, public-key encryption is less susceptible to exhaustive attacks that try every possible key.

  • Al no tener que estar protegidas, las claves públicas resultan fáciles de distribuir, siempre que exista algún mecanismo para comprobar la identidad del remitente.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.

  • Algunos algoritmos de clave pública (como RSA y DSA, aunque no Diffie-Hellman) se pueden utilizar para crear firmas digitales con el fin de comprobar la identidad del remitente de los datos.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.

  • Los algoritmos de clave pública son muy lentos comparados con los de clave secreta y no están diseñados para cifrar grandes cantidades de datos.Public-key algorithms are very slow compared with secret-key algorithms, and are not designed to encrypt large amounts of data. Son útiles solo para transferir cantidades muy pequeñas de información.Public-key algorithms are useful only for transferring very small amounts of data. Normalmente, el cifrado de clave pública se utiliza para cifrar la clave y el vector de inicialización que serán utilizados por un algoritmo de clave secreta.Typically, public-key encryption is used to encrypt a key and IV to be used by a secret-key algorithm. Después de transferir la clave y el vector de inicialización, el cifrado de clave secreta se utiliza para el resto de la sesión.After the key and IV are transferred, secret-key encryption is used for the remainder of the session.

.NET Framework proporciona las siguientes clases que implementan algoritmos de cifrado de clave pública:The .NET Framework provides the following classes that implement public-key encryption algorithms:

RSA permite tanto el cifrado como el uso de firmas, pero DSA solo se puede utilizar para firmar y Diffie-Hellman solo se puede utilizar para la generación de claves.RSA allows both encryption and signing, but DSA can be used only for signing, and Diffie-Hellman can be used only for key generation. En general, los algoritmos de clave pública tienen una aplicación más limitada que los algoritmos de clave privada.In general, public-key algorithms are more limited in their uses than private-key algorithms.

Volver al principioBack to top

firmas digitalesDigital Signatures

Los algoritmos de clave pública también se pueden usar para formar firmas digitales.Public-key algorithms can also be used to form digital signatures. Las firmas digitales autentican la identidad de un remitente (si se fía de la clave pública de éste) y ayudan a proteger la integridad de los datos.Digital signatures authenticate the identity of a sender (if you trust the sender's public key) and help protect the integrity of data. Con una clave pública generada por Alicia, el remitente de los datos de Alicia puede comprobar que ésta los envió si compara la firma digital de los datos de Alicia y la clave pública de ésta.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.

Para utilizar criptografía de clave pública con el objeto de firmar digitalmente un mensaje, Alicia aplica primero un algoritmo hash al mensaje para crear una síntesis del mismo.To use public-key cryptography to digitally sign a message, Alice first applies a hash algorithm to the message to create a message digest. La síntesis del mensaje es una representación compacta y única de los datos.The message digest is a compact and unique representation of data. Seguidamente, Alicia cifra la síntesis del mensaje con su clave privada para crear su firma personal.Alice then encrypts the message digest with her private key to create her personal signature. Después de recibir el mensaje y la firma, Roberto descifra esta última utilizando la clave pública de Alicia para recuperar la síntesis del mensaje y envía éste de forma aleatoria mediante el mismo algoritmo hash que utilizó Alicia.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. Si la síntesis del mensaje que calcula Roberto coincide exactamente con la que ha recibido de Alicia, Roberto puede estar seguro de que el mensaje provino del poseedor de la clave privada y de que no se han modificado los datos.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. Si Roberto confía en que Alicia es la propietaria de la clave privada, sabe que el mensaje proviene de Alicia.If Bob trusts that Alice is the possessor of the private key, he knows that the message came from Alice.

Nota

Cualquiera puede comprobar una firma, ya que la clave pública del remitente es de dominio público y normalmente se incluye en el formato de firma digital.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. Este método no mantiene la confidencialidad del mensaje; para que sea secreto, también se debe cifrar.This method does not retain the secrecy of the message; for the message to be secret, it must also be encrypted.

.NET Framework proporciona las siguientes clases que implementan algoritmos de firma digital:The .NET Framework provides the following classes that implement digital signature algorithms:

Volver al principioBack to top

Valores hashHash Values

Los algoritmos hash asignan valores binarios de longitud arbitraria a valores binarios más pequeños de longitud fija, que se denominan valores hash.Hash algorithms map binary values of an arbitrary length to smaller binary values of a fixed length, known as hash values. Un valor hash es una representación numérica de un segmento de datos.A hash value is a numerical representation of a piece of data. Si aplica un algoritmo hash a un párrafo de texto simple y cambia solo una letra del párrafo, el valor hash subsiguiente producirá un valor distinto.If you hash a paragraph of plaintext and change even one letter of the paragraph, a subsequent hash will produce a different value. Si el valor hash es criptográficamente seguro, su valor cambiará significativamente.If the hash is cryptographically strong, its value will change significantly. Por ejemplo, si se cambia únicamente un solo bit de un mensaje, una función hash segura puede generar un resultado que difiera en un 50 por ciento.For example, if a single bit of a message is changed, a strong hash function may produce an output that differs by 50 percent. Muchos valores de entrada pueden aplicar un algoritmo hash al mismo valor de salida.Many input values may hash to the same output value. Sin embargo, técnicamente es poco factible encontrar dos entradas distintas cuyo valor hash sea el mismo.However, it is computationally infeasible to find two distinct inputs that hash to the same value.

Dos partes (Alicia y Roberto) podrían utilizar una función hash para asegurar la integridad de los mensajes.Two parties (Alice and Bob) could use a hash function to ensure message integrity. Podrían seleccionar un algoritmo hash para firmar sus mensajes.They would select a hash algorithm to sign their messages. Alicia escribiría un mensaje y, a continuación, crearía un valor hash de ese mensaje utilizando el algoritmo seleccionado.Alice would write a message, and then create a hash of that message by using the selected algorithm. Después seguiría uno de los métodos siguientes:They would then follow one of the following methods:

  • Alicia enviaría a Roberto el mensaje de texto simple y el mensaje al que aplicó el algoritmo hash (firma digital).Alice sends the plaintext message and the hashed message (digital signature) to Bob. Roberto recibiría el mensaje y le aplicaría el algoritmo hash. A continuación, compararía su valor hash con el valor hash que recibió de Alicia.Bob receives and hashes the message and compares his hash value to the hash value that he received from Alice. Si los dos valores hash son idénticos, el mensaje no se ha modificado.If the hash values are identical, the message was not altered. Si los valores no son idénticos, el mensaje se modificó después de que Alicia lo escribiera.If the values are not identical, the message was altered after Alice wrote it.

    Desgraciadamente, este método no determina la autenticidad del remitente.Unfortunately, this method does not establish the authenticity of the sender. Cualquiera puede suplantar a Alicia y enviar un mensaje a Roberto.Anyone can impersonate Alice and send a message to Bob. Pueden utilizar el mismo algoritmo hash para firmar su mensaje, y todo lo que Roberto podría determinar es que el mensaje coincide con su firma.They can use the same hash algorithm to sign their message, and all Bob can determine is that the message matches its signature. Esta es una forma de ataque de tipo "Man in the middle".This is one form of a man-in-the-middle attack. Para obtener más información, consulte ejemplo de comunicación segura de Cryptography Next Generation (CNG).For more information, see Cryptography Next Generation (CNG) Secure Communication Example.

  • Alicia envía el mensaje de texto simple a Roberto a través de un canal público que no es seguro.Alice sends the plaintext message to Bob over a nonsecure public channel. Envía a Roberto el mensaje al que aplicó el algoritmo hash a través de un canal privado seguro.She sends the hashed message to Bob over a secure private channel. Roberto recibe el mensaje de texto simple, le aplica un algoritmo hash y compara el valor hash con el valor hash que se intercambió de forma privada.Bob receives the plaintext message, hashes it, and compares the hash to the privately exchanged hash. Si los valores hash coinciden, Roberto sabe dos cosas:If the hashes match, Bob knows two things:

    • que el mensaje no se alteró.The message was not altered.

    • que el remitente del mensaje (Alicia) es auténtico.The sender of the message (Alice) is authentic.

    Para que este sistema funcione, Alicia debe ocultar el valor hash original a todos excepto a Roberto.For this system to work, Alice must hide her original hash value from all parties except Bob.

  • Alicia envía el mensaje de texto simple a Roberto a través de un canal público que no es seguro y publica el mensaje al que aplicó el algoritmo hash en su sitio web para que esté visible públicamente.Alice sends the plaintext message to Bob over a nonsecure public channel and places the hashed message on her publicly viewable Web site.

    Este método evita que se manipule el mensaje, ya que impide que nadie modifique el valor hash.This method prevents message tampering by preventing anyone from modifying the hash value. Aunque cualquier persona puede leer el mensaje y su valor hash, este valor hash únicamente lo puede modificar Alicia.Although the message and its hash can be read by anyone, the hash value can be changed only by Alice. Un atacante que desee suplantar a Alicia necesitaría tener acceso al sitio web de Alicia.An attacker who wants to impersonate Alice would require access to Alice's Web site.

Ninguno de los métodos anteriores evitará que alguien lea los mensajes de Alicia, ya que se transmiten en texto simple.None of the previous methods will prevent someone from reading Alice's messages, because they are transmitted in plaintext. Para conseguir una seguridad total, normalmente se necesitarán firmas digitales (firma del mensaje) y mecanismos de cifrado.Full security typically requires digital signatures (message signing) and encryption.

.NET Framework proporciona las siguientes clases que implementan algoritmos hash:The .NET Framework provides the following classes that implement hashing algorithms:

Nota

En 1996 se detectaron defectos de diseño en MD5 y en su lugar se recomendó SHA-1.MD5 design flaws were discovered in 1996, and SHA-1 was recommended instead. En 2004 se detectaron nuevos defectos y el algoritmo MD5 ya no se consideró seguro.In 2004, additional flaws were discovered, and the MD5 algorithm is no longer considered secure. También se ha descubierto que el algoritmo SHA-1 no es seguro y ahora se recomienda utilizar el algoritmo SHA 2 en su lugar.The SHA-1 algorithm has also been found to be insecure, and SHA-2 is now recommended instead.

Volver al principioBack to top

generación de números aleatoriosRandom Number Generation

La generación de números aleatorios es propia de muchas operaciones criptográficas.Random number generation is integral to many cryptographic operations. Por ejemplo, las claves criptográficas deben ser lo más aleatorias posible para que no se puedan reproducir.For example, cryptographic keys need to be as random as possible so that it is infeasible to reproduce them. Los generadores de números aleatorios criptográficos deben generar resultados que, mediante cálculos, no se pueden predecir con una probabilidad mayor del cincuenta por ciento.Cryptographic random number generators must generate output that is computationally infeasible to predict with a probability that is better than one half. Por tanto, cualquier método para predecir el siguiente bit del resultado no debe ser más eficaz que el cálculo aleatorio.Therefore, any method of predicting the next output bit must not perform better than random guessing. Las clases de .NET Framework utilizan generadores de números aleatorios para generar las claves criptográficas.The classes in the .NET Framework use random number generators to generate cryptographic keys.

La clase RNGCryptoServiceProvider es una implementación de un algoritmo generador de números aleatorios.The RNGCryptoServiceProvider class is an implementation of a random number generator algorithm.

Volver al principioBack to top

Manifiestos de ClickOnceClickOnce Manifests

En .NET Framework 3.5, las siguientes clases de criptografía permiten obtener y comprobar información sobre las firmas de manifiestos para las aplicaciones que se implementan mediante tecnología 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:

Además, las clases siguientes proporcionan información de firma específica:In addition, the following classes provide specific signature information:

Volver al principioBack to top

Compatibilidad con Suite BSuite B Support

.NET Framework 3.5 es compatible con el conjunto de Suite B de algoritmos criptográficos publicados por la National Security Agency (NSA).The .NET Framework 3.5 supports the Suite B set of cryptographic algorithms published by the National Security Agency (NSA). Para obtener más información sobre Suite B, vea la hoja informativa sobre la criptografía de Suite B de la NSA.For more information about Suite B, see the NSA Suite B Cryptography Fact Sheet.

Se incluyen los siguientes algoritmos:The following algorithms are included:

  • Algoritmo del Estándar de cifrado avanzado (AES) con tamaños clave de cifrado de 128, 192 y 256 bits.Advanced Encryption Standard (AES) algorithm with key sizes of 128, 192, , and 256 bits for encryption.

  • Algoritmos hash seguros SHA-1, SHA-256, SHA-384 y SHA-512 para crear valores hash.Secure Hash Algorithms SHA-1, SHA-256, SHA-384, and SHA-512 for hashing. (Los tres últimos normalmente están agrupados juntos y se les conoce como SHA 2).(The last three are generally grouped together and referred to as SHA-2.)

  • Algoritmo de firma digital de curva elíptica (ECDSA), que utiliza curvas de módulos primos de 256, 384 y 521 bits.Elliptic Curve Digital Signature Algorithm (ECDSA), using curves of 256-bit, 384-bit, and 521-bit prime moduli for signing. En la documentación de NSA se definen explícitamente estas curvas y se denominan P-256, P-384 y P-521.The NSA documentation specifically defines these curves, and calls them P-256, P-384, and P-521. Este algoritmo lo proporciona la clase ECDsaCng .This algorithm is provided by the ECDsaCng class. Permite firmar con una clave privada y comprobar la firma con una clave pública.It enables you to sign with a private key and verify the signature with a public key.

  • Algoritmo de Diffie-Hellman de curva elíptica (ECDH), que utiliza curvas de módulos primos de 256, 384 y 521 bits para el acuerdo confidencial e intercambio de claves.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. Este algoritmo lo proporciona la clase ECDiffieHellmanCng .This algorithm is provided by the ECDiffieHellmanCng class.

Los contenedores de código administrado para las implementaciones certificadas del Estándar federal de procesamiento de información (FIPS) de AES, SHA-256, SHA-384 y SHA-512 están disponibles en las nuevas clases AesCryptoServiceProvider, SHA256CryptoServiceProvider, SHA384CryptoServiceProvidery SHA512CryptoServiceProvider .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.

Volver al principioBack to top

Clases de criptografía de próxima generación (CNG)Cryptography Next Generation (CNG) Classes

Las clases de Criptografía de próxima generación (CNG) proporcionan un contenedor administrado en torno a funciones CNG nativas.The Cryptography Next Generation (CNG) classes provide a managed wrapper around the native CNG functions. (CNG es la sustituta de CryptoAPI). La cadena "Cng" forma parte de los nombres de estas clases.(CNG is the replacement for CryptoAPI.) These classes have "Cng" as part of their names. La clase contenedora de claves CngKey es fundamental en estas clases contenedoras CNG, pues abstrae el almacenamiento y el uso de claves CNG.Central to the CNG wrapper classes is the CngKey key container class, which abstracts the storage and use of CNG keys. Esta clase permite almacenar de forma segura un par de claves o una clave pública y hacer referencia a ella utilizando un nombre de cadena simple.This class lets you store a key pair or a public key securely and refer to it by using a simple string name. La clase de firma ECDsaCng y la clase de cifrado ECDiffieHellmanCng basadas en curvas elípticas pueden utilizar los objetos CngKey .The elliptic curve-based ECDsaCng signature class and the ECDiffieHellmanCng encryption class can use CngKey objects.

La clase CngKey se utiliza en otras numerosas operaciones, entre las que se incluyen la apertura, creación, eliminación y exportación de claves.The CngKey class is used for a variety of additional operations, including opening, creating, deleting, and exporting keys. También proporciona acceso al identificador de clave subyacente que se va a utilizar en las llamadas directas a las funciones nativas.It also provides access to the underlying key handle to use when calling native functions directly.

.NET Framework 3.5 incluye también una serie de clases CNG compatibles, como las siguientes:The .NET Framework 3.5 also includes a variety of supporting CNG classes, such as the following:

Volver al principioBack to top

TítuloTitle DescripciónDescription
Modelo de criptografíaCryptography Model Describe la forma de implementar la criptografía en la biblioteca de clases base.Describes how cryptography is implemented in the base class library.
Tutorial: Crear una aplicación criptográficaWalkthrough: Creating a Cryptographic Application Explica el cifrado básico y las tareas de descifrado.Demonstrates basic encryption and decryption tasks.
Configurar clases de criptografíaConfiguring Cryptography Classes Describe la forma de asignar nombres de algoritmo a clases criptográficas e identificadores de objetos a un algoritmo criptográfico.Describes how to map algorithm names to cryptographic classes and map object identifiers to a cryptographic algorithm.