KeyDerivationAlgorithmProvider 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
키 파생 알고리즘 공급자를 나타냅니다.
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
- 상속
- 특성
Windows 요구 사항
디바이스 패밀리 |
Windows 10 (10.0.10240.0에서 도입되었습니다.)
|
API contract |
Windows.Foundation.UniversalApiContract (v1.0에서 도입되었습니다.)
|
예제
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;
}
}
}
설명
둘 이상의 당사자가 비밀 대칭 키를 공유하는 경우 암호화 작업에 사용할 추가 키를 파생해야 하는 경우가 많습니다. 또한 신뢰할 수 있는 타사에서 단일 master 키에서 고유한 암호화 키를 파생해야 하는 경우가 많습니다. 키 파생 함수는 이러한 추가 키를 파생하는 데 사용됩니다.
CryptographicEngine 클래스의 정적 DeriveKeyMaterial 메서드와 KeyDerivationParameters 클래스의 다음 메서드를 사용하여 키를 파생할 수 있습니다.
메서드 | Description |
---|---|
BuildForPbkdf2 | 암호 기반 키 파생 함수 2(PBKDF2)에서 사용할 KeyDerivationParameters 개체를 만듭니다. |
BuildForSP800108 | 카운터 모드 HMAC(해시 기반 메시지 인증 코드) 키 파생 함수에서 사용할 KeyDerivationParameters 개체를 만듭니다. |
BuildForSP80056a | SP800-56A 키 파생 함수에서 사용할 KeyDerivationParameters 개체를 만듭니다. |
정적 OpenAlgorithm 메서드를 호출하여 KeyDerivationAlgorithmProvider 개체를 만듭니다.
속성
AlgorithmName |
KDF(열린 키 파생 함수) 알고리즘의 이름을 가져옵니다. |
메서드
CreateKey(IBuffer) |
KDF 키를 만듭니다. |
OpenAlgorithm(String) |
KeyDerivationAlgorithmProvider 클래스의 instance 만들고 사용할 지정된 알고리즘을 엽니다. |