Specifica di un algoritmo di crittografia personalizzatoSpecifying a Custom Crypto Algorithm

WCF consente di specificare un algoritmo di crittografia personalizzato da usare per crittografare i dati o calcolare le firme digitali.WCF allows you to specify a custom crypto algorithm to use when encrypting data or computing digital signatures. A tale scopo, attenersi alla procedura seguente:This is done by the following steps:

  1. Derivare una classe da SecurityAlgorithmSuite.Derive a class from SecurityAlgorithmSuite

  2. Registrare l'algoritmo.Register the algorithm

  3. Configurare l'associazione con la classe derivata da SecurityAlgorithmSuite.Configure the binding with the SecurityAlgorithmSuite-derived class.

Derivare una classe da SecurityAlgorithmSuite.Derive a class from SecurityAlgorithmSuite

SecurityAlgorithmSuite è una classe di base astratta che consente di specificare l'algoritmo da usare per eseguire diverse operazioni relative alla sicurezza.The SecurityAlgorithmSuite is an abstract base class that allows you to specify the algorithm to use when performing various security related operations. Ad esempio, calcolare un hash per una firma digitale o crittografare un messaggio.For example, computing a hash for a digital signature or encrypting a message. Nel codice seguente viene illustrato come derivare una classe da SecurityAlgorithmSuite.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;  
        }  
    }  

Registrare l'algoritmo personalizzatoRegister the Custom Algorithm

La registrazione può essere eseguita in un file di configurazione o nel codice imperativo.Registration can be done in a configuration file or in imperative code. La registrazione di un algoritmo personalizzato viene eseguita creando un mapping tra una classe che implementa un provider di servizi di crittografia e un alias.Registering a custom algorithm is done by creating a mapping between a class that implements a crypto service provider and an alias. L'alias viene quindi mappato a un URI che viene usato per specificare l'algoritmo nell'associazione del servizio WCF.The alias is then mapped to a URI which is used when specifying the algorithm in the WCF service’s binding. Nel frammento di configurazione seguente viene illustrato come registrare un algoritmo personalizzato in config: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>  

La sezione di <cryptoClasses> elemento crea il mapping tra il SHA256CryptoServiceProvider e l'alias "SHA256CSP".The section under the <cryptoClasses> element creates the mapping between the SHA256CryptoServiceProvider and the alias "SHA256CSP". Il <nameEntry> elemento crea il mapping tra l'alias "SHA256CSP" e l'URL specificato (http://constoso.com/CustomAlgorithms/CustomHashAlgorithm ).The <nameEntry> element creates the mapping between the "SHA256CSP" alias and the specified URL (http://constoso.com/CustomAlgorithms/CustomHashAlgorithm ).

Per registrare l'algoritmo personalizzato nel codice usare il metodo AddAlgorithm(Type, String[]).To register the custom algorithm in code use the AddAlgorithm(Type, String[]) method. Questo metodo crea entrambi i mapping.This method creates both mappings. Nell'esempio seguente viene illustrato come chiamare questo metodo: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");  

Configurare l'associazioneConfigure the Binding

L'associazione si configura specificando la classe derivata da SecurityAlgorithmSuite nelle impostazioni di associazione, come indicato nel frammento di codice seguente: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();  

Per un esempio di codice completo, vedere il agilità di crittografia nella sicurezza WCF esempio.For a complete code example, see the Cryptographic Agility in WCF Security sample.

Vedere ancheSee Also

Protezione di servizi e clientSecuring Services and Clients
Protezione dei serviziSecuring Services
Panoramica della sicurezzaSecurity Overview
Concetti relativi alla sicurezzaSecurity Concepts