Compartir a través de


Generar claves para cifrar y descifrar

Actualización: noviembre 2007

La creación y administración de claves es una parte importante del proceso criptográfico. Los algoritmos simétricos requieren la creación de una clave y un IV (Initialization Vector, vector de inicialización) que deben mantenerse en secreto y a salvo de quienes no deban descifrar los datos. Los algoritmos asimétricos requieren la creación de una clave pública y una clave privada. La clave pública puede revelarse a cualquiera, mientras que la privada debe conocerla sólo la parte que descifrará los datos cifrados con la clave pública. En esta sección se describe cómo generar y administrar claves para algoritmos simétricos y asimétricos.

Claves simétricas

Las clases de cifrado simétrico que proporciona .NET Framework requieren una clave y un nuevo vector de inicialización (IV) para cifrar y descifrar datos. Siempre que cree una nueva instancia de una de las clases criptográficas simétricas administradas utilizando el constructor predeterminado, se crean automáticamente una clave y un vector de inicialización nuevos. Cualquier persona a la que permita descifrar sus datos debe poseer la misma clave y el mismo IV, y utilizar el mismo algoritmo. Normalmente, debe crearse una nueva clave y vector de inicialización para cada sesión, y ni la clave ni el vector deberían almacenarse para utilizarlos en una sesión posterior.

Para comunicar una clave simétrica y un IV a una parte remota, normalmente se cifran utilizando cifrado asimétrico. El envío de estos valores a través de una red insegura sin cifrarlos resulta extremadamente peligroso, ya que quien los intercepte podrá descifrar los datos. Para obtener más información acerca de este proceso de cifrado y transferencia de la clave y el IV, vea Crear un esquema criptográfico.

En el ejemplo siguiente se muestra la creación de una nueva instancia de la clase TripleDESCryptoServiceProvider que implementa el algoritmo TripleDES.

Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();

Cuando se ejecuta el código anterior, se genera una nueva clave y un IV, y se colocan en las propiedades Key e IV, respectivamente.

En ocasiones tendrá que generar varias claves. En este caso, puede crear una nueva instancia de una clase que implemente un algoritmo simétrico y después crear una nueva clave e IV mediante una llamada a los métodos GenerateKey y GenerateIV. En el ejemplo de código siguiente se ilustra cómo crear nuevas claves y vectores de inicialización una vez creada una nueva instancia de la clase criptográfica asimétrica.

Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()
TDES.GenerateIV()
TDES.GenerateKey()
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
TDES.GenerateIV();
TDES.GenerateKey();

Cuando se ejecuta el código anterior, se generan una clave y un IV al crear la nueva instancia de TripleDESCryptoServiceProvider. Se crean otra clave e IV cuando se llama a los métodos GenerateKey y GenerateIV.

Claves asimétricas

.NET Framework proporciona las clases RSACryptoServiceProvider y DSACryptoServiceProvider para el cifrado asimétrico. Estas clases crean un par de claves pública y privada cuando utiliza el constructor predeterminado para crear una nueva instancia. Las claves asimétricas pueden almacenarse para utilizarse en sesiones múltiples o bien generarse para una sesión únicamente. Aunque la clave pública puede ponerse a disposición general, la clave privada debe guardarse bien.

Un par de claves pública y privada se genera siempre que se crea una nueva instancia de una clase de algoritmo asimétrico. Una vez creada una nueva instancia de la clase, la información de la clave puede extraerse mediante uno de estos dos métodos:

  • El método ToXMLString, que devuelve una representación XML de la información de la clave.

  • Método ExportParameters que devuelve una estructura RSAParameters que contiene la información de la clave.

Ambos métodos aceptan un valor booleano que indica si hay que devolver sólo la información de la clave pública o si se devuelve también la correspondiente a la clave privada. El valor de una clase RSACryptoServiceProvider puede inicializarse con una estructura RSAParameters mediante el método ImportParameters.

Las claves privadas asimétricas nunca deben almacenarse literalmente o en texto sin cifrar en el equipo local. Si debe almacenar una clave privada, utilice un contenedor de claves. Para obtener más información sobre cómo almacenar una clave privada en un contenedor de claves, vea Cómo: Almacenar claves asimétricas en un contenedor de claves.

En el ejemplo de código siguiente se crea una nueva instancia de la clase RSACryptoServiceProvider, se crea un par de claves pública y privada, y se guarda la información de la clave pública en una estructura RSAParameters.

'Generate a public/private key pair.
Dim RSA as RSACryptoServiceProvider = new RSACryptoServiceProvider()
'Save the public key information to an RSAParameters structure.
Dim RSAKeyInfo As RSAParameters = RSA.ExportParameters(false)
//Generate a public/private key pair.
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//Save the public key information to an RSAParameters structure.
RSAParameters RSAKeyInfo = RSA.ExportParameters(false);

Vea también

Tareas

Cómo: Almacenar claves asimétricas en un contenedor de claves

Conceptos

Cifrar datos

Descifrar datos

Otros recursos

Tareas criptográficas

Servicios criptográficos