Hashes e assinaturas digitais (aplicativos da Windows Store)

Hashes

Uma função hash criptográfica assume um bloco de dados arbitrariamente longo e devolve uma sequência de caracteres de bit de tamanho fixo. As funções hash são usadas normalmente quando da assinatura de dados. Como a maioria das operações de assinaturas de chaves públicas, geralmente é mais eficiente assinar (criptografar) um hash de mensagem do que assinar a mensagem original. O seguinte procedimento representa um cenário comum e simplificado:

  • Paula cria uma par de chaves, mantém sua chave particular de modo secreto e publica sua chave pública usando uma autoridade de certificação confiável.
  • Paula cria uma mensagem com o código hash, assina o hash usando sua chave particular e envia a mensagem (não criptografada) e a assinatura para o Rui.
  • Rui recupera a chave pública de Paula e decriptografa a assinatura para recuperar o hash de Paula.
  • Rui produz a mensagem que recebeu de Paula e compara o hash que computou com o hash decriptografado. Se os hashes são os mesmos, Rui está quase certo de que a mensagem de Paula não foi alterada.

Observe que Paula enviou uma mensagem não criptografada. Somente o hash foi criptografado. O procedimento garante somente que a mensagem original não foi alterada e, com o uso da chave pública de Paula garante que o hash da mensagem foi assinado por alguém com acesso à chave particular de Paula, presumivelmente Paula.

Você pode usar a classe HashAlgorithmProvider para enumerar os algoritmos de hash disponíveis e criar um valor CryptographicHash.

As assinaturas digitais são as chaves públicas equivalentes aos códigos de autenticação de mensagens de chaves (MACs). Enquanto MACs utilizam chaves particulares para habilitar um destinatário de mensagem a verificar se uma mensagem não foi alterada durante a transmissão, as assinaturas usam um par de chaves particulares/públicas.

Assinaturas digitais

As assinaturas digitais são as chaves públicas equivalentes aos códigos de autenticação de mensagens de chaves (MACs). Enquanto MACs utilizam chaves particulares para habilitar um destinatário de mensagem a verificar se uma mensagem não foi alterada durante a transmissão, as assinaturas usam um par de chaves particulares/públicas.

Como a maioria das operações de assinaturas de chaves públicas, geralmente é mais eficiente assinar (criptografar) um hash de mensagem do que assinar a mensagem original. O remetente cria um hash de mensagem, assina e envia a assinatura e a mensagem (não criptografada). O destinatário calcula um hash sobre a mensagem, decriptografa a assinatura e compara a assinatura decriptografada com o valor hash. Se eles combinarem, o destinatário pode estar quase certo de que a mensagem está correta, de fato, veio do remetente e não foi alterada durante a transmissão.

A assinatura garante que a mensagem original não foi alterada e, ao usar a chave pública do remetente, assegura também que o hash da mensagem foi assinado por alguém com acesso à chave particular.

Você pode usar um objeto AsymmetricKeyAlgorithmProvider para enumerar os algoritmos de assinaturas disponíveis e gerar ou importar um par de chaves. É possível usar métodos estáticos na classe CryptographicHash para assinar uma mensagem ou verificar uma assinatura.

Tópicos relacionados

MACs, hashes, e assinaturas

Mapa para os aplicativos da Windows Store usando C# ou Visual Basic