KeyDerivationAlgorithmProvider Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa un proveedor de algoritmos de derivación de claves.
public ref class KeyDerivationAlgorithmProvider sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class KeyDerivationAlgorithmProvider final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class KeyDerivationAlgorithmProvider
Public NotInheritable Class KeyDerivationAlgorithmProvider
- Herencia
- Atributos
Requisitos de Windows
Familia de dispositivos |
Windows 10 (se introdujo en la versión 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)
|
Ejemplos
using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;
using Windows.Storage.Streams;
namespace SampleKeyDerivationAlgorithm
{
sealed partial class SampleKeyDerivationProviderApp : Application
{
public SampleKeyDerivationProviderApp()
{
// Initialize the Application.
this.InitializeComponent();
// Derive key material from a password-based key derivation function.
String strKdfAlgName = KeyDerivationAlgorithmNames.Pbkdf2Sha256;
UInt32 targetKeySize = 32;
UInt32 iterationCount = 10000;
IBuffer buffKeyMatl = this.SampleDeriveKeyMaterialPbkdf(
strKdfAlgName,
targetKeySize,
iterationCount);
// Create a key.
CryptographicKey key = this.SampleCreateKDFKey(
strKdfAlgName,
buffKeyMatl);
}
public IBuffer SampleDeriveKeyMaterialPbkdf(
String strAlgName,
UInt32 targetKeySize,
UInt32 iterationCount)
{
// Open the specified algorithm.
KeyDerivationAlgorithmProvider objKdfProv = KeyDerivationAlgorithmProvider.OpenAlgorithm(strAlgName);
// Demonstrate how to retrieve the algorithm name.
String strAlgUsed = objKdfProv.AlgorithmName;
// Create a buffer that contains the secret used during derivation.
String strSecret = "MyPassword";
IBuffer buffSecret = CryptographicBuffer.ConvertStringToBinary(strSecret, BinaryStringEncoding.Utf8);
// Create a random salt value.
IBuffer buffSalt = CryptographicBuffer.GenerateRandom(32);
// Create the derivation parameters.
KeyDerivationParameters pbkdf2Params = KeyDerivationParameters.BuildForPbkdf2(buffSalt, iterationCount);
// Create a key from the secret value.
CryptographicKey keyOriginal = objKdfProv.CreateKey(buffSecret);
// Derive a key based on the original key and the derivation parameters.
IBuffer keyMaterial = CryptographicEngine.DeriveKeyMaterial(
keyOriginal,
pbkdf2Params,
targetKeySize);
// Demonstrate checking the iteration count.
UInt32 iterationCountOut = pbkdf2Params.IterationCount;
// Demonstrate returning the derivation parameters to a buffer.
IBuffer buffParams = pbkdf2Params.KdfGenericBinary;
// return the KDF key material.
return keyMaterial;
}
public CryptographicKey SampleCreateKDFKey(
String strAlgName,
IBuffer buffKeyMaterial)
{
// Create a KeyDerivationAlgorithmProvider object and open the specified algorithm.
KeyDerivationAlgorithmProvider objKdfAlgProv = KeyDerivationAlgorithmProvider.OpenAlgorithm(strAlgName);
// Create a key by using the KDF parameters.
CryptographicKey key = objKdfAlgProv.CreateKey(buffKeyMaterial);
return key;
}
}
}
Comentarios
Cuando dos o más partes comparten una clave simétrica secreta, a menudo es necesario derivar claves adicionales para su uso en operaciones criptográficas. A menudo, también es necesario que un tercero de confianza derive claves criptográficas distintas de una sola clave maestra. Las funciones de derivación de claves se usan para derivar estas claves adicionales.
Puede usar el método static DeriveKeyMaterial en la clase CryptographicEngine y los métodos siguientes de la clase KeyDerivationParameters para derivar una clave.
Método | Descripción |
---|---|
BuildForPbkdf2 | Crea un objeto KeyDerivationParameters para su uso en la función de derivación de claves basada en contraseña 2 (PBKDF2). |
BuildForSP800108 | Crea un objeto KeyDerivationParameters para su uso en un modo de contador, función de derivación de claves de código de autenticación de mensajes basado en hash (HMAC). |
BuildForSP80056a | Crea un objeto KeyDerivationParameters para su uso en la función de derivación de claves SP800-56A. |
Para crear un objeto KeyDerivationAlgorithmProvider, llame al método estático OpenAlgorithm .
Propiedades
AlgorithmName |
Obtiene el nombre del algoritmo de derivación de clave abierta (KDF). |
Métodos
CreateKey(IBuffer) |
Crea una clave KDF. |
OpenAlgorithm(String) |
Crea una instancia de la clase KeyDerivationAlgorithmProvider y abre el algoritmo especificado para su uso. |