Angeben eines benutzerdefinierten KryptografiealgorithmusSpecifying a Custom Crypto Algorithm

WCF ermöglicht es Ihnen, beim Verschlüsseln von Daten oder Berechnen digitaler Signaturen einen benutzerdefinierten Kryptografiealgorithmus anzugeben.WCF allows you to specify a custom crypto algorithm to use when encrypting data or computing digital signatures. Dazu führen Sie die folgenden Schritte aus:This is done by the following steps:

  1. Leiten Sie eine Klasse von SecurityAlgorithmSuite ab.Derive a class from SecurityAlgorithmSuite

  2. Registrieren Sie den Algorithmus.Register the algorithm

  3. Konfigurieren Sie die Bindung mit der SecurityAlgorithmSuite-Klasse.Configure the binding with the SecurityAlgorithmSuite-derived class.

Ableiten einer Klasse von SecurityAlgorithmSuiteDerive a class from SecurityAlgorithmSuite

SecurityAlgorithmSuite ist eine abstrakte Basisklasse, mit der Sie den Algorithmus für verschiedene sicherheitsbezogene Vorgänge angeben können,The SecurityAlgorithmSuite is an abstract base class that allows you to specify the algorithm to use when performing various security related operations. z. B. für das Berechnen eines Hash für eine digitale Signatur oder das Verschlüsseln einer Nachricht.For example, computing a hash for a digital signature or encrypting a message. Der folgende Code zeigt, wie eine Klasse von SecurityAlgorithmSuite abgeleitet wird:The following code shows how to derive a class from SecurityAlgorithmSuite:

public class MyCustomAlgorithmSuite : SecurityAlgorithmSuite  
    {  
        public override string DefaultAsymmetricKeyWrapAlgorithm  
        {  
            get { return SecurityAlgorithms.RsaOaepKeyWrap; }  
        }  

        public override string DefaultAsymmetricSignatureAlgorithm  
        {  
            get { return SecurityAlgorithms.RsaSha1Signature; }  
        }  

        public override string DefaultCanonicalizationAlgorithm  
        {  
            get { return SecurityAlgorithms.ExclusiveC14n; ; }  
        }  

        public override string DefaultDigestAlgorithm  
        {  
            get { return SecurityAlgorithms.MyCustomHashAlgorithm; }  
        }  

        public override string DefaultEncryptionAlgorithm  
        {  
            get { return SecurityAlgorithms.Aes128Encryption; }  
        }  

        public override int DefaultEncryptionKeyDerivationLength  
        {  
            get { return 128; }  
        }  

        public override int DefaultSignatureKeyDerivationLength  
        {  
            get { return 128; }  
        }  

        public override int DefaultSymmetricKeyLength  
        {  
            get { return 128; }  
        }  

        public override string DefaultSymmetricKeyWrapAlgorithm  
        {  
            get { return SecurityAlgorithms.Aes128Encryption; }  
        }  

        public override string DefaultSymmetricSignatureAlgorithm  
        {  
            get { return SecurityAlgorithms.HmacSha1Signature; }  
        }  

        public override bool IsAsymmetricKeyLengthSupported(int length)  
        {  
            return length >= 1024 && length <= 4096;  
        }  

        public override bool IsSymmetricKeyLengthSupported(int length)  
        {  
            return length >= 128 && length <= 256;  
        }  
    }  

Registrieren des benutzerdefinierten AlgorithmusRegister the Custom Algorithm

Die Registrierung kann in einer Konfigurationsdatei oder in imperativem Code vorgenommen werden.Registration can be done in a configuration file or in imperative code. Zum Registrieren eines benutzerdefinierten Algorithmus wird eine Zuordnung zwischen einer Klasse, die einen Kryptografiedienstanbieter implementiert, und einem Alias erstellt.Registering a custom algorithm is done by creating a mapping between a class that implements a crypto service provider and an alias. Der Alias wird dann einem URI zugeordnet, der beim Angeben des Algorithmus in der Bindung des WCF-Diensts verwendet wird.The alias is then mapped to a URI which is used when specifying the algorithm in the WCF service’s binding. Der folgende Konfigurationsausschnitt zeigt, wie ein benutzerdefinierter Algorithmus in der Konfigurationsdatei registriert wird:The following configuration snippet illustrates how to register a custom algorithm in config:

<configuration>  
   <mscorlib>  
      <cryptographySettings>  
         <cryptoNameMapping>  
           <cryptoClasses>  
              <cryptoClass SHA256CSP="System.Security.Cryptography.SHA256CryptoServiceProvider, System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
           </cryptoClasses>  
           <nameEntry name="http://constoso.com/CustomAlgorithms/CustomHashAlgorithm"  
              class="SHA256CSP" />  
           </cryptoNameMapping>  
        </cryptographySettings>  
    </mscorlib>  
</configuration>  

Im Abschnitt unter dem <cryptoClasses>-Element wird die Zuordnung zwischen der SHA256CryptoServiceProvider und den Alias "SHA256CSP" erstellt.The section under the <cryptoClasses> element creates the mapping between the SHA256CryptoServiceProvider and the alias "SHA256CSP". Die <nameEntry>-Element erstellt die Zuordnung zwischen dem Alias "SHA256CSP" und der angegebenen URL (http://constoso.com/CustomAlgorithms/CustomHashAlgorithm ).The <nameEntry> element creates the mapping between the "SHA256CSP" alias and the specified URL (http://constoso.com/CustomAlgorithms/CustomHashAlgorithm ).

Verwenden Sie zum Registrieren des benutzerdefinierten Algorithmus im Code die AddAlgorithm(Type, String[])-Methode.To register the custom algorithm in code use the AddAlgorithm(Type, String[]) method. Diese Methode erstellt beide Zuordnungen.This method creates both mappings. Das folgende Beispiel zeigt, wie diese Methode aufgerufen wird:The following example shows how to call this method:

// Register the custom URI string defined for the hashAlgorithm in MyCustomAlgorithmSuite class to create the   
// SHA256CryptoServiceProvider hash algorithm object.  
CryptoConfig.AddAlgorithm(typeof(SHA256CryptoServiceProvider), "http://constoso.com/CustomAlgorithms/CustomHashAlgorithm");  

Konfigurieren der BindungConfigure the Binding

Zum Konfigurieren der Bindung geben Sie die benutzerdefinierte abgeleitete SecurityAlgorithmSuite-Klasse wie im folgenden Codeausschnitt dargestellt in den Bindungseinstellungen an:You configure the binding by specifying the custom SecurityAlgorithmSuite-derived class in the binding settings as shown in the following code snippet:

WSHttpBinding binding = new WSHttpBinding();  
            binding.Security.Message.AlgorithmSuite = new MyCustomAlgorithmSuite();  

Ein vollständiges Codebeispiel finden Sie unter der kryptografische Flexibilität in WCF-Sicherheit Beispiel.For a complete code example, see the Cryptographic Agility in WCF Security sample.

Siehe auchSee Also

Sichern von Diensten und ClientsSecuring Services and Clients
Sichern von DienstenSecuring Services
Übersicht über die SicherheitSecurity Overview
Begriffe der SicherheitSecurity Concepts