Partilhar via


Como: Desativar a criptografia de assinaturas digitais

Por padrão, uma mensagem é assinada e a assinatura é criptografada digitalmente. Isso é controlado criando uma associação personalizada com uma instância do AsymmetricSecurityBindingElement ou o SymmetricSecurityBindingElement e definindo a MessageProtectionOrder propriedade de qualquer classe para um MessageProtectionOrder valor de enumeração. A predefinição é SignBeforeEncryptAndEncryptSignature. Esse processo consome até 30% mais tempo do que simplesmente assinar e criptografar com base no tamanho geral da mensagem (quanto menor a mensagem, maior o impacto no desempenho). Desabilitar a criptografia da assinatura, no entanto, pode permitir que um invasor adivinhe o conteúdo da mensagem. Isso é possível porque o elemento signature contém o código hash do texto sem formatação de cada parte assinada na mensagem. Por exemplo, embora o corpo da mensagem seja criptografado por padrão, a assinatura não criptografada contém o código hash do corpo da mensagem antes da criptografia. Se o conjunto de valores possíveis para a parte assinada e criptografada for pequeno, um invasor poderá deduzir o conteúdo observando o valor de hash. A criptografia da assinatura atenua esse vetor de ataque.

Portanto, desative a criptografia da assinatura somente quando o valor do conteúdo for baixo ou o conjunto de valores de conteúdo possíveis for grande e não determinístico, e o ganho de desempenho for mais importante do que mitigar o ataque descrito acima.

Nota

Se não houver nada na mensagem criptografada, o elemento signature não será criptografado, mesmo quando a AsymmetricSecurityBindingElement.MessageProtectionOrder propriedade or SymmetricSecurityBindingElement.MessageProtectionOrder estiver definida como SignBeforeEncryptAndEncryptSignature. Esse comportamento ocorre mesmo com associações fornecidas pelo sistema; Todas as associações fornecidas pelo sistema têm a ordem de proteção de mensagem definida como SignBeforeEncryptAndEncryptSignature. No entanto, o WCF WSDL (Web Services Description Language) gera ainda conterá a <sp:EncryptSignature> asserção.

Para desativar a assinatura digital

  1. Crie um CustomBindingarquivo . Para obter mais informações, consulte Como criar uma associação personalizada usando o SecurityBindingElement.

  2. Adicione um AsymmetricSecurityBindingElement ou um SymmetricSecurityBindingElement à coleção de vinculação.

  3. Defina a AsymmetricSecurityBindingElement.MessageProtectionOrder propriedade como SignBeforeEncrypt, ou defina a SymmetricSecurityBindingElement.MessageProtectionOrder propriedade como SignBeforeEncrypt.

Consulte também